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,140 @@
|
|
|
1
|
+
# Film styles: 59 looks drawn in code (lemo-opuscar)
|
|
2
|
+
|
|
3
|
+
A second catalogue, next to the measured one. These are **art-directed film styles**, each a full prompt (`STYLE.md`) for a medium drawn entirely in code: ink wash, risograph, Swiss grid, dark keynote, pixel RPG, newsreel and 53 more. They come from [lemo-opuscar](https://github.com/lemomo-ai/lemo-opuscar) (commit `413a6bd6`, MIT, (c) 2026 LemoLab; licence in `../LICENSE-lemo-opuscar.txt`). The cards are copied verbatim into `film-styles/`, one file per style; their demo films stay upstream (CC BY 4.0) and are linked below.
|
|
4
|
+
|
|
5
|
+
**Not measured.** Nothing here passed `scripts/analyze.sh`: these are looks, not reach data. The measured catalogue ([style-picker.md](style-picker.md)) still decides what a Reel should look like when the goal is reach; a film style is for when the piece wants a distinct visual medium (a launch film, a brand story, an explainer that should not look like every other explainer).
|
|
6
|
+
|
|
7
|
+
## How to use one
|
|
8
|
+
|
|
9
|
+
1. Pick a style from the index below by what the piece is for ("Good for") and by the material: most styles need nothing but a voice or a music track, the Evidence Films want real data or imagery.
|
|
10
|
+
2. Read its card in `film-styles/<slug>.md` whole, then [film-styles/DIRECTOR.md](film-styles/DIRECTOR.md) for the directing method (benchmark first, one subject, one turn, hook in 3 s, one native move at the peak).
|
|
11
|
+
3. Run the check-ins of [check-ins.md](check-ins.md): story, look (2 to 4 frames in the card's palette and type), storyboard.
|
|
12
|
+
4. **Build in HyperFrames or Remotion, not with the card's engine.** Section 10 ("Engine") and every `demo/` or `core/` path in a card describe lemo-opuscar's own toolkit, which is not shipped here. Rebuild the look with HTML, CSS, SVG and GSAP (or Canvas/WebGL inside HyperFrames when the card's material really needs a shader). The three examples in `../assets/film-styles/` show how: risograph plates are layers with `mix-blend-mode: multiply` and halftone tints are a dotted CSS mask; the Swiss grid is DOM lines with the card's `cubic-bezier(.7,0,.2,1)`; the dark keynote UI kit is plain divs. The same risograph rebuilt as a Remotion component (frame-driven `interpolate`, steps by `Math.floor`, the kick with `Easing.elastic`) is in `../assets/film-styles/remotion/Riso.tsx`.
|
|
13
|
+
5. **Recompose for 9:16 and the safe zone.** The cards are written for 1920×1080 with edge-to-edge material. In a Reel, keep every textured or typeset element inside the profile's safe zone (`safe_zones.*` in `wizz-video-effects`): the paper or stage colour can bleed, but halftone, grid notes, cards and type cannot. Run `check_safe_zone.py`, `measure_density.py` and `check_dead_frames.py` on the render.
|
|
14
|
+
6. Hand over to `wizz-video-effects` as usual; the card's sound palette (section 7) replaces this skill's audio defaults.
|
|
15
|
+
|
|
16
|
+
## What the test renders taught (2026-10-25)
|
|
17
|
+
|
|
18
|
+
Three styles were rebuilt as 6 s vertical pieces in HyperFrames 0.8.198 (`swiss-motion`, `risograph`, `dark-keynote`), rendered with one worker and gated:
|
|
19
|
+
|
|
20
|
+
- All three render with the current pipeline; no new engine was needed. The card's rules (one signal colour, overprint mixing, misregistration kick, one accent, grid snaps on the beat) translate directly to CSS and GSAP.
|
|
21
|
+
- **The first renders all failed the organic safe zone**: Swiss notes at the top edge, the risograph halftone sky bleeding to the top, keynote cards down to the bottom. After recomposing inside y = 250..1570 all three passed safe zone, density and dead frames. Expect this on every card.
|
|
22
|
+
- HyperFrames lint refuses `random()` in tweens and a CSS `transform` on an element GSAP moves; set initial offsets with `tl.set` at 0 and derive "random" values from the index.
|
|
23
|
+
- **Remotion works too.** The risograph was ported to Remotion 4.0.527 (React 18, 24 fps, one worker): same frames as the HyperFrames render, same blend modes and masks, and it passed safe zone, density and dead frames. The Swiss and keynote pieces use only transforms and opacity and were not ported.
|
|
24
|
+
- A held end card triggers the frozen-picture warning; in the keynote it is the point (the number holds), so read the warning, do not chase it.
|
|
25
|
+
|
|
26
|
+
## Index
|
|
27
|
+
|
|
28
|
+
### Cartoon & Anime
|
|
29
|
+
|
|
30
|
+
| Style | Card | Good for | Demo film |
|
|
31
|
+
|---|---|---|---|
|
|
32
|
+
| 80s Cel Anime | [`cel-anime-80s`](film-styles/cel-anime-80s.md) | Music videos, Game trailers, Nostalgia | [City Lights, 1987](https://github.com/lemomo-ai/lemo-opuscar/tree/413a6bd6/styles/cel-anime-80s) |
|
|
33
|
+
| Mid-century Cartoon | [`midcentury-toon`](film-styles/midcentury-toon.md) | Set-up guides, Help centres, How-to | [Meet Pip](https://github.com/lemomo-ai/lemo-opuscar/tree/413a6bd6/styles/midcentury-toon) |
|
|
34
|
+
| 1930s Rubber Hose Cartoon | [`rubber-hose`](film-styles/rubber-hose.md) | Food & drink, Retro ads, Kids | [Coffee Cup Chase](https://github.com/lemomo-ai/lemo-opuscar/tree/413a6bd6/styles/rubber-hose) |
|
|
35
|
+
| Sci-Fi Sitcom Toon | [`scifi-toon`](film-styles/scifi-toon.md) | Comedy, Tech brands, Social shorts | [Coffee Run](https://github.com/lemomo-ai/lemo-opuscar/tree/413a6bd6/styles/scifi-toon) |
|
|
36
|
+
|
|
37
|
+
### Cinema & Eras
|
|
38
|
+
|
|
39
|
+
| Style | Card | Good for | Demo film |
|
|
40
|
+
|---|---|---|---|
|
|
41
|
+
| Liminal Found Footage | [`backrooms`](film-styles/backrooms.md) | Horror, Mystery & ARG, Game teasers | [Night Shift Orientation](https://github.com/lemomo-ai/lemo-opuscar/tree/413a6bd6/styles/backrooms) |
|
|
42
|
+
| 1920s Silent Film | [`silent-film`](film-styles/silent-film.md) | Comedy, Retro brands, Silent storytelling | [The Runaway Loaf](https://github.com/lemomo-ai/lemo-opuscar/tree/413a6bd6/styles/silent-film) |
|
|
43
|
+
|
|
44
|
+
### East Asian Traditions
|
|
45
|
+
|
|
46
|
+
| Style | Card | Good for | Demo film |
|
|
47
|
+
|---|---|---|---|
|
|
48
|
+
| Paper-cut Lightbox | [`paper-lantern`](film-styles/paper-lantern.md) | Festivals, Gift brands, Cultural stories | [A Mooncake's Longing](https://github.com/lemomo-ai/lemo-opuscar/tree/413a6bd6/styles/paper-lantern) |
|
|
49
|
+
| Red Paper-cut | [`papercut-red`](film-styles/papercut-red.md) | Lunar New Year, Festive greetings, Folk tales | [Nian Comes to Town](https://github.com/lemomo-ai/lemo-opuscar/tree/413a6bd6/styles/papercut-red) |
|
|
50
|
+
| Shadow Puppetry | [`shadow-puppet`](film-styles/shadow-puppet.md) | Myths & folklore, Heritage, Festivals | [Hou Yi Shoots the Suns](https://github.com/lemomo-ai/lemo-opuscar/tree/413a6bd6/styles/shadow-puppet) |
|
|
51
|
+
| Ukiyo-e | [`ukiyoe`](film-styles/ukiyoe.md) | Travel, Japanese culture, Poetry | [Toward the Mountain](https://github.com/lemomo-ai/lemo-opuscar/tree/413a6bd6/styles/ukiyoe) |
|
|
52
|
+
|
|
53
|
+
### Edit & Documentary
|
|
54
|
+
|
|
55
|
+
| Style | Card | Good for | Demo film |
|
|
56
|
+
|---|---|---|---|
|
|
57
|
+
| Caption News | [`caption-news`](film-styles/caption-news.md) | Social news, Report explainers, Data shorts | [The Bee Ledger](https://github.com/lemomo-ai/lemo-opuscar/tree/413a6bd6/styles/caption-news) |
|
|
58
|
+
| Time-lapse Symphony | [`city-symphony`](film-styles/city-symphony.md) | City films, Music montages, Openers | [One Day in New York](https://github.com/lemomo-ai/lemo-opuscar/tree/413a6bd6/styles/city-symphony) |
|
|
59
|
+
| Live Countdown Split-screen | [`countdown`](film-styles/countdown.md) | Launches, Countdowns, Live events | [Counting Itself Down](https://github.com/lemomo-ai/lemo-opuscar/tree/413a6bd6/styles/countdown) |
|
|
60
|
+
| Constructivist Montage | [`kino-montage`](film-styles/kino-montage.md) | Industry histories, Milestones, Collective effort | [410 Days](https://github.com/lemomo-ai/lemo-opuscar/tree/413a6bd6/styles/kino-montage) |
|
|
61
|
+
| Broadcast News Package | [`news-package`](film-styles/news-package.md) | News round-ups, Bulletins, Market updates | [The Week in AI](https://github.com/lemomo-ai/lemo-opuscar/tree/413a6bd6/styles/news-package) |
|
|
62
|
+
| 1920s Newsreel | [`newsreel`](film-styles/newsreel.md) | History stories, Fads & eras, Anniversaries | [Knock-Knee Alert](https://github.com/lemomo-ai/lemo-opuscar/tree/413a6bd6/styles/newsreel) |
|
|
63
|
+
| Sports Telestrator | [`telestrator`](film-styles/telestrator.md) | Sports analysis, Match recaps, Coaching | [Freeze Frame](https://github.com/lemomo-ai/lemo-opuscar/tree/413a6bd6/styles/telestrator) |
|
|
64
|
+
| Visual Investigation | [`visual-investigation`](film-styles/visual-investigation.md) | Reconstructions, Fact-checks, Incident reports | [The Hindenburg: Four Minutes, 32 Seconds](https://github.com/lemomo-ai/lemo-opuscar/tree/413a6bd6/styles/visual-investigation) |
|
|
65
|
+
|
|
66
|
+
### Evidence Films
|
|
67
|
+
|
|
68
|
+
| Style | Card | Good for | Demo film |
|
|
69
|
+
|---|---|---|---|
|
|
70
|
+
| Archive Light Table | [`archive-lighttable`](film-styles/archive-lighttable.md) | Brand history, Archive stories, Museums | [Two Seconds Short](https://github.com/lemomo-ai/lemo-opuscar/tree/413a6bd6/styles/archive-lighttable) |
|
|
71
|
+
| Engineering Briefing Board | [`briefing-board`](film-styles/briefing-board.md) | Engineering, Option comparisons, Briefings | [The Ship Decides](https://github.com/lemomo-ai/lemo-opuscar/tree/413a6bd6/styles/briefing-board) |
|
|
72
|
+
| Data Physicalization | [`data-physical`](film-styles/data-physical.md) | Annual reports, Investor decks, Energy data | [Two Spirals](https://github.com/lemomo-ai/lemo-opuscar/tree/413a6bd6/styles/data-physical) |
|
|
73
|
+
| LiDAR Survey | [`lidar-survey`](film-styles/lidar-survey.md) | Heritage, Environment, Site surveys | [The Fields Under the Forest](https://github.com/lemomo-ai/lemo-opuscar/tree/413a6bd6/styles/lidar-survey) |
|
|
74
|
+
| Microscope Story | [`microscope`](film-styles/microscope.md) | Biomedicine, Materials science, Skincare science | [Measured Blue](https://github.com/lemomo-ai/lemo-opuscar/tree/413a6bd6/styles/microscope) |
|
|
75
|
+
| Satellite Briefing | [`satellite-briefing`](film-styles/satellite-briefing.md) | Climate, News explainers, Geography | [The Map Still Says Sea](https://github.com/lemomo-ai/lemo-opuscar/tree/413a6bd6/styles/satellite-briefing) |
|
|
76
|
+
| Exploded Teardown | [`teardown`](film-styles/teardown.md) | Hardware launches, Product pages, Spec explainers | [21 Keys, Opened](https://github.com/lemomo-ai/lemo-opuscar/tree/413a6bd6/styles/teardown) |
|
|
77
|
+
| Projection on White Model | [`white-model`](film-styles/white-model.md) | Urban planning, Exhibitions, City data | [How a Flattened City Grew Back](https://github.com/lemomo-ai/lemo-opuscar/tree/413a6bd6/styles/white-model) |
|
|
78
|
+
|
|
79
|
+
### Games
|
|
80
|
+
|
|
81
|
+
| Style | Card | Good for | Demo film |
|
|
82
|
+
|---|---|---|---|
|
|
83
|
+
| Game Show Flat | [`game-show`](film-styles/game-show.md) | Tech timelines, Year in review, Variety shows | [Rhythm of AI, 1997 → 2026](https://github.com/lemomo-ai/lemo-opuscar/tree/413a6bd6/styles/game-show) |
|
|
84
|
+
| HD-2D | [`hd-2d`](film-styles/hd-2d.md) | Game trailers, Fantasy, Story films | [The Lampbearer](https://github.com/lemomo-ai/lemo-opuscar/tree/413a6bd6/styles/hd-2d) |
|
|
85
|
+
| Microgame Frenzy | [`microgame`](film-styles/microgame.md) | Game trailers, Onboarding, Social shorts | [Five-Second Astronaut](https://github.com/lemomo-ai/lemo-opuscar/tree/413a6bd6/styles/microgame) |
|
|
86
|
+
| 16-bit Pixel RPG | [`pixel-rpg`](film-styles/pixel-rpg.md) | Game trailers, Recaps, Nostalgia | [The Last Save Point](https://github.com/lemomo-ai/lemo-opuscar/tree/413a6bd6/styles/pixel-rpg) |
|
|
87
|
+
|
|
88
|
+
### Graphic & Type
|
|
89
|
+
|
|
90
|
+
| Style | Card | Good for | Demo film |
|
|
91
|
+
|---|---|---|---|
|
|
92
|
+
| Art Deco | [`art-deco`](film-styles/art-deco.md) | Luxury & hospitality, Galas, Invitations | [Midnight at the Starlight Hotel](https://github.com/lemomo-ai/lemo-opuscar/tree/413a6bd6/styles/art-deco) |
|
|
93
|
+
| ASCII / CRT Terminal | [`ascii-crt`](film-styles/ascii-crt.md) | Developer tools, Sci-fi, Tech brands | [Tranquility.log](https://github.com/lemomo-ai/lemo-opuscar/tree/413a6bd6/styles/ascii-crt) |
|
|
94
|
+
| Blueprint | [`blueprint`](film-styles/blueprint.md) | Engineering, Hardware launches, Tech explainers | [Patent Pending: The Cloud Catcher](https://github.com/lemomo-ai/lemo-opuscar/tree/413a6bd6/styles/blueprint) |
|
|
95
|
+
| Pictogram Motion | [`pictogram-motion`](film-styles/pictogram-motion.md) | Sports events, Visual identity, Event openers | [Aichi-Nagoya 2026 — All 43 Sports](https://github.com/lemomo-ai/lemo-opuscar/tree/413a6bd6/styles/pictogram-motion) |
|
|
96
|
+
| 60s Spy Title Sequence | [`spy-titles`](film-styles/spy-titles.md) | Title sequences, Event openers, Trailers | [The Velvet Cipher](https://github.com/lemomo-ai/lemo-opuscar/tree/413a6bd6/styles/spy-titles) |
|
|
97
|
+
| Stained Glass | [`stained-glass`](film-styles/stained-glass.md) | Legends, Heritage, Holiday stories | [The Dragon of the East Window](https://github.com/lemomo-ai/lemo-opuscar/tree/413a6bd6/styles/stained-glass) |
|
|
98
|
+
| Swiss Motion Graphics | [`swiss-motion`](film-styles/swiss-motion.md) | Brand identity, Events, Design education | [Five Rules for a Poster](https://github.com/lemomo-ai/lemo-opuscar/tree/413a6bd6/styles/swiss-motion) |
|
|
99
|
+
|
|
100
|
+
### Hand-drawn & Painting
|
|
101
|
+
|
|
102
|
+
| Style | Card | Good for | Demo film |
|
|
103
|
+
|---|---|---|---|
|
|
104
|
+
| Crayon Picture Book | [`crayon-book`](film-styles/crayon-book.md) | Picture books, Bedtime stories, Kids' learning | [The Moon Can't Sleep](https://github.com/lemomo-ai/lemo-opuscar/tree/413a6bd6/styles/crayon-book) |
|
|
105
|
+
| Impasto Oil Painting | [`impasto`](film-styles/impasto.md) | Music videos, Art & culture, Emotional ads | [The Colour of Rain](https://github.com/lemomo-ai/lemo-opuscar/tree/413a6bd6/styles/impasto) |
|
|
106
|
+
| Chinese Ink Wash | [`ink-wash`](film-styles/ink-wash.md) | Wuxia, Cultural brands, Poetry | [The Swordsman and the River](https://github.com/lemomo-ai/lemo-opuscar/tree/413a6bd6/styles/ink-wash) |
|
|
107
|
+
| One-line Drawing | [`one-line`](film-styles/one-line.md) | Brand stories, Life milestones, Minimal ads | [The Line That Never Lifted](https://github.com/lemomo-ai/lemo-opuscar/tree/413a6bd6/styles/one-line) |
|
|
108
|
+
| Urban Sketch · Pen & Wash | [`urban-sketch`](film-styles/urban-sketch.md) | City & travel, Architecture, Lifestyle brands | [Where the Wind Went](https://github.com/lemomo-ai/lemo-opuscar/tree/413a6bd6/styles/urban-sketch) |
|
|
109
|
+
| Watercolor Brush | [`watercolor`](film-styles/watercolor.md) | Nature documentary, Travel, Science explainers | [Follow the Rain](https://github.com/lemomo-ai/lemo-opuscar/tree/413a6bd6/styles/watercolor) |
|
|
110
|
+
| Whiteboard Explainer | [`whiteboard`](film-styles/whiteboard.md) | Explainers, Online courses, Science | [Einstein in Your Pocket](https://github.com/lemomo-ai/lemo-opuscar/tree/413a6bd6/styles/whiteboard) |
|
|
111
|
+
|
|
112
|
+
### Information & Keynote
|
|
113
|
+
|
|
114
|
+
| Style | Card | Good for | Demo film |
|
|
115
|
+
|---|---|---|---|
|
|
116
|
+
| Dark Tech Keynote | [`dark-keynote`](film-styles/dark-keynote.md) | Product launches, SaaS, Keynotes | [Room to Think](https://github.com/lemomo-ai/lemo-opuscar/tree/413a6bd6/styles/dark-keynote) |
|
|
117
|
+
| Data Storytelling | [`dataviz`](film-styles/dataviz.md) | Data journalism, Reports, Climate & science | [A Hundred Summers](https://github.com/lemomo-ai/lemo-opuscar/tree/413a6bd6/styles/dataviz) |
|
|
118
|
+
| Sci-fi Hologram HUD | [`hologram-hud`](film-styles/hologram-hud.md) | Spec walkthroughs, Launch videos, Trade shows | [Volt · Spec Scan](https://github.com/lemomo-ai/lemo-opuscar/tree/413a6bd6/styles/hologram-hud) |
|
|
119
|
+
| Isometric Infographic | [`iso-infographic`](film-styles/iso-infographic.md) | Process explainers, Supply chains, Annual reports | [From Bean to Cup](https://github.com/lemomo-ai/lemo-opuscar/tree/413a6bd6/styles/iso-infographic) |
|
|
120
|
+
| Living Screencast | [`living-screencast`](film-styles/living-screencast.md) | Product tutorials, Feature launches, Onboarding | [Clawd Moves In](https://github.com/lemomo-ai/lemo-opuscar/tree/413a6bd6/styles/living-screencast) |
|
|
121
|
+
|
|
122
|
+
### Materials & 3D
|
|
123
|
+
|
|
124
|
+
| Style | Card | Good for | Demo film |
|
|
125
|
+
|---|---|---|---|
|
|
126
|
+
| Brick Toy | [`brick-toy`](film-styles/brick-toy.md) | Toys & kids, Product builds, Space | [Rocket from Spare Parts](https://github.com/lemomo-ai/lemo-opuscar/tree/413a6bd6/styles/brick-toy) |
|
|
127
|
+
| Glass Product Render | [`glass-product`](film-styles/glass-product.md) | Product launches, Consumer tech, Beauty | [Aura — Hear the Light](https://github.com/lemomo-ai/lemo-opuscar/tree/413a6bd6/styles/glass-product) |
|
|
128
|
+
| Low-poly Isometric Island | [`lowpoly-island`](film-styles/lowpoly-island.md) | Game trailers, World building, Calm content | [The Island That Grew](https://github.com/lemomo-ai/lemo-opuscar/tree/413a6bd6/styles/lowpoly-island) |
|
|
129
|
+
| Paper Pop-up Book | [`paper-popup`](film-styles/paper-popup.md) | Children's books, Game trailers, Story films | [Pip's Paper Adventure](https://github.com/lemomo-ai/lemo-opuscar/tree/413a6bd6/styles/paper-popup) |
|
|
130
|
+
| Tilt-Shift Miniature | [`tilt-shift`](film-styles/tilt-shift.md) | City promos, Real estate, Transport | [Toy Town Rush Hour](https://github.com/lemomo-ai/lemo-opuscar/tree/413a6bd6/styles/tilt-shift) |
|
|
131
|
+
|
|
132
|
+
### Print & Printmaking
|
|
133
|
+
|
|
134
|
+
| Style | Card | Good for | Demo film |
|
|
135
|
+
|---|---|---|---|
|
|
136
|
+
| Copperplate Engraving | [`engraving`](film-styles/engraving.md) | Museum labels, Science explainers, Brand heritage | [The Honeybee, Plate VII](https://github.com/lemomo-ai/lemo-opuscar/tree/413a6bd6/styles/engraving) |
|
|
137
|
+
| Halftone Dossier | [`halftone-dossier`](film-styles/halftone-dossier.md) | Humour, Pet content, Social shorts | [Case File: Chubby](https://github.com/lemomo-ai/lemo-opuscar/tree/413a6bd6/styles/halftone-dossier) |
|
|
138
|
+
| Risograph Print | [`risograph`](film-styles/risograph.md) | Indie brands, Zines, Lifestyle | [Sunday Ride](https://github.com/lemomo-ai/lemo-opuscar/tree/413a6bd6/styles/risograph) |
|
|
139
|
+
| Silkscreen Travel Poster | [`silkscreen-poster`](film-styles/silkscreen-poster.md) | Destination guides, Tourism, Event posters | [Three Trails](https://github.com/lemomo-ai/lemo-opuscar/tree/413a6bd6/styles/silkscreen-poster) |
|
|
140
|
+
| Woodcut Print | [`woodcut`](film-styles/woodcut.md) | Folk tales, Craft brands, Book trailers | [The Bell Founder](https://github.com/lemomo-ai/lemo-opuscar/tree/413a6bd6/styles/woodcut) |
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Insert recipes: b-roll treatments that sit inside a style
|
|
2
|
+
|
|
3
|
+
An insert is a short silent clip under the narration, cut into a style that already exists (talking head, motion editorial, explainer). It is not a style: it never carries a whole piece, and it does not enter `data/recipes.json` or the style picker. **Nothing on this page was measured**; the recipes come from open-source projects and are written here so they run without a paid API.
|
|
4
|
+
|
|
5
|
+
## Collage b-roll (paper cutout, halftone)
|
|
6
|
+
|
|
7
|
+
Source: idea from [gbro-collage-broll](https://github.com/pyang5166/gbro-collage-broll) (MIT), which generates the clip with Gemini. Here it is drawn in code (HyperFrames), so no key is needed.
|
|
8
|
+
|
|
9
|
+
**When it fits:** one abstract sentence of the script that has no footage ("money leaks every month", "the algorithm decides") in a talking head or a motion editorial. One or two per piece; more and the piece turns into a collage film.
|
|
10
|
+
|
|
11
|
+
**Output:** 9:16, about 5 s, 24 fps, silent (the narration and the style's music carry the sound).
|
|
12
|
+
|
|
13
|
+
**Look**
|
|
14
|
+
|
|
15
|
+
- One flat, saturated paper background per insert (deep purple, mustard, red, teal), with a faint paper grain.
|
|
16
|
+
- Photo cutouts in black and white halftone, with a rough white cut edge and a small hard shadow; one or two cardstock accents in a second colour (arrow, circle, torn strip).
|
|
17
|
+
- Three to five elements at most, each a literal object of the metaphor.
|
|
18
|
+
|
|
19
|
+
**Motion**
|
|
20
|
+
|
|
21
|
+
- The frame starts **empty** (only the paper). Elements arrive one at a time, slide in from the edge and land in place, in the order the sentence says them.
|
|
22
|
+
- Stop-motion feel: hold each pose for 2 frames (12 fps steps at 24 fps) and give each landing a 1 to 2 degree settle. Never a fade or a slow zoom on a finished collage.
|
|
23
|
+
- The last element lands about 1 s before the end; hold the finished collage.
|
|
24
|
+
|
|
25
|
+
**Three gates (keep them; only the generator changes)**
|
|
26
|
+
|
|
27
|
+
1. **Metaphor:** for each sentence, write the core meaning, the 3 to 5 objects, the background colour and the order of arrival. Show it before drawing anything; only approved sentences move on.
|
|
28
|
+
2. **Still:** render the finished last frame plus a contact sheet. Approve the composition before animating.
|
|
29
|
+
3. **Clip:** animate, then check frames once per second: the first frame is empty paper, the last frame matches the approved still.
|
|
30
|
+
|
|
31
|
+
**Material:** cutouts come from real photos (the project's own, or licensed via `get-brolls`), turned into halftone in code (an SVG/CSS halftone filter or ffmpeg). No generated faces of real people.
|
|
32
|
+
|
|
33
|
+
**Do not:** collage over the whole piece, more than one background colour inside an insert, moving the camera over the collage, or an insert that does not illustrate a specific sentence.
|
|
@@ -1,14 +1,18 @@
|
|
|
1
1
|
"""Beat grid of a song: tempo, beats and downbeats, so scene cuts can snap to the music.
|
|
2
2
|
|
|
3
|
-
Usage: python3 beat_grid.py <audio_file> [--meter 4] [--fps 30] > grid.json
|
|
3
|
+
Usage: python3 beat_grid.py <audio_file> [--meter 4] [--fps 30] [--hits 3] > grid.json
|
|
4
4
|
|
|
5
5
|
Prints JSON: {"bpm", "meter", "duration_s", "beats": [s...], "downbeats": [s...],
|
|
6
|
-
"downbeat_frames": [frame...]
|
|
6
|
+
"downbeat_frames": [frame...], "hits": [{"t", "frame"}...], "drops": [{"t", "frame"}...]}.
|
|
7
|
+
`hits` are the loudest beats (in time order): the payoff lands on the loudest one.
|
|
8
|
+
`drops` are downbeats where the next bar is clearly louder than the previous one. Needs librosa + numpy (same Python as analyze.sh;
|
|
7
9
|
set VIDEO_STYLES_PY and call it with that interpreter).
|
|
8
10
|
|
|
9
11
|
Downbeats are estimated, not detected: of the `meter` possible phases, the one
|
|
10
12
|
whose beats carry the most low-frequency onset energy is taken as beat 1. Check
|
|
11
13
|
two or three of them by ear before cutting a whole film on the grid.
|
|
14
|
+
librosa trims weak beats at the start and end, so a very quiet intro can fall
|
|
15
|
+
outside the grid (and a drop out of it goes unreported).
|
|
12
16
|
"""
|
|
13
17
|
|
|
14
18
|
import argparse
|
|
@@ -20,6 +24,8 @@ import numpy as np
|
|
|
20
24
|
|
|
21
25
|
HOP = 512
|
|
22
26
|
LOW_HZ = 150
|
|
27
|
+
# A downbeat is a drop when the bar after it is this many times louder (RMS) than the bar before.
|
|
28
|
+
DROP_RATIO = 1.6
|
|
23
29
|
|
|
24
30
|
|
|
25
31
|
def downbeat_phase(y_perc, sr, beat_frames, meter):
|
|
@@ -31,7 +37,27 @@ def downbeat_phase(y_perc, sr, beat_frames, meter):
|
|
|
31
37
|
return int(np.argmax(scores))
|
|
32
38
|
|
|
33
39
|
|
|
34
|
-
def
|
|
40
|
+
def loud_hits(rms, beat_frames, count):
|
|
41
|
+
at_beats = rms[np.minimum(beat_frames, len(rms) - 1)]
|
|
42
|
+
loudest = np.argsort(at_beats)[::-1][:count]
|
|
43
|
+
return sorted(int(i) for i in loudest)
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
def drop_indexes(rms, downbeat_frames):
|
|
47
|
+
drops = []
|
|
48
|
+
for i in range(1, len(downbeat_frames) - 1):
|
|
49
|
+
before = rms[downbeat_frames[i - 1]:downbeat_frames[i]].mean()
|
|
50
|
+
after = rms[downbeat_frames[i]:downbeat_frames[i + 1]].mean()
|
|
51
|
+
if before > 0 and after / before >= DROP_RATIO:
|
|
52
|
+
drops.append(i)
|
|
53
|
+
return drops
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
def marks(times, fps):
|
|
57
|
+
return [{"t": round(float(t), 3), "frame": int(round(t * fps))} for t in times]
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
def beat_grid(path, meter, fps, hits=3):
|
|
35
61
|
y, sr = librosa.load(path, sr=22050, mono=True)
|
|
36
62
|
_, y_perc = librosa.effects.hpss(y)
|
|
37
63
|
_, beat_frames = librosa.beat.beat_track(y=y_perc, sr=sr, hop_length=HOP)
|
|
@@ -40,6 +66,9 @@ def beat_grid(path, meter, fps):
|
|
|
40
66
|
beats = librosa.frames_to_time(beat_frames, sr=sr, hop_length=HOP)
|
|
41
67
|
phase = downbeat_phase(y_perc, sr, beat_frames, meter)
|
|
42
68
|
downbeats = beats[phase::meter]
|
|
69
|
+
rms = librosa.feature.rms(y=y, hop_length=HOP)[0]
|
|
70
|
+
hit_times = beats[loud_hits(rms, beat_frames, hits)]
|
|
71
|
+
drop_times = downbeats[drop_indexes(rms, beat_frames[phase::meter])]
|
|
43
72
|
return {
|
|
44
73
|
# librosa's tempo and single beat intervals are quantised to the hop; the slope of a
|
|
45
74
|
# line fitted through every beat time averages that out.
|
|
@@ -49,6 +78,8 @@ def beat_grid(path, meter, fps):
|
|
|
49
78
|
"beats": [round(float(t), 3) for t in beats],
|
|
50
79
|
"downbeats": [round(float(t), 3) for t in downbeats],
|
|
51
80
|
"downbeat_frames": [int(round(t * fps)) for t in downbeats],
|
|
81
|
+
"hits": marks(hit_times, fps),
|
|
82
|
+
"drops": marks(drop_times, fps),
|
|
52
83
|
}
|
|
53
84
|
|
|
54
85
|
|
|
@@ -57,10 +88,11 @@ def main():
|
|
|
57
88
|
parser.add_argument("audio")
|
|
58
89
|
parser.add_argument("--meter", type=int, default=4)
|
|
59
90
|
parser.add_argument("--fps", type=int, default=30)
|
|
91
|
+
parser.add_argument("--hits", type=int, default=3)
|
|
60
92
|
args = parser.parse_args()
|
|
61
|
-
if args.meter < 2 or args.fps < 1:
|
|
62
|
-
sys.exit("--meter must be >= 2 and --
|
|
63
|
-
json.dump(beat_grid(args.audio, args.meter, args.fps), sys.stdout, indent=1)
|
|
93
|
+
if args.meter < 2 or args.fps < 1 or args.hits < 1:
|
|
94
|
+
sys.exit("--meter must be >= 2, --fps >= 1 and --hits >= 1")
|
|
95
|
+
json.dump(beat_grid(args.audio, args.meter, args.fps, args.hits), sys.stdout, indent=1)
|
|
64
96
|
print()
|
|
65
97
|
|
|
66
98
|
|
|
@@ -12,7 +12,7 @@ Everything delivered to the user is in `{communication_language}` (Brazilian Por
|
|
|
12
12
|
## Step 0 · Inputs and the ruler in effect
|
|
13
13
|
|
|
14
14
|
1. **Resume first.** Look for `{output_folder}/vsl/<slug>/manifest.json`. If it exists, read it and `00-briefing.md`, say in one line where the work stopped, and resume from the first pending phase. Never re-interview someone who already answered.
|
|
15
|
-
2. **Reuse what the method already produced.** An approved offer from the `wizz-offer-forge` skill (`{output_folder}/offers/OFFER-*.md`) is the source for the offer block and for the solution mechanism: record it in the manifest instead of re-deriving it. Audience research from the `wizz-pesquisa-de-publico
|
|
15
|
+
2. **Reuse what the method already produced.** An approved offer from the `wizz-offer-forge` skill (`{output_folder}/offers/OFFER-*.md`) is the source for the offer block and for the solution mechanism: record it in the manifest instead of re-deriving it. Audience research from the `wizz-pesquisa-de-publico` skill (`{output_folder}/pesquisa-de-publico/`) is the source for blocks 2, 3, 8 and 10 of the interview: VoC, awareness levels, lexicon and angles come from there, quoted with file and section. When there is no approved offer, say so and invoke the `wizz-offer-forge` skill before Phase 4; when there is no audience research and the expert has no material, offer to invoke the `wizz-pesquisa-de-publico` skill first.
|
|
16
16
|
3. **Low ticket ruler.** The low ticket base applies only when BOTH are true: the `wizz-lowticket-metodologia` skill is installed in this project, AND the project context or the request itself establishes that the operation is low ticket (price range, cheap product, direct traffic). Do not presume low ticket because the product is a course or there is a campaign running. When both hold, before Phase 2, read its `knowledge/INDEX.md`, then `knowledge/13-benchmarks-vsl.md` and the VSL entries the INDEX names (`04b` §4.7 and §4.7-A, `18` §18.8). That ruler sets the length, the pitch position and the number of leads to test; where it contradicts this skill (the 16 to 20 minute default below), **the ruler wins**, and say so in the reply. In practice: a product that proves itself on screen stays at 90 s to 2 min, an offer that needs to build mechanism and authority goes to 7 to 9 min, below R$60 the ceiling is 7 to 8 min, the pitch enters at about two thirds of the video, and 3 to 8 leads get tested.
|
|
17
17
|
|
|
18
18
|
## The six phases
|
|
@@ -39,7 +39,7 @@ At the seams, check the **transitions**: each block ends pulling the next. Cut a
|
|
|
39
39
|
> **Diagnóstico:** consciência N / sofisticação M
|
|
40
40
|
> **GUARDRAIL (LEI):** <proibições do Bloco 9>
|
|
41
41
|
> **Voz:** <resumo do Bloco 10>
|
|
42
|
-
> **Fontes:** `00-briefing.md`, <oferta aprovada>, <pesquisa
|
|
42
|
+
> **Fontes:** `00-briefing.md`, <oferta aprovada>, <pesquisa de público>
|
|
43
43
|
```
|
|
44
44
|
|
|
45
45
|
## Claims ledger
|
|
@@ -99,7 +99,7 @@ From Block 10, in every block:
|
|
|
99
99
|
| **Talking screenshot** | Opens with the real result on screen, no context | Curiosity and proof in one move |
|
|
100
100
|
| **The wrong ruler** | "Você teve resultado. Só mediu na régua errada." | Counterintuitive: reopens a market that gave up |
|
|
101
101
|
|
|
102
|
-
Copying a winning structure word for word produces echo ads the market already discounted. When the user wants hook raw material, the 7 Blueprint types the method already uses (wizz-social) and the angle matrix of the
|
|
102
|
+
Copying a winning structure word for word produces echo ads the market already discounted. When the user wants hook raw material, the 7 Blueprint types the method already uses (wizz-social) and the angle matrix of the audience research are the bank; numbers in a hook come from the briefing, never invented.
|
|
103
103
|
|
|
104
104
|
### Output · one file per lead
|
|
105
105
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Phase 2 · Market diagnosis (Schwartz)
|
|
2
2
|
|
|
3
|
-
> Three questions, in this order, **before** any mechanism or lead. Getting this wrong means a technically correct VSL that speaks to a market that does not exist. When the
|
|
3
|
+
> Three questions, in this order, **before** any mechanism or lead. Getting this wrong means a technically correct VSL that speaks to a market that does not exist. When the audience research exists, its awareness-levels report is the first evidence: quote it.
|
|
4
4
|
|
|
5
5
|
## 1. What is the mass desire?
|
|
6
6
|
|
|
@@ -69,7 +69,7 @@ Sophistication measures **how many promises the market already heard**, not how
|
|
|
69
69
|
- Descartados: <outros candidatos e por que perderam>
|
|
70
70
|
|
|
71
71
|
## Nível de consciência: <1-5>
|
|
72
|
-
**Evidência:** <citação literal do briefing, da call ou da pesquisa
|
|
72
|
+
**Evidência:** <citação literal do briefing, da call ou da pesquisa de público>
|
|
73
73
|
**Implicação para a lead:** …
|
|
74
74
|
|
|
75
75
|
## Estágio de sofisticação: <1-5>
|
|
@@ -8,12 +8,12 @@ Before the first question, ask only this (in the user's language):
|
|
|
8
8
|
|
|
9
9
|
> "Antes de te entrevistar: você já tem material sobre esse expert ou essa oferta? Transcrição de call, questionário preenchido, página de vendas antiga, VSL anterior, aulas gravadas, site, Instagram, documento de oferta? Me passa os caminhos ou os links que eu leio antes."
|
|
10
10
|
|
|
11
|
-
Also check what the method already produced: an approved offer from `wizz-offer-forge` and the audience research from `wizz-pesquisa-de-publico
|
|
11
|
+
Also check what the method already produced: an approved offer from `wizz-offer-forge` and the audience research from `wizz-pesquisa-de-publico` (paths in SKILL.md, Step 0). They pre-fill whole blocks.
|
|
12
12
|
|
|
13
13
|
When there is material:
|
|
14
14
|
|
|
15
15
|
1. **Read all of it.** A call transcript is the richest source there is: the expert talking loosely about their own method beats any rushed questionnaire.
|
|
16
|
-
2. **Pre-fill the briefing, marking the source of each answer:** `(call 01:07:22)`, `(questionario.md §12.1)`, `(OFFER-x.md §mecanismo)`, `(pesquisa-
|
|
16
|
+
2. **Pre-fill the briefing, marking the source of each answer:** `(call 01:07:22)`, `(questionario.md §12.1)`, `(OFFER-x.md §mecanismo)`, `(pesquisa-de-publico/voc.md)`.
|
|
17
17
|
3. **Then interview only the gaps.** Nothing degrades a briefing faster than asking what the person already answered.
|
|
18
18
|
4. **Return what you extracted before asking:** "do material eu já tirei X, Y e Z; me confirma e responde só o que falta".
|
|
19
19
|
|
|
@@ -62,7 +62,7 @@ Without material, start at Block 1.
|
|
|
62
62
|
|
|
63
63
|
## Block 2 · Audience `[MANDATORY]`
|
|
64
64
|
|
|
65
|
-
*Pre-filled by the
|
|
65
|
+
*Pre-filled by the audience research when it exists (VoC, psychographic profile, lexicon).*
|
|
66
66
|
|
|
67
67
|
1. Who buys this? The real person: age, occupation, life moment, income.
|
|
68
68
|
2. Who **pays you the most** today (real profile, not the desired one)?
|
|
@@ -121,7 +121,7 @@ Without material, start at Block 1.
|
|
|
121
121
|
|
|
122
122
|
## Block 8 · Market `[MANDATORY]`
|
|
123
123
|
|
|
124
|
-
*This defines the sophistication stage in Phase 2. Pre-filled by the
|
|
124
|
+
*This defines the sophistication stage in Phase 2. Pre-filled by the audience research trend report and angle matrix when they exist.*
|
|
125
125
|
|
|
126
126
|
1. Competitors and references: what do they promise?
|
|
127
127
|
2. What is **everyone** in your market saying right now? The standard promise?
|
|
@@ -175,7 +175,7 @@ A gap in a mandatory block does not stop the work, but it must not stay silent:
|
|
|
175
175
|
```markdown
|
|
176
176
|
# Briefing · <expert> / <produto>
|
|
177
177
|
|
|
178
|
-
> Fontes: <arquivos lidos, oferta aprovada, pesquisa
|
|
178
|
+
> Fontes: <arquivos lidos, oferta aprovada, pesquisa de público>. Entrevista em <data>.
|
|
179
179
|
> Toda resposta traz a fonte entre parênteses. `[LACUNA]` = não respondido.
|
|
180
180
|
|
|
181
181
|
## 1. Produto e oferta
|
|
@@ -32,6 +32,8 @@ The ones that show up most in an audit, with the direct fix. Use as a quick tria
|
|
|
32
32
|
|
|
33
33
|
> The first four (SQLi, IDOR, mass assignment, and permissive RLS) are **stop-the-line**: if it shows up, fix it before anything else.
|
|
34
34
|
>
|
|
35
|
+
> Free trial abuse (the same person opening trial after trial) is not fixed by blocking the IP: NAT puts a whole house or office behind one address. Use the risk score in the `wizz-signup-flow-cro` skill (trial abuse).
|
|
36
|
+
>
|
|
35
37
|
> For a full adversarial audit (hunting with exploit proof + a prioritized plan), use the `wizz-security-audit-pentest` skill. This skill here is for **fixing** a specific finding from the table.
|
|
36
38
|
|
|
37
39
|
## References (load on demand)
|
|
@@ -79,6 +79,7 @@ const NEED_LABELS = {
|
|
|
79
79
|
docker: { en: 'Docker', pt: 'Docker' },
|
|
80
80
|
python: { en: 'Python', pt: 'Python' },
|
|
81
81
|
ffmpeg: { en: 'ffmpeg', pt: 'ffmpeg' },
|
|
82
|
+
chrome: { en: 'Chrome', pt: 'Chrome' },
|
|
82
83
|
heavy: { en: 'heavy download', pt: 'download pesado' },
|
|
83
84
|
};
|
|
84
85
|
|
|
@@ -123,6 +124,16 @@ const CLI_LABELS = {
|
|
|
123
124
|
en: 'review native iOS/macOS UI against Apple HIG',
|
|
124
125
|
pt: 'revisar UI nativa iOS/macOS pelo guia da Apple',
|
|
125
126
|
},
|
|
127
|
+
'claude-animation-base': {
|
|
128
|
+
needs: ['ffmpeg', 'chrome'],
|
|
129
|
+
en: 'hand-painted cartoon with Clawd, the Claude character',
|
|
130
|
+
pt: 'desenho animado pintado à mão com o Clawd, do Claude',
|
|
131
|
+
},
|
|
132
|
+
onetake: {
|
|
133
|
+
needs: ['ffmpeg', 'python'],
|
|
134
|
+
en: 'one-take product film (personal use free; commercial needs Pro)',
|
|
135
|
+
pt: 'filme de produto em plano-sequência (pessoal grátis; comercial é Pro)',
|
|
136
|
+
},
|
|
126
137
|
distribb: {
|
|
127
138
|
needs: ['account', 'paid'],
|
|
128
139
|
en: 'publish SEO articles and build backlinks',
|
|
@@ -143,6 +154,11 @@ const CLI_LABELS = {
|
|
|
143
154
|
en: 'draw validated architecture diagrams',
|
|
144
155
|
pt: 'desenhar diagramas de arquitetura validados',
|
|
145
156
|
},
|
|
157
|
+
xtool: {
|
|
158
|
+
needs: [],
|
|
159
|
+
en: 'build and install an iOS app on the iPhone without Xcode',
|
|
160
|
+
pt: 'compilar e instalar app iOS no iPhone sem o Xcode',
|
|
161
|
+
},
|
|
146
162
|
'agent-browser': {
|
|
147
163
|
needs: [],
|
|
148
164
|
en: 'drive a real browser for checks and screenshots',
|
|
@@ -64,6 +64,7 @@ const MESSAGES = {
|
|
|
64
64
|
mcpPluginSkipped: 'MCPs already covered by a Claude Code plugin (user scope), skipped: {list}',
|
|
65
65
|
mcpQuestion: 'Which MCPs should go into .mcp.json? (unticked ones become a command to run later)',
|
|
66
66
|
unknownClis: 'Unknown or already installed CLIs ignored: {list}',
|
|
67
|
+
cliNotice: 'Before choosing {id}: {notice}',
|
|
67
68
|
cliQuestion: 'Which CLIs should be installed now? (unticked ones become a command to run later)',
|
|
68
69
|
traceQuestion: 'Turn on the routing meter? (local, writes only to ~/.claude/wizz-trace.jsonl on your machine, never leaves it)',
|
|
69
70
|
quickUpdateNoSkills:
|
|
@@ -123,6 +124,7 @@ const MESSAGES = {
|
|
|
123
124
|
mcpPluginSkipped: 'MCPs já cobertos por plugin do Claude Code (user scope), pulados: {list}',
|
|
124
125
|
mcpQuestion: 'Quais MCPs configurar no .mcp.json? (não marcados viram comando pra rodar depois)',
|
|
125
126
|
unknownClis: 'CLIs desconhecidos/já instalados ignorados: {list}',
|
|
127
|
+
cliNotice: 'Antes de escolher {id}: {notice}',
|
|
126
128
|
cliQuestion: 'Quais CLIs instalar agora? (não marcados viram comando pra rodar depois)',
|
|
127
129
|
traceQuestion: 'Quer ligar o medidor de roteamento? (local, grava só em ~/.claude/wizz-trace.jsonl na sua máquina, nunca sai daqui)',
|
|
128
130
|
quickUpdateNoSkills:
|
|
@@ -109,6 +109,9 @@ function resolveClis(registry, selectedAreas, platformTag = currentPlatformTag()
|
|
|
109
109
|
// opt-in multiselect (e.g. rtk — the router assumes it active). Coerced
|
|
110
110
|
// to a real boolean so a missing field is `false`, never undefined.
|
|
111
111
|
recommended: !!cli.recommended,
|
|
112
|
+
// notice (2026-10-25): license/cost warning the UI shows before the
|
|
113
|
+
// choice. Coerced to '' so callers test truthiness, never undefined.
|
|
114
|
+
notice: cli.notice || '',
|
|
112
115
|
}),
|
|
113
116
|
});
|
|
114
117
|
}
|
package/tools/installer/ui.js
CHANGED
|
@@ -783,6 +783,12 @@ class UI {
|
|
|
783
783
|
const missing = detected.filter((c) => !c.installed);
|
|
784
784
|
if (missing.length === 0) return { toInstall: [], toRecommend: [], alreadyInstalled };
|
|
785
785
|
|
|
786
|
+
// Registry `notice` (license or cost) is shown before any path decides,
|
|
787
|
+
// so --clis, --yes and the multiselect all see it before the choice.
|
|
788
|
+
for (const c of missing.filter((m) => m.notice)) {
|
|
789
|
+
await prompts.log.warn(it('cliNotice', { id: c.id, notice: c.notice }));
|
|
790
|
+
}
|
|
791
|
+
|
|
786
792
|
const byId = new Map(missing.map((c) => [c.id, c]));
|
|
787
793
|
const split = (installIds) => {
|
|
788
794
|
const installSet = new Set(installIds);
|
/package/src/skills-lib/{wizz-pesquisa-de-publico-do-piva → wizz-pesquisa-de-publico}/prompts.md
RENAMED
|
File without changes
|