Dock Timelapse
Your Dock tells the story of the tools you live in. Dock Timelapse records it quietly every day and turns its evolution into an Apple-style timelapse: apps springing in, others handing over their spot, a day counter ticking, all drawn over your own wallpaper.
Demo render with an invented nine-month history. The real output is 1920×1080 and 1080×1920 H.264 at 60 fps.
| Replacements and arrivals, labelled next to the icon | End card with the story in numbers |
|---|---|
White background (--background white) |
Portrait — a vertical Dock with labels alongside |
How it works
- Records — an hourly background agent reads the Dock's own preferences (the pinned apps, up to and including System Settings). On each day the Dock changes it saves a snapshot: the app list, every icon in high resolution, and the current wallpaper. Optionally it keeps a cropped Dock screenshot too.
- Renders — the videos are redrawn from that data: a glass Dock over your blurred wallpaper, spring
animations, change labels (
+ Linear,Cursor replaces Xcode), the date and day counter, and a progress bar scaled to real calendar time. - Previews on day one —
previewinvents a plausible past that ends with your real Dock, so you can see your video right away.
Requirements: macOS and uv. ffmpeg comes bundled.
Install
Command line
uv tool install git+https://github.com/bcldvd/dock-timelapse
dock-timelapse install # start recording (hourly agent, one snapshot per day of change)
dock-timelapse preview # see your video now, with an invented past
dock-timelapse render # later: the real timelapse → ~/Movies/Dock Timelapse/
Claude Code
/plugin marketplace add bcldvd/dock-timelapse
/plugin install dock-timelapse@dock-timelapse
The plugin brings the skill and the MCP server. Then just ask: "start recording my Dock", "make a timelapse of my Dock", "which apps did I add since June?"
Codex, Cursor, Gemini CLI, Copilot and other agents
The skill follows the open Agent Skills format:
npx skills add bcldvd/dock-timelapse -y
MCP server (Claude Desktop, Codex, Cursor, VS Code, …)
{
"mcpServers": {
"dock-timelapse": {
"command": "uvx",
"args": ["--from", "git+https://github.com/bcldvd/dock-timelapse", "dock-timelapse", "mcp"]
}
}
}
Codex (~/.codex/config.toml):
[mcp_servers.dock-timelapse]
command = "uvx"
args = ["--from", "git+https://github.com/bcldvd/dock-timelapse", "dock-timelapse", "mcp"]
Tools: dock_status, current_dock, dock_history, install_recording, uninstall_recording,
capture_now, render_timelapse, render_preview.
Usage
dock-timelapse status # recording state + every snapshot and its changes
dock-timelapse render --format portrait # landscape | portrait | both (default)
dock-timelapse render --background white # wallpaper (default) | desktop (sharp) | white
dock-timelapse preview --demo # a generic demo Dock
dock-timelapse still --t 2 5.5 # single PNG frames
dock-timelapse install --screenshots # also keep Dock screenshots
dock-timelapse uninstall # stop recording, history stays
Screenshots use the Screen Recording permission: install --screenshots prints the Python path to add in
System Settings → Privacy & Security → Screen & System Audio Recording. The videos only need the Dock data,
so this step is optional.
Data lives in ~/Library/Application Support/dock-timelapse/ (snapshots.json, icons, wallpapers, and
capture.log).
Development
uv sync
uv run pytest
| module | role |
|---|---|
dockdata.py |
parse Dock prefs → ordered apps, up to System Settings |
diff.py |
added / removed / replaced / moved between two Docks |
store.py |
snapshots on disk, one per day of change |
capture.py · visibility.py · macos.py |
one capture attempt; Dock visibility; the macOS calls |
agent.py |
the launchd agent |
timeline.py · layout.py |
pure animation model and geometry |
render.py · video.py |
Pillow frames → ffmpeg H.264 |
poc.py |
invented histories for previews |
mcp_server.py |
MCP tools |
License
MIT
Release files for dock-timelapse 0.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| dock_timelapse-0.2.0.tar.gz | 28.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| dock_timelapse-0.2.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 64.2 kB
Release files / dock_timelapse-0.2.0.tar.gz
| Download URL | dock_timelapse-0.2.0.tar.gz |
|---|---|
| Size | 28.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
fcf69b5764bf551b1ed64af20c3a3d0e29336bb0f6c6166a102da91ff1304a06
|
|
BLAKE2b-256 checksum How to use checksums |
bb843d7d646451a1c6963804968d757400583510f3e7a560700afd06e3e41059
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.19 {"installer":{"name":"uv","version":"0.12.19","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / dock_timelapse-0.2.0-py3-none-any.whl
| Download URL | dock_timelapse-0.2.0-py3-none-any.whl |
|---|---|
| Size | 35.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
7bd2c6ef395bf1204d0c7f189017a5714369b91222739a46ba21509828751f5f
|
|
BLAKE2b-256 checksum How to use checksums |
cbc4e4dbb984a1d6bb7d50aad28fa14468e41052f48e20cb906b7fc872816087
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.19 {"installer":{"name":"uv","version":"0.12.19","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|