Constructivist Montage — Style Prompt

Real archive footage, photographs and documents, printed as one ink-and-paper poster with a single red, and cut on a machine beat. Diagonal bands carry the type; windows cut along the axis hold the film; people are scissored out of photographs and stacked into structures; numbers count, documents are marked in red, and two images collide to make a third idea. References (grammar only): Soviet montage cinema of the 1920s (city symphonies with split screens, counting and machine rhythm; "intellectual" montage where A + B yields a concept), constructivist posters and photomontage (red / black / paper, steep diagonals, photo cut-outs with geometric blocks, type as structure). Never copy their shots, layouts, slogans or lettering, and never name them in the film.

1. Essence, and what it is not

  1. Evidence, recut. Every picture is real material (archive film, photographs, documents) about the actual subject. The film's argument comes from how they are cut and set, not from illustration.
  2. One printed sheet. All material is converted to the same two-tone print (warm ink → paper); red is the only colour and is laid on top as a printed element.
  3. The beat is the editor. Cuts, slams, wipes and counts sit on a 120 BPM grid (or the score's tempo); sections accelerate by halving shot length.
  4. Type is structure. Words and numbers are beams: on a −18° band, as solid blocks, stacked vertically. Never floating captions.
  5. The collective over the individual. Crowds, hands, machines and many small figures; a single face is never the protagonist.

Not Data Storytelling or a keynote: no centred headline with bullets, no slide transitions, no header bars; data appears as marked documents, counters and measured bars inside the composition. Not Swiss Motion Graphics: asymmetric, diagonal, no grid of white space, no thin rules as decoration. Not Art Deco or 60s Spy Titles: no gold, no fine lines, no jazz. Not a museum slideshow: archive material is never shown "as is" in a neutral frame; it is cut, windowed, stacked and counted.

2. Materials & rendering

3. Colour logic

Role Value Use
Red #D52B1E bands, wedges, blocks, the key number, marker bars, circles and leaders, the one winner in a comparison
Ink #141210 type, beams under each floor, window borders, dark grounds
Paper #EDE4D0 ground, reversed type, cut-out borders

4. Type & subtitles

Use Face Size (1080p)
Chinese display, slogans Noto Sans SC 900 (subset) 110–210 px; stacked vertically 170 px per character
Numbers, English display Oswald 600–700 numbers 230–440 px; English lines 30–62 px, letter-spacing 2–10 px, capitals
Source and footage tags Space Mono Bold (CJK falls back to Noto) 17–18 px on an ink or red tab, padding 6
Subtitles Noto Sans SC 700 40 px over Oswald 500 28 px bottom left, ink bar at 90 %, a 10 px red tick

5. Edit grammar

6. Formats (each is a function in demo/index.html)

Format How it looks How it is built
Title package a red band slams along the axis; a window cut to the band's edge runs footage; digits stamp one per eighth, the CJK unit in red S1: window clipped to the band's top edge (onBar), digits measured and slammed individually, reg() registers the group for readcheck
Lower third a red bar from the left edge with Chinese, an ink tab with the English 92 px bar at y ≈ 760–850, slams in 0.14 s, slides off with the next transition
Map + iris a document map pushes in, a red circle is drawn round the place, the circle opens onto the site mapXf() (scale / focus / angle over time), mapToScreen() keeps the circle on the map point; aperture = arc clip whose radius grows to the frame
Vertical title CJK characters stacked top to bottom beside a tall window, English rotated 90° per-character slams 1/16 apart
Date on a girder the date in paper on a red band crossing the footage text placed on the band's centre line (point + normal offset), rotated by the axis
Grid 3 × 3 windows light one per sixteenth in a spiral, the centre counts 1…9 and lights last in red cells back()-scale in, each a different clip at 1.4–1.8× speed, ping-pong
Split strips the frame rotated to the axis, three strips of two panels each; one panel changes per beat; strips drift in opposite directions panels ≤ 1,160 px wide so the film stays ≤ 2.5×; red seam on the middle strip
Freeze + annotation flash, freeze, push; a red ellipse drawn on the object, a leader to a red block with the number; a jump-in; the film keeps running in a small red-framed inset the circle is computed from the zoom focus so it follows the jump; inset = same clip, live
Document close-up a tilted page slams in, a red marker bar crosses the exact sentence, a red block repeats the number huge marker in multiply over the scan's own line coordinates; a tall slot beside it runs footage fast to show speed
Process staircase three windows rising along a diagonal, red triangles between them, a counter climbing to the claim each window 0.75 s apart; the counter is graphic, only its end value is a fact
The question a document heading on an ink ground, circled in red; a huge red "?" heading cropped tight so only the words that matter show
Acceleration + count full-frame windows tilted ±4–6°, ground alternating red / ink, a four-digit counter jumping per cut cut list with shrinking durations; the original sound plays alone
Multiple exposure top-down footage, a second clip in screen at 45 %, cut-outs in multiply, the answer in a block exposure window ≤ 1,700 px on a red ground
Chart from the document the page turns 90°, its drawings lift off and stand on one ground line to scale, red dimension lines, numbers, names; held; then the verdict block outlines keyed from the scan, scaled so tip-to-ground = value × px per unit; the winner tinted red (source-in)
Photomontage tower (signature) floors of footage strips slam in from alternate sides every sixteenth, an ink beam under each, a cut-out worker lands on every other; the camera climbs; a crown and a figure on top FLOORS list, camera y follows the eased count of built floors; the floor counter runs to the dated anchor, rests there while its caption is up, then runs on to the end value
Silence beat ink frame, one red rivet half a bar; the score and foley are gated to zero
Result composition huge numbers left, a tall slanted window with the finished subject (camera tilts up it), a tilted photo, a red wedge numbers slam, the last line restamps the key number on red

7. Sound palette

8. Native moves

  1. The document is marked, not quoted: the actual sentence on the scan gets a red bar; the number then becomes a red block.
  2. The document becomes the chart: drawings printed on a page are lifted off, turned and stood on a ground line to scale.
  3. A + B → idea: two kinds of image alternate faster and faster (the machine / the hands; a heading / the people it leaves out) until a card or a number states what the collision meant.
  4. Count the many: a counter driven by the cuts, a grid that fills cell by cell, a tower floor by floor.
  5. People build the structure: cut-out figures stacked into the thing they made (photomontage).
  6. Silence, then the heaviest hit into the result.

9. Footage

  1. Ask first. Before searching, ask the user for their own material: film, video, photographs, scans of documents (reports, brochures, letters, minutes), data. What they give leads; archives fill gaps.
  2. Where to look, and how to judge the licence (demo/tools/footage.py searches, downloads and records licence, author and source page into SOURCES.jsonl; footage.py md writes SOURCES.md):
  3. Internet Archive: read each item's licenseurl and description. Public Domain Mark / CC0 / CC BY are usable; no licence field is not. For a pre-1978 US film, check the title and end cards for a copyright notice: published 1930 or earlier = public domain in the US by date; published without notice before 1978 = public domain; with a notice, check renewal. Corroborate date and producer elsewhere (a library catalogue, an archive exhibit). Avoid YouTube mirrors, re-uploads with no provenance, colourised or "restored" versions.
  4. Wikimedia Commons: read the file page's licence and its source institution. Public domain, CC0, CC BY (credit in full) are usable; CC BY-SA is not used in library demos.
  5. US National Archives (NARA), Library of Congress, NASA, other US federal agencies: federal works are public domain; check each item's rights statement. "No known restrictions" (LOC, Flickr Commons) is not clear enough: name it to the user or find the same image elsewhere with a clear statement.
  6. Museums with open access (Met, Rijksmuseum, Smithsonian): CC0 where the object page says so; check that the item is still marked open access.
  7. University and city libraries (e.g. Columbia's digitised ephemera on the Internet Archive): use their rights statement; "copyright status undetermined" is not usable.
  8. Tell the user before downloading: what (title, years), from where (URL), under which licence and why. Keep raw/ under about 1.5 GB; download serially (Commons rate-limits).
  9. Record every asset with the seconds used (footage.py used <name> "<source s> → film s"), list it in demo/CREDITS, and keep the trail for anything judged "no notice".
  10. Footage that is not of the subject itself (another city, another year) may stand in only with a tag that says exactly what it is.

10. Facts

Every number, date and claim on screen or in the voice comes from an official or primary source (a contemporary report, an official brochure, a government record), kept in demo/FACTS.md with the URL and the quoted wording. Counters are graphics: only their end values and dated anchors are facts. Where two primary sources disagree (a film's intertitle vs. the official brochure), use one and record the conflict.

11. Engine

12. Pitfalls of the medium

13. Variation space

The agent decides per film: structure, which archive and documents, which formats (not all of them in one film), the axis angle (−15° to −30°), the red's exact hue, tempo (100–140 BPM), whether there is narration (intertitles only is valid), the signature build (a tower, a bridge span, a crowd forming a word, a map filling in).

Our demo: DEMO.md.