TripTrace

For a travel video channel. 2026. 4K ProRes 4444 route animations rendered from a YAML file.

Roles: Software, rendering pipeline. Principal: Arun Kishore.

Brief

A travel video channel wanted the animated map that sits between scenes of a trip video. A bright route draws itself from start to destination, a label pops up at each stop, and a counter runs the distance and drive time. The channel wanted to set all of it in a text file and lay the result over its own footage, with no editing plugin.

Constraint

One day, start to delivery. The clip had to drop onto footage in any video editor, so it needed a transparent background at 4K.

The same day, the client asked for a styled line with an offset glow, markers that swell out of the line at each stop, and a camera that zooms in and follows the head of the route. Every trip file written before the change had to render exactly as it did before.

What was built

TripTrace is one Python script. It reads a trip.yaml with a title, a start, an end, optional waypoints and a duration. The route runs on real roads, pulled from OpenStreetMap and routed by OSRM. Cairo draws each frame and ffmpeg encodes them into ProRes 4444 with an alpha channel, 3840 by 2160 at 23.976 fps. Map and route data are cached on disk, so adjusting the framing does not trigger another slow fetch. A single frame can be previewed before a full render.

The three changes shipped as three pull requests, and each new option is off unless the YAML turns it on. The middle request rebuilt the renderer around a camera with zoom locked at 1. It could only merge if every frame matched the previous output byte for byte.

What it measured

The frame-by-frame guarantee held. With no new options set, both sample trips, Seattle to Hurricane Ridge and Vancouver to Banff, rendered byte-identical to the original output on every frame, checked by an md5 hash per frame after each of the three pull requests.

An 8-second clip is about 192 frames. Seattle to Hurricane Ridge renders at 0.41 seconds per 4K frame, or 0.50 with the camera on. Vancouver to Banff, an 800 km route with four waypoints, renders at 0.19 seconds per frame, or 0.50 with the camera on.

Map data was the slow part. On the same query, one public Overpass server took about 174 seconds and the mirror we chose took 9 to 23. Turning off automatic tiling cut the Banff fetch from about 180 sequential requests to 2.

The first version of the camera trailed the route head by 544 px at 4K. A zero-phase filter brought that down to 76 px. Distances from OSRM match real routes closely. Its drive times run high, and we show them unchanged.