Convert Claude Code session files to animated gifs and videos. Fork of https://github.com/simonw/claude-code-transcripts.
Project description
agent-log-gif
Turn your Claude Code and Codex sessions into animated terminal-style replay GIFs or videos. Share them on Reddit, Slack, etc.
With apologies to Summer Yue.
Less fun but more usefully: use agent session videos to do retrospective reviews; include cool Claude demos in slide decks.
Supports Claude Code and Codex sessions out of the box.
Windows UI + Codex example
Quick start
uvx agent-log-gif
Or pick a specific session from disk:
uvx agent-log-gif json ~/.claude/projects/<project>/<session>.jsonl
Help on all options:
uvx agent-log-gif json --help
To install permanently:
uv tool install agent-log-gif
Or to install as a Skill you can ask your agent to use for you:
npx skills add ysamlan/agent-log-gif
Claude/Codex skill
agent-log-gif includes an agent-log-gif Skill that lets Claude Code / Codex find your sessions and generate animations for you conversationally. Copy the skills/agent-log-gif folder it into ~/.claude/skills/, or install automatically via skills.sh:
npx skills add ysamlan/agent-log-gif
Then ask Claude things like "make a gif of my last coding session" or "find the session where I worked on auth and make an mp4 showing tool calls," or run /agent-log-gif inside Claude Code ($agent-log-gif in Codex).
Optional tools
For MP4/AVIF output, install ffmpeg using your system package manager (brew install ffmpeg, choco install ffmpeg, apt install ffmpeg, etc.).
For AVIF, your ffmpeg build must include an AV1 encoder. agent-log-gif prefers libsvtav1 and falls back to libaom-av1.
ffmpeg -encoders | rg 'av1|svt|aom'
Optimized GIFs
GIF optimization is done automatically via gifsicle using gifsicle-bin. Very large GIFs will skip automatic optimization to avoid hanging/crashing gifsicle.
Usage
Convert a session file
# GIF (default)
agent-log-gif json session.jsonl
# Animated AVIF
agent-log-gif json session.jsonl --format avif
# MP4 with (optional) background music
agent-log-gif json session.jsonl --format mp4 --music track.mp3 --loop-music
# Specify output file
agent-log-gif local -o out.gif
Pick from local sessions
agent-log-gif # interactive picker, opens result
Turn selection
Sessions default to 20 turns max. Adjust with --turns:
agent-log-gif json session.jsonl --turns 5 # first 5 turns
agent-log-gif json session.jsonl --turns 3,8 # turns 3 through 8
Music (MP4 only)
agent-log-gif json session.jsonl -o demo.mp4 --format mp4 --music track.mp3
agent-log-gif json session.jsonl -o demo.mp4 --format mp4 --music track.mp3 --loop-music
Window chrome
Default is macOS-26-like with rounded corners and traffic-light buttons. Choose a different style:
agent-log-gif json session.jsonl --chrome none # no window frame
agent-log-gif json session.jsonl --chrome mac # macOS, rounded corners (default)
agent-log-gif json session.jsonl --chrome mac-square # macOS, square corners
agent-log-gif json session.jsonl --chrome windows # Windows 11
agent-log-gif json session.jsonl --chrome linux # GNOME/Ubuntu
For dark terminal themes embedded on a light page, you can set the outer canvas color behind the rounded macOS corners:
agent-log-gif json session.jsonl --chrome mac --canvas-bg "#FFFFFF"
Color scheme
480+ terminal color schemes bundled from iTerm2-Color-Schemes. Default is Dracula.
agent-log-gif json session.jsonl --color-scheme "Catppuccin Mocha"
Custom font
Default is DejaVu Sans Mono (bundled). Override with any TTF:
agent-log-gif json session.jsonl --font /path/to/MyFont.ttf
Supported session formats
- Claude Code JSONL files (
~/.claude/projects/) - Codex JSONL session files (
~/.codex/sessions/) - URLs to any of the above
Web sessions
[!WARNING] The
webcommands are broken right now due to changes to the unofficial and undocumented APIs that these commands were using. See this issue in simonw/claude-code-transcripts for details.
agent-log-gif web # interactive session picker
agent-log-gif web SESSION_ID # specific session
agent-log-gif web --repo owner/repo # filter by repo
On macOS, credentials are auto-detected from your keychain. On other platforms, provide --token and --org-uuid.
All options
agent-log-gif json [OPTIONS] [FILE]
-o, --output PATH Output file path (default: <input>.<format>)
--list [claude|codex] List recent sessions instead of converting
--format [gif|mp4|avif] Output format (default: gif)
--turns TEXT N for first N turns, M,N for range
--music PATH Music track for MP4
--loop-music Loop music if shorter than video
--chrome STYLE Window chrome: none|mac|mac-square|windows|linux
--canvas-bg TEXT Outer canvas color outside rounded macOS corners
--color-scheme NAME Terminal color scheme (e.g. Dracula, Nord)
--font PATH Custom TTF font file
--cols INT Terminal width in columns (default: 80)
--rows INT Terminal height in rows (default: 18)
--font-size INT Font size in pixels (default: 16)
--show TYPES Extra content: tools, calls, thinking, all
--speed FLOAT Typing speed multiplier (default: 1.0)
--spinner-time FLOAT Spinner duration multiplier (default: 1.0)
--thinking-verbs TEXT Custom spinner verbs (comma-separated)
--shimmer / --no-shimmer Loading line shimmer effect (default: on)
--colors INT GIF palette size, 2-256 (default: 256)
--parallel INT Rendering workers (0=auto, 1=off, 2+=explicit)
--open / --no-open Open result in default viewer
agent-log-gif search KEYWORD [--source claude|codex]
Credits
Session parsing logic originally based on Simon Willison's claude-code-transcripts. Color schemes from iTerm2-Color-Schemes by Mark Badolato (MIT license).
Development
See CONTRIBUTING.md for setup and guidelines.
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 agent_log_gif-0.1.0.tar.gz.
File metadata
- Download URL: agent_log_gif-0.1.0.tar.gz
- Upload date:
- Size: 305.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d36266b8f74f3fc85f3e8810ebc428917fda29e57c75d0aaaa5c771adb4ad334
|
|
| MD5 |
bc3432c19114eaef76744b3fcb238907
|
|
| BLAKE2b-256 |
8b6d50ba814956a7293b7665d50977cd56685ade1073923814b2ecf9dcf1fae8
|
Provenance
The following attestation bundles were made for agent_log_gif-0.1.0.tar.gz:
Publisher:
publish.yml on ysamlan/agent-log-gif
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
agent_log_gif-0.1.0.tar.gz -
Subject digest:
d36266b8f74f3fc85f3e8810ebc428917fda29e57c75d0aaaa5c771adb4ad334 - Sigstore transparency entry: 1154865044
- Sigstore integration time:
-
Permalink:
ysamlan/agent-log-gif@a9d058fdcf73fb9986c3112ae544b8a5136cb034 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/ysamlan
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@a9d058fdcf73fb9986c3112ae544b8a5136cb034 -
Trigger Event:
release
-
Statement type:
File details
Details for the file agent_log_gif-0.1.0-py3-none-any.whl.
File metadata
- Download URL: agent_log_gif-0.1.0-py3-none-any.whl
- Upload date:
- Size: 311.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
13cee7830d44d4647e18cfcb0a5a8e3645c0060a4547e4ad92c40d5a17b1cb49
|
|
| MD5 |
2fd1339fb7d0d10256bedd470e5ae9a0
|
|
| BLAKE2b-256 |
031736a0c0fe9f92b1ee9ae2e5ee80d76a52074f6d9f270613c27d994be581ce
|
Provenance
The following attestation bundles were made for agent_log_gif-0.1.0-py3-none-any.whl:
Publisher:
publish.yml on ysamlan/agent-log-gif
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
agent_log_gif-0.1.0-py3-none-any.whl -
Subject digest:
13cee7830d44d4647e18cfcb0a5a8e3645c0060a4547e4ad92c40d5a17b1cb49 - Sigstore transparency entry: 1154865048
- Sigstore integration time:
-
Permalink:
ysamlan/agent-log-gif@a9d058fdcf73fb9986c3112ae544b8a5136cb034 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/ysamlan
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@a9d058fdcf73fb9986c3112ae544b8a5136cb034 -
Trigger Event:
release
-
Statement type: