Convert your ChatGPT export (ZIP) into clean Markdown text files with inline media, and generate data visualizations like word clouds and usage graphs.
Project description
Convoviz
Convert your ChatGPT history into clean, readable Markdown (text files).
Perfect for archiving, local search, or use with note-taking apps like Obsidian.
Visualize your data with word clouds 🔡☁️ and usage graphs 📈.
✨ Features
| Feature | Description |
|---|---|
| 📝 Markdown Export | Clean, well-formatted Markdown with optional YAML headers |
| 🖼️ Inline Images | Media attachments rendered directly in your Markdown files |
| 🔗 Citations | Web search results and source links accurately preserved |
| ☁️ Word Clouds | Visual breakdowns of your most-used words and phrases |
| 📈 Usage Graphs | Bar plots and charts showing your conversation patterns |
| 🎨 Canvas Support | OpenAI "Canvas" documents extracted as standalone files (.py, .html, etc.) |
| 🛡️ Custom Instructions | User/Model system messages exported to custom_instructions.json |
💡 See examples in the
demo/folder!
📖 How to Use
Step 1: Export Your ChatGPT Data
- Sign in at chatgpt.com
- Navigate to: Profile Name (bottom left) → Settings → Data controls → Export
- Click Confirm export
- Wait for the email from OpenAI, then download the
.zipfile
Alternative: Use the Direct Export Script
If you want to grab recent conversations quickly or bypass the official export wait, use the direct export script.
- Follow the instructions in
js/HOW_TO_USE.mdto download your recent data as a.zipfile. - Run Convoviz normally.
- Smart Discovery: If you have a
convoviz_export.zipin yourDownloads, Convoviz will ask to merge it. - Additive & Smart: You can combine multiple runs into the same folder. Convoviz uses identity-based overwriting to update existing chats without creating duplicates!
Step 2: Install Convoviz
🚀 Quick Install
Run one of the commands below to install everything you need automatically.
🍎 macOS / 🐧 Linux
- Open
Terminal.- macOS: Press
Cmd + Space, type "Terminal", and hit Enter. - Linux: Press
Ctrl + Alt + T, or search "Terminal" in your app menu.
- macOS: Press
- Copy and paste this command:
curl -fsSL https://raw.githubusercontent.com/mohamed-chs/convoviz/main/install.sh | bash
🪟 Windows
- Open
PowerShell.- Press the
Windowskey, type "PowerShell", and hit Enter.
- Press the
- Copy and paste this command:
irm https://raw.githubusercontent.com/mohamed-chs/convoviz/main/install.ps1 | iex
📦 Alternative: Install with pip
If you prefer using pip directly:
# Create a virtual environment (keeps your system Python clean)
python3 -m venv .venv
# Activate the virtual environment
source .venv/bin/activate # On Windows: .venv\Scripts\activate
# Install convoviz with visualization extras
pip install "convoviz[viz]"
Step 3: Run Convoviz
The simplest way is to run this in your terminal and follow the interactive prompts:
convoviz
Or, provide arguments directly to skip the prompts:
convoviz --input path/to/your/export.zip --output path/to/output/folder
⚙️ Command Line Options
Selective Output
By default, all outputs (Markdown, graphs, word clouds) are generated. Use --outputs to pick specific ones:
convoviz --input export.zip --outputs markdown --outputs graphs
Available options: markdown, graphs, wordclouds
In interactive mode, you'll be prompted to choose which outputs to generate.
Other Useful Flags
| Flag | Description |
|---|---|
--zip / -z |
Alias for --input (for convenience) |
--timestamp / -t |
Prepend conversation timestamp to the filename (e.g., 2024-03-21_15-30-05 - Title.md) |
--no-interactive |
Force non-interactive mode |
--flat |
Put all Markdown files in a single folder (instead of organizing by date) |
--config PATH |
Use a specific TOML config file (otherwise the user config is used if present) |
--verbose / -v |
Enable detailed logging (use -vv for debug logs) |
--log-file PATH |
Specify a custom log file location |
--quiet / -q |
Reduce console output (still logs to file) |
For a complete list of options:
convoviz --help
⚙️ Configuration
Convoviz supports a TOML config file. Defaults are bundled with the package and can be copied into your user config directory.
Generate a user config file:
convoviz config init
Default user config locations:
- Linux:
~/.config/convoviz/config.toml - macOS:
~/Library/Application Support/convoviz/config.toml - Windows:
%APPDATA%\\convoviz\\config.toml
Use a custom config path:
convoviz --config path/to/config.toml
Markdown flavor options in config:
standard(default)obsidian(collapsible callouts for reasoning content)
Markdown render order (config):
active(default, current branch)full(all DAG branches)
Markdown timestamps can be toggled with conversation.markdown.show_timestamp.
Word clouds can be limited to your messages by setting wordcloud.include_assistant_text = false.
Word cloud layouts are deterministic by default; set wordcloud.random_state = "" to disable.
YAML frontmatter titles are sanitized; the original title is preserved in aliases when it changes.
Step 4: Check the Output 🎉
After running the script, head to your output folder (defaults to Documents/ChatGPT-Data if you didn't change it) to see:
- 📝 Neatly formatted Markdown files
- 📊 Visualizations and graphs
- 🎨 Extracted Canvas documents (if any)
- 🛡️ User "Custom Instructions" (
custom_instructions.json)
If you've had a great experience, consider giving the project a ⭐ star! It keeps me motivated and helps others discover it!
💌 Share Your Feedback!
I hope you find this tool useful. I'm continuously looking to improve on this, but I need your help for that.
Whether you're a tech wizard or you're new to all this, I'd love to hear about your journey with the tool. Found a quirk? Have a suggestion? Or just want to send some good vibes? I'm all ears!
🤝 Contributing
Interested in contributing? Check out the Contributing Guide for development setup, code style, and how to submit a pull request.
📝 Notes
Offline
Word clouds use NLTK stopwords. If you're offline and NLTK data isn't installed yet, pre-download it:
python -c "import nltk; nltk.download('stopwords')"
NOTE: The install script already handles this, so you can immediately go offline after running it.
About This Project
This is just a small thing I coded to help me see my convos in beautiful markdown. It was originally built with Obsidian (my go-to note-taking app) in mind, but the default output is standard Markdown.
I wasn't a fan of the clunky, and sometimes paid, browser extensions.
It was also a great opportunity to learn more about Python and type annotations. I had mypy, pyright, and ruff all on strict mode, 'twas fun.
Direct Export (Experimental)
There's also a JavaScript export flow under js/ for grabbing additional conversation data directly from the browser outside the official ZIP export. This is experimental.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file convoviz-0.6.1.tar.gz.
File metadata
- Download URL: convoviz-0.6.1.tar.gz
- Upload date:
- Size: 2.0 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d16d54675d53eb5a59e9db93f2bfd56c9a7eee4d7b8d3b8c3cfca369c42b1683
|
|
| MD5 |
b83b3d655bb72bfc789b08908044f0a9
|
|
| BLAKE2b-256 |
9b184f75dae48ea71cfd07b34541763f89a49b4cccbb38c244a2792bcf5f0124
|
Provenance
The following attestation bundles were made for convoviz-0.6.1.tar.gz:
Publisher:
release.yml on mohamed-chs/convoviz
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
convoviz-0.6.1.tar.gz -
Subject digest:
d16d54675d53eb5a59e9db93f2bfd56c9a7eee4d7b8d3b8c3cfca369c42b1683 - Sigstore transparency entry: 942473525
- Sigstore integration time:
-
Permalink:
mohamed-chs/convoviz@d4fd16a011f44eb6bcb2a8985b53c5ef40869e6c -
Branch / Tag:
refs/tags/v0.6.1 - Owner: https://github.com/mohamed-chs
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@d4fd16a011f44eb6bcb2a8985b53c5ef40869e6c -
Trigger Event:
push
-
Statement type:
File details
Details for the file convoviz-0.6.1-py3-none-any.whl.
File metadata
- Download URL: convoviz-0.6.1-py3-none-any.whl
- Upload date:
- Size: 2.0 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
94246419dbca70bc51e3a63c1b868942107ed81ae56e7e137675041ff8ef1554
|
|
| MD5 |
af2771a484a2565f5d187c83ec041db8
|
|
| BLAKE2b-256 |
9739672091726fcebfdbb8d1236e3929f96a90549f61ddcdbb375da1d300b5d6
|
Provenance
The following attestation bundles were made for convoviz-0.6.1-py3-none-any.whl:
Publisher:
release.yml on mohamed-chs/convoviz
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
convoviz-0.6.1-py3-none-any.whl -
Subject digest:
94246419dbca70bc51e3a63c1b868942107ed81ae56e7e137675041ff8ef1554 - Sigstore transparency entry: 942473531
- Sigstore integration time:
-
Permalink:
mohamed-chs/convoviz@d4fd16a011f44eb6bcb2a8985b53c5ef40869e6c -
Branch / Tag:
refs/tags/v0.6.1 - Owner: https://github.com/mohamed-chs
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@d4fd16a011f44eb6bcb2a8985b53c5ef40869e6c -
Trigger Event:
push
-
Statement type: