Transform your exported ChatGPT conversations into beautifully formatted Markdown files optimized for Obsidian and other markdown readers.
Two ways to use this tool:
- π Browser-Based Converter (Recommended) - Easy, no installation required
- π» Python Script - For terminal users who prefer command-line tools
Both handle the complete ChatGPT export including conversations, images, DALL-E generations, and all attachments.
π₯ Download chatgpt-markdown-converter.html (Right-click β Save As)
Then:
- Open the downloaded HTML file in your browser (Chrome, Firefox, Safari, Edge - all work!)
- Upload your ChatGPT export ZIP file
- Configure your preferences (name, organization mode, formatting)
- Convert - all processing happens in your browser (nothing uploaded!)
- Download your organized markdown files
That's it! No Python, no terminal, no dependencies. Everything runs locally in your browser.
π‘ Privacy First: All processing happens in your browser. Your conversations never leave your computer.
- Complete ChatGPT Export Processing - Handles the entire ChatGPT data export including all files and folders
- Multimodal Content Support - Automatically extracts and embeds images, screenshots, and attachments
- DALL-E Image Organization - Separate handling for AI-generated images
- Smart File Organization - Creates conversation-specific folders for all attachments
- Regular Messages - Standard user and assistant conversations
- Audio Messages - Voice conversations embedded with HTML5 audio players
- Internal Reasoning - ChatGPT's thinking process with special formatting
- Reasoning Summaries - Brief reasoning recaps
- Tool Calls & Execution - ChatGPT tool usage tracking
- Tool Results - External tool response messages
- User Context - Profile and instruction context
- Code Blocks - Properly formatted code with syntax highlighting support
- YAML Frontmatter - Searchable metadata with title, creation date, update date, and tags
- Callout Syntax - Beautiful callouts for special content types:
> [!note]
for internal reasoning> [!info]
for reasoning summaries> [!abstract]
for user context
- Embedded Images - Relative paths for portability
- Cross-Platform Compatibility - Works on Windows, macOS, and Linux
- Customize user and assistant display names
- Toggle Obsidian frontmatter and callouts
- Include or exclude conversation dates
- Custom date formatting
- Custom filename templates
- Configurable message separators
- Skip empty messages option
For users who prefer terminal/command-line tools:
- Python 3.7 or higher
- ChatGPT data export (see instructions below)
One-Command Install:
Windows:
curl -sL https://raw.githubusercontent.com/daugaard47/ChatGPT_Conversations_To_Markdown/main/install.bat -o install.bat && install.bat
Mac/Linux:
curl -sL https://raw.githubusercontent.com/daugaard47/ChatGPT_Conversations_To_Markdown/main/install.sh | bash
OR Manual Installation:
git clone https://github.com/daugaard47/ChatGPT_Conversations_To_Markdown.git
cd ChatGPT_Conversations_To_Markdown
pip install -r requirements.txt
- Run setup wizard (first time only):
python setup.py
- Convert conversations:
python chatgpt_json_to_markdown.py
- Done! Open your
MarkdownFiles
folder
- Go to ChatGPT Settings β Data Controls
- Click "Export data"
- Wait for the email from OpenAI (usually arrives within a few hours)
- Download the ZIP file from the email
- Keep the ZIP file - no need to extract! The setup wizard will handle it.
Both methods will:
- β Process all your conversations (could be 100s!)
- β Organize by your chosen mode (flat/category/date/hybrid)
- β
Copy and organize all images β
Assets/Images/
- β
Copy and embed all audio β
Assets/Audio/
- β
Separate DALL-E images β
Assets/DALLE/
- β Create markdown files with embedded media
- β Generate Obsidian-compatible frontmatter
- β Show progress during processing
The script supports 4 organization modes (choose during setup):
MarkdownFiles/
βββ Assets/
β βββ Images/ (all screenshots, uploaded images)
β βββ Audio/ (all voice conversations)
β βββ DALLE/ (AI-generated images)
βββ Starred/
β βββ 2025/
β βββ 01-January/
β βββ 02-February/
βββ Archived/
β βββ 2025/
β βββ 01-January/
βββ Regular/
βββ 2025/
βββ 01-January/
βββ 02-February/
βββ 03-March/
Other modes: See the Organization Guide for Flat, By Category, and By Date modes.
Media Embedding:
- Images:

- Audio:
<audio controls src="../../Assets/Audio/file_0000.wav"></audio> *Audio (11.3s)*
---
title: "My Conversation About React"
created: 2025-01-15 14:30:00
updated: 2025-01-15 16:45:00
tags:
- chatgpt
- conversation
---
# My Conversation About React
<sub>01-15-2025</sub>
---
**User**:
Can you help me understand React hooks?
**ChatGPT**:
Of course! React hooks are functions that let you use state...
**User**:

Can you explain this diagram?
**ChatGPT (thinking)**:
> [!note] Internal Reasoning
> **Analyzing diagram**: The user has shared a component lifecycle diagram...
**ChatGPT**:
This diagram shows the React component lifecycle...
**User**:
<audio controls src="Assets/file_000000002be0.wav"></audio> *Audio (5.2s)*
**ChatGPT**:
Sure! I can hear your question about useState...
- Make sure you extracted ALL files from the ChatGPT export ZIP
- Verify that
file-*
files and folders are in theJsonFiles
directory - Check that paths in
config.json
are absolute paths (e.g.,C:\Users\...
on Windows)
- Use double backslashes in paths:
C:\\Users\\...
- Or use forward slashes:
C:/Users/...
# Deactivate and recreate if needed
deactivate
rm -rf venv # or rmdir /s venv on Windows
python -m venv venv
venv\Scripts\activate # Windows
pip install tqdm
Perfect integration with all features:
- Extract the converted ZIP file
- Open your Obsidian vault folder in File Explorer/Finder
- Drag the
MarkdownFiles
folder into your vault - Rename (optional): Change
MarkdownFiles
to "ChatGPT Conversations" or anything you want - Refresh Obsidian: Press
Ctrl+R
(orCmd+R
on Mac) - β Done! Find conversations in the sidebar
What you get:
- β Searchable YAML frontmatter (title, dates, tags)
- β Collapsible thinking/reasoning sections
- β Embedded images and audio that work offline
- β All relative paths stay portable
Assets
folder with your markdown files! Images/audio won't work if separated.
Good for sharing and collaboration:
- Extract the converted ZIP file
- Open Notion β Create a new page or database
- Import Click
β―
menu β Import β Markdown - Select all
.md
files fromMarkdownFiles
- Upload the
Assets
folder separately - β Done! Conversations are now in Notion
Note: Some markdown formatting (like collapsible sections) may not transfer perfectly.
For graph-based organization:
- Extract the converted ZIP file
- Open your Logseq graph folder
- Copy contents of
MarkdownFiles
into yourpages
folder - Move
Assets
folder to your graph root - Re-index your graph
- β Done! Conversations appear in your graph
Universal markdown compatibility:
- Extract the converted ZIP file
- Open
MarkdownFiles
folder in your editor - β Done! Browse and edit your conversations
π‘ Tip: The Assets
folder contains all images and audio files
- β
Rename the
MarkdownFiles
folder to anything you want β οΈ Never separate theAssets
folder from your markdown files- π Portable paths: All image/audio links use relative paths
- π Rich metadata: Each file has YAML frontmatter with title, dates, and tags
- ποΈ Organization modes: Your chosen mode (Flat/Category/Date/Hybrid) determines the folder structure
β Included:
- All conversation text
- Images and screenshots you uploaded
- DALL-E generated images
- Audio messages - Embedded with playable HTML5 audio controls
- Tool calls and execution logs
- ChatGPT's internal reasoning (if available)
- User context and custom instructions
- Code blocks with formatting
- Video messages are shown as placeholders (audio track not currently extracted)
- ChatGPT's web browsing results show content but not raw data
This is a free and open-source project! Contributions are not just welcome - they're encouraged.
- π Report bugs - Open an issue if something doesn't work
- π‘ Suggest features - Tell us what would make this better
- π§ Submit pull requests - Fix bugs, add features, improve docs
- π Improve documentation - Help others understand how to use this
- β Star the repo - Show your support!
- Test your changes - Make sure both HTML and Python versions work
- Update README - Document new features
- Keep it simple - This tool is meant to be easy to use
- Follow existing patterns - Match the current code style
Not sure where to start? Check the Issues page for ideas or open a new discussion!
This project is free and open source, available under the MIT License.
You can:
- β Use it for personal projects
- β Use it for commercial projects
- β Modify and distribute it
- β Build upon it
No attribution required (but appreciated!)
Need help?
- π Check the Troubleshooting section above
- π Open an issue on GitHub
- π¬ Start a Discussion for questions
Found a bug or have an idea? We'd love to hear from you! This project gets better with community input.
- Created by daugaard47
- Built with help from the community
- Supports ChatGPT multimodal content and Obsidian optimization
If this tool helped you preserve your ChatGPT conversations:
- β Star this repo on GitHub
- π Report bugs to help improve it
- π‘ Share your ideas for new features
- π§ Contribute code if you're a developer
- π’ Tell others who might find it useful
Enjoy your beautifully formatted ChatGPT conversations! π
Free, open source, and built for the community.