City Symphony — Style Prompt

A city film cut like a piece of minimalist music: time-lapse turns traffic, crowds and clouds into rivers of light, the cuts get denser with the score's subdivisions, one thing is slowed almost to a stop, and the film ends on a hard cut to black on a downbeat. No narrator. The music carries it. Grammar learned from the city-symphony tradition and the "Qatsi" films (Reggio / Fricke, scores in the Philip Glass manner). Nothing is taken from those films: no footage, no melody, no title lettering, no names in the film.

1. Essence, and what it is not

2. Materials & rendering

3. Colour logic

Use Value
Type (warm white) #EDE8DF
Secondary line (English, labels) #B0AAA0
Sodium orange — the only accent (rules under numbers, source lines, crowd tracks, the day ring's hand) #D9772F
Matte and black #000000

Grade (tools/render.py → make_luts / grade): per-shot partial grey-world white balance first (only pixels with luminance 0.12–0.88, strength 0–0.6; 0 for night shots, which keep their sodium and blue), then one LUT for all shots: S-curve (sigmoid slope 6.2, pivot 0.47, blended 55/45 with linear) → black 7/255, white 250/255 → R ×1.025, B ×0.965 (warm highlights, a little cold in the shadows) → saturation 0.86. Bloom: pixels above 170/255, blurred 6 px at ⅛ size, added back × (1, .82, .62); 0.09 by day, 0.15–0.2 at night. Grain: half-resolution Gaussian noise up-sampled and blurred 0.6 px, weighted 0.35 + 1.3·L·(1−L), strength 9/255. Archive film stays black-and-white and goes through the same LUT, so it reads as part of the same print.

4. Type & subtitles

5. Motion quality

6. Camera grammar — editing

Cut-point table (the score decides; numbers at 120 BPM and 30 fps: 1 beat = 15 frames, triplet = 5, sixteenth = 3.75)

Score texture Cut length Frames Use
Opening hit + eighth-note arpeggio 2 bars → 1 bar 120 → 60 the opening still, the first single-camera time-lapse
Eighths 2 beats → 1 beat 30 → 15 dawn, match cuts
Triplets against eighths (3:2) 1 beat → ½ beat 15 → 7/8 alternating morning, the montage of streets
Sixteenths, full ensemble grid cells light every 1–2 frames; cells re-cut every sixteenth 1–4 the grid
Arpeggios stop, one long chord 3–4 s, one or two shots 90–120 the brake: the slowed thing, the archive split
Sixteenths + triplets + horns ½ beat → 4 frames → 2 frames 7 → 4 → 2 dusk to night, the reverse flashback
Dry cut of the whole ensemble, reverb left ringing hard cut to black on the bar line — the hard stop

Rules:

7. Sound palette

8. Native moves (and how they are built)

Move Code
Light river tools/prep.py: integrate the speed curve to source time; each output frame averages the source frames in its window (cap blend). Speed 40× / blend 30 at night, 37.5× / 24 for clouds, 75× / 30 for a one-second nightfall.
Speed ramp speed=[(t, v), …] keyframes, smoothstep between them, same integrator.
Brake into slow motion ramp 2.2× → 0.3× with interp=3 (ffmpeg minterpolate mci, bidir) for soft subjects; mix=True (crossfade of the two nearest frames) for thin lines such as cables, where motion compensation tears.
Crowd → tracks (people as data) Trails in tools/render.py: background = per-pixel median of the whole fixed-camera shot; blobs that differ by > 22/255 (scipy ndimage.label, area 8–900 px at half size) are people; each centroid joins the nearest one from the previous frame (< 70 px) with a 2 px line; lines fade × 0.9 per frame; the plate is darkened and desaturated as the tracks appear (0.15 → 0.55 s). Fixed cameras only.
Traffic → light a static or slowly drifting top-down aerial at 5× with full frame blending.
Grid grid_plate(): pool clips of 30 frames held in memory at 960×540; stages from GRID_STAGES; light-up order scattered; last beat re-cuts cells every sixteenth.
Counterpoint split split_plate(): archive 4:3 centre 960 px
Day/night flicker two 15-frame clips from the same camera (noon, night), alternating every 2 frames.
Photo that moves a same-position photo pair alternating every 2 frames.
Number lock lock_digits(): one digit locks per sixteenth, the others roll; counter(): ease-out count-up; music adds one glockenspiel note per lock.
Day ring a thin 24-hour ring bottom-right with a sodium hand and a 3-hour arc: it runs with the film's day, freezes and dims during the brake, and spins backwards during the reverse flashback. It is a graphic, not a clock reading.
Reading light on a page scanned page, 16:9 window pushed 1.06 → 1.56 page widths, side light (bright top-left), paper tint (1, .93, .80), a Gaussian band (σ 95–140 px) over the quoted line growing to +38 %.
Hard stop picture cuts to black on the bar line; the music's dry signal is cut in 15 ms on the same frame; only reverb remains.

9. Pitfalls of the medium

10. Footage: where it comes from

  1. Ask the user first whether they have their own footage, photographs, documents or data for the place: their own time-lapses, a phone hyperlapse, family photos, a city's open data. Their material comes first.
  2. If not, search these sources (all searchable with demo/tools/footage.py, which records title, author, licence and page in SOURCES.jsonl and writes SOURCES.md):
  3. Wikimedia Commons — modern time-lapse, aerial and slow-motion footage under CC BY / CC0, photographs (for example the Carol M. Highsmith Archive, dedicated to the public domain), scans of old maps and books. Check the licence on each file page. Many videos are YouTube or Vimeo imports: use one only when its page carries a passed review (YouTubeReview / VimeoReview / LicenseReview / Flickrreview with a reviewer and a date) or the author's own source page still shows the licence. A pending review is not enough: a channel can later switch to the standard licence and claim the footage through Content ID.
  4. Library of Congress (loc.gov, also mirrored on Commons) — archive films published in the US before 1931 are public domain; a rights statement of "no known restrictions" alone is not enough: you need the publication date or another public-domain basis.
  5. NASA (images.nasa.gov, ISS crew photographs) — public domain; the night photos of cities from orbit make a strong opening.
  6. Internet Archive — scanned books and documents marked NOT_IN_COPYRIGHT with a pre-1931 publication date; take the line you quote from the scan, not from a modern edition.
  7. National archives (US National Archives, other governments' open archives) — check each country's terms.
  8. Licences allowed: public domain, CC0, CC BY. Not allowed: CC BY-SA, "no known restrictions" without a basis, YouTube mirrors, unknown sources, restored or colourised archive copies.
  9. Before downloading, tell the user what you will download, from where, under which licence, and how it will be credited.

Data for number cards comes from official pages (census, transport department, the place's own statistics); write the claim, URL and quoted wording into FACTS.md.

Recipe for another place: one single-camera time-lapse of ≥ 12 hours (the clock); 10–15 ground time-lapses and hyperlapses (streets, stations, bridges); 2–4 aerials, one of them top-down at night; one slow-motion shot of a fragile thing; one fixed-camera crowd shot for tracks; one archive film of the same kind of place; one night photograph from orbit or above; a same-position photo pair; three official numbers; one public-domain sentence written about the place.

11. Variation space

See DEMO.md for the example film.