Skip to the content
Georgi DimitrovdaTuzzo

ORPHEUS

A code-rendered reel of Bulgarian history in which every picture morphs into the next

Role
Solo, directing agents
Status
Shipped
Source
Private repository
Stack
Remotion 4ReactTypeScriptPythonuharfbuzzfontToolsffmpegBlender
ORPHEUS frame: the headline Krum raised a toast in red and white beside an engraved skull cup with a silver rim and a red liquid surface, red rays behind it on a dark ground.
A frame from the film: the skull cup toast.

In numbers

139.7s

runtime, no voice-over

78

shots, defined in whole bars on the score's downbeats

77/ 77

shot starts land within one frame of their downbeat

20

cuts in v2, against 91 in the reference and 309 in v1

3.53

mean frame difference, against the reference's 4.14

The problem

A viral code-rendered reel about Western civilisation, called Prometheus, set the bar. I wanted one for Bulgaria, from the Varna gold (c. 4500 BC) to the Rhodope song on the Voyager Golden Record, with an original score and no voice-over, in English and Bulgarian. The first frames looked vibe coded. v1 fixed the look and lost the viewer: it cut 309 times and shook the camera, about three times the reference's motion. My verdict was too much movement and too hard to follow, with a request for something that morphs and reads as illustration.

The approach

v2 does not cut: each picture transforms into the next, and the words stand still while they are read. The workspace rules forbid paid services and generative AI models, so each frame comes from code and from sourced fonts and images, with a licence row per third-party file and a source per on-screen claim (453 lines in research/facts.md). Music is the master clock: 78 shots are defined in whole bars and placed on the score's downbeats. The look is woodcut and shevitsa embroidery printed in two plates, black and a misregistered red, on rag paper, with negative linocut for night scenes.

ORPHEUS frame: the headline There was gold above white cut-out figures of a gold bull and a smaller animal on a dark engraved background, caption Varna necropolis, 4500 BC.
A frame from the film: gold from the Varna necropolis.

How it works

  1. Key forms

    Each picture has a key form: its outline as 144 strokes of 16 points, taken from the picture itself (cut silhouettes, coastlines, letter outlines, engraved line fields). A transition starts on a downbeat and lasts 12 to 34 frames. The outgoing picture is gouged away along parallel lines, its key form sews itself on as a running stitch and flies to the next picture's form, and the incoming picture prints out from its outline along a carve map.

  2. Type that stays readable

    Headlines are drawn from font outlines (HarfBuzz shaping, fontTools outlines). Words hold still while read, and whole recurring words glide to their new place: 681 becomes SINCE 681. Letters change shape only where the story is about letters: Glagolitic becomes Cyrillic, and the Б, Г and А of АБВГД glide into БЪЛГАРИЯ. At each frame the screen shows a readable word or none.

  3. Two gates on every render

    verify_render.py cross-correlates the audio against the locked score (offset 0 frames) and requires a visible change onset within one frame of each of the 77 shot starts. flashcheck.py applies the WCAG 2.2 SC 2.3.1 general and red flash thresholds frame by frame. The render script exits 1 if either fails, and the share encode is gated again. Remotion's AAC priming offset is avoided by rendering the picture muted and muxing the score with ffmpeg.

  4. Measured against the reference

    One ffmpeg script measures every cut: scene score above 0.2 on 160 by 90 frames, plus mean frame difference. The reference reel scores 91 cuts and 4.14, v1 scored 309 and 12.73, v2 scores 20 and 3.53. v2's 20 'cuts' are changes of paper and the busiest title cards; no shot cuts to another.

ORPHEUS title card: large red serif letters above hand-engraved contour-line hills with small black trees and a red rising sun on parchment.
The opening title over engraved Rhodope hills.

What I chose, and what lost

Chose

Morph between pictures along key forms and carve maps

Over

v1's cuts, whips, strobes, camera shake and line boil

About three times the reference's motion, and hard to follow.

Chose

Headlines drawn from font outlines, with only whole recurring words gliding

Over

Letters melting into other letters, and words scattering into flying outlines

The mid-state was unreadable, which the first contact sheets showed.

Chose

Carve maps as static PNGs, thresholded by an SVG filter behind a CSS mask

Over

Masking through SVG foreignObject, and CSS masks whose URL changes per frame

This Chromium did not apply the first; the second dropped frames in v1.

Chose

No sound-effects layer in v2

Over

v1's print-shop sound effects

They were timed to v1's cuts, and v2 has none to time them to.

Outcome

The English 2D master passes both gates: 77 of 77 shot starts within one frame, audio offset 0.0 frames, worst flash rate 3 per second. The Bulgarian 2D master is rendered, and its gate row in the README is still a placeholder. The 3D variants of v2 are not rendered. A full-resolution render takes about 11 minutes and a share encode 3. The choir samples are licensed CC Sampling Plus, which rules out advertising use, so the reel cannot become an ad without replacing them.

What comes next

Gate the Bulgarian master, render the two 3D variants from the Blender plates, and replace the choir before any commercial reuse.