Convert AI chat conversations to structured Markdown
Project description
aichat2md
Convert AI chat conversations to structured Markdown documents.
Features
- 🌐 Extract from URLs - ChatGPT, Gemini, Doubao share links (with JS rendering via Playwright)
- 📄 Extract from webarchive - Safari .webarchive files (offline mode)
- 🤖 Multiple AI backends - DeepSeek, OpenAI, Groq, or any OpenAI-compatible API
- 🌍 Bilingual support - English/Chinese prompts
- 📝 Clean output - Knowledge-focused Markdown, not chat logs
- ⚡ Simple CLI - pip-installable, one-time setup
Quick Start
# Install
pip install aichat2md
# Configure (one-time setup)
aichat2md --setup
# Convert a ChatGPT share URL
aichat2md https://chatgpt.com/share/xxx
# Convert a webarchive file
aichat2md ~/Downloads/chat.webarchive
Supported Platforms
- ChatGPT - chatgpt.com share links
- Gemini - gemini.google.com or g.co share links
- Doubao (豆包) - doubao.com share links
- Webarchive - Safari exported .webarchive files (any platform)
Usage Examples
# ChatGPT
aichat2md https://chatgpt.com/share/xxx
# Gemini (supports both long and short URLs)
aichat2md https://gemini.google.com/share/xxx
aichat2md https://g.co/gemini/share/xxx
# Doubao
aichat2md https://www.doubao.com/thread/xxx
# Webarchive file
aichat2md ~/Downloads/conversation.webarchive
Supported AI Backends
- DeepSeek (default) - Cost-effective, Chinese service
- OpenAI - GPT-4o-mini, GPT-4
- Groq - Fast inference with Llama models
- Custom - Any OpenAI-compatible API
Installation
Prerequisites
- Python 3.8 or higher
- Playwright (automatically installed, but requires browser setup)
Install from PyPI
pip install aichat2md
Install Playwright browsers
playwright install chromium
First-time Setup
aichat2md --setup
You'll be prompted to:
- Select your AI provider (DeepSeek, OpenAI, Groq, or custom)
- Enter your API key
- Choose prompt language (English or Chinese)
- Set output directory (default: ~/Downloads)
Usage
Basic Usage
# Convert from URL (uses configured output directory)
aichat2md https://chatgpt.com/share/xxx
# Convert from webarchive (outputs to same directory as input)
aichat2md ~/Downloads/chat.webarchive
Override Language
# Use Chinese prompts (even if English is configured)
aichat2md <url> --lang zh
# Use English prompts
aichat2md <url> --lang en
Custom Output Path
# Specify output file
aichat2md <url> -o ~/Documents/my-notes.md
aichat2md <url> --output ~/Documents/my-notes.md
Override Model
# Use a different model than configured
aichat2md <url> --model gpt-4o
aichat2md <url> --model deepseek-chat
Version Info
aichat2md --version
Configuration
Configuration is stored in ~/.config/aichat2md/config.json (cross-platform).
Example Config
{
"api_key": "sk-your-api-key",
"api_base_url": "https://api.deepseek.com",
"model": "deepseek-chat",
"language": "en",
"output_dir": "/Users/you/Downloads",
"max_tokens": 4000,
"temperature": 0.7
}
Reconfigure
aichat2md --setup
Output Format
The tool converts chat conversations into structured Markdown with:
- Front matter - Tags, date, source
- Summary - 2-3 sentence overview
- Key topics - Bullet point list
- Knowledge sections - Reorganized content with logical headings
- Code examples - Extracted code blocks with comments
Example Output
---
tags: [Python, API, Web]
date: 2026-02-02
source: https://chatgpt.com/share/xxx
---
# Building REST APIs with FastAPI
## Summary
This document covers building production-ready REST APIs using FastAPI...
## Key Topics
- API design patterns
- Request validation
- Error handling
## API Design Principles
...
## Code Examples
\```python
from fastapi import FastAPI
app = FastAPI()
...
\```
How It Works
- Extract - Playwright (URLs) or plistlib (webarchive) extracts raw text
- Structurize - AI API reorganizes into knowledge document
- Save - Auto-generated filename or specified path
Why Two-Stage Processing?
- Stage 1 (Extract) - No AI tokens used, just HTML parsing
- Stage 2 (Structurize) - AI organizes content efficiently
This saves costs and allows local caching of extracted content.
Development
Local Installation
# Clone repository
git clone https://github.com/yourusername/aichat2md.git
cd aichat2md
# Install in editable mode
pip install -e .
# Install Playwright
playwright install chromium
Run Tests
pip install pytest
pytest tests/
Build Package
pip install build
python -m build
Troubleshooting
"Configuration file not found"
Run aichat2md --setup to create configuration.
"API authentication failed"
Check your API key in ~/.config/aichat2md/config.json.
Playwright errors
Install browsers: playwright install chromium
Empty output
The conversation might be too short or the AI response failed. Check error messages.
Contributing
Contributions welcome! Please:
- Fork the repository
- Create a feature branch
- Add tests for new features
- Submit a pull request
License
MIT License - see LICENSE file.
Links
Acknowledgments
- Playwright - Web automation
- DeepSeek - Cost-effective AI API
- OpenAI - API compatibility standard
Project details
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 aichat2md-1.2.0.tar.gz.
File metadata
- Download URL: aichat2md-1.2.0.tar.gz
- Upload date:
- Size: 16.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a09601571d51e5831864e3e251f885f1c8f3b9258b6099e7cd87f42fbba9258e
|
|
| MD5 |
8dc611464b472e5cf586487956323dc5
|
|
| BLAKE2b-256 |
57185328a7bf55bd1475e20fa9362dc2943ee73c70d7e501f27a93668a29a28a
|
File details
Details for the file aichat2md-1.2.0-py3-none-any.whl.
File metadata
- Download URL: aichat2md-1.2.0-py3-none-any.whl
- Upload date:
- Size: 16.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0ffca27180d42b088bad670727d3670f2257306c41022495424cba8f20cfa989
|
|
| MD5 |
39e1f198fcb0d4c1b7f42dce05e90ec5
|
|
| BLAKE2b-256 |
0d12a25fa3626c26eb9a708f9dcede17c3dc0e3d8a4fd525bbfddd956bdc5dff
|