flomotion 0.2.0 → 0.4.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/CHANGELOG.md +58 -2
- package/LICENSE +1 -1
- package/README.md +29 -20
- package/dist/bin.mjs +6279 -2582
- package/dist/chunks/{chunk-QG2MOGKO.mjs → chunk-IGG2VZB6.mjs} +178 -14
- package/dist/chunks/{chunk-AVP5XX4G.mjs → chunk-PEC2UVQY.mjs} +138 -108
- package/dist/chunks/{chunk-IUSYVGP6.mjs → chunk-TTHAZGRG.mjs} +7 -7
- package/dist/chunks/{chunk-JCLRAREG.mjs → chunk-XWY6CUY6.mjs} +16 -16
- package/dist/chunks/{lock-MLQUU7X3.mjs → lock-WGPR7CJ2.mjs} +3 -3
- package/dist/components.mjs +19 -13
- package/dist/core.mjs +12 -12
- package/dist/hooks.mjs +8 -12
- package/dist/jsx-dev-runtime.mjs +1 -1
- package/dist/jsx-runtime.mjs +1 -1
- package/docs/components/Adjustment.md +2 -2
- package/docs/components/Audio.md +2 -2
- package/docs/components/B.md +3 -3
- package/docs/components/Captions.md +2 -2
- package/docs/components/Card.md +2 -2
- package/docs/components/Center.md +2 -2
- package/docs/components/Chart.md +2 -2
- package/docs/components/Chip.md +2 -2
- package/docs/components/Circle.md +2 -2
- package/docs/components/Clip.md +2 -2
- package/docs/components/CodeBlock.md +2 -2
- package/docs/components/Composition.md +2 -2
- package/docs/components/Counter.md +2 -2
- package/docs/components/Cursor.md +2 -2
- package/docs/components/Fonts.md +2 -2
- package/docs/components/GlassCard.md +2 -2
- package/docs/components/Grid.md +2 -2
- package/docs/components/Group.md +2 -2
- package/docs/components/Highlight.md +3 -3
- package/docs/components/I.md +3 -3
- package/docs/components/Image.md +2 -2
- package/docs/components/Line.md +2 -2
- package/docs/components/Marker.md +2 -2
- package/docs/components/Path.md +2 -2
- package/docs/components/Polygon.md +2 -2
- package/docs/components/Precomp.md +2 -2
- package/docs/components/ProgressRing.md +2 -2
- package/docs/components/Rect.md +2 -2
- package/docs/components/RoundRect.md +2 -2
- package/docs/components/SafeArea.md +2 -2
- package/docs/components/Scene.md +2 -2
- package/docs/components/Sequence.md +2 -2
- package/docs/components/Span.md +3 -3
- package/docs/components/SplitText.md +2 -2
- package/docs/components/Stack.md +2 -2
- package/docs/components/Stagger.md +2 -2
- package/docs/components/Strike.md +3 -3
- package/docs/components/Svg.md +2 -2
- package/docs/components/Text.md +2 -2
- package/docs/components/Title.md +2 -2
- package/docs/components/Track.md +2 -2
- package/docs/components/UIMock.md +2 -2
- package/docs/components/Underline.md +3 -3
- package/docs/components/Video.md +2 -2
- package/docs/gate2-manual-checklist.md +10 -9
- package/docs/hyperframes-notes.md +20 -20
- package/docs/later.md +23 -16
- package/docs/spec.md +83 -22
- package/package.json +1 -2
- package/skills/flomotion-studio/CHANGELOG.md +39 -0
- package/skills/flomotion-studio/README.md +81 -0
- package/skills/flomotion-studio/SKILL.md +90 -0
- package/skills/flomotion-studio/config/thresholds.md +191 -0
- package/skills/flomotion-studio/dataset/annotations/ansarada.md +53 -0
- package/skills/flomotion-studio/dataset/annotations/canva.md +49 -0
- package/skills/flomotion-studio/dataset/annotations/clickup.md +60 -0
- package/skills/flomotion-studio/dataset/annotations/gemini-stub.md +39 -0
- package/skills/flomotion-studio/dataset/annotations/monday.md +51 -0
- package/skills/flomotion-studio/dataset/annotations/phantom.md +53 -0
- package/skills/flomotion-studio/dataset/annotations/slack.md +54 -0
- package/skills/flomotion-studio/dataset/annotations/unknown-7.md +39 -0
- package/skills/flomotion-studio/dataset/annotations/vaylens.md +53 -0
- package/skills/flomotion-studio/dataset/brief-template.md +110 -0
- package/skills/flomotion-studio/dataset/rating-sheet.md +28 -0
- package/skills/flomotion-studio/dataset/schema.md +44 -0
- package/skills/flomotion-studio/evals/README.md +33 -0
- package/skills/flomotion-studio/evals/briefs/briefs.md +25 -0
- package/skills/{motion-studio/looks → flomotion-studio/examples/engine-looks}/kinetic.scene.tsx +1 -1
- package/skills/{motion-studio/looks → flomotion-studio/examples/engine-looks}/minimal.scene.tsx +1 -1
- package/skills/{motion-studio/looks → flomotion-studio/examples/engine-looks}/sketch.scene.tsx +1 -1
- package/skills/flomotion-studio/examples/flomotion-ad/LOG.md +39 -0
- package/skills/flomotion-studio/examples/flomotion-ad/brief.md +41 -0
- package/skills/flomotion-studio/examples/flomotion-ad/ideas.md +12 -0
- package/skills/flomotion-studio/examples/flomotion-ad/project.tsx +1694 -0
- package/skills/flomotion-studio/examples/flomotion-ad/script.md +28 -0
- package/skills/flomotion-studio/examples/flomotion-ad/storyboard.md +93 -0
- package/skills/{motion-studio → flomotion-studio}/examples/saas-promo/README.md +1 -1
- package/skills/{motion-studio → flomotion-studio}/examples/saas-promo/make-assets.sh +1 -1
- package/skills/{motion-studio → flomotion-studio}/examples/saas-promo/project.tsx +3 -3
- package/skills/flomotion-studio/looks/bold-kinetic.md +122 -0
- package/skills/flomotion-studio/looks/clean-light.md +122 -0
- package/skills/flomotion-studio/looks/dark-product.md +120 -0
- package/skills/flomotion-studio/references/anti-patterns.md +36 -0
- package/skills/flomotion-studio/references/assets.md +42 -0
- package/skills/flomotion-studio/references/block-recipes.md +249 -0
- package/skills/flomotion-studio/references/blocks.md +114 -0
- package/skills/flomotion-studio/references/catalogue.md +53 -0
- package/skills/flomotion-studio/references/checks.md +87 -0
- package/skills/flomotion-studio/references/clean-styles.md +56 -0
- package/skills/{motion-studio → flomotion-studio}/references/components.md +94 -94
- package/skills/flomotion-studio/references/copywriting.md +64 -0
- package/skills/flomotion-studio/references/decision-tables.md +80 -0
- package/skills/flomotion-studio/references/interview.md +145 -0
- package/skills/flomotion-studio/references/looks.md +45 -0
- package/skills/flomotion-studio/references/mcp-tools.md +70 -0
- package/skills/flomotion-studio/references/motion.md +68 -0
- package/skills/flomotion-studio/references/patterns.md +45 -0
- package/skills/flomotion-studio/references/review.md +56 -0
- package/skills/flomotion-studio/references/script-craft.md +59 -0
- package/skills/flomotion-studio/references/sound.md +57 -0
- package/skills/flomotion-studio/references/story-templates.md +52 -0
- package/skills/flomotion-studio/references/storyboard.md +62 -0
- package/skills/flomotion-studio/references/styles.md +70 -0
- package/skills/flomotion-studio/references/transitions.md +62 -0
- package/skills/flomotion-studio/references/typography.md +46 -0
- package/skills/flomotion-studio/references/workflow.md +96 -0
- package/skills/motion-studio/SKILL.md +0 -87
- package/skills/motion-studio/looks/kinetic.json +0 -89
- package/skills/motion-studio/looks/minimal.json +0 -91
- package/skills/motion-studio/looks/sketch.json +0 -83
- package/skills/motion-studio/references/motion.md +0 -73
- package/skills/motion-studio/references/review.md +0 -32
- package/skills/motion-studio/references/saas-promo.md +0 -29
- package/skills/motion-studio/references/sound.md +0 -47
- package/skills/motion-studio/references/typography.md +0 -50
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# Copywriting rules
|
|
2
|
+
|
|
3
|
+
Only use facts the person gave you. Every claim needs a source or is removed. Write for the ear and the eye: short, concrete, one idea.
|
|
4
|
+
|
|
5
|
+
## Hard limits
|
|
6
|
+
- Headline beat: <= 6 words (8 hard max). Captions: <= 12 words per scene. Quote: <= 14 words (trim with ellipsis only if the person approves).
|
|
7
|
+
- One idea per beat. Verbs over adjectives. No jargon the audience would not say.
|
|
8
|
+
- Reading speed: <= 3 words/s for on-screen text.
|
|
9
|
+
- Never write superlatives you cannot prove ("best", "fastest", "#1") unless the person supplies the source.
|
|
10
|
+
|
|
11
|
+
## Hook types (offer 3 options at G1)
|
|
12
|
+
| Type | Pattern | Example (invented product "Northwind Notes") |
|
|
13
|
+
|---|---|---|
|
|
14
|
+
| Curiosity question | "Is X changing how Y?" typed in a field | "Why do meetings still end with no notes?" |
|
|
15
|
+
| Bold claim | Short declarative | "Notes write themselves." |
|
|
16
|
+
| Number | Concrete figure + unit | "3 hours back every week." (only if sourced) |
|
|
17
|
+
| Pain image | Visual, 0-3 words | A pile of tabs; text "Too many tabs…" |
|
|
18
|
+
| Relatable moment | Human behavior, funny | Someone typing notes with a phone in their mouth |
|
|
19
|
+
| Trend fact | "As X becomes the norm…" | "As meetings move online…" |
|
|
20
|
+
|
|
21
|
+
## Pain scripts
|
|
22
|
+
- Pain flavors (vary them): too many tools / lost context / wasted time / risk / confusion / cost.
|
|
23
|
+
- Pattern: "Too many ___…" then a second flavor "___ is lost." then the thesis.
|
|
24
|
+
- Keep each pain beat to 3-5 words. The last pain line is calm, not shouting.
|
|
25
|
+
|
|
26
|
+
## Turn and promise
|
|
27
|
+
- Turn line (<= 6 words): "It's time to ___." or "So we built ___." or "Meet ___."
|
|
28
|
+
- Promise (<= 8 words): "Simple, secure ___." / "One place for ___." / "___ that just works." State the benefit, not the feature.
|
|
29
|
+
|
|
30
|
+
## Sentence-splitting (pattern 11)
|
|
31
|
+
Write one sentence of 12-20 words, then split it at natural breaths into 3-5 scenes of 2-6 words each. Read it aloud: it must still scan as one sentence. Keep the same baseline or position logic so the eye follows. Example: "As meetings move online, / the way we / take notes / needs to change."
|
|
32
|
+
|
|
33
|
+
## Template + word swap (pattern 10)
|
|
34
|
+
Choose one frame and swap one word: "A new era of ___" with `speed`, `focus`, `clarity`. Keep timing identical; change only the keyword and the background token.
|
|
35
|
+
|
|
36
|
+
## Emphasis
|
|
37
|
+
- Key word in the contrast color (the look's `accent` or white on a block).
|
|
38
|
+
- Lead-in lines dimmer than the payoff word.
|
|
39
|
+
- Never emphasize more than one word per beat.
|
|
40
|
+
|
|
41
|
+
## Proof lines
|
|
42
|
+
| Type | Pattern |
|
|
43
|
+
|---|---|
|
|
44
|
+
| Credential | "First to be [certification]." (only if true and sourced) |
|
|
45
|
+
| Number | "[number] [unit] [outcome]" + `source` |
|
|
46
|
+
| Customer | Quote + name, role, company (permission required) |
|
|
47
|
+
| Scale | "Helping thousands of companies" only with a verified count |
|
|
48
|
+
|
|
49
|
+
## CTA
|
|
50
|
+
- One action, imperative: "Try it free." / "Book a demo." / "See it live."
|
|
51
|
+
- URL in the look's body font at >= caption min size; hold >= 1 s.
|
|
52
|
+
- No more than one URL and one button.
|
|
53
|
+
|
|
54
|
+
## Voiceover
|
|
55
|
+
- Aim 2.0-2.8 words/s. Leave breaths at beat boundaries.
|
|
56
|
+
- Voice leads: write the VO, then set on-screen text as keywords from it (not a transcript).
|
|
57
|
+
- Match on-screen emphasis to the stressed word of the VO.
|
|
58
|
+
|
|
59
|
+
## Checklist before showing a script
|
|
60
|
+
- [ ] Every headline <= 6 words
|
|
61
|
+
- [ ] Every number has a source in the brief
|
|
62
|
+
- [ ] Pain, turn, promise, proof, CTA all present (or flagged missing)
|
|
63
|
+
- [ ] No invented names, quotes, stats
|
|
64
|
+
- [ ] Reads well aloud in the planned duration
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# Decision tables
|
|
2
|
+
|
|
3
|
+
Go top to bottom. First match wins; then check the "avoid" column.
|
|
4
|
+
|
|
5
|
+
## 1. Style family
|
|
6
|
+
|
|
7
|
+
| Brief signals | Pick | Avoid |
|
|
8
|
+
|---|---|---|
|
|
9
|
+
| Security, compliance, risk, trust; serious audience | S1 Metaphor Contrast | Playful looks |
|
|
10
|
+
| Many customer quotes or strong claims; little UI footage | S2 Typographic Color Blocks | If no quote permissions |
|
|
11
|
+
| Product consolidates tools; pain is the story; >= 45 s | S3 Pain-to-Calm Line | Under 30 s |
|
|
12
|
+
| Product exists because of a market shift; calm B2B | S4 Trend-to-Product | No believable trend fact |
|
|
13
|
+
| Strong UI; screenshots or recordings available | S5 Real-UI Demo | UI unreadable at size |
|
|
14
|
+
| Creation tool for non-experts; playful; people footage | S6 Human Story to Prompt | No footage rights |
|
|
15
|
+
| Abstract/technical product that can become an object | S7 3D Object Explainer | No 3D capacity (use S2) |
|
|
16
|
+
| Not sure | S5 if UI exists, otherwise S2 | |
|
|
17
|
+
|
|
18
|
+
## 2. Look
|
|
19
|
+
|
|
20
|
+
| Mood/tone | Look |
|
|
21
|
+
|---|---|
|
|
22
|
+
| Calm, credible, light | `clean-light` |
|
|
23
|
+
| Premium, focused, dark/AI | `dark-product` |
|
|
24
|
+
| Energetic, loud, young, creation | `bold-kinetic` |
|
|
25
|
+
| Brand colors given | Build from brand (see `looks.md`) |
|
|
26
|
+
|
|
27
|
+
## 3. Length / template
|
|
28
|
+
|
|
29
|
+
| Platform / goal | Length |
|
|
30
|
+
|---|---|
|
|
31
|
+
| Social ad, cold audience | 15 s (hook-led) or 30 s |
|
|
32
|
+
| Landing page, product intro | 30 s |
|
|
33
|
+
| Launch / explainer / pain-heavy | 45 s |
|
|
34
|
+
| Under 15 s | Cut the pain; hook + product + CTA |
|
|
35
|
+
|
|
36
|
+
## 4. Format
|
|
37
|
+
|
|
38
|
+
| Platform | Format |
|
|
39
|
+
|---|---|
|
|
40
|
+
| Reels, TikTok, Shorts | 9:16 |
|
|
41
|
+
| YouTube, website hero | 16:9 |
|
|
42
|
+
| Feed (square) | 1:1 |
|
|
43
|
+
| Feed (portrait) | 4:5 |
|
|
44
|
+
|
|
45
|
+
## 5. Pain strategy
|
|
46
|
+
|
|
47
|
+
| Situation | Strategy |
|
|
48
|
+
|---|---|
|
|
49
|
+
| Product replaces many tools | S3 (tangle -> calm) |
|
|
50
|
+
| Fear/risk | S1 (image of risk) |
|
|
51
|
+
| Everyday annoyance | S6 (relatable moment) |
|
|
52
|
+
| Outdated way | S7 (old way small and grey) |
|
|
53
|
+
| No clear pain | Trend fact (S4) or UI demo (S5) |
|
|
54
|
+
|
|
55
|
+
## 6. Proof strategy
|
|
56
|
+
|
|
57
|
+
| Available | Use |
|
|
58
|
+
|---|---|
|
|
59
|
+
| Certification/credential | `ProofCredential` text card |
|
|
60
|
+
| A metric with a source | `StatCounter` |
|
|
61
|
+
| Named customer quote with permission | `Quote`/`QuoteCard` |
|
|
62
|
+
| Many logos with permission | `LogoStrip`/`ProofMosaic` |
|
|
63
|
+
| Nothing | Skip proof; do not invent. Strengthen demo instead; flag the gap |
|
|
64
|
+
|
|
65
|
+
## 7. Hook type
|
|
66
|
+
|
|
67
|
+
| Audience state | Hook |
|
|
68
|
+
|---|---|
|
|
69
|
+
| Problem-aware | Pain image or pain claim |
|
|
70
|
+
| Curious / skeptical | Typed question |
|
|
71
|
+
| Solution-aware | Bold promise or number |
|
|
72
|
+
| Cold | Relatable human moment |
|
|
73
|
+
|
|
74
|
+
## 8. Voice
|
|
75
|
+
|
|
76
|
+
| Situation | Voice |
|
|
77
|
+
|---|---|
|
|
78
|
+
| Person supplies recording | Use it; transcribe; align animation |
|
|
79
|
+
| Generated voice wanted | Quote cost first (confirm-gated) |
|
|
80
|
+
| No voice | Captions are the voice; text must pass reading speed check |
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
# Interview protocol (Gate 0)
|
|
2
|
+
|
|
3
|
+
Do not start designing until the interview is complete. A video built on guesses is the main cause of bad output. You interview **extensively and adaptively**: many rounds, short batches, follow-ups on vague answers, a read-back at the end. The person should feel that you understood the product and the audience before a single frame exists.
|
|
4
|
+
|
|
5
|
+
## Rules
|
|
6
|
+
1. **Batches of 3-5 questions per message.** Never a wall of 20. Prefer multiple-choice (use the ask-user-question tool when available, with 2-4 options and a free-text escape) and open questions where you need their words.
|
|
7
|
+
2. **Adapt.** Each answer decides the next questions. Skip what is already known. Dig where answers are vague ("modern", "clean", "powerful" are not answers: ask "like what? show me one you like").
|
|
8
|
+
3. **Follow up on every vague or surprising answer** at least once. Ask for an example, a number, a source, or a screenshot.
|
|
9
|
+
4. **Quote their own words back** when you summarize. Their phrases become the copy raw material.
|
|
10
|
+
5. **Track state.** Maintain `interview.md` in the project: for every field a `value`, a `source` (`user`, `asset`, `assumption`), and a `status` (`confirmed`, `assumed`, `unknown`). Show the clarity score after each round.
|
|
11
|
+
6. **Never invent.** If they do not know a fact, record `unknown`, never fill it. Claims need sources.
|
|
12
|
+
7. **Offer a way out.** For any question the person can say "skip", "you decide", or "I don't know". Record `assumed` with your proposed default and ask them to confirm it at the read-back.
|
|
13
|
+
8. **Detect contradictions** (e.g. "calm and premium" + "fast cuts, loud") and ask which wins.
|
|
14
|
+
9. **Be respectful of time.** Show progress ("Round 3 of about 6, 82% clear"). Offer a pause point after each round.
|
|
15
|
+
10. **Language**: ask in the person's language and level. No jargon unless they use it.
|
|
16
|
+
|
|
17
|
+
## Clarity score
|
|
18
|
+
Count must-have fields (below) that are `confirmed` or `assumed-and-approved`. Score = confirmed / total must-haves. **Proceed to G1 only at >= 90% and after the read-back is approved.** Nice-to-have fields never block.
|
|
19
|
+
|
|
20
|
+
### Must-have fields (28)
|
|
21
|
+
Product name; one-sentence what it does; who uses it (primary audience); job-to-be-done / pain; the single desired action after watching; one-sentence promise (their words); top 1-3 features to show; primary proof (or explicit "no proof"); platform; format (9:16/16:9/1:1/4:5); length; tone (one primary); brand colors (or "free to choose"); fonts (or "free to choose"); logo available (y/n); screen assets available (y/n and what); footage available (y/n); music preference (or "free"); voice plan (own/generated/none); language; CTA text and URL/button; words/claims to avoid; legal lines required; competitors to avoid resembling; at least one liked reference (or explicit "none"); at least one disliked reference (or "none"); deadline/priority; who approves; revision tolerance.
|
|
22
|
+
|
|
23
|
+
## Rounds (adapt order; skip when known)
|
|
24
|
+
|
|
25
|
+
### Round 0: What is set up, and what they will supply (before anything else, one short message)
|
|
26
|
+
Call `setup_status`. Tell the person, in plain words, what this machine can do and what is missing (FFmpeg, Chrome, no Freesound key, no ElevenLabs key, no Whisper). Then ask how they want to supply four things; none needs a service key:
|
|
27
|
+
1. **Voiceover:** their own recording, a generated voice (ElevenLabs, paid, always quoted first), or none.
|
|
28
|
+
2. **Word timings:** a transcript or captions file they already have (SRT, VTT or JSON), or Whisper on this computer, or ElevenLabs returns them with the voice.
|
|
29
|
+
3. **Sound effects:** their own sound files (a folder or a few files), Freesound, or both.
|
|
30
|
+
4. **Graphics:** their logo and brand files, screenshots of their product (or a public URL we can capture, with their permission), their website for brand colours and fonts; icons and stock photos can be pulled from open sources.
|
|
31
|
+
If they want a service, tell them to run `flomotion setup` in a terminal (keys are saved on their computer and never pass through the chat). Never ask them to paste a key here. Record the answers in `interview.md`.
|
|
32
|
+
|
|
33
|
+
### Round 1: The product, in their words
|
|
34
|
+
Ask:
|
|
35
|
+
- What is it, in one sentence, as you'd explain it to a friend who has never heard of it?
|
|
36
|
+
- Who uses it, and what are they doing right before they open it?
|
|
37
|
+
- What painful thing does it replace or fix? What happens if people do nothing?
|
|
38
|
+
- What is the single most impressive thing it does?
|
|
39
|
+
- What do people usually get wrong or doubt about it?
|
|
40
|
+
Follow-ups: "Can you give a real example from a user?" "What number could we put on that?" "What did they use before?"
|
|
41
|
+
|
|
42
|
+
### Round 2: The audience and the moment
|
|
43
|
+
- Who is the buyer and who is the user (same person?)
|
|
44
|
+
- Where will they watch (feed, website, demo call, event)? On mute?
|
|
45
|
+
- What do they already believe about this category? What are they tired of?
|
|
46
|
+
- How aware are they: do they know they have the problem, or must we show it?
|
|
47
|
+
- What would make them stop scrolling, in their language?
|
|
48
|
+
Probe: a typical day, the trigger event that makes them look for a solution.
|
|
49
|
+
|
|
50
|
+
### Round 3: The goal and the action
|
|
51
|
+
- After the video, what exactly should happen (sign up, book, share, buy)? One action.
|
|
52
|
+
- Is there a metric or deadline attached (launch date, campaign)?
|
|
53
|
+
- Is this cold traffic or warm (existing leads)?
|
|
54
|
+
- What is the offer (free trial, demo, discount)? Any terms that must show?
|
|
55
|
+
- CTA text and destination (URL, code, button)?
|
|
56
|
+
|
|
57
|
+
### Round 4: Message, features and proof
|
|
58
|
+
- What is the one sentence you want viewers to remember?
|
|
59
|
+
- Pick up to 3 features to show. For each: what does the user see and do, and what is the result?
|
|
60
|
+
- Which feature is the "wow"? Which should be skipped even if it is great?
|
|
61
|
+
- Proof: numbers (with source and date), certifications, customer names and quotes (with permission), logos you may show, press, awards.
|
|
62
|
+
- Anything you are not allowed to claim?
|
|
63
|
+
Probe: "If a skeptic asked 'prove it', what would you show?"
|
|
64
|
+
|
|
65
|
+
### Round 5: Assets
|
|
66
|
+
- Logo (vector?), brand guide, colors, fonts, existing videos, screenshots, screen recordings, footage, product photos, voice recordings, music you own.
|
|
67
|
+
- Their website or app URL: may we read its brand (`brand_extract`) and take screenshots of it (`asset_capture`)? Only with their yes. Pages behind a login: they take the screenshots and we import them (`asset_import`).
|
|
68
|
+
- Their own files can be anywhere on their computer: ask for the path and import (`asset_import`, `voice_import`, `sound_import`); the tools state what rights they assert, so ask "are these yours, or licensed to you?".
|
|
69
|
+
- Customer or partner logos ("works with Slack"): brand logos are trademarks. Ask whether they have permission or the brand's guidelines allow it; otherwise use a plain wordmark in text.
|
|
70
|
+
- Anything the viewer should never see (private data, real customers)?
|
|
71
|
+
- Can we show real UI or must it be mocked? Is the UI recent?
|
|
72
|
+
- Language(s) and any non-Latin text? Accessibility needs (captions required)?
|
|
73
|
+
Ask for the files; list what arrived and what is missing.
|
|
74
|
+
|
|
75
|
+
### Round 6: Taste (the "looks and feels" round)
|
|
76
|
+
- Three adjectives for how it should feel; three for how it must not feel.
|
|
77
|
+
- Show me 1-3 videos or sites you like and tell me what you like about each (specific moments, not "it's nice"). Same for 1-2 you dislike.
|
|
78
|
+
- Light or dark? Quiet or loud? Fast or slow? Minimal or rich?
|
|
79
|
+
- **Style probe**: describe the style families (from `styles.md`) in plain words and show a one-line example of each; ask them to pick top 2 and rank. Use previews where the tool supports them.
|
|
80
|
+
- **Look probe**: offer 3 palette+type directions from `looks/` as short descriptions (or preview frames if rendered); ask for a pick and what to change.
|
|
81
|
+
- Motion taste: smooth and calm, snappy and punchy, playful and bouncy?
|
|
82
|
+
- Typography taste: big and bold, light and elegant, technical and mono?
|
|
83
|
+
Probe on vague words: "modern" -> which brand, which feature of it?
|
|
84
|
+
|
|
85
|
+
### Round 7: Voice, sound and music
|
|
86
|
+
- Voiceover or text-only? Whose voice (own, generated)? Accent and gender preference, pace. If it is their own recording: where is the file, and do they have a transcript or captions for it (any format)? A line-level caption file is enough for captions; word-level (Whisper, ElevenLabs, a caption tool) is needed to start things exactly on a word.
|
|
87
|
+
- Music mood (examples of artists/tracks for *mood only*), instrumental only?
|
|
88
|
+
- Sound design appetite: subtle clicks, punchy impacts, none?
|
|
89
|
+
- Pronunciation of the brand name and key terms.
|
|
90
|
+
Reminder: say that sounds are chosen from licensed sources and you will ask them to audition.
|
|
91
|
+
|
|
92
|
+
### Round 8: Constraints, risks, process
|
|
93
|
+
- Words/phrases to avoid; compliance or legal lines; competitor names allowed or not?
|
|
94
|
+
- Required elements (logo placement, disclaimer, URL, hashtag).
|
|
95
|
+
- Platform rules to respect (no flashing, caption requirements, length limits).
|
|
96
|
+
- Who approves and how fast? How many revision rounds are expected?
|
|
97
|
+
- Deadline, delivery format (mp4, webm, social cutdowns), versions needed (extra formats, languages)?
|
|
98
|
+
- Budget notes: paid voice allowed? Stock footage allowed?
|
|
99
|
+
|
|
100
|
+
### Round 9: Gaps and sanity (adaptive)
|
|
101
|
+
Ask only what the state shows missing or contradictory:
|
|
102
|
+
- Resolve contradictions (calm vs loud, premium vs playful).
|
|
103
|
+
- Fill any must-have still `unknown`.
|
|
104
|
+
- Ask for the **one thing you would regret if the video missed it**.
|
|
105
|
+
- Ask what would make them say "this is exactly it".
|
|
106
|
+
|
|
107
|
+
## Read-back (mandatory)
|
|
108
|
+
Write a one-page summary in their words and show it:
|
|
109
|
+
1. Product, audience, pain (their phrases quoted)
|
|
110
|
+
2. Goal and CTA
|
|
111
|
+
3. Message and top features
|
|
112
|
+
4. Proof available (with sources) and proof missing
|
|
113
|
+
5. Format, length, platform
|
|
114
|
+
6. Taste: adjectives, do/don't, chosen style family and look direction, references liked/disliked
|
|
115
|
+
7. Voice, sound, language, and how each is supplied (their recording and transcript, their sound files, generated, Freesound)
|
|
116
|
+
8. Constraints and risks
|
|
117
|
+
9. **Assumptions I am making** (each with a default you can accept or change)
|
|
118
|
+
10. **Open items** (what I still do not know and how I will handle it)
|
|
119
|
+
|
|
120
|
+
Ask: "Is anything wrong, missing, or something you would never say?" Fix and re-confirm. Save as `brief.md` (schema: `dataset/brief-template.md`) and `interview.md` (full log).
|
|
121
|
+
|
|
122
|
+
## Question quality bank (use these probes when an answer is thin)
|
|
123
|
+
- "Can you give me a concrete example?"
|
|
124
|
+
- "What would a skeptical customer say?"
|
|
125
|
+
- "What is the number behind that, and where does it come from?"
|
|
126
|
+
- "What does the screen show at that moment? Can I see it?"
|
|
127
|
+
- "Who would hate this version, and why?"
|
|
128
|
+
- "If we could only keep one sentence, which one?"
|
|
129
|
+
- "What did the last video you made get wrong?"
|
|
130
|
+
- "What does the competitor do that you do not want to resemble?"
|
|
131
|
+
- "How would your best customer describe this in one line?"
|
|
132
|
+
|
|
133
|
+
## Do not
|
|
134
|
+
- Ask more than 5 questions at once; ask things you can read from supplied files; ask the same thing twice; lead the person to a style they have not chosen; accept "whatever" for must-haves without recording an explicit assumption and getting it approved at the read-back.
|
|
135
|
+
|
|
136
|
+
## Unattended or no-answer mode
|
|
137
|
+
If nobody can answer: fill `assumed` values from the decision tables, label every one in the brief, produce a **short** concept (not the full build), and stop at G1 with the list of questions you would ask. Do not run paid steps.
|
|
138
|
+
|
|
139
|
+
## Interview log format (`interview.md`)
|
|
140
|
+
```
|
|
141
|
+
Round 3 — Goal and action (clarity 71% -> 79%)
|
|
142
|
+
Q: After the video, what should happen? | A: "Book a demo" | status: confirmed
|
|
143
|
+
Q: Terms of the offer? | A: unknown (they will check) | status: unknown
|
|
144
|
+
Follow-up: ...
|
|
145
|
+
```
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# Looks
|
|
2
|
+
|
|
3
|
+
A **look** is a data file that fixes every visual decision so scenes cannot drift. Files live in `looks/<name>.md`. Never use colors, fonts or easings that are not in the active look.
|
|
4
|
+
|
|
5
|
+
## Token spec
|
|
6
|
+
|
|
7
|
+
Each look file (`looks/<name>.md`) is a set of tables with these sections. Example values are from `clean-light`:
|
|
8
|
+
|
|
9
|
+
| Section | What it fixes | Example |
|
|
10
|
+
|---|---|---|
|
|
11
|
+
| Palette | `bg`, `surface`, `text`, `textMuted`, `accent`, `signal`, `positive`, `negative`, `blocks` (flat scene colours) | bg #F6F7FB, accent #4B5CFF |
|
|
12
|
+
| Type | `display`, `body`, `mono` (family, weights, tracking, line height), scale (hero, title, body, caption), case | Inter Tight 700-800, tracking -0.02 |
|
|
13
|
+
| Motion | easing (enter, exit, move, spring), speed, stagger, blur on motion, signature transition | enter expo.out, card-slide |
|
|
14
|
+
| Surface | radius, shadow, glass | radius 28, soft shadow |
|
|
15
|
+
| Texture | grain, gradient | grain 0.04 |
|
|
16
|
+
| Sound | palette, music mood, impact style | soft-click, air-whoosh |
|
|
17
|
+
| Do / Don't | the look's rules in plain words | one accent per scene |
|
|
18
|
+
|
|
19
|
+
Rules:
|
|
20
|
+
- Font families must be from the font ledger (Google Fonts/Fontsource or user-supplied). Check glyph coverage for every character used.
|
|
21
|
+
- `blocks` colors are used for flat scene backgrounds in S2/S7; each scene uses exactly one.
|
|
22
|
+
- Dark looks must pass contrast on `text` vs `bg` at 4.5:1 minimum.
|
|
23
|
+
|
|
24
|
+
## Starter looks (original palettes; replace after direction notes)
|
|
25
|
+
|
|
26
|
+
| Look | Mood | Use with styles | Signature |
|
|
27
|
+
|---|---|---|---|
|
|
28
|
+
| `clean-light` | calm, credible | S1 (after turn), S4, S5 | pale bg, white cards, one blue accent, soft shadows, card-slide |
|
|
29
|
+
| `dark-product` | focused, premium | S1 (before turn), S3 (AI half), S7 (black beats) | near-black bg, violet accent, mint signal, glow edges |
|
|
30
|
+
| `bold-kinetic` | energetic, confident | S2, S6, S7 | flat saturated blocks, heavy display type, hard cuts, burst |
|
|
31
|
+
|
|
32
|
+
## Creating a new look
|
|
33
|
+
|
|
34
|
+
Do **not** do this unless the person provides direction notes. Ask for:
|
|
35
|
+
1. Three adjectives for the feel.
|
|
36
|
+
2. Colors or fonts they like and dislike (links or screenshots).
|
|
37
|
+
3. Brand colors and fonts if any (they override).
|
|
38
|
+
4. Light or dark, calm or loud.
|
|
39
|
+
5. One reference video they like (for pattern analysis, not copying).
|
|
40
|
+
|
|
41
|
+
Then: propose palette (with contrast checks), font pairing (from ledger), easing set, signature transition, sound palette. Render 3 style frames (G3). Save as `looks/<name>.md`. Log in `CHANGELOG.md`.
|
|
42
|
+
|
|
43
|
+
## Brand override
|
|
44
|
+
|
|
45
|
+
If the person has brand colors/fonts: map them to `accent`, `bg`, `text`, `display` and rebuild the rest of the tokens around them so contrast and scale rules still pass. Note any brand color that fails contrast and propose the nearest passing shade.
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# flomotion MCP tools
|
|
2
|
+
|
|
3
|
+
The server (`flomotion mcp --dir <project folder>`) exposes these 39 tools and 4 resources. They are the real list (checked by a test against the server). You call them by bare name; your client may prefix them with the server name you registered.
|
|
4
|
+
|
|
5
|
+
Every write returns `{ description, patches, undoToken }`. The undo token is a history snapshot id: `history_restore {id}` puts the file back. Every write snapshots first, so you can always go back. Errors come back as `{ error: { code, message, fix } }`: read the `fix` and act on it; do not retry the same call.
|
|
6
|
+
|
|
7
|
+
## Phase map
|
|
8
|
+
|
|
9
|
+
| Phase | Tools (in order) | Notes |
|
|
10
|
+
|---|---|---|
|
|
11
|
+
| Setup | `setup_status` | First call of every video. Says which keys are set (never the keys), what is installed, what each job can use, and what is missing. The person adds keys with `flomotion setup` in a terminal; you never ask for a key in the chat. |
|
|
12
|
+
| Project | `project_create {name, size:"1080x1920", fps, template:"blank"\|"saas-promo", look, duration}`, `project_read {path?, depth?}` | `look` is a look id: `clean-light`, `dark-product`, `bold-kinetic` (the skill's looks) or the engine's `kinetic`, `minimal`, `sketch`. `saas-promo` scaffolds six empty beat scenes (30 s); for other lengths use `blank` and write the scenes from the storyboard. `project_read` shows the outline and the `ui` address when the live view is on. |
|
|
13
|
+
| Look and fonts | `font_list`, `font_get {id}` for each look font, `font_check {text, fontId}`, `font_preview {fontId, text, size}`, `font_search` | `font_get` downloads, locks the hash and writes the ledger; a new family name is added as a `<Font>`. Renders never use the network. `font_search` needs `GOOGLE_FONTS_API_KEY`. |
|
|
14
|
+
| Script | (no tool) | Write `brief.md`, `script.md`, `storyboard.md`, `LOG.md` with your normal file tools in the project folder. The live view reads them. |
|
|
15
|
+
| Style frames | `scene_write` (key scenes), `lint`, `frame_render {time, scale?}`, `contact_sheet {times?\|count?}` | G3. Read the PNGs: describe what you see. |
|
|
16
|
+
| Build | `scene_write` per scene (or `element_add` / `element_set` / `element_remove` / `element_move` / `effect_add` / `keyframe_set` / `edit`) | `lint` after each scene. `references/block-recipes.md` has the 13 core blocks as TSX. |
|
|
17
|
+
| Own material | `voice_import {source, transcript?}`, `transcript_import {audio, source\|text}`, `sound_import {source, rights, tag?}`, `asset_import {source, rights}` | The person's own recording, transcript or captions, sound files, logos, images and video, from anywhere on their computer. They state their rights; the tools record them in the ledger. |
|
|
18
|
+
| Assets | `asset_search {query, kind}`, `asset_get {ref, color?, permission?}`, `asset_capture {url, permission}`, `brand_extract {url, permission}` | Icons, brand logos, emoji, photos, illustrations; screenshots of their product; their site's brand. See `assets.md`. |
|
|
19
|
+
| Voice | `voice_quote {provider, text, voice, model?, voiceSettings?}` (energetic read on eleven_multilingual_v2: stability 0.3, similarity 0.8, style 0.55, speed 1.1, speakerBoost true; free ElevenLabs plans cannot use Voice Library voices through the API, only premade ones) then, after the person's yes, `voice_generate {quoteId, confirm:true}`; `transcribe {audio}` for a recording | Providers: `recording` (their file, free), `local-tts` (macOS `say`, a timing draft), `elevenlabs` (paid). ElevenLabs returns word timings itself; for a recording run `transcribe` and read the words against the script. |
|
|
20
|
+
| Align | `align_to_voice {voiceId, mapping:[{id, word, edge?, prop?, offset?}]}` | Starts elements on spoken words. Do this after the voice exists. |
|
|
21
|
+
| Sound | `sound_auto` (dry run, then `apply:true`), `sound_search {tag?, query?}`, `sound_get {id, tag?}`, then `element_add Sound` | Ledger entry per sound; CC0 and CC-BY only unless `flomotion.json` restricts further. |
|
|
22
|
+
| Mix | `mix_preview {range?}` | Measures LUFS, true peak and where each sound's peak lands. It does not play anything. |
|
|
23
|
+
| Review | `lint`, `review {checklist?, deep?}`, `contact_sheet` | Up to 3 rounds. `review` returns pass / fail / warn / manual per check and a contact sheet. |
|
|
24
|
+
| Render | `render {preset:"draft"\|"social"\|"final"}` | Lint errors block it. Writes `<name>.credits.txt` and `<name>.licenses.json` next to the video. Final only after G5 approval. |
|
|
25
|
+
| History | `history_list`, `history_restore {id}` | Note the snapshot id at each gate approval in `LOG.md`. |
|
|
26
|
+
|
|
27
|
+
Resources: `flomotion://schema/{component}` (props, ranges, docs), `flomotion://project/outline`, `flomotion://ledger`, `flomotion://looks`.
|
|
28
|
+
|
|
29
|
+
## Calling rules
|
|
30
|
+
|
|
31
|
+
1. `lint` after every `scene_write`; fix errors before moving on.
|
|
32
|
+
2. Prefer `scene_write` with a block recipe over many small edits; use `element_set` and `keyframe_set` for single changes. A prop written as an expression in the file cannot be changed by `element_set` (`opaque_expression`): rewrite that element with `scene_write`.
|
|
33
|
+
3. Name every element (`hero-line`, `title-1`) so checks and notes can reference them. Ids are stable; `element_set` refuses to rename.
|
|
34
|
+
4. Declare the hero and the turn: put the hero's id in `storyboard.md`, and add `<Marker id="turn" at="..." label="Turn" />` where the story turns. `review` item 2 finds a hero that spans four scenes; the rest of the hero and turn checks are yours.
|
|
35
|
+
5. Render drafts with `preset:"draft"`; use `frame_render` for checking.
|
|
36
|
+
6. Never call `voice_generate` outside the quote and confirm gate, and never `render` with `preset:"final"` before G5 is approved.
|
|
37
|
+
7. When a tool fails: read the code and the fix; retry once with the fix; if it still fails, report the exact error and what you tried. Do not edit thresholds or skip a check to get around it.
|
|
38
|
+
|
|
39
|
+
## Error codes
|
|
40
|
+
|
|
41
|
+
| Code | Meaning | What to do |
|
|
42
|
+
|---|---|---|
|
|
43
|
+
| `schema_violation` | Unknown component or prop, value out of range, TSX does not parse, or a lint error was introduced | Read `fix`; check `flomotion://schema/<Component>` |
|
|
44
|
+
| `opaque_expression` | The target is code in the file, not a literal | `scene_write` the element |
|
|
45
|
+
| `track_locked`, `overlap_rejected` | Timeline rule | Change the plan or ask the person |
|
|
46
|
+
| `duplicate_keyframe`, `invalid_time` | Keyframe times collide or are not literal | Give each key its own time (a frame apart) |
|
|
47
|
+
| `impure_expression` | TSX uses `Math.random`, `Date.now`, timers or fetch | Use `ctx.noise(seed, freq)` and the time `t` |
|
|
48
|
+
| `asset_missing`, `license_blocked` | File missing, or a sound/font licence is not allowed | Fetch another with `sound_get` / `font_get` |
|
|
49
|
+
| `quote_required` | You tried a paid step without the quote and the person's yes | Show the quote, wait, then `confirm:true` |
|
|
50
|
+
| `missing_dependency` | No Freesound key, no Whisper, no ElevenLabs key | Tell the person exactly what to set up (see the manual checklist) |
|
|
51
|
+
| `unknown_element`, `invalid_edit`, `path_outside_project`, `font_error`, `render_failed` | Wrong id, bad operation, path outside the folder, font file problem, render failure | Read `message` and `fix` |
|
|
52
|
+
|
|
53
|
+
## Files you write (with your own file tools)
|
|
54
|
+
|
|
55
|
+
`brief.md` (interview), `script.md` (beats), `storyboard.md` (block, params, durations, hero, turn, sound tags), `LOG.md` (decisions, gate approvals with snapshot ids, anything not run), `review/` (reports).
|
|
56
|
+
|
|
57
|
+
Storyboard beat shape (`storyboard.md`, one `##` heading per beat; the live view's Storyboard tab reads it):
|
|
58
|
+
|
|
59
|
+
```
|
|
60
|
+
## 3. Turn · 7.1-10.3 s
|
|
61
|
+
- Block: ProductReveal
|
|
62
|
+
- Scene: reveal
|
|
63
|
+
- Voice: "Meet Pulse."
|
|
64
|
+
- On screen: Meet Pulse.
|
|
65
|
+
- Motion: slide in from the south, the hero grows
|
|
66
|
+
- Sound: move/whip peaking at 7.1 s
|
|
67
|
+
- Why it works: the look stays clean-light; one hero carried across the cut
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
See `references/storyboard.md` for the full format, `ideas.md` and how the board shows what is built.
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# Motion rules
|
|
2
|
+
|
|
3
|
+
All motion is deterministic: a pure function of time (no `Math.random`, no `Date.now`). Seeded noise only (`ctx.noise(seed, freq)`).
|
|
4
|
+
|
|
5
|
+
## Principles
|
|
6
|
+
1. **Anticipate, move, settle.** Enter fast, decelerate (ease-out), land with a tiny settle. Exit shorter and softer than enter.
|
|
7
|
+
2. **Weight.** Large objects move slower with longer settles; small objects snap. Impacts add shake or thud scaled to size.
|
|
8
|
+
3. **Overlap.** Stagger children by `staggerMs` (40-120 ms); never animate all at once.
|
|
9
|
+
4. **Hierarchy.** The hero moves most; supporting items move less and later.
|
|
10
|
+
5. **Restraint.** One primary motion per scene; secondary motion is subtle.
|
|
11
|
+
6. **Rhythm.** Tie major moves to beats or voice stresses; vary scene lengths.
|
|
12
|
+
|
|
13
|
+
## Easing
|
|
14
|
+
- Enter: `expo.out` / `power3.out` (default). Exit: `power3.in`. Move A->B: `power3.inOut`. Playful: `back.out(1.2-1.6)` (overshoot <= 8%).
|
|
15
|
+
- Never `linear` for position or scale (OK for rotation loops, progress bars, color fades).
|
|
16
|
+
- Use the look's easing tokens; do not mix more than 3 easings per video.
|
|
17
|
+
|
|
18
|
+
## Durations (starting values)
|
|
19
|
+
| Motion | Seconds |
|
|
20
|
+
|---|---|
|
|
21
|
+
| Text word enter | 0.35-0.55 |
|
|
22
|
+
| Card enter | 0.45-0.7 |
|
|
23
|
+
| Transition | 0.25-0.7 |
|
|
24
|
+
| Exit | 0.2-0.4 |
|
|
25
|
+
| Camera push (slow) | 2-4 |
|
|
26
|
+
| Counter | 1-1.8 |
|
|
27
|
+
| Settle hold before next beat | 0.3-0.5 |
|
|
28
|
+
|
|
29
|
+
## Motion blur
|
|
30
|
+
- Apply by velocity with a 180° shutter, sub-frame samples 4-8. Blur while moving, crisp at rest. Skip blur on text at rest and on tiny UI.
|
|
31
|
+
|
|
32
|
+
## 8-direction entrance
|
|
33
|
+
Directions: `n, ne, e, se, s, sw, w, nw`. Distance 8-14% of the frame (text) or full off-screen (cards). Alternate directions across items (e.g. from left, then right) for rhythm; keep one dominant direction per scene.
|
|
34
|
+
|
|
35
|
+
## Impacts (use sparingly, on beats)
|
|
36
|
+
- Shake: `shake = amp * exp(-decay*t) * noise1D(t*freq, seed)`. Typical `amp` 6-18 px, `decay` 8-14, `freq` 14-24.
|
|
37
|
+
- Thud (scale kick): `thud = amp * exp(-damping*t) * cos(2*pi*freq*t)`. `amp` 3-8%, `damping` 9-14, `freq` 5-8.
|
|
38
|
+
- Place at the sound's `peak` frame. Max one impact per 1.5 s.
|
|
39
|
+
|
|
40
|
+
## Transitions (when to use)
|
|
41
|
+
| Transition | Use for | Notes |
|
|
42
|
+
|---|---|---|
|
|
43
|
+
| Hard cut on beat | Same-color scene lists | Pair with a click |
|
|
44
|
+
| Color-block wipe | S2, S7 | Next scene's bg color wipes in |
|
|
45
|
+
| Match-cut wipe (split) | S1 turn | Align shared geometry centers |
|
|
46
|
+
| Wedge/spike wipe | S3 turn | Follows the motif head |
|
|
47
|
+
| Shape morph | S4, S5 | Blob/circle becomes next element or logo |
|
|
48
|
+
| Card slide | Clean looks | Cards slide + settle |
|
|
49
|
+
| Glow wipe | Dark looks | Soft light sweep |
|
|
50
|
+
| Zoom through | Device to UI | Scale 1 -> 3 with blur then crossfade |
|
|
51
|
+
|
|
52
|
+
Rules: <= 1 transition type per 3 scenes except hard cuts; duration 0.25-0.7 s; never default crossfade for everything.
|
|
53
|
+
|
|
54
|
+
## Camera
|
|
55
|
+
Slow push-in (3-8% over the scene) on pain/static shots; perspective tilt for devices (8-18°); parallax between 2-3 depth layers (offsets 4-12%). No handheld shake unless the look defines it.
|
|
56
|
+
|
|
57
|
+
## Hero continuity
|
|
58
|
+
Declare `hero` in the storyboard (line, circle, object, logo-color). It appears in every scene or every second scene, keeps its shape logic, and transitions (Bridge) carry it. A hero that changes style mid-video is a defect.
|
|
59
|
+
|
|
60
|
+
## Text animation menu (rotate, do not repeat in a row)
|
|
61
|
+
Per-word slide-up with mask; per-letter stagger (for 1-2 words); scale-in with overshoot; typewriter with caret (for queries); karaoke highlight; strike with scanline; swap (old word slides out, new in); cropped giant type that slides across.
|
|
62
|
+
|
|
63
|
+
## Do not
|
|
64
|
+
- Animate everything at once.
|
|
65
|
+
- Use the same entrance for more than 3 consecutive elements.
|
|
66
|
+
- Use ease-in for entrances.
|
|
67
|
+
- Let motion cover text that must be read (hold at least 0.4 s).
|
|
68
|
+
- Add motion that is not motivated (explainable in one line).
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# 21 patterns (distilled rules)
|
|
2
|
+
|
|
3
|
+
Each pattern: **rule**, **seen in** (ads from `catalogue.md`), **how to apply in flomotion**, **check**. Strength: S strong (3+ ads), M medium (2), W weak (1). Strength is provisional until rated.
|
|
4
|
+
|
|
5
|
+
| # | Rule | Seen | Str | Apply | Check |
|
|
6
|
+
|---|---|---|---|---|---|
|
|
7
|
+
| 1 | One idea and one color world per scene | A B C D G | S | One block per scene; background token per scene | `look-consistency` |
|
|
8
|
+
| 2 | Text is the hero: large, short, six words or fewer | A B C D G | S | `Title` size >= headline min; words <= 6 | `text-words`, `min-size` |
|
|
9
|
+
| 3 | Include a visible **turn**: look changes when problem becomes solution (dark->light, tangled->calm, question->answer, grey->color) | A C F G | S | `Turn` marker at storyboard; change palette or space at that beat | `turn-present` (warn) |
|
|
10
|
+
| 4 | Product appears in the second half, simplified or stylized | A C D E G | S | Product blocks after the turn; skeleton or stylized UI by default | `product-after-turn` |
|
|
11
|
+
| 5 | Brand arrives late or is built from the motion | A B D G | S | Logo reveal via shape assembly or morph | `logo-late` |
|
|
12
|
+
| 6 | Proof is specific: a number, credential, or a named person | A B D | S | Proof block with real, supplied fact only | `proof-sourced` |
|
|
13
|
+
| 7 | One recurring motif ties the scenes (a line, circle, object, palette) | A C G B | S | Declare `hero` in storyboard; carry it across blocks | `hero-continuity` |
|
|
14
|
+
| 8 | Motion blur while moving, crisp when landed | C D G | S | Blur by velocity (180° shutter); settle sharp | `blur-on-motion` (info) |
|
|
15
|
+
| 9 | Grain on gradients so flat color feels textured | C D | M | `Grain` overlay 3-8% on gradient scenes | `grain-range` |
|
|
16
|
+
| 10 | One template repeated with a word swap | B C | M | Reuse a block, vary only text/color; keep timing identical | `template-reuse` (info) |
|
|
17
|
+
| 11 | Split one sentence across several scenes | C D G | S | `SentenceSplit` helper: one sentence, N scenes, one shared baseline | `sentence-split-ok` |
|
|
18
|
+
| 12 | Glass or frosted UI over real footage for context | D E | M | `GlassUI` over `Footage` with backdrop blur | `contrast` |
|
|
19
|
+
| 13 | Shapes act as transitions and logo births | B D G A | S | `ShapeMorph`, `WipeMatchCut`; logo from shapes | `transition-count` |
|
|
20
|
+
| 14 | Modular cards, not one big screenshot | A B C | S | `CardGrid`, `OrbitCards`; each card one idea | `text-overlap` |
|
|
21
|
+
| 15 | Footage becomes the UI (same clip reused in product) | F | W | `FootageToUI` block | none |
|
|
22
|
+
| 16 | Cursor name tags show collaboration | F | W | `CursorTag` | none |
|
|
23
|
+
| 17 | Gesture callouts with touch ripple and bubble | G | W | `GestureCallout` | `min-size` |
|
|
24
|
+
| 18 | Alternate black and a saturated color for rhythm | G C | M | Alternating bg tokens every 1-2 beats | `look-consistency` |
|
|
25
|
+
| 19 | Glossy 3D props around text (render, keep deterministic) | G C A | M | `Scene3D` props; limit to 3-5 objects | `determinism` |
|
|
26
|
+
| 20 | Burst backgrounds mark impacts | G | W | `Burst` radial dashes on impact frame | `sound-on-impact` |
|
|
27
|
+
| 21 | Show the old way **small and grey**, the new way **big and colored** | G C A | S | `OldWay` block (muted) then product block (saturated) | `turn-present` |
|
|
28
|
+
|
|
29
|
+
## Pain handling rules (from A, C, G, F)
|
|
30
|
+
- Pain is shown, not described: image (A), tangled motif (C), clutter windows (G), relatable human moment (F).
|
|
31
|
+
- Pain share by style family: metaphor contrast 10-20%, pain-to-calm 40-50%, trend explainer 0-10% (implied), real-UI demo 0%, 3D object 20-30%.
|
|
32
|
+
- When pain takes more than 25% of runtime, vary its flavor each scene (apps, tools, questions) so it never repeats.
|
|
33
|
+
- End pain with a short, calm line (C: "It's time to kill sprawl.").
|
|
34
|
+
|
|
35
|
+
## Persuasion arc (works with every style family)
|
|
36
|
+
1. **Hook** (0-3 s): curiosity question, bold claim, or pain image. Motion from frame 0.
|
|
37
|
+
2. **Pain / context** (variable): why now or why it hurts.
|
|
38
|
+
3. **Turn** (a moment): the look changes.
|
|
39
|
+
4. **Promise** (one sentence): plain words. ("Simple and secure data rooms.")
|
|
40
|
+
5. **Product** (2-3 features max): show, do not explain.
|
|
41
|
+
6. **Proof**: specific number, credential, or named customer.
|
|
42
|
+
7. **CTA**: brand lock, one line, URL or button.
|
|
43
|
+
|
|
44
|
+
## What not to copy
|
|
45
|
+
Logos, footage, music, UI screenshots, slogans, the exact color-per-customer palette of any ad, specific icons, names. Build equivalents from the look and the person's own assets.
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# Review protocol
|
|
2
|
+
|
|
3
|
+
Two properties are tracked separately.
|
|
4
|
+
- **Floor**: never broken or amateurish. Mostly automatic (`checks.md`).
|
|
5
|
+
- **Ceiling**: feels designed. Needs the person's taste; you prepare, they judge.
|
|
6
|
+
|
|
7
|
+
## Your review loop (before showing any draft)
|
|
8
|
+
1. `lint` the project. Fix errors.
|
|
9
|
+
2. `contact_sheet` at: frame 0, hook peak, last pain frame, turn, product, proof, CTA, final frame, plus every 2 s.
|
|
10
|
+
3. **Read the frames as images.** For each: is the text readable, inside the safe area, not overlapping? Is anything cut off? Is the hero visible? Write what you see in one line per frame.
|
|
11
|
+
4. `review` (all checks). Fix every HARD; fix WARN where cheap; explain WARN left.
|
|
12
|
+
5. Scan `anti-patterns.md`.
|
|
13
|
+
6. Repeat up to 3 rounds. If still failing, show the draft with the failure list and your plan. Never hide a failure.
|
|
14
|
+
|
|
15
|
+
## What to present with a draft
|
|
16
|
+
1. Draft video (reduced size) + contact sheet.
|
|
17
|
+
2. Check table: counts, HARD list (should be empty), WARN list with reasons.
|
|
18
|
+
3. Anti-pattern scan: items found and fixed.
|
|
19
|
+
4. Hero and turn: where they are in time.
|
|
20
|
+
5. **Needs your review** (things only a human can judge): look feel, font pairing, sound choices, music mood, voice tone, any brand-sensitive claim.
|
|
21
|
+
6. The one decision you need.
|
|
22
|
+
|
|
23
|
+
## Human rating rubric (1-5, the person fills in)
|
|
24
|
+
| Dimension | 1 | 3 | 5 |
|
|
25
|
+
|---|---|---|---|
|
|
26
|
+
| Hook | Ignorable | Fine | Stops me instantly |
|
|
27
|
+
| Story clarity | Confusing | Understandable | Obvious in one watch |
|
|
28
|
+
| Visual polish | Looks templated/broken | Clean | Looks designed by a pro |
|
|
29
|
+
| Motion quality | Jerky or flat | Smooth | Has weight and rhythm |
|
|
30
|
+
| Typography | Hard to read | OK | Confident, readable |
|
|
31
|
+
| Sound | Distracting | Neutral | Adds punch and feel |
|
|
32
|
+
| Look consistency | Drifts | Mostly consistent | One coherent world |
|
|
33
|
+
| Would I post this | No | With edits | Yes as is |
|
|
34
|
+
|
|
35
|
+
Targets (initial): average >= 4.0 per dimension on >= 8 of 10 test briefs; all HARD checks pass within 3 rounds.
|
|
36
|
+
|
|
37
|
+
## Using the ratings
|
|
38
|
+
- Any dimension averaging < 3.5: find the cause (see table), change the system at the right level, rerun evals.
|
|
39
|
+
|
|
40
|
+
| Weak dimension | Likely cause | Fix at |
|
|
41
|
+
|---|---|---|
|
|
42
|
+
| Hook | Static open, weak line | Hook block defaults, `copywriting.md` hook types |
|
|
43
|
+
| Story | Missing turn/promise | Story template, `turn-present` |
|
|
44
|
+
| Polish | Cluttered or default easing | Look tokens, anti-patterns |
|
|
45
|
+
| Motion | Same easing everywhere, no overlap | `motion.md`, stagger, blur |
|
|
46
|
+
| Typography | Small, low contrast | `min-size`, `contrast` thresholds |
|
|
47
|
+
| Sound | Misplaced peaks, mood | Sound palette, placement |
|
|
48
|
+
| Consistency | Mixed tokens | `look-consistency`, tighten looks |
|
|
49
|
+
| Would post | Combined | Look at free-text notes |
|
|
50
|
+
|
|
51
|
+
- Keep a change only if ratings or pass rates do not get worse across the 10 briefs. Record in `CHANGELOG.md`.
|
|
52
|
+
|
|
53
|
+
## Honesty rules
|
|
54
|
+
- Say "I measured" or "I saw in frame X"; never "it looks great".
|
|
55
|
+
- If a render, tool or check did not run, say so.
|
|
56
|
+
- If you changed a threshold or skipped a check, say so and why.
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# Script craft: an engineered, catchy script
|
|
2
|
+
|
|
3
|
+
A script that holds attention is built, not inspired. Use these in order; each rule has a reason and a test.
|
|
4
|
+
|
|
5
|
+
## 1. The hook (0-3 s): pattern interrupt + a promise
|
|
6
|
+
|
|
7
|
+
- **Contrast:** two short sentences that flip ("Stop editing videos. Start describing them."). The first names what they do now, the second the better way.
|
|
8
|
+
- **Direct address:** "you", imperative verbs. No "welcome to", no brand name yet.
|
|
9
|
+
- **Open a loop** the end will close: the prompt typed in the hook comes back rendered in the CTA.
|
|
10
|
+
- Test: read only the first 2 seconds aloud. Would a stranger scrolling stop?
|
|
11
|
+
|
|
12
|
+
## 2. The pain (3-7 s): rule of four, staccato
|
|
13
|
+
|
|
14
|
+
- Four one-word beats on the beat grid ("Timelines. Dragging. Exporting. Again."). Each word is its own hard cut and colour; the last word is the sting.
|
|
15
|
+
- Name the *verbs of the old way*, not feelings. Specific beats generic.
|
|
16
|
+
- Test: could a competitor's ad use the same words? Then they are too generic.
|
|
17
|
+
|
|
18
|
+
## 3. The turn: a visual metaphor, silent
|
|
19
|
+
|
|
20
|
+
- A short silent beat with a motion metaphor (two dots merge, split and grow into the next slide). The audio drops out, then lands the product on the drop.
|
|
21
|
+
- Test: remove the voiceover; can you still see the story turn?
|
|
22
|
+
|
|
23
|
+
## 4. The promise: name + one line
|
|
24
|
+
|
|
25
|
+
- "Meet <name>. <One concrete line>." The line is a fact about the product, not a benefit adjective ("One TSX file.").
|
|
26
|
+
- Match-cut the turn into it (a vault door opening on the circle the dots grew into).
|
|
27
|
+
|
|
28
|
+
## 5. The proof: specific, true, checkable
|
|
29
|
+
|
|
30
|
+
- Numbers only from the repo or the brief, and each one verified before it is on screen (39 tools from `tools/list`, 17 checks from `review`).
|
|
31
|
+
- Rule of three for features ("Licensed. Logged. Locked."); each word lands on its spoken beat.
|
|
32
|
+
- Never claim what you cannot show or measure. If a claim cannot be checked, cut it or rewrite it as something that can ("Diff it like code" instead of "same video every time").
|
|
33
|
+
|
|
34
|
+
## 6. The reveal and the CTA
|
|
35
|
+
|
|
36
|
+
- **Reframe:** one line that changes how they saw the film ("This whole ad is one TSX file.").
|
|
37
|
+
- **Callback:** close the loop opened in the hook.
|
|
38
|
+
- **One action, one command:** `npx flomotion`. Hold it for at least 1 s.
|
|
39
|
+
|
|
40
|
+
## Timing and voice
|
|
41
|
+
|
|
42
|
+
- 128 bpm: one beat = 0.46875 s, 64 beats = 30 s. Cuts on beats; words start on beats.
|
|
43
|
+
- 2.0-2.8 words per second. A line that needs more than 1.2x speed-up is too long: cut words, do not squeeze.
|
|
44
|
+
- One voice clip per phrase, placed on the beat, so the word times are exact.
|
|
45
|
+
- Say tricky words phonetically in the voice text ("flow-motion", "T S X") and map them back to the display spelling in the captions.
|
|
46
|
+
- Write copy that cannot be misheard: avoid heteronyms (e.g. "live" the adjective vs the verb); pick another word.
|
|
47
|
+
|
|
48
|
+
## The ten-second audit
|
|
49
|
+
|
|
50
|
+
1. Hook has a contrast and no brand name.
|
|
51
|
+
2. Pain is four specific words.
|
|
52
|
+
3. Turn works without sound.
|
|
53
|
+
4. Promise is a fact.
|
|
54
|
+
5. Every number is verified.
|
|
55
|
+
6. Three features max, in threes of words.
|
|
56
|
+
7. A reveal and a callback.
|
|
57
|
+
8. One CTA.
|
|
58
|
+
9. No word on screen that is not either spoken or a number.
|
|
59
|
+
10. No claim you could not show.
|