See the instructions below to help you get the dependencies installed for your platform.
Then be sure to follow the instructions below to run it.
Mac
- Install libvips:
brew install vips
- To process photos/videos from iPhones, install libheif:
brew install libheif
- Install ffmpeg:
or
curl https://webi.sh/ffmpeg | sh
- Install uv:
curl -LsSf https://astral.sh/uv/install.sh | sh
- Download Timelinize (see above) and extract the archive to expose the binary.
- We are not yet code-signed, so you will have to override the OS to run the app: follow these instructions to run apps from unidentified developers (that's me!).
Additional steps
Mac has a whole extra layer of kernel-level protections that go beyond posix-style file permissions, users, and groups, that will likely require additional steps:
- If you get an error that says Timelinize "is damaged," that's a lie: the checksums probably match; the real problem is that Apple has placed it in "quarantine" because it was downloaded. You can either:
- If you get errors when opening or creating a timeline, when planning an import, or right after an import starts, Apple is likely blocking access to your files (especially if the error is something like "operation not permitted"). The easiest way around this is to give Terminal explicit access in Settings -> Privacy & Security. For access to everything, find "Full Disk Access" and add/enable Terminal:
If you prefer, you can be more selective about what you grant access to by selecting more specific data instead, such as Photos, Contacts, or Files & Folders. Remember to grant it for Terminal, since Timelinize runs in the Terminal.
Docker
Pull the automated Docker image from GHCR:
docker pull ghcr.io/timelinize/timelinize/
It can be run like so:
docker run -p12002:12002 \
-v /path/to/repo:/repo \
-v /path/to/config:/app/.config/timelinize \
ghcr.io/timelinize/timelinize
That will run Timelinize on port 12002, with the timeline repository mounted at /path/to/repo (change it to suit your needs) and the configuration directory mounted at /path/to/config (change it).
When using Docker bind mounts like above, make sure the directories exist on your host machine and that they belong to the user ID 1000.
File system access
Because Timelinize is running inside a Docker container, it won't have access to your host's filesystem. You will need to mount the directories you want to access as volumes, to be able to load data into Timelinize.