wizz-method 2.22.0 → 2.23.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/THIRD-PARTY-NOTICES.md +7 -1
- package/package.json +1 -1
- package/removals.txt +3 -0
- package/skills-registry.yaml +93 -5
- package/src/bmm-skills/1-analysis/research/wizz-market-research/steps/step-06-research-completion.md +27 -0
- package/src/modules/lowticket/README.md +2 -1
- package/src/modules/lowticket/module.yaml +1 -1
- package/src/modules/lowticket/skills/wizz-clone-do-expert/SKILL.md +86 -0
- package/src/modules/lowticket/skills/wizz-clone-do-expert/references/clone-prompt-template.md +21 -0
- package/src/modules/wizz/_shared/video-pipeline.md +2 -0
- package/src/modules/wizz/agents/wizz-copy/customize.toml +1 -1
- package/src/modules/wizz/agents/wizz-copy/knowledge/playbook.md +2 -2
- package/src/modules/wizz/agents/wizz-growth/customize.toml +7 -2
- package/src/modules/wizz/agents/wizz-growth/knowledge/playbook.md +3 -2
- package/src/skills-lib/wizz-ios-build/SKILL.md +61 -0
- package/src/skills-lib/wizz-offer-forge/SKILL.md +2 -2
- package/src/skills-lib/wizz-paywall-upgrade-cro/SKILL.md +1 -0
- package/src/skills-lib/{wizz-pesquisa-de-publico-do-piva → wizz-pesquisa-de-publico}/README.md +13 -13
- package/src/skills-lib/{wizz-pesquisa-de-publico-do-piva → wizz-pesquisa-de-publico}/SKILL.md +11 -7
- package/src/skills-lib/{wizz-pesquisa-de-publico-do-piva → wizz-pesquisa-de-publico}/assets/template.html +8 -21
- package/src/skills-lib/wizz-pesquisa-de-publico/references/interview-mode.md +69 -0
- package/src/skills-lib/wizz-premium-landing-ui-researcher/references/component-sources.md +23 -0
- package/src/skills-lib/wizz-premium-landing-ui-researcher/references/design-sources.yaml +73 -0
- package/src/skills-lib/wizz-router/references/routing-table-flat.md +5 -1
- package/src/skills-lib/wizz-seo-audit/SKILL.md +4 -0
- package/src/skills-lib/wizz-seo-audit/references/gsc-regex-perguntas.md +64 -0
- package/src/skills-lib/wizz-signup-flow-cro/SKILL.md +1 -0
- package/src/skills-lib/wizz-signup-flow-cro/references/trial-abuse.md +40 -0
- package/src/skills-lib/wizz-ui-ux-pro-max/SKILL.md +1 -1
- package/src/skills-lib/wizz-ui-ux-pro-max/references/common-rules-checklist.md +11 -0
- package/src/skills-lib/wizz-video-effects/SKILL.md +3 -1
- package/src/skills-lib/wizz-video-effects/assets/effects.config.template.json +10 -0
- package/src/skills-lib/wizz-video-effects/references/data-contract.md +2 -0
- package/src/skills-lib/wizz-video-effects/references/gates.md +1 -0
- package/src/skills-lib/wizz-video-effects/references/one-take.md +41 -0
- package/src/skills-lib/wizz-video-effects/scripts/check_one_take.py +159 -0
- package/src/skills-lib/wizz-video-effects/scripts/test_one_take.py +126 -0
- package/src/skills-lib/wizz-video-styles/LICENSE-lemo-opuscar.txt +21 -0
- package/src/skills-lib/wizz-video-styles/SKILL.md +12 -7
- package/src/skills-lib/wizz-video-styles/assets/film-styles/dark-keynote.html +78 -0
- package/src/skills-lib/wizz-video-styles/assets/film-styles/remotion/Riso.tsx +63 -0
- package/src/skills-lib/wizz-video-styles/assets/film-styles/risograph.html +69 -0
- package/src/skills-lib/wizz-video-styles/assets/film-styles/swiss-motion.html +84 -0
- package/src/skills-lib/wizz-video-styles/references/check-ins.md +25 -0
- package/src/skills-lib/wizz-video-styles/references/film-styles/DIRECTOR.md +139 -0
- package/src/skills-lib/wizz-video-styles/references/film-styles/archive-lighttable.md +109 -0
- package/src/skills-lib/wizz-video-styles/references/film-styles/art-deco.md +112 -0
- package/src/skills-lib/wizz-video-styles/references/film-styles/ascii-crt.md +115 -0
- package/src/skills-lib/wizz-video-styles/references/film-styles/backrooms.md +125 -0
- package/src/skills-lib/wizz-video-styles/references/film-styles/blueprint.md +120 -0
- package/src/skills-lib/wizz-video-styles/references/film-styles/brick-toy.md +114 -0
- package/src/skills-lib/wizz-video-styles/references/film-styles/briefing-board.md +122 -0
- package/src/skills-lib/wizz-video-styles/references/film-styles/caption-news.md +137 -0
- package/src/skills-lib/wizz-video-styles/references/film-styles/cel-anime-80s.md +119 -0
- package/src/skills-lib/wizz-video-styles/references/film-styles/city-symphony.md +142 -0
- package/src/skills-lib/wizz-video-styles/references/film-styles/countdown.md +132 -0
- package/src/skills-lib/wizz-video-styles/references/film-styles/crayon-book.md +109 -0
- package/src/skills-lib/wizz-video-styles/references/film-styles/dark-keynote.md +117 -0
- package/src/skills-lib/wizz-video-styles/references/film-styles/data-physical.md +119 -0
- package/src/skills-lib/wizz-video-styles/references/film-styles/dataviz.md +123 -0
- package/src/skills-lib/wizz-video-styles/references/film-styles/engraving.md +123 -0
- package/src/skills-lib/wizz-video-styles/references/film-styles/game-show.md +118 -0
- package/src/skills-lib/wizz-video-styles/references/film-styles/glass-product.md +110 -0
- package/src/skills-lib/wizz-video-styles/references/film-styles/halftone-dossier.md +122 -0
- package/src/skills-lib/wizz-video-styles/references/film-styles/hd-2d.md +111 -0
- package/src/skills-lib/wizz-video-styles/references/film-styles/hologram-hud.md +129 -0
- package/src/skills-lib/wizz-video-styles/references/film-styles/impasto.md +124 -0
- package/src/skills-lib/wizz-video-styles/references/film-styles/ink-wash.md +120 -0
- package/src/skills-lib/wizz-video-styles/references/film-styles/iso-infographic.md +117 -0
- package/src/skills-lib/wizz-video-styles/references/film-styles/kino-montage.md +151 -0
- package/src/skills-lib/wizz-video-styles/references/film-styles/lidar-survey.md +118 -0
- package/src/skills-lib/wizz-video-styles/references/film-styles/living-screencast.md +124 -0
- package/src/skills-lib/wizz-video-styles/references/film-styles/lowpoly-island.md +112 -0
- package/src/skills-lib/wizz-video-styles/references/film-styles/microgame.md +122 -0
- package/src/skills-lib/wizz-video-styles/references/film-styles/microscope.md +108 -0
- package/src/skills-lib/wizz-video-styles/references/film-styles/midcentury-toon.md +124 -0
- package/src/skills-lib/wizz-video-styles/references/film-styles/news-package.md +158 -0
- package/src/skills-lib/wizz-video-styles/references/film-styles/newsreel.md +136 -0
- package/src/skills-lib/wizz-video-styles/references/film-styles/one-line.md +114 -0
- package/src/skills-lib/wizz-video-styles/references/film-styles/paper-lantern.md +116 -0
- package/src/skills-lib/wizz-video-styles/references/film-styles/paper-popup.md +119 -0
- package/src/skills-lib/wizz-video-styles/references/film-styles/papercut-red.md +110 -0
- package/src/skills-lib/wizz-video-styles/references/film-styles/pictogram-motion.md +119 -0
- package/src/skills-lib/wizz-video-styles/references/film-styles/pixel-rpg.md +117 -0
- package/src/skills-lib/wizz-video-styles/references/film-styles/risograph.md +125 -0
- package/src/skills-lib/wizz-video-styles/references/film-styles/rubber-hose.md +112 -0
- package/src/skills-lib/wizz-video-styles/references/film-styles/satellite-briefing.md +116 -0
- package/src/skills-lib/wizz-video-styles/references/film-styles/scifi-toon.md +121 -0
- package/src/skills-lib/wizz-video-styles/references/film-styles/shadow-puppet.md +124 -0
- package/src/skills-lib/wizz-video-styles/references/film-styles/silent-film.md +109 -0
- package/src/skills-lib/wizz-video-styles/references/film-styles/silkscreen-poster.md +140 -0
- package/src/skills-lib/wizz-video-styles/references/film-styles/spy-titles.md +116 -0
- package/src/skills-lib/wizz-video-styles/references/film-styles/stained-glass.md +123 -0
- package/src/skills-lib/wizz-video-styles/references/film-styles/swiss-motion.md +115 -0
- package/src/skills-lib/wizz-video-styles/references/film-styles/teardown.md +127 -0
- package/src/skills-lib/wizz-video-styles/references/film-styles/telestrator.md +137 -0
- package/src/skills-lib/wizz-video-styles/references/film-styles/tilt-shift.md +107 -0
- package/src/skills-lib/wizz-video-styles/references/film-styles/ukiyoe.md +112 -0
- package/src/skills-lib/wizz-video-styles/references/film-styles/urban-sketch.md +126 -0
- package/src/skills-lib/wizz-video-styles/references/film-styles/visual-investigation.md +140 -0
- package/src/skills-lib/wizz-video-styles/references/film-styles/watercolor.md +113 -0
- package/src/skills-lib/wizz-video-styles/references/film-styles/white-model.md +115 -0
- package/src/skills-lib/wizz-video-styles/references/film-styles/whiteboard.md +118 -0
- package/src/skills-lib/wizz-video-styles/references/film-styles/woodcut.md +122 -0
- package/src/skills-lib/wizz-video-styles/references/film-styles.md +140 -0
- package/src/skills-lib/wizz-video-styles/references/insert-recipes.md +33 -0
- package/src/skills-lib/wizz-video-styles/scripts/beat_grid.py +38 -6
- package/src/skills-lib/wizz-vsl/SKILL.md +1 -1
- package/src/skills-lib/wizz-vsl/references/assembly-qa.md +1 -1
- package/src/skills-lib/wizz-vsl/references/blocks-and-leads.md +1 -1
- package/src/skills-lib/wizz-vsl/references/diagnosis.md +2 -2
- package/src/skills-lib/wizz-vsl/references/intake.md +5 -5
- package/src/skills-lib/wizz-web-security/SKILL.md +2 -0
- package/tools/installer/guided/labels.js +16 -0
- package/tools/installer/install-text.js +2 -0
- package/tools/installer/modules/cli-config.js +3 -0
- package/tools/installer/ui.js +6 -0
- /package/src/skills-lib/{wizz-pesquisa-de-publico-do-piva → wizz-pesquisa-de-publico}/prompts.md +0 -0
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
<!-- Vendored from lemo-opuscar (https://github.com/lemomo-ai/lemo-opuscar/tree/413a6bd6/styles/hd-2d), MIT, (c) 2026 LemoLab; see ../../LICENSE-lemo-opuscar.txt. Paths under demo/ and core/ name that repo's engine, which is not shipped here: build the look in HyperFrames (../film-styles.md). -->
|
|
2
|
+
|
|
3
|
+
# HD-2D — Style Prompt
|
|
4
|
+
|
|
5
|
+
> Hand-made pixel sprites standing like paper cut-outs inside a lit, fogged, fully 3D diorama, shot from a high three-quarter angle through a tilt-shift lens: a toy world where every lamp throws a real shadow.
|
|
6
|
+
> References (grammar only): *Octopath Traveler* (Square Enix × Acquire, 2018) and its sequel (2023), the games that defined the HD-2D look. Learn the grammar: sprite-in-diorama, high 3/4 camera, tilt-shift focus band, point lights with shadows, heavy bloom and vignette, framed dialogue box. Never use their characters, places, logos, UI ornaments or music, and never name them in the film.
|
|
7
|
+
> Name: "HD-2D" is Square Enix's term (and trademark) for that look. The library borrows it only to describe the style; this style and its demo have no connection to Square Enix and are not endorsed by it. Don't use "HD-2D" as a title or brand in a film.
|
|
8
|
+
|
|
9
|
+
## 1. Essence, and what it is not
|
|
10
|
+
|
|
11
|
+
A **3D miniature set** of boxes and cylinders wrapped in **pixel-art textures**, populated by **flat 2D pixel sprites that receive light and cast shadows**, seen from a **high, far camera** through a **tilt-shift band** so the world reads as a tabletop model. **Light is the subject**: practicals throw sprite shadows across the floor; shafts, fog, dust or rain hang in the air; strong bloom, heavy vignette. On top, a small **RPG UI**: chapter card, framed dialogue box with typewriter text, serif subtitles.
|
|
12
|
+
|
|
13
|
+
The key contrast: characters stay **flat, low-res and stepped** while camera, light, particles and focus move smoothly every frame.
|
|
14
|
+
|
|
15
|
+
Not a voxel game (no cubic characters), not a flat 2D pixel RPG (the set is real 3D with real light), not a tilt-shift photo of a real miniature (textures are pixels, not materials).
|
|
16
|
+
|
|
17
|
+
## 2. Materials & rendering
|
|
18
|
+
|
|
19
|
+
- **Constant texel density**: surfaces drawn per pixel on small canvases, `NearestFilter`, world-space UVs at one density (e.g. 24 px/m); sprites on a similar scale (a character ~30–60 px tall).
|
|
20
|
+
- **Colour from ramps**: 3–6 swatches picked by brightness through a narrow 4×4 Bayer dither. Sprites get a 1 px *selout* outline (neighbour colour darkened toward the ink).
|
|
21
|
+
- **Boxes and cylinders** for buildings, floors, rock; **billboards** (instanced) for foliage, distant props, ridges. Windows are emissive pixel panes; fire is a pixel atlas stepping at ~10 fps; water a shader with quantized ripples and light columns toward the camera.
|
|
22
|
+
- **Light rig per set**: one dim shadow-casting key, a hemisphere fill, **practical point lights** with shadows (lamps, fires, windows, screens), and a **front fill** ~2 m before the hero (a billboard lit from behind stays black). An additive glow sprite on every source gives bloom something to grab.
|
|
23
|
+
- **Post chain, at render time**: supersampled render → physical DOF with tilt-shift in the same signed circle of confusion (above the band = far, below = near; far never bleeds over a sharp foreground) → bloom → vignette/grade → filmic tone map. No film grain.
|
|
24
|
+
|
|
25
|
+
## 3. Colour logic
|
|
26
|
+
|
|
27
|
+
- **Two temperatures**: one large ambient key (cold, or pale, or dusty) against small warm or saturated practicals. The practicals carry the story; the ambient carries the mood.
|
|
28
|
+
- The darkest value is a warm ink, never pure black; the brightest is the light source itself, bloomed.
|
|
29
|
+
- Each set owns one fog colour and one light key, so a cut to a new place reads instantly.
|
|
30
|
+
- The hero wears the one saturated costume colour that no set uses, so the tiny sprite is findable in a wide.
|
|
31
|
+
- UI is one metal (gold, silver, copper) plus one paper white over a dark translucent plate.
|
|
32
|
+
- Examples: night canal town (blue fog, amber windows); autumn market at dusk (violet sky, pink paper lanterns); snowy mine at noon (grey-white daylight, green mineral glow).
|
|
33
|
+
|
|
34
|
+
## 4. Type & subtitles
|
|
35
|
+
|
|
36
|
+
- An inscriptional capital serif (Cinzel, wide tracking) for chapter labels and titles; an old-style serif (Cormorant, Cormorant Garamond italic) for subtitles, dialogue, taglines. All OFL.
|
|
37
|
+
- **Narration subtitles**: italic serif ~46–54 px, centred low on a soft dark gradient band, one line per voice clip, in ~0.35 s before the voice.
|
|
38
|
+
- **On-screen speech gets a dialogue box**, not a subtitle: dark plate, thin metal border, corner ornaments, name plate on its top edge, text **typed over ~90 % of the voice**, blinking caret, soft chime on entry.
|
|
39
|
+
- Chapter cards and a title card belong to the grammar. Hold ≥ max(1.8 s, speech + 0.6 s). Export the `.srt` from the data that drives the overlay.
|
|
40
|
+
|
|
41
|
+
## 5. Motion quality
|
|
42
|
+
|
|
43
|
+
- **Sprites step, everything else glides.** Walk cycles 4 frames at 6–10 fps, idles alternate two frames at ~1–2 Hz, blinks every few seconds, pose changes are instant cuts between drawings. Camera, lights, particles, beams and focus update every output frame (60 fps).
|
|
44
|
+
- **Poses are data**: a parameter object per drawing; a new pose is a new table entry.
|
|
45
|
+
- **Lights breathe**: every flame flickers (a few summed sines, about ±20 %). A light's level is one value that drives the sprite drawing, the point light (intensity ∝ level^~1.3), the glow opacity and its scale together.
|
|
46
|
+
- **Weather is procedural**: slanted rain streaks; lightning as a scripted flash curve (strike, dip, re-strike, decay) lifting sky, fill and exposure together.
|
|
47
|
+
- The world never shakes except for impact; the set never moves, only the camera and what lives in it.
|
|
48
|
+
|
|
49
|
+
## 6. Camera grammar
|
|
50
|
+
|
|
51
|
+
A vocabulary, not a route. Opening and ending come from the topic. Always look **down** on the world (never at eye level); every path is a monotone spline of a few keys, no overshoot; focus is recomputed every frame from camera to the subject.
|
|
52
|
+
|
|
53
|
+
| Move | Expresses | Can serve |
|
|
54
|
+
|---|---|---|
|
|
55
|
+
| Very high, very far, slow push; band on one tiny subject | Preciousness, a whole place as a map | where we are; scale; a landmark |
|
|
56
|
+
| Medium-high 3/4, near-static drift | Two figures on one stage | a conversation; a handover; a choice |
|
|
57
|
+
| Lateral tracking, camera leading slightly, foreground passing blurred | A path through a world | travel; a process with steps; a commute |
|
|
58
|
+
| Dive low and close while a figure kneels or stops | The toy world suddenly personal | exhaustion; care; a secret |
|
|
59
|
+
| Rising pull-back, focus handed from figure to object | The act spreads outward | consequence; a system switching on |
|
|
60
|
+
| Orbit half-way round a building or prop | An object seen from all sides | a workshop; a machine; a monument |
|
|
61
|
+
| Top-down, straight overhead, tilt band as a strip | A board game, a plan | routes; a schedule; a queue |
|
|
62
|
+
| Rack focus between two depths in a locked frame | Attention changing hands | a memory; someone watching; before/after |
|
|
63
|
+
| Return to an earlier framing, changed | The rhyme shows what changed | aftermath; growth; a season later |
|
|
64
|
+
|
|
65
|
+
Framing: characters ~1/12–1/8 of frame height; the sharp band follows the subject's projected height (clamped ~.2–.8 of screen); with no character, use a fixed band height per shot. Transitions: short fades to black or cuts between sets; no wipes, no 3D spins.
|
|
66
|
+
|
|
67
|
+
## 7. Sound palette
|
|
68
|
+
|
|
69
|
+
- **Music**: chamber-fantasy or cinematic colours (harp, celesta, strings, horns, low choir, timpani) or small folk instruments (lute, recorder, hand drum). Either one piece whose own arc matches the story, **cut inside it** at downbeats, or an original score; a downbeat can land on the frame of a visual event.
|
|
70
|
+
- **Silence as a tool**: a hard stop into a reverb tail, a pad alone, or one heartbeat when the light nearly dies; a short breath (< 1 s) when something fails.
|
|
71
|
+
- **Foley follows the diorama's matter**: footsteps per surface (wood, dirt, stone, snow), fire crackle, cloth, a UI chime for dialogue boxes and menus, small bells for things switching on, thunder after each flash, a deep boom with shimmer for a big ignition; ambience beds per set, crossfaded.
|
|
72
|
+
- **Voice**: storybook narrator, slow (speed ~.82–.90); on-screen characters low-passed (~7 kHz) so they sit "in the world". Put invented names in the TTS `asr` field.
|
|
73
|
+
- **Mix**: lines compressed and RMS-matched; per-line auto-duck ~10 dB (down only); −14 LUFS via `core/render/mux.sh`, grain 0.
|
|
74
|
+
|
|
75
|
+
## 8. Native moves
|
|
76
|
+
|
|
77
|
+
A menu: use the ones your story needs.
|
|
78
|
+
|
|
79
|
+
- **Shadows jump when a light is lit.** A practical turns on next to sprites and their shadows swing across the floor. *Fits content like:* a shop opening at dawn; a server rack powering up; a teacher switching on a projector.
|
|
80
|
+
- **The carried light as a meter.** One small light a character carries is key light and gauge at once: its brightness rises and falls with whatever the story is measuring. *Fits content like:* a phone battery on a long trip; a patient's heart monitor; a candle vigil.
|
|
81
|
+
- **Tilt-shift preciousness.** An extra-wide with the band on one tiny subject. *Fits content like:* a single delivery van in a city; a newborn's room in a whole hospital; one stall in a night market.
|
|
82
|
+
- **Lights popping on one by one.** Windows, lamps or boats light up at a steady cadence across the map. *Fits content like:* users joining a network; a village getting electricity; a festival beginning.
|
|
83
|
+
- **RPG grammar.** Chapter card, named character in a dialogue box, biomes, a landmark, a title card. *Fits content like:* onboarding a new employee; a history in eras; a recipe in stages.
|
|
84
|
+
- **Weather passes over the diorama.** Rain, snow or lightning sweeps the tabletop with the flash curve. *Fits content like:* a market crash; a harvest threatened; a hard week at work.
|
|
85
|
+
|
|
86
|
+
## 9. Pitfalls of the medium
|
|
87
|
+
|
|
88
|
+
- **Checkerboard everywhere** → the dither band is too wide (≈ .22 on sprites, ≈ .45 on textures).
|
|
89
|
+
- **A light burns out the sprite that holds it** → move the light ~0.45 m toward the camera; cap sprite lighting in the shader (`min(outgoingLight, diffuse * 1.35 + emissive)`).
|
|
90
|
+
- **Lights behind a billboard don't light it** (front normal only) → always the front fill.
|
|
91
|
+
- **Cylinder beams facing the camera give NaN** that bloom spreads into black blocks → billboard beam cards that fade toward the lens, glow sprite takes over.
|
|
92
|
+
- **Dark scenes unreadable** → lift environment mid-tones ~×2–2.5 outside the one beat that must go dark.
|
|
93
|
+
- **Distant glows hidden by fog** → `depthTest = false`, higher `renderOrder`.
|
|
94
|
+
- **Tilt-shift with no character to track** → fixed band height per shot. **Tilt as a separate blur pass** breaks occlusion → fold it into the DOF's signed CoC.
|
|
95
|
+
- **Node render scripts may not exit** after `done` (server keep-alive) → `process.exit(0)`; the file is complete once `done` prints.
|
|
96
|
+
|
|
97
|
+
## 10. Engine
|
|
98
|
+
|
|
99
|
+
In `demo/`: `px.js` (pixel canvas, Bayer ramps, surfaces, lit billboards, glow), `kit.js` (world UVs, materials, houses, props, pixel fire), `fx.js` (sky, pixel sea, particles, rain, beam cards, `flick`), `chars.js` (pose-table pixel characters, `makeChar`), `post_ts.js` (`makePost`: DOF + tilt-shift + bloom + grade), `ui.js` (chapter card, dialogue box, subtitles, title), `main.js` (page contract, `?tilt=1`). Module table, parameters and a minimal new set (a lantern-lit alley): [DEMO.md § Engine reference](https://github.com/lemomo-ai/lemo-opuscar/blob/413a6bd6/styles/hd-2d/DEMO.md#engine-reference).
|
|
100
|
+
|
|
101
|
+
## 11. Variation space
|
|
102
|
+
|
|
103
|
+
You decide the places, the characters, the light the story turns on, the chapters, the opening, the ending, the camera path, the key temperature and the music. All far from our demo:
|
|
104
|
+
|
|
105
|
+
- Structures: **a day-cycle map** (one set, dawn to night, each hour lit by different practicals as the town's routine unfolds); **a party of three** (three short chapters, each character's biome and light, converging in one room); **a menu of places** (a top-down overworld; the camera dives into one location per topic point and pulls back to the map between).
|
|
106
|
+
- Openings: **in the middle of the room** (a dialogue box already typing over a close 3/4 shot); **overhead map** (straight top-down, the band as a strip, then tilt down into the 3/4 view); **daylight** (a bright noon wide with no practicals at all, so the first lamp later is an event).
|
|
107
|
+
- Endings: **a save point** (the hero rests at a small glowing object, the UI shows a save line, fade); **the band narrows** (the sharp strip thins onto one sprite until everything else is blur); **the party leaves frame** (a locked wide holds after the characters walk out; only ambience and flicker remain).
|
|
108
|
+
|
|
109
|
+
---
|
|
110
|
+
|
|
111
|
+
How our demo was made (story, shots, score, end card, build): [DEMO.md](https://github.com/lemomo-ai/lemo-opuscar/blob/413a6bd6/styles/hd-2d/DEMO.md). Read it after your treatment exists.
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
<!-- Vendored from lemo-opuscar (https://github.com/lemomo-ai/lemo-opuscar/tree/413a6bd6/styles/hologram-hud), MIT, (c) 2026 LemoLab; see ../../LICENSE-lemo-opuscar.txt. Paths under demo/ and core/ name that repo's engine, which is not shipped here: build the look in HyperFrames (../film-styles.md). -->
|
|
2
|
+
|
|
3
|
+
# Sci-fi Hologram HUD — Style Prompt
|
|
4
|
+
|
|
5
|
+
> An object is scanned into a glowing wireframe. Target boxes lock onto its parts; each opens in a local exploded view, a leader pulls out, and its number rolls from garbage glyphs into the real value. It may light up, once, into a solid hologram.
|
|
6
|
+
> References (grammar only): the *Iron Man* / *Avengers* HUDs (target boxes, callouts, rolling numbers, layered depth); the *Oblivion* interfaces (one colour, hairlines, space); CAD exploded views. Copy none of their layouts, icons, fonts or colours.
|
|
7
|
+
|
|
8
|
+
A **scene style**: it does a practical job (a spec walkthrough, a teardown, a loop screen) for any object with parts. See §11 for the jobs.
|
|
9
|
+
|
|
10
|
+
## 1. Essence, and what it is not
|
|
11
|
+
|
|
12
|
+
The subject is always a **line wireframe made of light** above a round projector pad on a near-black stage, never a rendered object. Everything reads as *scanned data*: a scan plane grows the model, parts pull apart along their assembly axes, numbers are *computed* on screen.
|
|
13
|
+
|
|
14
|
+
Three depth layers are always present: a **background dot grid** (slow parallax), the **subject** with its pad and floor, and the **foreground HUD** (corner brackets, rulers that parallax faster, status text).
|
|
15
|
+
|
|
16
|
+
Not a type-driven keynote (dark-keynote), not a drafting sheet (blueprint), not a product render (glass-product). The subject stays a wireframe; it may gain translucent faces once, and even then the lines stay on top.
|
|
17
|
+
|
|
18
|
+
## 2. Materials & rendering
|
|
19
|
+
|
|
20
|
+
- **Stage**: near-black tinted by the hue, a radial lift behind the subject, a fading dot grid, a strong vignette.
|
|
21
|
+
- **Projector pad** in true perspective: concentric rings (one bright, one dashed), ticks, faint rays; it rotates slowly and spins with any turntable move.
|
|
22
|
+
- **Wireframe**: additive ~1.3 px strokes in a few alpha levels set by **depth fog** (near bright, far ~25 %), plus two low-res glow passes.
|
|
23
|
+
- **Hot edges** (near-white of the hue) only for what matters now: the scan front, inner pieces flagged `hot` when opened, a light wave, a part being pinged.
|
|
24
|
+
- **Real CAD topology**: tubes are rings plus longitudinal lines. **Every part is physically connected**: a floating piece is noticed first.
|
|
25
|
+
- **Solid hologram**: faces filled with a screen-space **Fresnel** × a scrolling **interlace**; lines thicken as it ignites; a light wave climbs the model. A **beam** (one path, nonzero winding) with faint rays and dust.
|
|
26
|
+
- **HUD furniture**: corner brackets, parallaxing rulers, subject // mode top left, a live status line top right, telemetry at the bottom.
|
|
27
|
+
- **Text never sits on the wireframe**: every text block has its own **dark plate** (translucent near-black, 1 px border, corner ticks); the camera still keeps the subject clear of text.
|
|
28
|
+
|
|
29
|
+
## 3. Colour logic
|
|
30
|
+
|
|
31
|
+
- **One cold hue plus one warm accent**, both parameters (e.g. mint/orange, violet/lime, ice-blue/red; choose from the subject).
|
|
32
|
+
- The hue carries lines, HUD and fills. The **accent is spent on locked values only**: a number turns accent-coloured at the frame it becomes true. Nothing else ever uses it.
|
|
33
|
+
- White is heat: near-white edges and one-frame flashes mark what is active. Everything at rest sits in the hue's alpha levels.
|
|
34
|
+
- One object may keep its own colour (the single-colour exception, `keep`), for a brand mark, never for decoration.
|
|
35
|
+
|
|
36
|
+
## 4. Type & subtitles
|
|
37
|
+
|
|
38
|
+
- Rajdhani, all caps: Light for big numbers and the product name (wide tracking), Medium/SemiBold for labels. Share Tech Mono for micro data (coordinates, counters, zoom).
|
|
39
|
+
- Numbers are **monospaced** so rolls never jitter; the decimal point is a small square (a glowing "." reads as a comma).
|
|
40
|
+
- Subtitles are HUD: a dark plate with corner brackets and "voiceprint" bars moving with the speech, near-white Rajdhani Medium, bottom centre; in just before the voice, hold ≥ max(1.8 s, speech + 0.6 s).
|
|
41
|
+
- The title is part of the scene (no title card): the name rolls in like a value, then code, category and tagline.
|
|
42
|
+
|
|
43
|
+
## 5. Motion quality
|
|
44
|
+
|
|
45
|
+
- **Everything on ones at 24 fps.** Only glyph scrambling steps, every frame.
|
|
46
|
+
- **Target lock**: oversized, rotated 45°, faint; snaps to fit in ~0.2 s (cubic ease-out), flashes white 3 frames on the downbeat.
|
|
47
|
+
- **Explode** along each piece's assembly axis: the shell slides *along its own axis*, the contents stay in place and glow. Open over a beat or two, close fast.
|
|
48
|
+
- **Leader**: anchor ring → diagonal → horizontal to the card in ~0.5 s. **Rolling value**: characters lock right-to-left and turn accent on the downbeat with a one-frame flash.
|
|
49
|
+
- **Chip dock**: a finished value slides into a side rail and stays until the end.
|
|
50
|
+
- **The camera follows the box**: cubic ease, starting *before* the next lock, **real motion blur** only inside the whip (sub-frames, 180° shutter); HUD stays sharp.
|
|
51
|
+
- **No cuts or fades inside the scene**: only the scan plane (scanning in or erasing) and a loupe iris. A **glitch** of three frames at most once, on the biggest change.
|
|
52
|
+
|
|
53
|
+
## 6. Camera grammar
|
|
54
|
+
|
|
55
|
+
An orbit camera (yaw, pitch, distance, narrow fov) with a screen position for the target, so the subject can sit beside text. A vocabulary, not a route. Opening and ending come from the topic.
|
|
56
|
+
|
|
57
|
+
| Move | Expresses | Can serve |
|
|
58
|
+
|---|---|---|
|
|
59
|
+
| High 3/4, slow orbit craning down | Examination; a scan plane reads as an ellipse | a scan-in; a survey |
|
|
60
|
+
| Top-down plan view | Layout, order | a parts inventory; an assembly sequence |
|
|
61
|
+
| Eye-level profile, locked | The object as it stands in use | a height; a before/after |
|
|
62
|
+
| Push-in, then drift, 3/4 | This part matters; internals come towards the lens | the key spec; a flaw |
|
|
63
|
+
| Whip following the target box | Attention jumps to the next part | a list of parts |
|
|
64
|
+
| Orbit around a part's own axis | Axial structure only reads in rotation | rotors, stacks, hinges, lenses |
|
|
65
|
+
| Lateral dolly along a long part | Length, a path | a beam; a cable run |
|
|
66
|
+
| Pull back + loupe (frame in frame) | Where (wide) and what (loupe) | small parts; a sensor |
|
|
67
|
+
| Crane to eye level or back up | Status change: the object stands up or settles | a transformation; scale |
|
|
68
|
+
| Turntable 360° | Every side | a whole object; a symmetry |
|
|
69
|
+
| Nearly static, slow dolly | Reading time without a dead frame | a spec sheet; a checklist |
|
|
70
|
+
|
|
71
|
+
Framing: the subject is ≥ ⅓ of frame height at every key moment. Cards on one side, the chip rail on the other, subtitles bottom centre, a loupe above them: never colliding. Shorten explode vectors rather than fly a piece into text.
|
|
72
|
+
|
|
73
|
+
## 7. Sound palette
|
|
74
|
+
|
|
75
|
+
- **Music first**, on a grid (a bar = one information beat); locks land on downbeats, checked against the score.
|
|
76
|
+
- **Synth palette**: saw/square arpeggio with ping-pong delay (scooped 1–4 kHz for the voice), square pulse, 8th bass, synth hats and claps, detuned saw pads.
|
|
77
|
+
- **Density follows information.** Tools to pick from, in any order (most films need two or three): half-time for reading time; one beat of **true digital silence** (nothing, not even UI blips); a drop (808-style glide + wide saw chord) for the biggest change; a layer added or removed per part; deceleration by longer note values; a key change; a single sustained tone under a long hold.
|
|
78
|
+
- **Foley follows the material**: light = sines and FM blips **in the key**; machines = servo slides, pneumatic puffs, hydraulic hiss, metal tinks (J-cuts); a lock = thump + clack + two-tone beep; rolls tick at frame rate. Ambience: projector hum (40/80/120 Hz) and room tone.
|
|
79
|
+
- **Voice**: calm, confident. Duck music *and* foley with a **held** envelope (no pumping between words); lock transients escape. −14 LUFS.
|
|
80
|
+
|
|
81
|
+
## 8. Native moves
|
|
82
|
+
|
|
83
|
+
Each move serves information, not story. A menu: use the ones your film needs.
|
|
84
|
+
|
|
85
|
+
- **Scan growth = "this is real data."** *Fits content like:* a coffee machine; a satellite; an architectural model.
|
|
86
|
+
- **Target lock = "look here now."** The box is the camera. *Fits content like:* a car's sensors; a laptop's ports; a robot arm's joints.
|
|
87
|
+
- **Local explode = "why the number is true."** *Fits content like:* the burr set of a grinder; the layers of a running shoe sole; the elements of a camera lens.
|
|
88
|
+
- **Rolling digits = the payoff beat.** *Fits content like:* a brew temperature; a tolerance in microns; a price.
|
|
89
|
+
- **Chip accumulation = reading time.** *Fits content like:* 3–5 facts that must all be read.
|
|
90
|
+
- **Loupe = two scales at once.** *Fits content like:* a screw inside a watch; a chip on a board; a valve in an engine.
|
|
91
|
+
- **Solid hologram + beam = "the whole is ready."** Once, if at all. *Fits content like:* a launch reveal; a finished assembly; a v2 replacing v1.
|
|
92
|
+
|
|
93
|
+
## 9. Pitfalls of the medium
|
|
94
|
+
|
|
95
|
+
- Target boxes balloon → rest pose, skip `internal` pieces, long attachments `box:false`.
|
|
96
|
+
- Long diagonal leaders point at the wrong part → ring on the part body, flash the part.
|
|
97
|
+
- Two parallel boxes moving don't read as an explode → shell slides on its axis, contents stay and glow.
|
|
98
|
+
- A part built from generic boxes doesn't read as that part → give it its characteristic silhouette.
|
|
99
|
+
- Voice masked by foley, not music → duck foley too, hold the duck through word gaps.
|
|
100
|
+
- UI blips inside a silence break it → check cues against silence windows.
|
|
101
|
+
- A whip written inside the next segment plays as a hard cut → start it in the previous one.
|
|
102
|
+
|
|
103
|
+
## 10. Engine
|
|
104
|
+
|
|
105
|
+
`demo/engine/holo.js` (wireframe engine: projection, scan, explode, Fresnel faces, glow, pad, scan plane, `normalizeModel`, `modelFromPath` to extrude any 2D path), `demo/engine/hud.js` (theme, plate, target box, leader, rolling text, spec card, chip, marker, beam, subtitle, chrome, glitch), `demo/models/mkmodel.mjs` (primitives: tube, ring, disc, box, wheel, cells…). Models are normalised on load, so cameras work for any object. API, model format and an example: [DEMO.md](https://github.com/lemomo-ai/lemo-opuscar/blob/413a6bd6/styles/hologram-hud/DEMO.md#engine-reference).
|
|
106
|
+
|
|
107
|
+
## 11. Variation space
|
|
108
|
+
|
|
109
|
+
You decide the object, its model, which parts and in what order, the opening, the ending, the camera path, the colours, the pacing and the music. Use cases are **grammar for the order and duration of information**; build your own timeline from the user's facts.
|
|
110
|
+
|
|
111
|
+
| Use case | Information order | Hold per layer | Length |
|
|
112
|
+
|---|---|---|---|
|
|
113
|
+
| **Spec walkthrough** | Name + tagline → one spec per part (label, value, unit, detail) → weight / price → CTA | Title ≥ 5 s; value ≥ 2.5 s, then docked; final sheet ≥ 3 s | 30–40 s, 2–5 parts |
|
|
114
|
+
| **Loop screen** | Name → 3–5 specs → CTA, no voice; last frame = first | 3 s per spec, 5 s final | 20–30 s loop |
|
|
115
|
+
| **Teardown** | Part → what it does → one number; internals only when opened | 4–6 s per part | 40–60 s |
|
|
116
|
+
| **Upgrade** | Part → old value (dim) → new value (accent); old part scan-erased, new one scanned in | 3 s per upgrade | 20–30 s |
|
|
117
|
+
| **Assembly order** | Step number → part name; parts snap home one by one | one bar per part | 20–40 s |
|
|
118
|
+
|
|
119
|
+
All far from our demo:
|
|
120
|
+
|
|
121
|
+
- Structures: **a loop screen** that never names a product and cycles five sensors; **a teardown** one layer deeper per shot until the core is a single hot piece; **an upgrade** where two versions share the pad and every number rolls from old to new.
|
|
122
|
+
- Openings: **a part first** (one component locked in close-up; the rest scans out from it); **a flat outline** (a 2D silhouette extrudes into the wireframe, `modelFromPath`); **plan view** (top-down, the pad as a dial, the object arriving as its footprint).
|
|
123
|
+
- Endings: **one value at eye level** (the wireframe dims around the single number that matters); **knolling** (parts fly into a labelled top-down layout); **power-down** (edges cool, HUD panels switch off until only the pad glows).
|
|
124
|
+
|
|
125
|
+
Swapping `demo/content.json` and rebuilding is a technical check that the engine re-flows, not a way to make a film.
|
|
126
|
+
|
|
127
|
+
---
|
|
128
|
+
|
|
129
|
+
How our demo was made (story, shots, score, end card, build, content fields): [DEMO.md](https://github.com/lemomo-ai/lemo-opuscar/blob/413a6bd6/styles/hologram-hud/DEMO.md). Read it after your treatment exists.
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
<!-- Vendored from lemo-opuscar (https://github.com/lemomo-ai/lemo-opuscar/tree/413a6bd6/styles/impasto), MIT, (c) 2026 LemoLab; see ../../LICENSE-lemo-opuscar.txt. Paths under demo/ and core/ name that repo's engine, which is not shipped here: build the look in HyperFrames (../film-styles.md). -->
|
|
2
|
+
|
|
3
|
+
# Impasto · Palette Knife — Style Prompt
|
|
4
|
+
|
|
5
|
+
> Thick oil paint laid with a palette knife: big, flat, sharp-edged planes of colour, raked by light so every ridge of paint shows. Clarity first: value structure before texture, hard edges at the focus, calm planes everywhere else.
|
|
6
|
+
> References (grammar only): the opening titles of *The Umbrellas of Cherbourg* (1964) (overhead choreography read as moving colour); palette-knife street paintings (Leonid Afremov and the genre around him) (knife mosaic, vertical wet reflections, warm lights against cool shadow); Sorolla / Sargent (few, decisive strokes and strong light); Edgar Wright's music-locked editing (one action, one sound, one cut). Never copy their images, compositions, melodies or characters, and never name them in the film.
|
|
7
|
+
|
|
8
|
+
## 1. Essence, and what it is not
|
|
9
|
+
|
|
10
|
+
A moving oil painting made of knife strokes. Each stroke is a real object: a slanted plane of paint with a ridge where the blade pressed, a lip where it lifted off, broken streaks where the paint ran out, two colours dragged into each other. The world is **repainted from its strokes every frame**, but static paint never moves: only things that move in the story move. Light rakes across a height field, so the paint has body.
|
|
11
|
+
|
|
12
|
+
The look is clear and graphic (readable like a children's book at thumbnail size) but has the tactile surface of impasto at 100 % crop.
|
|
13
|
+
|
|
14
|
+
Not a Van Gogh swirl filter (strokes boiling everywhere), not a brush texture over flat vector art, not watercolour (paint is opaque), not a "painterly" photo filter (strokes are designed, not sampled from noise).
|
|
15
|
+
|
|
16
|
+
## 2. Materials & rendering
|
|
17
|
+
|
|
18
|
+
- **Value first.** Design each set as a flat, value-planned illustration (3 values minimum), then convert it to strokes. If the reference doesn't read at 480 px wide, no brushwork will save it.
|
|
19
|
+
- **Stroke sizes by importance and depth.** Coarse to fine: large planes in sky and walls, a few px only at edges and faces (per shape: `maxR`, `detail`, `dir`).
|
|
20
|
+
- **Strokes never cross shape groups**, so silhouettes stay crisp. Lost edges are opt-in (put two shapes in the same `group`).
|
|
21
|
+
- **Thin underpainting** (the reference itself, blurred ~1.5 px) under the strokes, so the canvas never peeks through as outlines.
|
|
22
|
+
- **Knife stroke**: longer than wide (≈ 1.7–3.1 × radius long, 0.95–1.45 × radius wide), slanted ends, small angle and value jitter (≈ ±13°, ±6 %). Solid objects that must read as silhouettes (figures, props) get little or no ragged run-out.
|
|
23
|
+
- **Light** rakes over a height field; wet or glossy surfaces get slightly more specular.
|
|
24
|
+
- **Reflections** (wet ground, glass, water) are **explicit stacks of short horizontal knife dabs** under each light source, broken and fading; never a painted rectangle.
|
|
25
|
+
- Render supersampled (2×). **No film grain**: grain plus compression eats the knife edges.
|
|
26
|
+
|
|
27
|
+
## 3. Colour logic
|
|
28
|
+
|
|
29
|
+
- Planes of mixed, slightly broken colour; each stroke may drag a second colour (`c2`) into the first. No gradients made by blending pixels: gradients are made by stroke-to-stroke steps.
|
|
30
|
+
- Warm light against cool shadow is the default temperature structure; the brightest, purest chroma is reserved for the story's subject (a prop, a crowd, a light source), not the background.
|
|
31
|
+
- **Colour can be an event.** Every stroke can hold a grey and a colour version; a monochrome world with one coloured exception, or a world re-laid from grey to colour, is native to the medium. The grey version is the luminance of the same strokes, slightly cool, with a small colour residue.
|
|
32
|
+
- Examples of palettes that fit: an after-rain sunset (cobalt → peach → gold sky, ochre facades, full-chroma props); a harvest field (straw yellow, burnt sienna earth, one viridian tractor); a night kitchen (umber shadows, sodium-lamp orange, one cold blue window). Choose from the topic.
|
|
33
|
+
|
|
34
|
+
## 4. Type & subtitles
|
|
35
|
+
|
|
36
|
+
- Titles are **laid in with the knife** (a stroke-by-stroke `appear` sweep of about a second) and can be taken off by the world (washed by rain, scraped, painted over). They move with the world.
|
|
37
|
+
- Small text (credits, data, captions) stays crisp DOM text over the painting: knife strokes can't carry small letters.
|
|
38
|
+
- A serif display face (e.g. Cormorant, OFL). Subtitles, if there is a voice: plain serif, ≤ 2 lines, in a calm plane; hold ≥ max(1.8 s, speech + 0.6 s).
|
|
39
|
+
|
|
40
|
+
## 5. Motion quality
|
|
41
|
+
|
|
42
|
+
- Static paint is static. Only the things the story moves move (weather, figures, props, ribbons, light). Smooth 24 fps, no stepping: clarity is the brief.
|
|
43
|
+
- Moving figures are procedural strokes rebuilt each frame from **fixed seeds**, so their paint doesn't boil (walk cycles, IK arms, props that open and close).
|
|
44
|
+
- Actions sit on the music grid: a change of direction, a pop, a swell lands on a beat.
|
|
45
|
+
- Anticipation → action → follow-through on every gesture (lift before the strike, dip before the snap, swing after the stop).
|
|
46
|
+
|
|
47
|
+
## 6. Camera grammar
|
|
48
|
+
|
|
49
|
+
A vocabulary, not a route. Opening and ending come from the topic.
|
|
50
|
+
|
|
51
|
+
| Move | What it expresses | Can serve |
|
|
52
|
+
|---|---|---|
|
|
53
|
+
| Slow truck + push on a wide | a world observed; patience | a place; a routine; a crowd |
|
|
54
|
+
| Push-in through a silence | inner pressure | a doubt; a decision; giving up |
|
|
55
|
+
| Tilt-up from the ground or a reflection | discovery from below | a small character entering; a first sight |
|
|
56
|
+
| Pull-back from a close-up | reaction; the world answering | consequence; a reveal of who is watching |
|
|
57
|
+
| Rotating crane-out, overhead | pattern emerging from many | choreography; traffic; a gathering |
|
|
58
|
+
| Same wide, repeated | before/after | change of colour, season or time |
|
|
59
|
+
| Locked frame, light moves | time and weather as the actor | a day passing; a storm arriving |
|
|
60
|
+
| Macro slide along the paint surface | the matter itself | a texture; a crafted object; a map |
|
|
61
|
+
| Whip-pan into a new painted plate | energy, a jump | a list; montage; travel |
|
|
62
|
+
|
|
63
|
+
Framing: keep the camera **inside the painted plate** (`half = W/2/zoom`), or the canvas shows. The subject gets the hard edges and the smallest strokes; everything else stays in big calm planes. Transitions: paint-over sweeps and scrapes, hard cuts on beats; no dissolves (two layers of knife ridges turn to mud).
|
|
64
|
+
|
|
65
|
+
## 7. Sound palette
|
|
66
|
+
|
|
67
|
+
- **Foley follows the paint and the world**: palette-knife scrapes on every repaint or paint-over, wet dabs, the materials of the scene (wet stone, nylon, wood, fabric, glass).
|
|
68
|
+
- **Beds** in layers (a hiss, near grains, one distinct detail), filtered when the camera goes under cover.
|
|
69
|
+
- **Acoustic instruments with a hand-made grain**: solo strings, accordion, pizzicato, harp arpeggios, glockenspiel or celesta for pops, piano, guitar, woodwinds; a solo instrument for a lonely world, an ensemble for a shared one.
|
|
70
|
+
- Options: **one action = one sound = one cut** (music-locked edit); pops pitched as a rising arpeggio so a sequence of events climbs; an unresolved phrase that the film resolves later; a hard silence that cuts music and beds to digital zero, containing at most one sound; a J-cut of the next scene's foley into a silence.
|
|
71
|
+
- Mix: music and ambience duck under any voice (~8 dB); −14 LUFS. Music and foley can carry a film without narration.
|
|
72
|
+
|
|
73
|
+
## 8. Native moves
|
|
74
|
+
|
|
75
|
+
A menu: use the ones your story needs.
|
|
76
|
+
|
|
77
|
+
- **Colour re-laid by the knife.** Every stroke keeps a grey and a colour version; a reveal wave re-paints them stroke by stroke (`reveal`, `revC`). *Fits content like:* a town waking up; a patient recovering; a brand relaunch; a season turning.
|
|
78
|
+
- **The one coloured thing.** The world drawn with `grey: 1`, one object with `grey: 0`. *Fits content like:* one person in a crowd; the fruit that ripened; a warning light.
|
|
79
|
+
- **Motion paints the picture.** Moving objects drip their colour as knife dabs; seen from above, their paths leave a painted pattern. *Fits content like:* a dance; delivery routes across a city; a football play; migration.
|
|
80
|
+
- **Raking light.** At the peak, drop the light to a grazing angle so every ridge catches it, then let it settle. *Fits content like:* a sunrise; a moment of recognition; unveiling a sculpture.
|
|
81
|
+
- **Paint-over transition.** The next shot's strokes are laid over the previous one in a sweep (`appear`), with a scrape on the soundtrack. *Fits content like:* a renovation; memory replacing the present; a timeline of versions.
|
|
82
|
+
- **Sound made visible.** A note or a voice becomes a paint ribbon that carries colour to what it touches. *Fits content like:* a song reaching listeners; a radio broadcast; a rumour spreading.
|
|
83
|
+
|
|
84
|
+
## 9. Pitfalls of the medium
|
|
85
|
+
|
|
86
|
+
- Confined strokes shrink near edges and leave canvas-coloured outlines → add the underpainting texture.
|
|
87
|
+
- Draw order in the reference matters: painting the ground after the buildings covers their feet.
|
|
88
|
+
- Plain rectangles read as posts or blocks → give silhouettes taper, a lit edge, and one or two defining dabs (shoulder, hair, handle).
|
|
89
|
+
- Proportions carry the object's identity at this stroke size: a prop drawn too wide reads as a different thing. Check silhouettes at thumbnail size.
|
|
90
|
+
- Film grain or heavy compression destroys the knife edges → no grain, supersample, high bitrate.
|
|
91
|
+
- Strokes that are re-seeded every frame boil → fixed seeds per stroke.
|
|
92
|
+
- Engine-level WebGL traps (reserved words, VAO binding) are listed in DEMO.md build notes.
|
|
93
|
+
|
|
94
|
+
## 10. Engine
|
|
95
|
+
|
|
96
|
+
Files: `demo/engine/impasto.js` (renderer), `demo/engine/plate.js` (reference → strokes).
|
|
97
|
+
|
|
98
|
+
Main calls: `new Impasto(canvas,{W,H,ss})`, `E.begin()` / `E.finish(post)` (raking light + grade), `E.batch()` → `E.draw(batch,o)` for static plates (`cam`, `grey`, `reveal`, `appear`), `E.drawNow()` for moving strokes, `E.under()` for the underpainting, `new Strokes().push({...})` (`KNIFE`, `BRUSH`, `DAB`, `LINE`), `new Ref()` + `paintRef()` (reference illustration → coarse-to-fine strokes confined to shape groups), `strokePath()`. Full parameter table: DEMO.md "Engine reference".
|
|
99
|
+
|
|
100
|
+
Minimal example: a warm-orange four-point sparkle with a short cursor tail, in knife paint.
|
|
101
|
+
```js
|
|
102
|
+
import { Impasto, Strokes, KNIFE, DAB, hex } from './engine/impasto.js';
|
|
103
|
+
const E = new Impasto(canvas), s = new Strokes(), c = hex('#D97757');
|
|
104
|
+
for (let k = 0; k < 4; k++) { // four tapered knife points
|
|
105
|
+
const a = k * Math.PI / 2;
|
|
106
|
+
s.push({ x: 960 + Math.cos(a) * 60, y: 540 + Math.sin(a) * 60, ang: a, len: 120, wid: 46, c, c2: hex('#f0a07a'), type: KNIFE, taper: .95, seed: k });
|
|
107
|
+
}
|
|
108
|
+
s.push({ x: 960, y: 540, len: 40, wid: 40, c: hex('#f6c0a0'), type: DAB, seed: 9 }); // bright core
|
|
109
|
+
s.push({ x: 1060, y: 610, ang: .6, len: 90, wid: 16, c, type: KNIFE, alpha: .8, seed: 10 }); // cursor tail
|
|
110
|
+
E.begin(); E.drawNow(s.data(), { grey: 0, run: 0 }); E.finish();
|
|
111
|
+
```
|
|
112
|
+
"Only one colour" (monochrome with one exception): draw the world with `grey: 1, reveal: 1e6`, draw the exception with `grey: 0`.
|
|
113
|
+
|
|
114
|
+
## 11. Variation space
|
|
115
|
+
|
|
116
|
+
You decide the structure, the cast (or none), the sets, the opening, the ending, the camera path, the pacing, whether there is a voice, and where colour lives. All far from our demo:
|
|
117
|
+
|
|
118
|
+
- Structures: **one object, many hands** (a bowl or a boat passes through the people who make and use it, one painted plate per hand); **a still life comes alive** (a locked table whose objects move in turn, the light crossing it hour by hour); **a portrait in layers** (a face painted coarse to fine as a voice tells one life, each layer a decade).
|
|
119
|
+
- Openings: **the bare canvas** (underpainting only; the first knife stroke is the first event); **macro on a ridge of paint** that pulls back to become a mountain or a roof; **mid-action** (a figure already running across a finished plate).
|
|
120
|
+
- Endings: **scraped back** (the knife takes the painting off to the underpainting, leaving one mark); **the light goes out** (raking light sinks until only the ridges glow, then black); **the frame in a room** (the film was a painting hanging somewhere, seen by someone).
|
|
121
|
+
|
|
122
|
+
---
|
|
123
|
+
|
|
124
|
+
How our demo was made (story, shots, score, end card, build): [DEMO.md](https://github.com/lemomo-ai/lemo-opuscar/blob/413a6bd6/styles/impasto/DEMO.md). Read it after your treatment exists.
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
<!-- Vendored from lemo-opuscar (https://github.com/lemomo-ai/lemo-opuscar/tree/413a6bd6/styles/ink-wash), MIT, (c) 2026 LemoLab; see ../../LICENSE-lemo-opuscar.txt. Paths under demo/ and core/ name that repo's engine, which is not shipped here: build the look in HyperFrames (../film-styles.md). -->
|
|
2
|
+
|
|
3
|
+
# Chinese Ink Wash — Style Prompt
|
|
4
|
+
|
|
5
|
+
> Xieyi ink painting on rice paper, animated: blank paper is space, one brushstroke is a mountain, a wave, a gesture or a cut.
|
|
6
|
+
> References (grammar only): Shanghai Animation Film Studio's *Feelings of Mountains and Water* (1988) (blank-paper space, ink bloom, guqin pacing, figures in a few strokes); the bamboo-forest fight of *Crouching Tiger, Hidden Dragon* (weightlessness, stillness before action). Copy none of their characters, compositions or music.
|
|
7
|
+
|
|
8
|
+
## 1. Essence, and what it is not
|
|
9
|
+
|
|
10
|
+
An ink painting (水墨) painted and unrolled before you: black ink on warm rice paper in five tones, plus **one** red, the vermilion seal. No Western outlines: forms are made by **loaded brushstrokes** whose dark edge *is* the contour (没骨, "boneless" painting), by **wet washes** that bleed into the paper, and by **dry, fast strokes** where the paper shows through the bristle tracks (飞白, "flying white").
|
|
11
|
+
|
|
12
|
+
Most of the frame is **empty paper** (留白): water, sky, mist, silence. Things are *painted into existence*, not cut to.
|
|
13
|
+
|
|
14
|
+
Not watercolour (no colour washes), not vector art with a brush texture (no flat fills or closed outlines), not a calligraphy title sequence.
|
|
15
|
+
|
|
16
|
+
## 2. Materials & rendering
|
|
17
|
+
|
|
18
|
+
- **Paper** is procedural, in the compositor, never a texture file: warm rice paper (around `#F2ECDE`), cloud mottling, long fibres, pulp flecks, grain that fades when zoomed out (or it shimmers), a light vignette; anchored to the world.
|
|
19
|
+
- **Ink** is stroke opacity multiplied onto paper (never an overlay), in five tones (墨分五色):
|
|
20
|
+
|
|
21
|
+
| Tone | Opacity | Use |
|
|
22
|
+
|---|---|---|
|
|
23
|
+
| 焦 jiao (burnt) | ~.96 | calligraphy, the sharpest lines, moss dots |
|
|
24
|
+
| 浓 nong (thick) | ~.82 | contours, dark edge of loaded strokes |
|
|
25
|
+
| 重 zhong (heavy) | ~.60 | secondary lines, folds |
|
|
26
|
+
| 淡 dan (light) | ~.34 | mountain bodies, robe and body washes |
|
|
27
|
+
| 清 qing (clear) | ~.16 | far mountains, faces, mist |
|
|
28
|
+
|
|
29
|
+
- **Brushstroke model**: centreline × pressure profile × width noise, plus 4–60 **bristles** whose ink load drops along the stroke and breaks on long-scale noise. `dry` runs from a solid wet stroke to flying white (dry strokes are bristle tracks only).
|
|
30
|
+
- **Loaded stroke**: bristles darker on one side, so the stroke carries its own contour: this makes bodies, rocks and waves read as ink, not vectors.
|
|
31
|
+
- **Two layers**: the wet one bleeds in the compositor (noisy blur, **edge pigment accumulation**, granulation); the dry one only gets fibre jitter and paper tooth.
|
|
32
|
+
- **Masses**: soft polygons, jittered edges, a gradient; never flat fills.
|
|
33
|
+
- **Landscape**: mountains dissolve downward into mist bands, with 披麻皴 texture and 苔点 moss dots on near ranges only; rocks are outline → axe-cut texture → shadow wash → dots.
|
|
34
|
+
- **Water is blank paper**, moved by faint dry streaks and open ink rings. Solid water: Song-dynasty **parallel wave lines** (dense near the edge) or a pale body with a few huge loaded strokes along its face.
|
|
35
|
+
- **Figures are xieyi**: one pale body mass plus two loaded strokes, burnt-ink lines for limbs; features, if ever shown, in 3–5 strokes.
|
|
36
|
+
- **Calligraphy**: an OFL brush font is only a **skeleton**: trace centrelines in stroke order, pressure from glyph thickness, hidden-tip entry (藏锋), tapered exits.
|
|
37
|
+
|
|
38
|
+
## 3. Colour logic
|
|
39
|
+
|
|
40
|
+
- Ink only, from cool grey at low density to warm black at full density. No other hue in the world.
|
|
41
|
+
- **One vermilion** (around `#B02E22`), for the seal and at most one tiny accent in the story (an object the protagonist carries). The accent finds the protagonist in wide shots and can rhyme with the seal. Never a red wash, never red type.
|
|
42
|
+
- Values carry depth: far = pale and soft, near = dark and textured. If a frame gets busy, remove ink rather than add tone.
|
|
43
|
+
|
|
44
|
+
## 4. Type & subtitles
|
|
45
|
+
|
|
46
|
+
- Subtitles are **inscriptions (题跋)**: a classical italic serif (Cormorant Garamond italic), ink-coloured, no box, ≤ 2 lines, placed in each shot's empty paper. A small vermilion square marks the start of each line. They appear wet and dry in a fraction of a second. Hold ≥ max(1.8 s, speech + 0.6 s).
|
|
47
|
+
- Titles are written on the painting itself, in vertical columns in its empty space, with a vermilion 白文 seal drawn by code (lines knocked out of a slightly irregular red square, with ink-paste speckles). They move with the world.
|
|
48
|
+
- Screen-space overlays reset the camera transform.
|
|
49
|
+
|
|
50
|
+
## 5. Motion quality
|
|
51
|
+
|
|
52
|
+
- **Figures step at 12 fps** (on twos); their position, the camera, blooms, ripples and splatter move on ones at 24 fps.
|
|
53
|
+
- **Stable strokes on twos**: seed every stroke by its index and compute bristle breaks along *normalized* arc length × a fixed reference length, so flying-white gaps don't crawl every drawing. Allow only a small "boil" on the width noise.
|
|
54
|
+
- **Painted into existence**: strokes appear in drawing order.
|
|
55
|
+
- **Stillness before action** (when a decisive stroke is the event): hold, with at most a slow push-in, then let the stroke cross the frame in a few frames. Consequences start only after the stroke has finished.
|
|
56
|
+
- Nothing is tweened like a vector shape: things are painted, bloom or dissolve into mist.
|
|
57
|
+
|
|
58
|
+
## 6. Camera grammar
|
|
59
|
+
|
|
60
|
+
A vocabulary, not a route. Opening and ending come from the topic.
|
|
61
|
+
|
|
62
|
+
| Move | Expresses | Can serve |
|
|
63
|
+
|---|---|---|
|
|
64
|
+
| Locked frame on the paper | The page is the stage; things are painted in | a thing forming; a line being read; a still decision |
|
|
65
|
+
| Right-to-left pan (handscroll) | Time and distance as one painting | a journey; a history; a process |
|
|
66
|
+
| Vertical tilt (hanging scroll) | Height, stages stacked | seasons; a climb; generations |
|
|
67
|
+
| Lateral tracking, lead room, slow far parallax | Motion through a world | travel; a chase; a commute |
|
|
68
|
+
| High wide, a tiny figure in blank paper | Smallness, solitude | loneliness; nature's scale; one life among many |
|
|
69
|
+
| Low angle, dark mass towering, slow push-in with shake | Weight, threat | an obstacle; a storm; pressure |
|
|
70
|
+
| Hard cut to an extreme close-up | A break in the flow (the style's only hard cuts) | a decision; a shock; a memory |
|
|
71
|
+
| Push into an ink bloom or mist | Passing between states | memory; dream; a season turning |
|
|
72
|
+
| Pull back until a mark joins the whole | The part was inside something larger | a summing-up; irony of scale |
|
|
73
|
+
| Return to an earlier framing | The rhyme shows what changed | aftermath; growth; before/after |
|
|
74
|
+
|
|
75
|
+
Framing: 60–80 % empty paper; dark foreground may pass along the frame bottom. Transitions are ink blooms, pans along the scroll or mist; never a generic dissolve or a wipe.
|
|
76
|
+
|
|
77
|
+
## 7. Sound palette
|
|
78
|
+
|
|
79
|
+
- **Guqin-led, not piano and strings**: guqin (`core/audio/pluck.py` `guqin`: open and stopped strings, slides, vibrato, glassy harmonics, sweeps), a low breathy xiao, big drum and timpani for mass, frame drum for steps, a small gong for a seal. Chinese pentatonic modes.
|
|
80
|
+
- **Cue to the picture, never loop**: unmetred plucks suit emptiness, a pulse suits movement, rolls suit mass; painted strokes can each land on a pluck.
|
|
81
|
+
- **Silence is literal**: zero the whole bus (music, ambience, reverb tails) with short fades. At most one sound inside it (a drip, one ring). Place it where the story holds its breath.
|
|
82
|
+
- **Foley follows the material**: ink drop (short "tink" + soft wet thud), brush air (band-passed noise with bristle grains, never a metal whoosh), steps on water (small splash), splatter (wet ticks), seal (wooden thump + paper crackle).
|
|
83
|
+
- **Voice**: calm, few lines, like colophons that don't explain the picture. Duck music ~8 dB and ambience too; verify each line with whisper on the final mix.
|
|
84
|
+
|
|
85
|
+
## 8. Native moves
|
|
86
|
+
|
|
87
|
+
A menu: use the ones your story needs.
|
|
88
|
+
|
|
89
|
+
- **One stroke is everything.** *Fits content like:* a product born from one line; a city growing from a single street; a day beginning with one bird.
|
|
90
|
+
- **Emptiness is matter.** Removing ink reveals paper white. *Fits content like:* a door opening in a wall; a crowd parting; an absence in a family portrait.
|
|
91
|
+
- **Brush = gesture = action.** Stroke order becomes choreography. *Fits content like:* a dancer's phrase that spells a word; a signature; a chef's knife work.
|
|
92
|
+
- **Flying white (飞白).** One fast dry stroke across the frame, strongest out of a silence. *Fits content like:* a sprint finish; a decision; a comet.
|
|
93
|
+
- **Ink bloom transition.** The next scene grows inside a spreading drop with a dark tide-line (noisy radial mask; world-anchored for elements, in the compositor for scenes). *Fits content like:* memories; seasons; one era giving way to the next.
|
|
94
|
+
- **The handscroll.** One long painting panned right to left, seen whole at last. *Fits content like:* a history; a supply chain from field to hand; a day in a street.
|
|
95
|
+
- **Splitting a mass.** Halves clipped either side of the cut; one rises and fades, one slumps; splatter stays. *Fits content like:* breaking a record; a barrier falling; an idea splitting in two.
|
|
96
|
+
|
|
97
|
+
## 9. Pitfalls of the medium
|
|
98
|
+
|
|
99
|
+
- Dry brush looks like dashed lines → breaks from long-scale noise and an ink load that drops along the stroke.
|
|
100
|
+
- Parallel semi-transparent strokes make bodies look like organ pipes → one base mass + two loaded strokes.
|
|
101
|
+
- Big side-brush strokes look like a hairbrush → a gradient mass + a few low-dryness strokes. Gradients in vertical bands leave seams → a cached per-pixel layer.
|
|
102
|
+
- A stroke body split between wet and dry layers loses density → full body in the dry layer plus a wet halo.
|
|
103
|
+
- Clipping calligraphy with the font outline notches the junctions → font as skeleton only.
|
|
104
|
+
- Uniform hatching inside a wave turns it into a wire mesh → loaded strokes along the face.
|
|
105
|
+
|
|
106
|
+
## 10. Engine
|
|
107
|
+
|
|
108
|
+
In `demo/`: `ink.js` (brush engine: strokes, bristles, loaded strokes, masses, blots), `comp.js` (WebGL rice-paper compositor: bleed, edge pigment, paper, bloom), `land.js` (mountains, cun, cliffs, pine, reeds, ripples), `wave.js` (gestural wave), `glyph.js` (skeleton-traced calligraphy), `seal.js` (vermilion seal), `hero.js` (xieyi figure rig), `subs.js` (inscription subtitles), `music/score.py` (guqin writing with `core/audio/pluck.py`); `?test=sheet|pose|frame` pages draw model sheets from the real engine.
|
|
109
|
+
|
|
110
|
+
## 11. Variation space
|
|
111
|
+
|
|
112
|
+
You decide the structure, the characters (or none), the landscape, the opening, the ending, the camera path, the pacing and where the red goes. All far from our demo:
|
|
113
|
+
|
|
114
|
+
- Structures: **one character, stroke by stroke** (no figure; each stroke of one large character opens into a vignette of the topic); **a hanging scroll** (a tilt from sky to ground through four stages, tone deepening); **two brushes in dialogue** (alternating strokes answer each other until they meet in one bloom).
|
|
115
|
+
- Openings: **in motion** (a figure already painted and moving; the world washes in around it); **ink first** (a fully inked frame; ink is lifted where light or a road appears); **the bristles** (a wet stroke fills the frame; only when it lifts do we see what it drew).
|
|
116
|
+
- Endings: **one small mark** (close on a footprint or a leaf while the ink around it dries; no pull-back); **evaporation** (the painting un-paints in reverse stroke order); **mid-gesture** (the brush stops before the last stroke lands).
|
|
117
|
+
|
|
118
|
+
---
|
|
119
|
+
|
|
120
|
+
How our demo was made (story, shots, score, end card, build): [DEMO.md](https://github.com/lemomo-ai/lemo-opuscar/blob/413a6bd6/styles/ink-wash/DEMO.md). Read it after your treatment exists.
|