@docyrus/animaguru 0.23.0 → 0.24.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -43,9 +43,11 @@ CLI versions before 0.16.2 need one manual update to gain enforcement. Publish t
43
43
 
44
44
  CLI 0.23.0 adds eight evidence styles, in which real data, imagery or scans carry the film: Satellite Briefing, Engineering Briefing Board, LiDAR Survey, White Model Projection, Data Physicalization, Exploded Teardown, Microscope Story and Archive Light Table. Their skills ask for the user's own data first, list licence-clean sources, keep `production/FACTS.md` and `production/CREDITS.md`, and never let a generated image stand in for evidence. Each has a runnable study (`npm run example -- satellite-briefing`).
45
45
 
46
+ CLI 0.24.0 adds eight documentary & broadcast styles, cut from real archive footage, documents and data: Caption News, 1920s Newsreel, Live Countdown Split-screen, Time-lapse Symphony, Visual Investigation, Constructivist Montage, Sports Telestrator and Broadcast News Package. Their skills carry the same real-evidence and sourcing discipline as the evidence styles, with licence-clean archive and footage sources per style. Each has a runnable study (`npm run example -- caption-news`).
47
+
46
48
  CLI 0.16.2 also installs `animaguru-art-motion` for Codex and Claude Code: one skill with 36 English art-treatment references and nine explainer motion grammars, plus AnimaGuru generation, timing, camera and review guidance. Request it explicitly for a custom film treatment; its references are separate from the gallery presets. Source coverage and the upstream MIT notice are included in the skill.
47
49
 
48
- CLI 0.5.2 includes a complete local PixiJS video workspace, now with 40 visual styles:
50
+ CLI 0.5.2 includes a complete local PixiJS video workspace, now with 48 visual styles:
49
51
 
50
52
  ```sh
51
53
  animaguru templates
@@ -61,7 +63,7 @@ Open the generated folder in **Codex or Claude Code**, then describe the video y
61
63
  - Agent instructions that first ask **Explainer, Advertisement or General Video**, then offer the available visual styles and [the preview gallery](https://animaguru.com/animation-styles), then gather a short creative brief. Each choice is saved before continuing.
62
64
  - `film.config.json`, editable TypeScript scenes, localized copy, local asset/production folders, portable HTML5 ZIP export for iframe embedding, and `npm run export:mp4` with exact frame capture and output verification.
63
65
 
64
- New projects leave category and template unset in `animaguru.project.json`. `animaguru.templates.json` lists categories, styles and their installed skills. The 40 visual styles cover cutout, type, vector, technical, evidence, character, print, paper, material and cinematic treatments. Every style skill ships with the project, including its relevant visual interview and review criteria. Categories describe purpose and templates describe appearance and motion. The brief establishes audience, tone, message, story, duration and any CTA.
66
+ New projects leave category and template unset in `animaguru.project.json`. `animaguru.templates.json` lists categories, styles and their installed skills. The 48 visual styles cover cutout, type, vector, technical, evidence, documentary, character, print, paper, material and cinematic treatments. Every style skill ships with the project, including its relevant visual interview and review criteria. Categories describe purpose and templates describe appearance and motion. The brief establishes audience, tone, message, story, duration and any CTA.
65
67
 
66
68
  CLI 0.23.0 also adds **Machine Anatomy** (`machine-anatomy`): an idea explained as a working isometric machine of many small shaded parts in a framed figure card with a live readout. Adapted from the MIT-licensed [Anatomy](https://github.com/wheresryan22/anatomy) skill, it bundles that skill's geometry kit in `src/kit/anatomy/` with a PixiJS adapter, and `npm run example -- machine-anatomy` installs its original study.
67
69
 
package/dist/animaguru.js CHANGED
@@ -19761,7 +19761,7 @@ var require_ignore2 = __commonJS({
19761
19761
  // cli/package.json
19762
19762
  var package_default = {
19763
19763
  name: "@docyrus/animaguru",
19764
- version: "0.23.0",
19764
+ version: "0.24.0",
19765
19765
  description: "Agent-friendly AnimaGuru CLI built with CrustJS",
19766
19766
  type: "module",
19767
19767
  bin: {
@@ -46017,6 +46017,142 @@ var animation_styles_default = {
46017
46017
  previewCaption: "Three NASA Ames photographs of one airfield on a light table; under the loupe a 1933 negative turns positive and opens into the picture. Public-domain NASA scans; the negatives are simulated.",
46018
46018
  family: "evidence",
46019
46019
  example: true
46020
+ },
46021
+ "caption-news": {
46022
+ name: "Caption News",
46023
+ description: "Huge chunk-slammed captions carry a story that reads with the sound off, while footage, documents and data each arrive with the source tag that proves them.",
46024
+ materials: [
46025
+ "Chunk-slammed captions",
46026
+ "Source-tagged footage",
46027
+ "Document highlighter sweeps"
46028
+ ],
46029
+ motion: [
46030
+ "Frame-4 rolling number hook",
46031
+ "Keyword wipes in yellow",
46032
+ "Highlighter sweep on the page"
46033
+ ],
46034
+ previewCaption: "A hook number rolls in the opening frames, a chunk-slammed caption lands its yellow keyword, and a report page is highlighted before its figure is trusted. Procedural stand-ins for the footage and document, not real sources.",
46035
+ family: "documentary",
46036
+ example: true
46037
+ },
46038
+ newsreel: {
46039
+ name: "1920s Newsreel",
46040
+ description: "A searchlight-and-globe ident, a newspaper spinning into the lens, and a fast announcer carried by a hot band, all inside one silver-graded projector gate.",
46041
+ materials: [
46042
+ "Projected film gate",
46043
+ "Art Deco ident lettering",
46044
+ "Grease-pencil marks"
46045
+ ],
46046
+ motion: [
46047
+ "Globe-and-searchlight ident",
46048
+ "Spinning newspaper slam",
46049
+ "Iris wipe to the next story"
46050
+ ],
46051
+ previewCaption: "The ident's searchlights snap on, a globe turns under the title, and a headline spins into the lens before the iris closes on a place card. Code-drawn packaging only; no archive footage is shown.",
46052
+ family: "documentary",
46053
+ example: true
46054
+ },
46055
+ countdown: {
46056
+ name: "Live Countdown Split-screen",
46057
+ description: "Real-time footage of one event with a known zero, the screen splitting into more cells as the moment nears and merging into a single picture when the clock hits it.",
46058
+ materials: [
46059
+ "Synced camera cells",
46060
+ "Fixed-slot digit clock",
46061
+ "Sync badges"
46062
+ ],
46063
+ motion: [
46064
+ "Cells multiplying toward zero",
46065
+ "Many-into-one merge at zero",
46066
+ "Clock inversion at T plus"
46067
+ ],
46068
+ previewCaption: "Cells multiply as the clock counts down, merge into one frame at zero, and the clock flips from counting down to counting up. Illustrative camera feeds, not a real launch.",
46069
+ family: "documentary",
46070
+ example: true
46071
+ },
46072
+ "city-symphony": {
46073
+ name: "Time-lapse Symphony",
46074
+ description: "Time-lapse turns traffic and crowds into rivers of light, cut like a minimalist score that accelerates to a climax and stops dead on a downbeat.",
46075
+ materials: [
46076
+ "Frame-blended light trails",
46077
+ "35mm release-print grade",
46078
+ "Day-ring clock graphic"
46079
+ ],
46080
+ motion: [
46081
+ "Traffic sped into light rivers",
46082
+ "Grid of streets multiplying",
46083
+ "Hard cut to black on the beat"
46084
+ ],
46085
+ previewCaption: "Traffic blurs into rivers of light as a grid of streets multiplies on the beat, then the score stops dead and the film cuts to black. Procedural city, not a real skyline.",
46086
+ family: "documentary",
46087
+ example: true
46088
+ },
46089
+ "visual-investigation": {
46090
+ name: "Visual Investigation",
46091
+ description: "Footage, documents and sound from one real event laid out on a shared clock, so independent sources check each other and converge on the same second.",
46092
+ materials: [
46093
+ "Synced evidence panels",
46094
+ "Grey ground, one red accent",
46095
+ "Freeze-circle-magnify marks"
46096
+ ],
46097
+ motion: [
46098
+ "Panels syncing to one stopwatch",
46099
+ "Freeze, circle and loupe",
46100
+ "Converging red links to a map"
46101
+ ],
46102
+ previewCaption: "Three sources light up against one stopwatch, a frozen frame is circled and magnified, and every red link converges on the same point of a map. Illustrative evidence panels, not a real case.",
46103
+ family: "documentary",
46104
+ example: true
46105
+ },
46106
+ "kino-montage": {
46107
+ name: "Constructivist Montage",
46108
+ description: "Real footage and photographs printed as one red-and-ink poster and cut on a machine beat, with scissored figures stacked into the structure they built.",
46109
+ materials: [
46110
+ "Red, ink and paper print",
46111
+ "Diagonal type bands",
46112
+ "Photomontage cut-outs"
46113
+ ],
46114
+ motion: [
46115
+ "Grid lighting cell by cell",
46116
+ "Figures stacking into a tower",
46117
+ "Red wipe on the downbeat"
46118
+ ],
46119
+ previewCaption: "A grid lights cell by cell, cut-out figures climb and stack into a tower, and a red band wipes to the count on the downbeat. Illustrative silhouettes, not real archive photographs.",
46120
+ family: "documentary",
46121
+ example: true
46122
+ },
46123
+ telestrator: {
46124
+ name: "Sports Telestrator",
46125
+ description: "Play it, rewind it, freeze it: rings under the feet, a marker arrow on the ball, and the picture flattened into a top-down board, drawn over real match footage.",
46126
+ materials: [
46127
+ "Marker rings and arrows",
46128
+ "Frame-counting stopwatch",
46129
+ "Perspective-flattened pitch board"
46130
+ ],
46131
+ motion: [
46132
+ "Rewind into a freeze",
46133
+ "Ring and arrow drawn on the play",
46134
+ "Perspective flatten to the board"
46135
+ ],
46136
+ previewCaption: "A play rewinds into a freeze, a ring and an arrow mark the move, and the picture flattens into a top-down board with the shot plotted on it. Illustrative match, not a real game.",
46137
+ family: "documentary",
46138
+ example: true
46139
+ },
46140
+ "news-package": {
46141
+ name: "Broadcast News Package",
46142
+ description: "A newsroom bulletin built entirely in code: a sting that becomes the channel bug, a rundown ticked off story by story, and a strap that never leaves the frame.",
46143
+ materials: [
46144
+ "Brand plate sting and bug",
46145
+ "Split-flap price board",
46146
+ "Lower-third strap"
46147
+ ],
46148
+ motion: [
46149
+ "Sting flying into the corner bug",
46150
+ "Rundown rows flipping and ticking",
46151
+ "Split-flap board changing value"
46152
+ ],
46153
+ previewCaption: "The sting slams in and flies to the corner bug, a rundown's rows flip and tick off one by one, and a split-flap board turns an old value into the new. Illustrative bulletin, procedural graphics throughout.",
46154
+ family: "documentary",
46155
+ example: true
46020
46156
  }
46021
46157
  },
46022
46158
  browseStyles: "Browse animation styles",
@@ -46031,7 +46167,8 @@ var animation_styles_default = {
46031
46167
  character: "Character & pixel",
46032
46168
  material: "Materials & depth",
46033
46169
  cinematic: "Cinema & media",
46034
- evidence: "Evidence & data"
46170
+ evidence: "Evidence & data",
46171
+ documentary: "Documentary & broadcast"
46035
46172
  },
46036
46173
  searchLabel: "Search visual styles",
46037
46174
  searchPlaceholder: "Try paper, product, typography\u2026",
@@ -46149,7 +46286,15 @@ var VIDEO_STYLE_IDS = [
46149
46286
  "data-physicalization",
46150
46287
  "exploded-teardown",
46151
46288
  "microscope-story",
46152
- "archive-light-table"
46289
+ "archive-light-table",
46290
+ "caption-news",
46291
+ "newsreel",
46292
+ "countdown",
46293
+ "city-symphony",
46294
+ "visual-investigation",
46295
+ "kino-montage",
46296
+ "telestrator",
46297
+ "news-package"
46153
46298
  ];
46154
46299
  var VIDEO_WORKFLOW_IDS = [
46155
46300
  "product-proof",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@docyrus/animaguru",
3
- "version": "0.23.0",
3
+ "version": "0.24.0",
4
4
  "description": "Agent-friendly AnimaGuru CLI built with CrustJS",
5
5
  "type": "module",
6
6
  "bin": {
@@ -0,0 +1,34 @@
1
+ ---
2
+ name: animaguru-caption-news
3
+ description: Build Caption News visuals and motion in an AnimaGuru PixiJS video workspace. Use when this visual style is chosen for an explainer, advertisement or general video.
4
+ disable-model-invocation: true
5
+ ---
6
+
7
+ # Caption News
8
+
9
+ Social-video news that reads with the sound off: huge chunk-slammed captions are the lead actor over real footage, photos and documents, and every number arrives with the source tag that proves it. It is a documentary & broadcast style: real footage, photos, documents or data carry the film. Subject, audience, emotional tone and story come from the user's brief. This style supports Explainer, Advertisement and General Video.
10
+
11
+ ## Establish direction
12
+
13
+ Follow sibling `animaguru-video` for purpose → style → compact interview before new production. Reuse explicit choices and completed briefs; honor a requested interview skip. Share [the style gallery](https://animaguru.com/animation-styles#caption-news). Fold missing visual questions into the shared interview:
14
+
15
+ - Which footage, photos or documents do you have, and what is the one turn the hook sets up?
16
+ - Which keyword gets the yellow block, and what should the lower third carry (place, date or speaker)?
17
+
18
+ ## Use real evidence
19
+
20
+ Ask the user for their own footage, photos, documents or data first; otherwise find licence-clean sources (see the [production recipe](references/recipe.md)). Never stand a generated image in for the evidence, and never show a number without its source tag in the same shot. Keep `production/FACTS.md` (each on-screen or spoken claim, its source URL and quoted wording, or the measurement method) and `production/CREDITS.md` (every asset's source, author and licence), and deliver both with the film. CC BY-SA, "no known restrictions" or unclear licences are not CC0: name them to the user and ask before using them.
21
+
22
+ ## Build the look and movement
23
+
24
+ Read `pixijs` and the relevant Graphics, Text, Container, Assets or Filters skills. Read `animaguru` before generating assets: generation can supply music or narration, never the evidence itself. Discover current models and estimates, respect the user's budget, and reuse completed media. Essential captions, numbers and charts belong in authored canvas content, never baked into footage.
25
+
26
+ - The caption card is the shot: one Chinese line and one English line, chunk-slammed a piece at a time, one keyword per caption wiped into a honey-yellow block; never wrapped.
27
+ - Numbers roll in fixed-width digit cells with their source tag in the same shot; a document highlight sweeps the exact line before its figure is restated as a block.
28
+ - Cuts land on a half-beat grid; transitions are a small fixed set (hard cut, a short white flash, a card sliding in, a split, a lit grid, a mask growing out of a map shape) — never dissolves or page turns.
29
+
30
+ Use the [production recipe](references/recipe.md) for sources, the bundled original study and port-specific decisions. It is a technique example, not a prescribed film. Keep motions a function of absolute seconds; separate drawing cadence from camera/light cadence when the material calls for it. Prepare assets locally, preserve async seeking and register actual resource/cue times. Keep essential type editable and localized.
31
+
32
+ ## Review and delivery
33
+
34
+ Inspect reading time on every caption and chart title, source-tag presence beside every number, footage credits in the corner, keyword-wipe timing, and every figure against `FACTS.md`. Check representative full-resolution frames, moving playback, desktop/mobile fit and cold seeks. Follow `animaguru-video` for production records, audio mixing and HTML5 delivery; export MP4 when requested. Describe the actual 2D/2.5D rendering method accurately. Physically rendered 3D remains deferred.
@@ -0,0 +1,26 @@
1
+ # Caption News production recipe
2
+
3
+ The workspace includes an executable original study in `src/studies/scenes.ts`, selected with `caption-news`. Its drawing commands are consumed by `src/studies/pixi-renderer.ts`; geometry and time sampling are shared with the gallery renderer. All copy lives in `shared/locales/en/style-studies.json`.
4
+
5
+ In an untouched starter, run `npm run example -- caption-news`, then `npm run dev`. The command refuses to replace an authored film, retains starter backups in `production/example-backup/`, and writes an 8-second study with its own resource tracks. `npm run export:html` and `npm run export:mp4` use this installed film normally. To use the recipe inside an existing film, import `studyFrame()` and `StudyRenderer`, then compose the selected scene into the project's timeline instead of running the installer.
6
+
7
+ ## Evidence and sources
8
+
9
+ Wikimedia Commons (read the licence on each file page: CC0, public domain or CC BY are fine; not CC BY-SA, "no known restrictions", unclear licences or YouTube re-uploads), U.S. federal agencies (USDA, USGS, NASA, NOAA, NARA — works of federal employees are public domain), Internet Archive (public domain or CC0/CC BY items only; U.S. works published before 1931 are public domain), Library of Congress (read each item's rights statement). Official documents and data (reports, statistics, filings) come from the agency's own site. Download into the film's `public/` or `production/` folders, log every request, and record each asset in `production/CREDITS.md` and each claim with its quoted wording in `production/FACTS.md`. Burn a readable footage credit into the frame where the medium calls for one.
10
+
11
+ ## Adaptation decisions
12
+
13
+ - Build the caption card and the ledger (data-card) ground as `Text` and `Graphics` over a `Sprite` or video-texture footage layer; the keyword's yellow block is a masked rect wiped left to right behind the chunk.
14
+ - Roll numbers in fixed-width digit cells (a monospace `Text` or `BitmapText` per digit, updated on the ticker) so a counter never jitters; keep its source tag in the same shot.
15
+ - Sweep the document highlight as a `Graphics` rect in a multiply-like blend over the scanned page sprite, animated by an exact clip mask rather than opacity, so the sentence reads as marked, not merely tinted.
16
+
17
+ The study is silent, original procedural art with illustrative values, labelled as such; it demonstrates material, layout and motion, not evidence. Replace its stand-ins with the real footage, photos, documents or data described above, never with generated imagery. The gallery preview uses procedural placeholder footage and documents, labelled illustrative, to demonstrate the caption, keyword-wipe and highlight system without claiming any real source. Configure the subject, palette, scene sequence, duration and soundtrack from the brief.
18
+
19
+ Use `src/studies/timing.ts` for deterministic easing, seeded variation, measured stroke truncation and cue helpers. `window.animaguru.texts` exposes visible study text bounds for `npm run review`; text declarations alone do not count as visual proof. Inspect the actual frames as well.
20
+
21
+ ## Sources and attribution
22
+
23
+ Inspired by the following pinned references; source-specific 3D/media dependencies are not bundled. New study art and scene geometry are original. The workspace's `VIDEO-STYLE-NOTICES.txt` preserves the repository notices and clarifies third-party asset scope.
24
+
25
+ - [styles/caption-news/STYLE.md](https://github.com/lemomo-ai/lemo-opuscar/blob/77ee8318df779b0736d7de0abe24387e51023735/styles/caption-news/STYLE.md)
26
+ - [styles/caption-news/demo/main.js](https://github.com/lemomo-ai/lemo-opuscar/blob/77ee8318df779b0736d7de0abe24387e51023735/styles/caption-news/demo/main.js)
@@ -0,0 +1,34 @@
1
+ ---
2
+ name: animaguru-city-symphony
3
+ description: Build Time-lapse Symphony visuals and motion in an AnimaGuru PixiJS video workspace. Use when this visual style is chosen for an explainer, advertisement or general video.
4
+ disable-model-invocation: true
5
+ ---
6
+
7
+ # Time-lapse Symphony
8
+
9
+ 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 slows almost to a stop, and the film ends on a hard cut to black on a downbeat. It is a documentary & broadcast style: real time-lapse, aerial, archive or photographic footage carries the film. Subject, audience, emotional tone and story come from the user's brief. This style supports Explainer, Advertisement and General Video.
10
+
11
+ ## Establish direction
12
+
13
+ Follow sibling `animaguru-video` for purpose → style → compact interview before new production. Reuse explicit choices and completed briefs; honor a requested interview skip. Share [the style gallery](https://animaguru.com/animation-styles#city-symphony). Fold missing visual questions into the shared interview:
14
+
15
+ - Which place, and which licence-clean time-lapse, aerial or archive footage should carry the film, and what is its one slowed, fragile moment?
16
+ - What is the score's tempo and arc (minimal repetition → acceleration → climax → hard stop → coda)?
17
+
18
+ ## Use real evidence
19
+
20
+ Ask the user for their own time-lapses, photographs, documents or data of the place first; otherwise find licence-clean sources (see the [production recipe](references/recipe.md)). Footage only: never generate images, never use colourised or "restored" archive copies, never a YouTube mirror without a passed review. Keep `production/FACTS.md` (every number from an official source, with its URL and quoted wording) and `production/CREDITS.md` (every asset's source, author and licence), delivered with the film.
21
+
22
+ ## Build the look and movement
23
+
24
+ Read `pixijs` and the relevant Filters, Container, Graphics or Text skills. Read `animaguru` before generating assets: generation can supply music or narration, never the city's own footage. Discover current models and estimates, respect the user's budget, and reuse completed media. Essential number cards and the closing quote belong in authored canvas content.
25
+
26
+ - Density follows the score: the cut grid (bars, beats, subdivisions) comes from one tempo function, never a hand-typed duration; the grid split (1×2 up to 4×4) is this style's split screen.
27
+ - Speed is the instrument: every sped-up shot reads as motion-blurred light, not stepped frames; one moment brakes into slow motion exactly where the music's arpeggios stop.
28
+ - One 35mm release-print grade and matte unify every source, archive included; number cards and the closing quote stay left-aligned, never centred or boxed.
29
+
30
+ Use the [production recipe](references/recipe.md) for sources, the bundled original study and port-specific decisions. It is a technique example, not a prescribed film. Keep motions a function of absolute seconds; separate drawing cadence from camera/light cadence when the material calls for it. Prepare assets locally, preserve async seeking and register actual resource/cue times. Keep essential type editable and localized.
31
+
32
+ ## Review and delivery
33
+
34
+ Inspect cut-to-beat alignment, grade consistency across day and night shots, text reading time against `readcheck`-style limits, and every number against `FACTS.md`. Check representative full-resolution frames, moving playback, desktop/mobile fit and cold seeks. Follow `animaguru-video` for production records, audio mixing and HTML5 delivery; export MP4 when requested. Describe the actual 2D/2.5D rendering method accurately. Physically rendered 3D remains deferred.
@@ -0,0 +1,26 @@
1
+ # Time-lapse Symphony production recipe
2
+
3
+ The workspace includes an executable original study in `src/studies/scenes.ts`, selected with `city-symphony`. Its drawing commands are consumed by `src/studies/pixi-renderer.ts`; geometry and time sampling are shared with the gallery renderer. All copy lives in `shared/locales/en/style-studies.json`.
4
+
5
+ In an untouched starter, run `npm run example -- city-symphony`, then `npm run dev`. The command refuses to replace an authored film, retains starter backups in `production/example-backup/`, and writes an 8-second study with its own resource tracks. `npm run export:html` and `npm run export:mp4` use this installed film normally. To use the recipe inside an existing film, import `studyFrame()` and `StudyRenderer`, then compose the selected scene into the project's timeline instead of running the installer.
6
+
7
+ ## Evidence and sources
8
+
9
+ Wikimedia Commons (modern time-lapse, aerial and slow-motion footage under CC BY/CC0; the Carol M. Highsmith Archive for public-domain photographs; check the licence on each file page, and that a YouTube/Vimeo import carries a passed review, not merely a pending one), Library of Congress (archive film published in the US before 1931 is public domain; a "no known restrictions" statement alone is not enough), NASA (orbital night photography of cities, public domain), Internet Archive (scanned books marked NOT_IN_COPYRIGHT with a pre-1931 date for the closing quote), Natural Earth (public domain map geometry). Download into the film's `public/` or `production/` folders, log every request, and record each asset in `production/CREDITS.md` and each number, with its quoted wording, in `production/FACTS.md`.
10
+
11
+ ## Adaptation decisions
12
+
13
+ - Approximate frame-blended "light rivers" by accumulating a short trail of recent texture samples into a `RenderTexture` with decaying alpha, or by motion-blurring a sped-up `Sprite`/video texture; cap the blend window so clouds don't turn to mush.
14
+ - Drive every cut, slam and grid stage from one shared `bar(n, beat)` timing function, so density always matches the score's current subdivision rather than a typed shot length.
15
+ - Build the number card and the day-ring clock as `Graphics`/`Text`, locking digits one per sixteenth note; apply the release-print grade (S-curve, warm highlights, bloom above a luma threshold, grain) with a `ColorMatrixFilter` plus a small bloom pass, shared by every shot including archive film.
16
+
17
+ The study is silent, original procedural art with illustrative values, labelled as such; it demonstrates material, layout and motion, not evidence. Replace its stand-ins with the real time-lapse, aerial, archive or photographic footage described above, never with generated imagery. The gallery preview is a procedural city rendered in code, not a real skyline, labelled as such. Configure the subject, palette, scene sequence, duration and soundtrack from the brief.
18
+
19
+ Use `src/studies/timing.ts` for deterministic easing, seeded variation, measured stroke truncation and cue helpers. `window.animaguru.texts` exposes visible study text bounds for `npm run review`; text declarations alone do not count as visual proof. Inspect the actual frames as well.
20
+
21
+ ## Sources and attribution
22
+
23
+ Inspired by the following pinned references; source-specific 3D/media dependencies are not bundled. New study art and scene geometry are original. The workspace's `VIDEO-STYLE-NOTICES.txt` preserves the repository notices and clarifies third-party asset scope.
24
+
25
+ - [styles/city-symphony/STYLE.md](https://github.com/lemomo-ai/lemo-opuscar/blob/77ee8318df779b0736d7de0abe24387e51023735/styles/city-symphony/STYLE.md)
26
+ - [styles/city-symphony/demo/index.html](https://github.com/lemomo-ai/lemo-opuscar/blob/77ee8318df779b0736d7de0abe24387e51023735/styles/city-symphony/demo/index.html)
@@ -0,0 +1,34 @@
1
+ ---
2
+ name: animaguru-countdown
3
+ description: Build Live Countdown Split-screen visuals and motion in an AnimaGuru PixiJS video workspace. Use when this visual style is chosen for an explainer, advertisement or general video.
4
+ disable-model-invocation: true
5
+ ---
6
+
7
+ # Live Countdown Split-screen
8
+
9
+ Real-time footage of one event with a known zero: screen time equals event time, a clock ticks every second, and the screen splits into more cells as the moment nears, merging into one picture at zero. It is a documentary & broadcast style: real synced footage, documents and data carry the film. Subject, audience, emotional tone and story come from the user's brief. This style supports Explainer, Advertisement and General Video.
10
+
11
+ ## Establish direction
12
+
13
+ Follow sibling `animaguru-video` for purpose → style → compact interview before new production. Reuse explicit choices and completed briefs; honor a requested interview skip. Share [the style gallery](https://animaguru.com/animation-styles#countdown). Fold missing visual questions into the shared interview:
14
+
15
+ - Which event with a known zero, and how many synced camera angles, documents or data do you have?
16
+ - Which milestones should the control strip carry, and what should the clock count to after zero?
17
+
18
+ ## Use real evidence
19
+
20
+ Ask the user for their own footage, recordings, photos or data of the event first; otherwise find licence-clean sources (see the [production recipe](references/recipe.md)). Screen time equals event time: never cut, reorder or speed up the real stretch. Label footage honestly rather than faking sync ("same window · not frame-synced" instead of a forced alignment), and keep `production/FACTS.md` (every number, time, name and call, with source) and `production/CREDITS.md` (every asset's source, author and licence), delivered with the film.
21
+
22
+ ## Build the look and movement
23
+
24
+ Read `pixijs` and the relevant Container, Graphics, Text or Filters skills. Read `animaguru` before generating assets: generation can supply music or narration, never the event footage itself. Discover current models and estimates, respect the user's budget, and reuse completed media. Essential clock digits, checklists and labels belong in authored canvas content.
25
+
26
+ - The layout is the edit: cells open, close and resize on a real spoken call or event in the native audio, never on the music; cell count rises toward zero, then drops to one at the merge.
27
+ - Draw the clock in fixed-width digit slots so it never jitters; sync badges (synced, same-window, real-time) are part of the look's honesty, not an afterthought.
28
+ - At zero, every cell animates to its tile of the merged full-screen frame while chrome fades, then the clock inverts from counting down to counting up.
29
+
30
+ Use the [production recipe](references/recipe.md) for sources, the bundled original study and port-specific decisions. It is a technique example, not a prescribed film. Keep motions a function of absolute seconds; separate drawing cadence from camera/light cadence when the material calls for it. Prepare assets locally, preserve async seeking and register actual resource/cue times. Keep essential type editable and localized.
31
+
32
+ ## Review and delivery
33
+
34
+ Inspect sync accuracy at zero, clock digit stability under re-layout, sync-badge honesty on every unsynced cell, and every milestone and number against `FACTS.md`. Check representative full-resolution frames, moving playback, desktop/mobile fit and cold seeks. Follow `animaguru-video` for production records, audio mixing and HTML5 delivery; export MP4 when requested. Describe the actual 2D/2.5D rendering method accurately. Physically rendered 3D remains deferred.
@@ -0,0 +1,26 @@
1
+ # Live Countdown Split-screen production recipe
2
+
3
+ The workspace includes an executable original study in `src/studies/scenes.ts`, selected with `countdown`. Its drawing commands are consumed by `src/studies/pixi-renderer.ts`; geometry and time sampling are shared with the gallery renderer. All copy lives in `shared/locales/en/style-studies.json`.
4
+
5
+ In an untouched starter, run `npm run example -- countdown`, then `npm run dev`. The command refuses to replace an authored film, retains starter backups in `production/example-backup/`, and writes an 8-second study with its own resource tracks. `npm run export:html` and `npm run export:mp4` use this installed film normally. To use the recipe inside an existing film, import `studyFrame()` and `StudyRenderer`, then compose the selected scene into the project's timeline instead of running the installer.
6
+
7
+ ## Evidence and sources
8
+
9
+ NASA (images.nasa.gov, svs.gsfc.nasa.gov — U.S. federal government works, public domain; check each item for third-party material and never imply endorsement), other U.S. federal agencies (NOAA, National Archives, DoD DVIDS), Internet Archive (only items whose record shows public domain, pre-1931 U.S. publication or CC0/CC BY; skip YouTube mirrors), Wikimedia Commons (CC0, public domain or CC BY only), Library of Congress (read each rights statement). Download only the seconds needed, log every request, and record each asset in `production/CREDITS.md` and each claim, time and call in `production/FACTS.md`.
10
+
11
+ ## Adaptation decisions
12
+
13
+ - Model each camera as a `Sprite` or video texture inside its own `Container`, whose rectangle is driven by layout keyframes (grid, merge, cut, swap) interpolated with an `easeInOutCubic`, never a hand-typed per-shot duration.
14
+ - Draw the fixed-slot clock as individual `Text` or `BitmapText` glyphs in equal-width cells, swapped on the whole second so digits never jitter; drive the sub-second bar and ticks from the same clock state.
15
+ - Build the zero merge by animating every cell's rectangle to its tile of one full-screen frame while chip and border graphics fade in the transition's first half, then flip the clock's colour and header state from counting down to counting up.
16
+
17
+ The study is silent, original procedural art with illustrative values, labelled as such; it demonstrates material, layout and motion, not evidence. Replace its stand-ins with the real synced footage, documents and data described above, never with generated imagery. The gallery preview uses illustrative camera cells with no real launch or event behind them, labelled as such. Configure the subject, palette, scene sequence, duration and soundtrack from the brief.
18
+
19
+ Use `src/studies/timing.ts` for deterministic easing, seeded variation, measured stroke truncation and cue helpers. `window.animaguru.texts` exposes visible study text bounds for `npm run review`; text declarations alone do not count as visual proof. Inspect the actual frames as well.
20
+
21
+ ## Sources and attribution
22
+
23
+ Inspired by the following pinned references; source-specific 3D/media dependencies are not bundled. New study art and scene geometry are original. The workspace's `VIDEO-STYLE-NOTICES.txt` preserves the repository notices and clarifies third-party asset scope.
24
+
25
+ - [styles/countdown/STYLE.md](https://github.com/lemomo-ai/lemo-opuscar/blob/77ee8318df779b0736d7de0abe24387e51023735/styles/countdown/STYLE.md)
26
+ - [styles/countdown/demo/index.html](https://github.com/lemomo-ai/lemo-opuscar/blob/77ee8318df779b0736d7de0abe24387e51023735/styles/countdown/demo/index.html)
@@ -0,0 +1,34 @@
1
+ ---
2
+ name: animaguru-kino-montage
3
+ description: Build Constructivist Montage visuals and motion in an AnimaGuru PixiJS video workspace. Use when this visual style is chosen for an explainer, advertisement or general video.
4
+ disable-model-invocation: true
5
+ ---
6
+
7
+ # Constructivist Montage
8
+
9
+ Real archive footage, photographs and documents, printed as one ink-and-paper poster with a single red, cut on a machine beat: diagonal bands carry the type, windows hold the film, people are scissored out of photographs and stacked into structures. It is a documentary & broadcast style: real footage, photographs and documents carry the film. Subject, audience, emotional tone and story come from the user's brief. This style supports Explainer, Advertisement and General Video.
10
+
11
+ ## Establish direction
12
+
13
+ Follow sibling `animaguru-video` for purpose → style → compact interview before new production. Reuse explicit choices and completed briefs; honor a requested interview skip. Share [the style gallery](https://animaguru.com/animation-styles#kino-montage). Fold missing visual questions into the shared interview:
14
+
15
+ - Which archive footage, photographs and documents (with rights) tell this story, and what is the signature build (a tower, a bridge span, a crowd forming a word)?
16
+ - What is the axis angle and tempo for the diagonal bands and the beat grid?
17
+
18
+ ## Use real evidence
19
+
20
+ Ask the user for their own film, video, photographs, scans or data first; otherwise find licence-clean sources (see the [production recipe](references/recipe.md)). Never stand a generated image in for archive material, and never invent a number. Keep `production/FACTS.md` (every number, date and claim, with its source and quoted wording) and `production/CREDITS.md` (every asset's source, author and licence), delivered with the film. CC BY-SA or "no known restrictions" are not usable without the user's explicit agreement.
21
+
22
+ ## Build the look and movement
23
+
24
+ Read `pixijs` and the relevant Filters, Graphics, Text or Container skills. Read `animaguru` before generating assets: generation can supply music or narration, never the archive imagery itself. Discover current models and estimates, respect the user's budget, and reuse completed media. Essential counters, headings and marked facts belong in authored canvas content.
25
+
26
+ - Four elements only — bands, windows, cut-outs, type blocks — share one ink-to-paper print grade; red is the only colour, laid on top, and never sits on red.
27
+ - Cuts conflict in direction, value or geometry on a beat grid that can halve per section; nothing holds longer than a second without something moving.
28
+ - The signature photomontage tower (or equivalent build) climbs one unit per beat with the count; a document's own drawings can be "lifted off the page" and restood to scale as a chart.
29
+
30
+ Use the [production recipe](references/recipe.md) for sources, the bundled original study and port-specific decisions. It is a technique example, not a prescribed film. Keep motions a function of absolute seconds; separate drawing cadence from camera/light cadence when the material calls for it. Prepare assets locally, preserve async seeking and register actual resource/cue times. Keep essential type editable and localized.
31
+
32
+ ## Review and delivery
33
+
34
+ Inspect the print grade's consistency per clip, red never sitting on red, counter-to-caption agreement, type clear of window edges, and every number against `FACTS.md`. Check representative full-resolution frames, moving playback, desktop/mobile fit and cold seeks. Follow `animaguru-video` for production records, audio mixing and HTML5 delivery; export MP4 when requested. Describe the actual 2D/2.5D rendering method accurately. Physically rendered 3D remains deferred.
@@ -0,0 +1,26 @@
1
+ # Constructivist Montage production recipe
2
+
3
+ The workspace includes an executable original study in `src/studies/scenes.ts`, selected with `kino-montage`. Its drawing commands are consumed by `src/studies/pixi-renderer.ts`; geometry and time sampling are shared with the gallery renderer. All copy lives in `shared/locales/en/style-studies.json`.
4
+
5
+ In an untouched starter, run `npm run example -- kino-montage`, then `npm run dev`. The command refuses to replace an authored film, retains starter backups in `production/example-backup/`, and writes an 8-second study with its own resource tracks. `npm run export:html` and `npm run export:mp4` use this installed film normally. To use the recipe inside an existing film, import `studyFrame()` and `StudyRenderer`, then compose the selected scene into the project's timeline instead of running the installer.
6
+
7
+ ## Evidence and sources
8
+
9
+ Internet Archive (read each item's `licenseurl`; for pre-1978 US film, check the title and end cards for a copyright notice — published 1930 or earlier is public domain by date), Wikimedia Commons (public domain, CC0 or CC BY, credited in full; not CC BY-SA), U.S. National Archives, Library of Congress, NASA and other federal agencies (federal works are public domain; check each item's rights statement), open-access museums such as the Met, Rijksmuseum and Smithsonian (CC0 where the object page says so), university and city library digitised ephemera (read the rights statement; "copyright status undetermined" is not usable). Download into the film's `public/` or `production/` folders, log every request, and record each asset's seconds used in `production/CREDITS.md` and every number, date and claim in `production/FACTS.md`.
10
+
11
+ ## Adaptation decisions
12
+
13
+ - Composite each window as a masked `Container` (a rectangle or a sheared parallelogram) holding a graded `Sprite` or video texture; apply the duotone ink-to-paper grade with one `ColorMatrixFilter` shared by every window, photograph and document.
14
+ - Stand in for the segmentation-and-paper-border cut-out technique with flat `Graphics` silhouettes carrying a paper-coloured outline stroke; the signature tower stacks them with a simple eased camera climb tied to the floor counter.
15
+ - Drive every slam, wipe and flash from one beat-grid timing function (a `bar(n, beat)`-equivalent in `timing.ts`), shared by the diagonal bands, the type blocks and the cuts, so the whole poster cuts on the same grid.
16
+
17
+ The study is silent, original procedural art with illustrative values, labelled as such; it demonstrates material, layout and motion, not evidence. Replace its stand-ins with the real footage, photographs and documents described above, never with generated imagery. The gallery preview uses illustrative silhouettes, not real archive photographs, labelled as such. Configure the subject, palette, scene sequence, duration and soundtrack from the brief.
18
+
19
+ Use `src/studies/timing.ts` for deterministic easing, seeded variation, measured stroke truncation and cue helpers. `window.animaguru.texts` exposes visible study text bounds for `npm run review`; text declarations alone do not count as visual proof. Inspect the actual frames as well.
20
+
21
+ ## Sources and attribution
22
+
23
+ Inspired by the following pinned references; source-specific 3D/media dependencies are not bundled. New study art and scene geometry are original. The workspace's `VIDEO-STYLE-NOTICES.txt` preserves the repository notices and clarifies third-party asset scope.
24
+
25
+ - [styles/kino-montage/STYLE.md](https://github.com/lemomo-ai/lemo-opuscar/blob/77ee8318df779b0736d7de0abe24387e51023735/styles/kino-montage/STYLE.md)
26
+ - [styles/kino-montage/demo/index.html](https://github.com/lemomo-ai/lemo-opuscar/blob/77ee8318df779b0736d7de0abe24387e51023735/styles/kino-montage/demo/index.html)
@@ -0,0 +1,34 @@
1
+ ---
2
+ name: animaguru-news-package
3
+ description: Build Broadcast News Package visuals and motion in an AnimaGuru PixiJS video workspace. Use when this visual style is chosen for an explainer, advertisement or general video.
4
+ disable-model-invocation: true
5
+ ---
6
+
7
+ # Broadcast News Package
8
+
9
+ A television newsroom's on-air package built entirely in code: a sting that becomes the channel bug, a rundown that opens and closes the bulletin, a lower-third strap that never leaves the frame, and full-frame graphics that carry the facts. It is a documentary & broadcast style; it can run as pure graphics over real data, with footage optional. Subject, audience, emotional tone and story come from the user's brief. This style supports Explainer, Advertisement and General Video.
10
+
11
+ ## Establish direction
12
+
13
+ Follow sibling `animaguru-video` for purpose → style → compact interview before new production. Reuse explicit choices and completed briefs; honor a requested interview skip. Share [the style gallery](https://animaguru.com/animation-styles#news-package). Fold missing visual questions into the shared interview:
14
+
15
+ - How many stories, and which graphics does each need (a split-flap board, a threshold chart, an explainer map, a spec card, a quote card)?
16
+ - Does the user have their own brand (name, plate colour, voice), or should one be invented for this film?
17
+
18
+ ## Use real evidence
19
+
20
+ Every on-screen number and sentence comes from an official source first; ask the user for their own data, pictures or a recorded voice before anything else (see the [production recipe](references/recipe.md)). Draw charts from real series only; tag a line `SCHEMATIC` when only a few numbers are known. A generated illustrative plate is a last resort, always tagged `ILLUSTRATION` while visible, and never stands in for the event, a place or a person. Keep `production/FACTS.md` (claim, URL, quoted wording) and `production/CREDITS.md`, delivered with the film.
21
+
22
+ ## Build the look and movement
23
+
24
+ Read `pixijs` and the relevant Graphics, Text, Container or Filters skills. Read `animaguru` before generating assets: generation can supply an anchor voice, music or an illustrative plate, never the facts themselves. Discover current models and estimates, respect the user's budget, and reuse completed media. Essential straps, datelines and numbers belong in authored canvas content.
25
+
26
+ - One package system throughout: a brand plate, a tab, a paper strap, ink cards, mono datelines, stamps — viewers read the system before the words.
27
+ - The strap never leaves the frame from the first story to the recap; its tab changes category with a flash; the sting becomes the bug by flying into the corner.
28
+ - The package travels with its picture: under a wipe, draw the strap, tab, source line and corner tag per side of the wipe, never once on top of everything, so the chrome never lags the cut.
29
+
30
+ Use the [production recipe](references/recipe.md) for sources, the bundled original study and port-specific decisions. It is a technique example, not a prescribed film. Keep motions a function of absolute seconds; separate drawing cadence from camera/light cadence when the material calls for it. Prepare assets locally, preserve async seeking and register actual resource/cue times. Keep essential type editable and localized.
31
+
32
+ ## Review and delivery
33
+
34
+ Inspect strap/tab/source-line sync under every wipe, schematic-vs-data labelling, source-line length limits, every claim against `FACTS.md`, and illustration tagging on any generated plate. Check representative full-resolution frames, moving playback, desktop/mobile fit and cold seeks. Follow `animaguru-video` for production records, audio mixing and HTML5 delivery; export MP4 when requested. Describe the actual 2D/2.5D rendering method accurately. Physically rendered 3D remains deferred.
@@ -0,0 +1,26 @@
1
+ # Broadcast News Package production recipe
2
+
3
+ The workspace includes an executable original study in `src/studies/scenes.ts`, selected with `news-package`. Its drawing commands are consumed by `src/studies/pixi-renderer.ts`; geometry and time sampling are shared with the gallery renderer. All copy lives in `shared/locales/en/style-studies.json`.
4
+
5
+ In an untouched starter, run `npm run example -- news-package`, then `npm run dev`. The command refuses to replace an authored film, retains starter backups in `production/example-backup/`, and writes an 8-second study with its own resource tracks. `npm run export:html` and `npm run export:mp4` use this installed film normally. To use the recipe inside an existing film, import `studyFrame()` and `StudyRenderer`, then compose the selected scene into the project's timeline instead of running the installer.
6
+
7
+ ## Evidence and sources
8
+
9
+ The company's or institution's own page, the exchange's own data, or a government statistics portal for every number (log the claim and quoted wording). For pictures, ask in order: the user's own images first; generated illustrative plates only if the user wants them, tagged `ILLUSTRATION` for as long as visible and never standing in for the event, a place in the news or a person; failing that, Wikimedia Commons (CC0, public domain or CC BY only), U.S. federal agencies (NASA, NOAA, NARA, USGS — public domain), Internet Archive (public domain, CC0 or CC BY items; U.S. works before 1931 are public domain), or abstract backgrounds drawn in code. Record every asset in `production/CREDITS.md` and every claim in `production/FACTS.md`.
10
+
11
+ ## Adaptation decisions
12
+
13
+ - Build the brand plate as one `Graphics` parallelogram reused for the sting, the bug, the desk front and the end card, driven by a single position/scale tween rather than four separate assets.
14
+ - Build the split-flap board as two `Container`s clipped to top and bottom halves, cross-fading the old and new tile faces on the flip; drive the threshold chart's line head and bars from one shared series.
15
+ - Draw the strap, tab, source line and corner tag inside each wipe's own clip (one state per side of the transition), never as a single overlay drawn once on top of everything, so the package never lags the picture by a frame.
16
+
17
+ The study is silent, original procedural art with illustrative values, labelled as such; it demonstrates material, layout and motion, not evidence. Replace its stand-ins with the real data, pictures or footage described above, never with unlabelled generated imagery. The gallery preview runs the package graphics end to end with no footage, illustrative throughout and labelled as such. Configure the subject, palette, scene sequence, duration and soundtrack from the brief.
18
+
19
+ Use `src/studies/timing.ts` for deterministic easing, seeded variation, measured stroke truncation and cue helpers. `window.animaguru.texts` exposes visible study text bounds for `npm run review`; text declarations alone do not count as visual proof. Inspect the actual frames as well.
20
+
21
+ ## Sources and attribution
22
+
23
+ Inspired by the following pinned references; source-specific 3D/media dependencies are not bundled. New study art and scene geometry are original. The workspace's `VIDEO-STYLE-NOTICES.txt` preserves the repository notices and clarifies third-party asset scope.
24
+
25
+ - [styles/news-package/STYLE.md](https://github.com/lemomo-ai/lemo-opuscar/blob/77ee8318df779b0736d7de0abe24387e51023735/styles/news-package/STYLE.md)
26
+ - [styles/news-package/demo/main.js](https://github.com/lemomo-ai/lemo-opuscar/blob/77ee8318df779b0736d7de0abe24387e51023735/styles/news-package/demo/main.js)
@@ -0,0 +1,34 @@
1
+ ---
2
+ name: animaguru-newsreel
3
+ description: Build 1920s Newsreel visuals and motion in an AnimaGuru PixiJS video workspace. Use when this visual style is chosen for an explainer, advertisement or general video.
4
+ disable-model-invocation: true
5
+ ---
6
+
7
+ # 1920s Newsreel
8
+
9
+ A sound newsreel of the late 1920s cut from real archive material: a searchlight-and-globe ident with a brass fanfare, a newspaper spinning into the lens, a fast announcer and a hot band, all inside one silver-graded projector gate. It is a documentary & broadcast style: real archive film, photographs, print or recordings carry the picture; only the packaging is drawn. Subject, audience, emotional tone and story come from the user's brief. This style supports Explainer, Advertisement and General Video.
10
+
11
+ ## Establish direction
12
+
13
+ Follow sibling `animaguru-video` for purpose → style → compact interview before new production. Reuse explicit choices and completed briefs; honor a requested interview skip. Share [the style gallery](https://animaguru.com/animation-styles#newsreel). Fold missing visual questions into the shared interview:
14
+
15
+ - Which archive film, photographs, print or recordings do you have, or should be found, and what is the one place-and-story arc?
16
+ - What is the ident's fictional name, and which native transitions (iris, wipe, flip) fit the story's turns?
17
+
18
+ ## Use real evidence
19
+
20
+ Ask the user for their own archive film, photographs, print or recordings first; otherwise find licence-clean sources (see the [production recipe](references/recipe.md)). Never generate "archive" pictures: only the ident, cards, maps and end card are drawn, and the footage and print must be real. Keep `production/FACTS.md` (each on-screen or spoken claim, its source URL and quoted wording) and `production/CREDITS.md` (every asset's source, author and licence), and deliver both with the film. CC BY-SA or "no known restrictions" are not a clear licence: name them to the user and ask before using them.
21
+
22
+ ## Build the look and movement
23
+
24
+ Read `pixijs` and the relevant Filters, Mesh, Graphics, Text or Assets skills. Read `animaguru` before generating assets: generation can supply music or narration, never the archive footage itself. Discover current models and estimates, respect the user's budget, and reuse completed media. Essential place cards and subtitles belong in authored canvas content, never baked into the picture.
25
+
26
+ - One silver grade and projected gate (1.37:1, rounded corners, black outside) sits over every real shot; flicker, gate weave and scratches belong to the picture layer only, never to type.
27
+ - The ident, spinning paper, map spread, place cards and end card are the only generated elements; draw them with Graphics and Text, never as a stand-in for archive imagery.
28
+ - Cuts and landings ride a hot-band beat grid; use the style's own fixed transitions (iris, diagonal wipe, flip, venetian blinds, clock wipe) once each, never a cross-dissolve between stories.
29
+
30
+ Use the [production recipe](references/recipe.md) for sources, the bundled original study and port-specific decisions. It is a technique example, not a prescribed film. Keep motions a function of absolute seconds; separate drawing cadence from camera/light cadence when the material calls for it. Prepare assets locally, preserve async seeking and register actual resource/cue times. Keep essential type editable and localized.
31
+
32
+ ## Review and delivery
33
+
34
+ Inspect the gate mask at every corner, grade consistency across clips (one level set per clip, never per frame), place-card reading time, subtitle one-line limits, and every date or claim against `FACTS.md`. Check representative full-resolution frames, moving playback, desktop/mobile fit and cold seeks. Follow `animaguru-video` for production records, audio mixing and HTML5 delivery; export MP4 when requested. Describe the actual 2D/2.5D rendering method accurately. Physically rendered 3D remains deferred.
@@ -0,0 +1,26 @@
1
+ # 1920s Newsreel production recipe
2
+
3
+ The workspace includes an executable original study in `src/studies/scenes.ts`, selected with `newsreel`. Its drawing commands are consumed by `src/studies/pixi-renderer.ts`; geometry and time sampling are shared with the gallery renderer. All copy lives in `shared/locales/en/style-studies.json`.
4
+
5
+ In an untouched starter, run `npm run example -- newsreel`, then `npm run dev`. The command refuses to replace an authored film, retains starter backups in `production/example-backup/`, and writes an 8-second study with its own resource tracks. `npm run export:html` and `npm run export:mp4` use this installed film normally. To use the recipe inside an existing film, import `studyFrame()` and `StudyRenderer`, then compose the selected scene into the project's timeline instead of running the installer.
6
+
7
+ ## Evidence and sources
8
+
9
+ U.S. National Archives (films, often via Internet Archive "FedFlix" copies; federal works are public domain; Universal Newsreel 1929–1967 is in NARA too), Internet Archive (check each item's licence field and provenance; skip YouTube mirrors or "restored/AI enhanced" versions), Wikimedia Commons (PD-US-expired, PD-US-no-notice, PD-USGov, CC0 or CC BY only; not CC BY-SA or "no known restrictions"), Library of Congress, print published in the US before 1931 (newspapers, magazines, books on archive.org/HathiTrust/Commons, public domain), and sound recordings published before 1926 (public domain in the US). Download into the film's `public/` or `production/` folders, log every request, and record each asset in `production/CREDITS.md` and each claim in `production/FACTS.md`.
10
+
11
+ ## Adaptation decisions
12
+
13
+ - Composite the gate as a `Container` clipped to a rounded-rectangle mask; apply the silver grade with a `ColorMatrixFilter` (greyscale, contrast, warm multiply/screen tint) plus a small custom filter or seeded `Graphics` noise for flicker, gate weave and scratches, applied to the picture layer only.
14
+ - Build the ident (searchlights, globe, title lettering) and the spinning-paper headline with `Graphics` and `Text` in OFL faces; animate the paper's slam with a scale/rotation tween that decays into a landing beat, never as "archive" imagery.
15
+ - Keep subtitles, place cards and the end card on an unfiltered type layer above the gate, so type never weaves or flickers with the picture; drive every cut and landing from one beat-grid timing function.
16
+
17
+ The study is silent, original procedural art with illustrative values, labelled as such; it demonstrates material, layout and motion, not evidence. Replace its stand-ins with the real archive film, photographs, print or recordings described above, never with generated imagery. The gallery preview shows only the code-drawn packaging (the ident, the spinning headline, a place card and an iris), with no footage standing in for real archive film. Configure the subject, palette, scene sequence, duration and soundtrack from the brief.
18
+
19
+ Use `src/studies/timing.ts` for deterministic easing, seeded variation, measured stroke truncation and cue helpers. `window.animaguru.texts` exposes visible study text bounds for `npm run review`; text declarations alone do not count as visual proof. Inspect the actual frames as well.
20
+
21
+ ## Sources and attribution
22
+
23
+ Inspired by the following pinned references; source-specific 3D/media dependencies are not bundled. New study art and scene geometry are original. The workspace's `VIDEO-STYLE-NOTICES.txt` preserves the repository notices and clarifies third-party asset scope.
24
+
25
+ - [styles/newsreel/STYLE.md](https://github.com/lemomo-ai/lemo-opuscar/blob/77ee8318df779b0736d7de0abe24387e51023735/styles/newsreel/STYLE.md)
26
+ - [styles/newsreel/demo/index.html](https://github.com/lemomo-ai/lemo-opuscar/blob/77ee8318df779b0736d7de0abe24387e51023735/styles/newsreel/demo/index.html)
@@ -0,0 +1,34 @@
1
+ ---
2
+ name: animaguru-telestrator
3
+ description: Build Sports Telestrator visuals and motion in an AnimaGuru PixiJS video workspace. Use when this visual style is chosen for an explainer, advertisement or general video.
4
+ disable-model-invocation: true
5
+ ---
6
+
7
+ # Sports Telestrator
8
+
9
+ The TV analysis segment: play the clip at full speed, rewind, freeze it, and draw on the broadcast picture — rings under feet, marker arrows for the ball, a flattened pitch board — then play on and switch angles. It is a documentary & broadcast style: real match footage carries the picture; every line is drawn on top of it. Subject, audience, emotional tone and story come from the user's brief. This style supports Explainer, Advertisement and General Video.
10
+
11
+ ## Establish direction
12
+
13
+ Follow sibling `animaguru-video` for purpose → style → compact interview before new production. Reuse explicit choices and completed briefs; honor a requested interview skip. Share [the style gallery](https://animaguru.com/animation-styles#telestrator). Fold missing visual questions into the shared interview:
14
+
15
+ - Which match footage (with rights) and which piece of action gets the full rewind-and-freeze breakdown?
16
+ - Which roles (the team or ball, opponents, the space) should the three colours carry, and which sport?
17
+
18
+ ## Use real evidence
19
+
20
+ Ask the user for their own footage, line-ups, event data or photos first; otherwise find licence-clean sources (see the [production recipe](references/recipe.md)). Real footage only: never invent a number the footage can't support (ball speed, distance run); keep `production/FACTS.md` (every counted number, with how it was measured) and `production/CREDITS.md` (every asset's source, author and licence), delivered with the film.
21
+
22
+ ## Build the look and movement
23
+
24
+ Read `pixijs` and the relevant Mesh, Filters, Graphics or Text skills. Read `animaguru` before generating assets: generation can supply music or narration, never the match footage itself. Discover current models and estimates, respect the user's budget, and reuse completed media. Essential labels, the stopwatch and the data card belong in authored canvas content.
25
+
26
+ - Everything is drawn on the real picture in the picture's own coordinates: rings under feet, arrows along the ball's path, traced pitch lines; nothing floats in an abstract diagram until the deliberate flatten.
27
+ - One freeze, one finding: flash, punch, desaturate, spotlight, then ring → area or link → label, each 0.3–0.6 seconds apart.
28
+ - The perspective flatten fits a homography from marked pitch points and redraws the freeze frame as a mesh moving to board coordinates, reusing the same point set for both views.
29
+
30
+ Use the [production recipe](references/recipe.md) for sources, the bundled original study and port-specific decisions. It is a technique example, not a prescribed film. Keep motions a function of absolute seconds; separate drawing cadence from camera/light cadence when the material calls for it. Prepare assets locally, preserve async seeking and register actual resource/cue times. Keep essential type editable and localized.
31
+
32
+ ## Review and delivery
33
+
34
+ Inspect tracked-point accuracy against full-resolution crops, overlay alignment through the freeze's punch transform, packaging placement over any real logo or URL, and every counted number against `FACTS.md`. Check representative full-resolution frames, moving playback, desktop/mobile fit and cold seeks. Follow `animaguru-video` for production records, audio mixing and HTML5 delivery; export MP4 when requested. Describe the actual 2D/2.5D rendering method accurately. Physically rendered 3D remains deferred.
@@ -0,0 +1,26 @@
1
+ # Sports Telestrator production recipe
2
+
3
+ The workspace includes an executable original study in `src/studies/scenes.ts`, selected with `telestrator`. Its drawing commands are consumed by `src/studies/pixi-renderer.ts`; geometry and time sampling are shared with the gallery renderer. All copy lives in `shared/locales/en/style-studies.json`.
4
+
5
+ In an untouched starter, run `npm run example -- telestrator`, then `npm run dev`. The command refuses to replace an authored film, retains starter backups in `production/example-backup/`, and writes an 8-second study with its own resource tracks. `npm run export:html` and `npm run export:mp4` use this installed film normally. To use the recipe inside an existing film, import `studyFrame()` and `StudyRenderer`, then compose the selected scene into the project's timeline instead of running the installer.
6
+
7
+ ## Evidence and sources
8
+
9
+ Wikimedia Commons (many clips are cut from broadcasters' own YouTube uploads under CC BY; read the licence on each file page; not CC BY-SA or "no known restrictions"), a broadcaster's or club's own verified YouTube channel when its video page states a Creative Commons Attribution licence (save the evidence: channel id, verification, licence field, date checked; never a re-upload or fan mirror), the league's or broadcaster's own match page for facts (scores, minutes, how a goal was scored), and Commons photographs (CC BY/CC0) for player portraits. Download the native resolution, never an "AI-upscaled" stream; record each asset in `production/CREDITS.md` and every counted number and its measurement method in `production/FACTS.md`.
10
+
11
+ ## Adaptation decisions
12
+
13
+ - Track reference points (feet, ball) as hand-authored keyframes in source-pixel coordinates, interpolated the same way across slow motion and freezes; check them against full-resolution crops, never a scaled contact sheet.
14
+ - Use a `PerspectiveMesh`, or a small custom shader doing the equivalent projection, for the flatten into a top-down board; drive both the broadcast overlay and the board positions from the same homography point set.
15
+ - Build the freeze entry (white flash, punch-in, desaturate, spotlight) as one small filter and transform chain applied uniformly to every freeze, so overlays drawn afterward inherit the same transform and never slide off the players.
16
+
17
+ The study is silent, original procedural art with illustrative values, labelled as such; it demonstrates material, layout and motion, not evidence. Replace its stand-ins with the real match footage described above, never with generated imagery. The gallery preview uses an illustrative match with no real footage or team behind it, labelled as such. Configure the subject, palette, scene sequence, duration and soundtrack from the brief.
18
+
19
+ Use `src/studies/timing.ts` for deterministic easing, seeded variation, measured stroke truncation and cue helpers. `window.animaguru.texts` exposes visible study text bounds for `npm run review`; text declarations alone do not count as visual proof. Inspect the actual frames as well.
20
+
21
+ ## Sources and attribution
22
+
23
+ Inspired by the following pinned references; source-specific 3D/media dependencies are not bundled. New study art and scene geometry are original. The workspace's `VIDEO-STYLE-NOTICES.txt` preserves the repository notices and clarifies third-party asset scope.
24
+
25
+ - [styles/telestrator/STYLE.md](https://github.com/lemomo-ai/lemo-opuscar/blob/77ee8318df779b0736d7de0abe24387e51023735/styles/telestrator/STYLE.md)
26
+ - [styles/telestrator/demo/index.html](https://github.com/lemomo-ai/lemo-opuscar/blob/77ee8318df779b0736d7de0abe24387e51023735/styles/telestrator/demo/index.html)
@@ -0,0 +1,34 @@
1
+ ---
2
+ name: animaguru-visual-investigation
3
+ description: Build Visual Investigation visuals and motion in an AnimaGuru PixiJS video workspace. Use when this visual style is chosen for an explainer, advertisement or general video.
4
+ disable-model-invocation: true
5
+ ---
6
+
7
+ # Visual Investigation
8
+
9
+ A cold investigation desk: footage, photographs, documents, sound and maps from one real event laid on one shared clock so they check each other; frozen frames are circled and magnified, quotes are highlighted on the page, and every piece of evidence is pulled into one map at the end. It is a documentary & broadcast style: real footage, documents, photographs and sound carry the film. Subject, audience, emotional tone and story come from the user's brief. This style supports Explainer, Advertisement and General Video.
10
+
11
+ ## Establish direction
12
+
13
+ Follow sibling `animaguru-video` for purpose → style → compact interview before new production. Reuse explicit choices and completed briefs; honor a requested interview skip. Share [the style gallery](https://animaguru.com/animation-styles#visual-investigation). Fold missing visual questions into the shared interview:
14
+
15
+ - Which event's footage, documents, photographs, sound and maps do you have, and what is the one sync point every source should converge on?
16
+ - Which time scales should the clock pass through (hours → minutes → seconds → days)?
17
+
18
+ ## Use real evidence
19
+
20
+ Ask the user for their own footage, documents, photographs, recordings or data first; otherwise find licence-clean sources (see the [production recipe](references/recipe.md)). Mark every inference `≈ / inferred / unlocated / schematic` on screen and in `production/FACTS.md`; never fake a multi-camera event from a single source. Keep `production/CREDITS.md` (every asset's source, author and licence), delivered with the film. CC BY-SA, "no known restrictions" or unclear origin are not usable without the user's explicit agreement.
21
+
22
+ ## Build the look and movement
23
+
24
+ Read `pixijs` and the relevant Graphics, Mesh, Text or Filters skills. Read `animaguru` before generating assets: generation can supply music or narration, never the evidence itself. Discover current models and estimates, respect the user's budget, and reuse completed media. Essential readouts, tags and findings belong in authored canvas content.
25
+
26
+ - Cut points are sync points: pick one instant every source can recognise (an impact, a flash, a public clock) and align each source to it; a source that starts late simply appears late.
27
+ - One clock lives inside the layout itself (a card timestamp, a chart playhead, a `T+` stopwatch), never a separate reserved timeline band by default.
28
+ - Red is the only colour and it only ever points (circles, links, the playhead, the verdict); everything else is grey panels on a near-black ground, and each section says one finding.
29
+
30
+ Use the [production recipe](references/recipe.md) for sources, the bundled original study and port-specific decisions. It is a technique example, not a prescribed film. Keep motions a function of absolute seconds; separate drawing cadence from camera/light cadence when the material calls for it. Prepare assets locally, preserve async seeking and register actual resource/cue times. Keep essential type editable and localized.
31
+
32
+ ## Review and delivery
33
+
34
+ Inspect sync-point alignment across sources, inference labelling, source-tag presence on every panel, reading time on verdict boards, and every claim against `FACTS.md`. Check representative full-resolution frames, moving playback, desktop/mobile fit and cold seeks. Follow `animaguru-video` for production records, audio mixing and HTML5 delivery; export MP4 when requested. Describe the actual 2D/2.5D rendering method accurately. Physically rendered 3D remains deferred.
@@ -0,0 +1,26 @@
1
+ # Visual Investigation production recipe
2
+
3
+ The workspace includes an executable original study in `src/studies/scenes.ts`, selected with `visual-investigation`. Its drawing commands are consumed by `src/studies/pixi-renderer.ts`; geometry and time sampling are shared with the gallery renderer. All copy lives in `shared/locales/en/style-studies.json`.
4
+
5
+ In an untouched starter, run `npm run example -- visual-investigation`, then `npm run dev`. The command refuses to replace an authored film, retains starter backups in `production/example-backup/`, and writes an 8-second study with its own resource tracks. `npm run export:html` and `npm run export:mp4` use this installed film normally. To use the recipe inside an existing film, import `studyFrame()` and `StudyRenderer`, then compose the selected scene into the project's timeline instead of running the installer.
6
+
7
+ ## Evidence and sources
8
+
9
+ Internet Archive (NARA-donated Universal Newsreels 1929–1967 are public domain; other newsreel companies are not, even when tagged PD by an uploader), Wikimedia Commons (U.S. federal work — Navy, NASA, NARA, NOAA, USGS — is public domain; treat "not renewed" agency-photo claims, e.g. AP/INS/Wide World, as uncertain and skip), NASA (public domain except marked third-party items), Library of Congress and national archives (read each rights statement; "no known restrictions" is not a licence), USGS The National Map (historical topographic maps, public domain). Download into the film's `public/` or `production/` folders, log every request, and record each asset in `production/CREDITS.md` and each claim, with inferences kept separate, in `production/FACTS.md`.
10
+
11
+ ## Adaptation decisions
12
+
13
+ - Build the sync grid and the evidence-map links as `Graphics` paths drawn progressively (stroke-by-length) from one shared `playhead()` keyframe list, reused by the audio mix so clockwork ticks and picture stay locked together.
14
+ - For the freeze-circle-magnify move, freeze a video texture's current frame, then render a cropped, scaled copy of the same texture inside a circular mask for the loupe, so the magnified detail is genuinely the same pixels.
15
+ - Keep the map and plan panels as `Graphics` line drawings (or a `Mesh` for an oblique plan) with one projection function mapping real survey coordinates to screen space, reused by every panel that cites a position.
16
+
17
+ The study is silent, original procedural art with illustrative values, labelled as such; it demonstrates material, layout and motion, not evidence. Replace its stand-ins with the real footage, documents, photographs and sound described above, never with generated imagery. The gallery preview uses illustrative evidence panels with no real case behind them, labelled as such. Configure the subject, palette, scene sequence, duration and soundtrack from the brief.
18
+
19
+ Use `src/studies/timing.ts` for deterministic easing, seeded variation, measured stroke truncation and cue helpers. `window.animaguru.texts` exposes visible study text bounds for `npm run review`; text declarations alone do not count as visual proof. Inspect the actual frames as well.
20
+
21
+ ## Sources and attribution
22
+
23
+ Inspired by the following pinned references; source-specific 3D/media dependencies are not bundled. New study art and scene geometry are original. The workspace's `VIDEO-STYLE-NOTICES.txt` preserves the repository notices and clarifies third-party asset scope.
24
+
25
+ - [styles/visual-investigation/STYLE.md](https://github.com/lemomo-ai/lemo-opuscar/blob/77ee8318df779b0736d7de0abe24387e51023735/styles/visual-investigation/STYLE.md)
26
+ - [styles/visual-investigation/demo/index.html](https://github.com/lemomo-ai/lemo-opuscar/blob/77ee8318df779b0736d7de0abe24387e51023735/styles/visual-investigation/demo/index.html)
@@ -102,7 +102,7 @@ The installed style skills cover visual treatment and motion technique across su
102
102
 
103
103
  ## Original studies and production review
104
104
 
105
- Browse `animaguru.templates.json` for all 40 styles and purpose workflows. The 29 expanded, evidence and Machine Anatomy styles include a runnable original study; use `npm run example -- blueprint-drafting` in an untouched starter. Evidence-style studies use illustrative values, labelled as such; a production film replaces them with real data, imagery or scans. The command backs up the starter, refuses to replace an authored film, and connects the study to the normal player, timeline and HTML5/MP4 exporters. To compose studies in an existing film, import their scene and renderer instead.
105
+ Browse `animaguru.templates.json` for all 48 styles and purpose workflows. The 37 expanded, evidence, Machine Anatomy and documentary & broadcast styles include a runnable original study; use `npm run example -- blueprint-drafting` in an untouched starter. Evidence- and documentary-style studies use illustrative values, labelled as such; a production film replaces them with real data, imagery, footage or scans. The command backs up the starter, refuses to replace an authored film, and connects the study to the normal player, timeline and HTML5/MP4 exporters. To compose studies in an existing film, import their scene and renderer instead.
106
106
 
107
107
  `npm run review` starts a local browser review session. Open the printed URL; it saves representative JPEG frames, actual text bounds, reading-hold notes and repeated-seek comparisons in `production/review/`. The numerical report complements frame inspection and full-speed listening. Optional media trim/time mapping and cue helpers are in `src/studies/`. All procedural example art is original; source inspirations and MIT notices are recorded in `VIDEO-STYLE-NOTICES.txt`.
108
108
 
@@ -236,6 +236,70 @@
236
236
  "Illustrative objects",
237
237
  "The loupe turns it positive"
238
238
  ]
239
+ },
240
+ "caption-news": {
241
+ "name": "Caption News",
242
+ "lines": [
243
+ "Slam the caption, trust the source.",
244
+ "Illustrative footage",
245
+ "Keyword · number · document"
246
+ ]
247
+ },
248
+ "newsreel": {
249
+ "name": "1920s Newsreel",
250
+ "lines": [
251
+ "Searchlights, a globe, a headline.",
252
+ "Packaging only",
253
+ "Ident · spin · iris"
254
+ ]
255
+ },
256
+ "countdown": {
257
+ "name": "Live Countdown Split-screen",
258
+ "lines": [
259
+ "More cells, closer to zero.",
260
+ "Illustrative feeds",
261
+ "Merge · flip · T plus"
262
+ ]
263
+ },
264
+ "city-symphony": {
265
+ "name": "Time-lapse Symphony",
266
+ "lines": [
267
+ "Traffic becomes a river of light.",
268
+ "Procedural city",
269
+ "Beat · grid · hard stop"
270
+ ]
271
+ },
272
+ "visual-investigation": {
273
+ "name": "Visual Investigation",
274
+ "lines": [
275
+ "Sources meet at one second.",
276
+ "Illustrative panels",
277
+ "Sync · circle · converge"
278
+ ]
279
+ },
280
+ "kino-montage": {
281
+ "name": "Constructivist Montage",
282
+ "lines": [
283
+ "Red, ink, paper, one beat.",
284
+ "Illustrative silhouettes",
285
+ "Grid · stack · count"
286
+ ]
287
+ },
288
+ "telestrator": {
289
+ "name": "Sports Telestrator",
290
+ "lines": [
291
+ "Freeze it, draw on it, flatten it.",
292
+ "Illustrative match",
293
+ "Ring · arrow · board"
294
+ ]
295
+ },
296
+ "news-package": {
297
+ "name": "Broadcast News Package",
298
+ "lines": [
299
+ "The sting becomes the bug.",
300
+ "Procedural graphics",
301
+ "Rundown · tick · flip"
302
+ ]
239
303
  }
240
304
  }
241
305
  }
@@ -567,6 +567,214 @@ const scenes: Record<StudyId, (d: Drawing, t: number) => void> = {
567
567
  if (t > 4.6) d.line([[700, 306], [850, 306]], "#ff5a1f", 2, progress(t, 4.6, .5));
568
568
  d.text(d.lines[2], 680, 410, 17, "#15171a").opacity = progress(t, 3, .5);
569
569
  },
570
+ "caption-news": (d, t) => {
571
+ d.background("#141210");
572
+ // A ledger card behind a rolling hook number; a chunk-slammed keyword block; a document highlighted last.
573
+ d.rect(0, 70, 960, 300, gradient("#232019", "#141210"));
574
+ for (let i = 0; i < 5; i++) d.line([[40, 110 + i * 54], [920, 110 + i * 54]], "#ffffff", 1, .06);
575
+ const hook = progress(t, .15, .5);
576
+ d.text(Math.round(1300000 * ease(hook)).toLocaleString(), 90, 230, 52, "#ffc21a", "left", "mono").opacity = hook;
577
+ d.text("colonies lost this year", 90, 270, 20, "#c9c7bd");
578
+ const chunk = progress(t, 2.6, .25), slam = spring(t - 2.6, 1.3, 1, 16);
579
+ if (chunk > 0) {
580
+ d.rect(80, 340, 220 * Math.min(1, slam), 56, "#ffc21a", 4, chunk);
581
+ d.text("{+6%}", 94, 378, 32, "#0e0e0c").opacity = chunk;
582
+ }
583
+ d.text(d.lines[2], 80, 432, 22, "#f7f5ef").opacity = progress(t, 3, .4);
584
+ if (t > 5) {
585
+ d.rect(560, 150, 340, 230, "#efe9da");
586
+ d.text("USDA NASS · 2026", 580, 185, 14, "#5b574a", "left", "mono");
587
+ d.rect(580, 206, 260 * progress(t, 5.3, .6), 20, "#ffd54a", 0, .6);
588
+ d.text("6% more managed colonies", 580, 236, 14, "#2a2a26");
589
+ }
590
+ d.title("#f7f5ef");
591
+ d.footer("#8d8b83");
592
+ },
593
+ "newsreel": (d, t) => {
594
+ d.background("#050504");
595
+ // A projected gate: the ident ritual, then a spinning headline, then an iris to a place card.
596
+ const gx = 180, gy = 40, gw = 600, gh = 460;
597
+ d.rect(gx, gy, gw, gh, "#201d16");
598
+ if (t < 2.4) {
599
+ const globe = spring(t - .3, 0, 1, 5);
600
+ d.poly([[gx + gw / 2, gy + gh], [gx + gw / 2 - 260, gy + 40], [gx + gw / 2, gy + 40]], "#efe7d6").opacity = progress(t, .05, .3) * .18;
601
+ d.poly([[gx + gw / 2, gy + gh], [gx + gw / 2 + 260, gy + 40], [gx + gw / 2, gy + 40]], "#efe7d6").opacity = progress(t, .05, .3) * .18;
602
+ d.ellipse(gx + gw / 2, gy + gh * .55, 90 * globe, 90 * globe, "#d9d4ca").opacity = progress(t, .3, .4);
603
+ ring(d, gx + gw / 2, gy + gh * .55, 90 * globe, "#9e978a", 2);
604
+ d.text("THE WORLD IN REVIEW", gx + gw / 2, gy + gh * .55 + 6, 24, "#161410", "center").opacity = progress(t, 1, .4);
605
+ } else if (t < 5) {
606
+ const spin = progress(t, 2.4, .6), n = d.rect(gx + gw / 2 - 150, gy + gh / 2 - 100, 300, 200, "#efe7d6", 2, progress(t, 2.4, .2));
607
+ n.transform = { x: gx + gw / 2, y: gy + gh / 2, rotation: (1 - spin) * Math.PI * 4, scaleX: .4 + .6 * ease(spin), scaleY: .4 + .6 * ease(spin) };
608
+ const headline = d.text("HONEY CRISIS?", 0, 10, 28, "#161410", "center");
609
+ headline.transform = n.transform;
610
+ headline.opacity = spin;
611
+ } else {
612
+ const iris = progress(t, 5, .4);
613
+ d.rect(gx, gy, gw, gh * (1 - iris), "#050504");
614
+ d.text("ALMOND VALLEY", gx + gw / 2, gy + gh * .82, 22, "#f3eee4", "center").opacity = progress(t, 5.6, .4);
615
+ d.text("· 2026 ·", gx + gw / 2, gy + gh * .82 + 30, 15, "#d6cfc0", "center").opacity = progress(t, 5.6, .4);
616
+ }
617
+ d.title("#ece7dc");
618
+ d.footer("#9a9488");
619
+ d.text(d.lines[2], gx + gw / 2, gy + gh + 34, 15, "#b7b0a2", "center", "mono").opacity = progress(t, 6.2, .4);
620
+ },
621
+ "countdown": (d, t) => {
622
+ d.background("#06080a");
623
+ // Cells multiply toward zero, then merge into one picture; the clock inverts at T plus.
624
+ const stages: [number, number][] = [[1, .05], [2, 1], [4, 2.2], [9, 3.6]];
625
+ let cells = 1;
626
+ for (const [n, at] of stages) if (t >= at) cells = n;
627
+ const zero = 6, merged = t >= zero, cols = cells <= 1 ? 1 : cells <= 2 ? 2 : 3, rows = Math.ceil(cells / cols);
628
+ if (!merged) {
629
+ const pad = 20, gw = (880 - pad * (cols - 1)) / cols, gh = (380 - pad * (rows - 1)) / rows;
630
+ for (let i = 0; i < cells; i++) {
631
+ const cx = 40 + (i % cols) * (gw + pad), cy = 110 + Math.floor(i / cols) * (gh + pad);
632
+ d.rect(cx, cy, gw, gh, "#0b0e11");
633
+ d.rect(cx, cy, gw, gh * (.4 + .3 * Math.abs(Math.sin(t * 2 + i))), "#14181c");
634
+ d.ellipse(cx + 16, cy + 16, 4, 4, "#ff5b1f", .9);
635
+ d.text(`CAM ${i + 1}`, cx + 28, cy + 20, 12, "#7c878d", "left", "mono");
636
+ }
637
+ } else {
638
+ d.rect(40, 110, 880, 380, "#101418");
639
+ d.text("LIVE", 480, 310, 30, "#f2f5f7", "center");
640
+ }
641
+ const span = merged ? t - zero : Math.max(0, zero - t);
642
+ if (merged) d.rect(330, 24, 300, 60, "#ff5b1f", 6, progress(t, zero, .12));
643
+ d.text(`${merged ? "T+" : "T−"}${String(Math.floor(span)).padStart(2, "0")}.${Math.floor((span % 1) * 10)}`, 480, 66, 44, merged ? "#0a0b0c" : "#ff5b1f", "center", "mono");
644
+ d.title("#f2f5f7");
645
+ d.footer("#7c878d");
646
+ d.text(d.lines[2], 480, 448, 16, "#ff5b1f", "center", "mono").opacity = progress(t, zero + .3, .4);
647
+ },
648
+ "city-symphony": (d, t) => {
649
+ const night = progress(t, 4.6, 1.2);
650
+ d.background(gradient("#bcd4e6", "#e8dcc2"));
651
+ d.rect(0, 0, 960, 540, gradient("#0b1020", "#05070d")).opacity = night;
652
+ // A skyline; traffic becomes streaks of light; a grid of streets multiplies with the score; a hard stop.
653
+ for (let i = 0; i < 9; i++) {
654
+ const h = 60 + hash(i) * 150, x = 60 + i * 96;
655
+ block(d, x, 420 - h, 70, h, 24, hash(i + 9) < .5 ? "#cfd3d6" : "#9aa0a6", "#e6e9ea", "#6c7278");
656
+ d.rect(x, 420 - h, 70, h, "#ffd27a", 0, night * (.15 + .5 * hash(i + 3)));
657
+ }
658
+ const speed = t < 2 ? 1 : t < 4 ? 2.4 : t < 4.6 ? 0 : 3.4;
659
+ if (speed > 0) for (let lane = 0; lane < 3; lane++) {
660
+ const y = 460 + lane * 10, x = ((t * speed * 140 + lane * 220) % 1040) - 60;
661
+ d.rect(x, y, 90, 4, "#ffb347", 2, .8);
662
+ d.rect(x - 40, y, 40, 4, "#ffb347", 2, .25);
663
+ }
664
+ if (t >= 4.6 && t < 7.6) {
665
+ const n = Math.min(16, 4 + Math.floor((t - 4.6) * 12)), cols = Math.ceil(Math.sqrt(n));
666
+ for (let i = 0; i < n; i++) {
667
+ const cx = 620 + (i % cols) * 70, cy = 60 + Math.floor(i / cols) * 70;
668
+ d.rect(cx, cy, 60, 60, hash(i + Math.floor(t * 8)) < .5 ? "#1a2230" : "#2a3a50", 2, .9);
669
+ }
670
+ }
671
+ if (t > 7.6) d.rect(0, 0, 960, 540, "#000000", 0, progress(t, 7.6, .15));
672
+ d.title(night > .5 ? "#ede8df" : "#2b2a26");
673
+ d.footer(night > .5 ? "#b0aaa0" : "#6a6560");
674
+ d.text(d.lines[2], 480, 462, 18, "#d9772f", "center").opacity = progress(t, 1.6, .4) * (1 - progress(t, 7.4, .2));
675
+ },
676
+ "visual-investigation": (d, t) => {
677
+ d.background("#0b0c0e");
678
+ d.title("#eceae4");
679
+ d.footer("#8b9097");
680
+ // Three sources sync to one stopwatch; a frame is frozen, circled and magnified; red links converge on a map.
681
+ const panels: [number, number, number, number][] = [[60, 100, 230, 170], [320, 100, 230, 170], [580, 100, 230, 170]];
682
+ const labels = ["照片 · PHOTO", "FBI 电传 · 1937", "原声 · RADIO"];
683
+ panels.forEach(([x, y, w, h], i) => {
684
+ const on = progress(t, .4 + i * .6, .2);
685
+ if (on <= 0) return;
686
+ d.rect(x, y, w, h, "#141619", 0, on);
687
+ d.rect(x + 1, y + 1, w - 2, (h - 2) * (.3 + .5 * hash(i + Math.floor(t * 3))), "#2e3238", 0, on * .8);
688
+ d.text(labels[i], x + 10, y + h - 14, 13, "#8b9097", "left", "mono").opacity = on;
689
+ });
690
+ d.text(`T+${t.toFixed(1)}s`, 480, 70, 26, "#ff4a2e", "center", "mono").opacity = progress(t, .1, .4);
691
+ if (t > 2.6) {
692
+ ring(d, 205, 185, 40, "#ff4a2e", 3, progress(t, 2.6, .5));
693
+ if (t > 3.3) { d.ellipse(330, 185, 55, 55, "#141619", .95); ring(d, 330, 185, 55, "#ff4a2e", 2); d.ellipse(205, 185, 20, 20, "#2e3238", progress(t, 3.3, .3)); }
694
+ }
695
+ if (t > 5) {
696
+ const k = progress(t, 5, 1);
697
+ d.line([[175, 185], [480, 380]], "#ff4a2e", 2, k);
698
+ d.line([[435, 185], [480, 380]], "#ff4a2e", 2, k);
699
+ d.line([[695, 185], [480, 380]], "#ff4a2e", 2, k);
700
+ d.ellipse(480, 380, 10 * k, 10 * k, "#ff4a2e", k);
701
+ }
702
+ d.text(d.lines[2], 480, 448, 17, "#8b9097", "center").opacity = progress(t, 6.2, .4);
703
+ },
704
+ "kino-montage": (d, t) => {
705
+ const paper = t < 6.5;
706
+ d.background(paper ? "#ede4d0" : "#141210");
707
+ d.title(paper ? "#141210" : "#ede4d0");
708
+ d.footer(paper ? "#141210" : "#ede4d0");
709
+ // A grid lights cell by cell; cut-out figures stack into a tower; a red band wipes to the count.
710
+ const cells = Math.min(9, Math.floor(t * 4));
711
+ for (let i = 0; i < cells; i++) {
712
+ const cx = 560 + (i % 3) * 110, cy = 90 + Math.floor(i / 3) * 110;
713
+ d.rect(cx, cy, 96, 96, i === cells - 1 ? "#d52b1e" : "#141210", 0, .92);
714
+ }
715
+ const floors = Math.min(6, Math.floor(t * 1.1));
716
+ for (let f = 0; f < floors; f++) {
717
+ const fy = 460 - f * 54, side = f % 2 === 0 ? -1 : 1;
718
+ d.rect(140 + side * 6, fy, 160, 44, paper ? "#141210" : "#ede4d0");
719
+ d.poly([[160, fy + 6], [180, fy + 30], [200, fy + 6], [210, fy + 42], [150, fy + 42]], paper ? "#ede4d0" : "#141210");
720
+ }
721
+ const wipe = progress(t, 6.4, .3);
722
+ if (wipe > 0) d.rect(0, 540 - wipe * 540, 960, wipe * 540, "#d52b1e");
723
+ if (floors > 0) d.text(`${floors}`, 820, 500, 56, "#d52b1e", "center", "mono");
724
+ d.text(d.lines[2], 480, 40, 20, "#d52b1e", "center").opacity = progress(t, 6.8, .3);
725
+ },
726
+ "telestrator": (d, t) => {
727
+ d.background("#0c1411");
728
+ d.title("#f4f1e8");
729
+ d.footer("#9fb3aa");
730
+ // Watch the play, freeze it, draw on it, then flatten the picture into a top-down board.
731
+ d.rect(60, 80, 840, 360, gradient("#123324", "#0d2419"));
732
+ for (let i = 1; i < 6; i++) d.line([[60 + i * 140, 80], [60 + i * 140, 440]], "#1f5c3f", 1, .6);
733
+ const live = t < 3;
734
+ if (live) {
735
+ const ballx = 160 + Math.min(t, 2.4) * 260;
736
+ d.ellipse(ballx, 260 + Math.sin(t * 3) * 30, 8, 8, "#f4f1e8", 1);
737
+ d.ellipse(420, 300, 14, 14, "#3fd8ff", 1);
738
+ d.ellipse(560, 230, 14, 14, "#ffd400", 1);
739
+ }
740
+ if (t >= 3 && t < 3.3) d.rect(60, 80, 840, 360, "#ffffff", 0, 1 - (t - 3) / .3);
741
+ if (t >= 3) {
742
+ ring(d, 560, 230, 30, "#ffd400", 3, progress(t, 3, .5));
743
+ d.line([[560, 230], [700, 180]], "#ffd400", 4, progress(t, 3.4, .5));
744
+ if (t > 3.9) { d.rect(590, 150, 220, 34, "#080c0e"); d.text(d.lines[2], 600, 174, 15, "#ffd400").opacity = progress(t, 3.9, .3); }
745
+ }
746
+ const flatten = progress(t, 5.6, 1.2);
747
+ if (flatten > 0) {
748
+ d.rect(60, 80, 840, 360, "#0c1411", 0, flatten * .96);
749
+ d.ellipse(lerp(560, 480, flatten), lerp(230, 260, flatten), lerp(14, 10, flatten), lerp(14, 10, flatten) * .6, "#ffd400", flatten);
750
+ d.ellipse(lerp(420, 620, flatten), lerp(300, 260, flatten), lerp(14, 10, flatten), lerp(14, 10, flatten) * .6, "#3fd8ff", flatten);
751
+ }
752
+ d.text(`❚❚ ${t.toFixed(2)}s`, 90, 60, 15, "#f4f1e8", "left", "mono");
753
+ },
754
+ "news-package": (d, t) => {
755
+ d.background("#121417");
756
+ // A sting slams in and flies to the corner bug; rundown rows flip and tick; a split-flap board changes value.
757
+ const slam = spring(t, 1.3, 1, 10), fly = progress(t, 1.2, .5), px = lerp(480, 860, fly), py = lerp(270, 50, fly), ps = lerp(1, .33, fly) * (t < 1.2 ? slam : 1);
758
+ const plate = d.poly([[-130, -45], [130, -45], [150, 45], [-150, 45]], "#f2cf1d");
759
+ plate.transform = { x: px, y: py, scaleX: ps, scaleY: ps };
760
+ const title = d.text("THE WEEK", 0, 8, 40, "#121417", "center");
761
+ title.transform = plate.transform;
762
+ title.opacity = 1 - fly * .3;
763
+ ["MODELS", "MARKETS", "POLICY"].forEach((label, i) => {
764
+ const at = 1.6 + i * .5, inK = progress(t, at, .3), tick = progress(t, 6.2 + i * .3, .3);
765
+ if (inK <= 0) return;
766
+ d.rect(120, 150 + i * 110, 720, 90, "#1b1e23", 4, inK);
767
+ d.text(label, 150, 205 + i * 110, 28, tick > 0 ? "#f2cf1d" : "#ecece4").opacity = inK;
768
+ if (tick > 0) d.text("✓", 790, 205 + i * 110, 28, "#f2cf1d").opacity = tick;
769
+ });
770
+ if (t > 4.6) {
771
+ d.rect(560, 470, 90, 56, "#22262c", 4);
772
+ d.text(progress(t, 4.6, .6) < 1 ? "142" : "156", 605, 506, 28, "#f2cf1d", "center", "mono");
773
+ }
774
+ d.title("#ecece4");
775
+ d.footer("#8b9097");
776
+ d.text(d.lines[2], 480, 40, 18, "#f2cf1d", "center").opacity = progress(t, 7, .4);
777
+ },
570
778
  };
571
779
  function ninety(t: number) { return 87 + 9 * (1 - progress(t, .2)); }
572
780
  export function studyFrame(id: StudyId, seconds: number): StudyFrame {
@@ -2,7 +2,8 @@
2
2
  "lemo-opuscar": {
3
3
  "url": "https://github.com/lemomo-ai/lemo-opuscar",
4
4
  "commit": "b65efe6ea393fdc71212898ea4c57c754cfefa46",
5
- "evidenceFilmsCommit": "b5e8ef93930b6d828f352055a689320f138237b1"
5
+ "evidenceFilmsCommit": "b5e8ef93930b6d828f352055a689320f138237b1",
6
+ "editDocumentaryCommit": "77ee8318df779b0736d7de0abe24387e51023735"
6
7
  },
7
8
  "awesome-opus5-5-videos": {
8
9
  "url": "https://github.com/yihui-dev/awesome-opus5-5-videos",
@@ -12,5 +13,5 @@
12
13
  "url": "https://github.com/wheresryan22/anatomy",
13
14
  "commit": "1482e8469b0a9e0d8cc18ea2740a01423d29ae80"
14
15
  },
15
- "scope": "Material and motion guidance; original scene study implementations. No source demo assets, data or creator footage bundled. The Machine Anatomy kit file src/kit/anatomy/iso-kit.ts is vendored unchanged from anatomy."
16
+ "scope": "Material and motion guidance; original scene study implementations. No source demo assets, data or creator footage bundled. The Machine Anatomy kit file src/kit/anatomy/iso-kit.ts is vendored unchanged from anatomy. editDocumentaryCommit pins lemo-opuscar's Edit & Documentary category (caption-news, newsreel, countdown, city-symphony, visual-investigation, kino-montage, telestrator, news-package); none of its archive footage, documents or audio are bundled, only guidance."
16
17
  }