@anvpx/motion 0.0.0-stage → 0.1.1
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/CATALOG.md +301 -0
- package/LICENSE +21 -0
- package/README.md +95 -2
- package/assets.json +37 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/main.d.ts +2 -0
- package/dist/main.js +46 -0
- package/icons/LICENSE-lucide +43 -0
- package/icons/icons.json +2711 -0
- package/icons/licences.json +1521 -0
- package/luts/LICENSE-CC0.txt +20 -0
- package/luts/cool.cube +520 -0
- package/luts/noir.cube +520 -0
- package/luts/warm.cube +520 -0
- package/music/LICENSE-CC0.txt +32 -0
- package/music/bed-full.wav +0 -0
- package/music/bed.wav +0 -0
- package/package.json +69 -3
- package/packs/INDEX.md +22 -0
- package/packs/painted/checklist.md +30 -0
- package/packs/painted/examples/dry-ink/storyboard.json +88 -0
- package/packs/painted/examples/oil/storyboard.json +89 -0
- package/packs/painted/examples/shape-carry/storyboard.json +112 -0
- package/packs/painted/examples/stacked-beat/storyboard.json +106 -0
- package/packs/painted/examples/staged-read/storyboard.json +105 -0
- package/packs/painted/examples/watercolour/storyboard.json +79 -0
- package/packs/painted/look.md +71 -0
- package/packs/painted/pack.json +46 -0
- package/packs/painted/review.md +12 -0
- package/packs/painted/voice.md +30 -0
- package/plugins/motion-kit/.claude-plugin/plugin.json +5 -0
- package/plugins/motion-kit/README.md +39 -0
- package/plugins/motion-kit/commands/mk-draft.md +13 -0
- package/plugins/motion-kit/commands/mk-new.md +15 -0
- package/plugins/motion-kit/commands/mk-render.md +14 -0
- package/plugins/motion-kit/skills/motion-kit/SKILL.md +81 -0
- package/plugins/motion-kit/skills/motion-kit/references/authoring-scene.md +48 -0
- package/plugins/motion-kit/skills/motion-kit/references/authoring-style.md +19 -0
- package/plugins/motion-kit/skills/motion-kit/references/common-mistakes.md +73 -0
- package/plugins/motion-kit/skills/motion-kit/references/content-pack.md +69 -0
- package/plugins/motion-kit/skills/motion-kit/references/craft-color.md +50 -0
- package/plugins/motion-kit/skills/motion-kit/references/craft-composition.md +52 -0
- package/plugins/motion-kit/skills/motion-kit/references/craft-critique.md +68 -0
- package/plugins/motion-kit/skills/motion-kit/references/craft-motion.md +55 -0
- package/plugins/motion-kit/skills/motion-kit/references/craft-narrative.md +54 -0
- package/plugins/motion-kit/skills/motion-kit/references/craft-sound.md +53 -0
- package/plugins/motion-kit/skills/motion-kit/references/craft-type.md +54 -0
- package/plugins/motion-kit/skills/motion-kit/references/critique-repair.md +46 -0
- package/plugins/motion-kit/skills/motion-kit/references/decision-packet.md +59 -0
- package/plugins/motion-kit/skills/motion-kit/references/direction.md +84 -0
- package/plugins/motion-kit/skills/motion-kit/references/faux-ui.md +39 -0
- package/plugins/motion-kit/skills/motion-kit/references/free-storyboard.md +15 -0
- package/plugins/motion-kit/skills/motion-kit/references/intake.md +44 -0
- package/plugins/motion-kit/skills/motion-kit/references/knowledge-routing.md +58 -0
- package/plugins/motion-kit/skills/motion-kit/references/outline.md +34 -0
- package/plugins/motion-kit/skills/motion-kit/references/patching.md +50 -0
- package/plugins/motion-kit/skills/motion-kit/references/patterns.md +55 -0
- package/plugins/motion-kit/skills/motion-kit/references/quality-bar.md +61 -0
- package/plugins/motion-kit/skills/motion-kit/references/review.md +8 -0
- package/plugins/motion-kit/skills/motion-kit/references/scene-recipes.md +300 -0
- package/plugins/motion-kit/skills/motion-kit/references/setup.md +16 -0
- package/plugins/motion-kit/skills/motion-kit/references/slop.md +40 -0
- package/plugins/motion-kit/skills/motion-kit/references/storyboard-json.md +121 -0
- package/plugins/motion-kit/skills/motion-kit/references/themes.md +15 -0
- package/plugins/motion-kit/skills/motion-kit/references/troubleshooting.md +55 -0
- package/plugins/motion-kit/skills/motion-kit/references/voice.md +61 -0
- package/plugins/motion-kit/skills/motion-kit/references/worked-decisions.md +178 -0
- package/plugins/motion-kit/skills/motion-kit/references/worked-example.md +170 -0
- package/shared/themes/README.md +5 -0
- package/shared/themes/bold-dark.json +362 -0
- package/shared/themes/bold-light.json +362 -0
- package/shared/themes/calm-dark.json +362 -0
- package/shared/themes/calm-light.json +362 -0
- package/shared/themes/data-dark.json +360 -0
- package/shared/themes/data-light.json +360 -0
- package/shared/themes/editorial-dark.json +353 -0
- package/shared/themes/editorial-light.json +353 -0
- package/shared/themes/fjord-dark.json +124 -0
- package/shared/themes/fjord-light.json +124 -0
- package/shared/themes/playful-dark.json +362 -0
- package/shared/themes/playful-light.json +362 -0
- package/shared/themes/pop-dark.json +352 -0
- package/shared/themes/pop-light.json +352 -0
- package/shared/themes/tech-dark.json +360 -0
- package/shared/themes/tech-light.json +360 -0
- package/shared/themes/warm-dark.json +368 -0
- package/shared/themes/warm-light.json +368 -0
- package/skills/motion-kit/SKILL.md +81 -0
- package/skills/motion-kit/references/authoring-scene.md +48 -0
- package/skills/motion-kit/references/authoring-style.md +19 -0
- package/skills/motion-kit/references/common-mistakes.md +73 -0
- package/skills/motion-kit/references/content-pack.md +69 -0
- package/skills/motion-kit/references/craft-color.md +50 -0
- package/skills/motion-kit/references/craft-composition.md +52 -0
- package/skills/motion-kit/references/craft-critique.md +68 -0
- package/skills/motion-kit/references/craft-motion.md +55 -0
- package/skills/motion-kit/references/craft-narrative.md +54 -0
- package/skills/motion-kit/references/craft-sound.md +53 -0
- package/skills/motion-kit/references/craft-type.md +54 -0
- package/skills/motion-kit/references/critique-repair.md +46 -0
- package/skills/motion-kit/references/decision-packet.md +59 -0
- package/skills/motion-kit/references/direction.md +84 -0
- package/skills/motion-kit/references/faux-ui.md +39 -0
- package/skills/motion-kit/references/free-storyboard.md +15 -0
- package/skills/motion-kit/references/intake.md +44 -0
- package/skills/motion-kit/references/knowledge-routing.md +58 -0
- package/skills/motion-kit/references/outline.md +34 -0
- package/skills/motion-kit/references/patching.md +50 -0
- package/skills/motion-kit/references/patterns.md +55 -0
- package/skills/motion-kit/references/quality-bar.md +61 -0
- package/skills/motion-kit/references/review.md +8 -0
- package/skills/motion-kit/references/scene-recipes.md +300 -0
- package/skills/motion-kit/references/setup.md +16 -0
- package/skills/motion-kit/references/slop.md +40 -0
- package/skills/motion-kit/references/storyboard-json.md +121 -0
- package/skills/motion-kit/references/themes.md +15 -0
- package/skills/motion-kit/references/troubleshooting.md +55 -0
- package/skills/motion-kit/references/voice.md +61 -0
- package/skills/motion-kit/references/worked-decisions.md +178 -0
- package/skills/motion-kit/references/worked-example.md +170 -0
- package/stopwords.json +65 -0
- package/templates/compare/blueprints/versus.json +79 -0
- package/templates/compare/copy.md +18 -0
- package/templates/compare/pacing.json +15 -0
- package/templates/compare/previews/versus.png +0 -0
- package/templates/compare/styles/editorial.json +6 -0
- package/templates/compare/styles/punchy.json +6 -0
- package/templates/compare/styles/tidy.json +6 -0
- package/templates/compare/template.json +52 -0
- package/templates/datastory/blueprints/data-story.json +95 -0
- package/templates/datastory/blueprints/infographic.json +106 -0
- package/templates/datastory/blueprints/trend.json +93 -0
- package/templates/datastory/copy.md +16 -0
- package/templates/datastory/pacing.json +17 -0
- package/templates/datastory/previews/data-story.png +0 -0
- package/templates/datastory/previews/infographic.png +0 -0
- package/templates/datastory/previews/trend.png +0 -0
- package/templates/datastory/styles/clear.json +6 -0
- package/templates/datastory/styles/editorial.json +6 -0
- package/templates/datastory/styles/pop.json +7 -0
- package/templates/datastory/template.json +57 -0
- package/templates/event/blueprints/promo.json +71 -0
- package/templates/event/blueprints/save-the-date.json +61 -0
- package/templates/event/copy.md +16 -0
- package/templates/event/pacing.json +15 -0
- package/templates/event/previews/promo.png +0 -0
- package/templates/event/previews/save-the-date.png +0 -0
- package/templates/event/styles/bright.json +6 -0
- package/templates/event/styles/pop.json +6 -0
- package/templates/event/template.json +37 -0
- package/templates/explain/blueprints/architecture.json +76 -0
- package/templates/explain/blueprints/concept.json +89 -0
- package/templates/explain/blueprints/howto.json +56 -0
- package/templates/explain/blueprints/overview.json +126 -0
- package/templates/explain/copy.md +19 -0
- package/templates/explain/pacing.json +19 -0
- package/templates/explain/previews/architecture.png +0 -0
- package/templates/explain/previews/concept.png +0 -0
- package/templates/explain/previews/howto.png +0 -0
- package/templates/explain/previews/overview.png +0 -0
- package/templates/explain/styles/calm.json +6 -0
- package/templates/explain/styles/crisp.json +6 -0
- package/templates/explain/template.json +64 -0
- package/templates/guide/blueprints/lesson.json +173 -0
- package/templates/guide/blueprints/onboarding.json +80 -0
- package/templates/guide/blueprints/tutorial.json +102 -0
- package/templates/guide/copy.md +17 -0
- package/templates/guide/pacing.json +59 -0
- package/templates/guide/previews/lesson.png +0 -0
- package/templates/guide/previews/onboarding.png +0 -0
- package/templates/guide/previews/tutorial.png +0 -0
- package/templates/guide/styles/calm.json +15 -0
- package/templates/guide/styles/friendly.json +15 -0
- package/templates/guide/styles/techdark.json +15 -0
- package/templates/guide/template.json +95 -0
- package/templates/pitch/blueprints/feature.json +134 -0
- package/templates/pitch/blueprints/launch.json +173 -0
- package/templates/pitch/blueprints/pricing.json +141 -0
- package/templates/pitch/copy.md +18 -0
- package/templates/pitch/pacing.json +59 -0
- package/templates/pitch/previews/feature.png +0 -0
- package/templates/pitch/previews/launch.png +0 -0
- package/templates/pitch/previews/pricing.png +0 -0
- package/templates/pitch/styles/polished.json +6 -0
- package/templates/pitch/styles/punchy.json +6 -0
- package/templates/pitch/styles/teaser.json +12 -0
- package/templates/pitch/template.json +45 -0
- package/templates/recap/blueprints/news-recap.json +62 -0
- package/templates/recap/blueprints/timeline-story.json +94 -0
- package/templates/recap/copy.md +16 -0
- package/templates/recap/pacing.json +16 -0
- package/templates/recap/previews/news-recap.png +0 -0
- package/templates/recap/previews/timeline-story.png +0 -0
- package/templates/recap/styles/editorial.json +6 -0
- package/templates/recap/styles/editorialdark.json +6 -0
- package/templates/recap/template.json +50 -0
- package/templates/report/blueprints/kpi-review.json +116 -0
- package/templates/report/blueprints/status.json +78 -0
- package/templates/report/copy.md +17 -0
- package/templates/report/pacing.json +16 -0
- package/templates/report/previews/kpi-review.png +0 -0
- package/templates/report/previews/status.png +0 -0
- package/templates/report/styles/exec.json +6 -0
- package/templates/report/styles/memo.json +6 -0
- package/templates/report/styles/walkthrough.json +6 -0
- package/templates/report/template.json +56 -0
- package/templates/social/blueprints/announce.json +109 -0
- package/templates/social/blueprints/listicle.json +117 -0
- package/templates/social/blueprints/tip.json +114 -0
- package/templates/social/copy.md +18 -0
- package/templates/social/pacing.json +49 -0
- package/templates/social/previews/announce.png +0 -0
- package/templates/social/previews/listicle.png +0 -0
- package/templates/social/previews/tip.png +0 -0
- package/templates/social/styles/captioned.json +18 -0
- package/templates/social/styles/hook-first.json +15 -0
- package/templates/social/styles/techcut.json +15 -0
- package/templates/social/template.json +94 -0
- package/templates/update/blueprints/announcement.json +57 -0
- package/templates/update/blueprints/changelog.json +157 -0
- package/templates/update/blueprints/release-notes.json +151 -0
- package/templates/update/blueprints/weekly-update.json +88 -0
- package/templates/update/copy.md +17 -0
- package/templates/update/pacing.json +64 -0
- package/templates/update/previews/announcement.png +0 -0
- package/templates/update/previews/changelog.png +0 -0
- package/templates/update/previews/release-notes.png +0 -0
- package/templates/update/previews/weekly-update.png +0 -0
- package/templates/update/styles/punchy.json +15 -0
- package/templates/update/styles/techdark.json +6 -0
- package/templates/update/styles/tidy.json +6 -0
- package/templates/update/template.json +67 -0
- package/templates/vista/blueprints/spotlight.json +68 -0
- package/templates/vista/blueprints/tour.json +84 -0
- package/templates/vista/copy.md +18 -0
- package/templates/vista/pacing.json +14 -0
- package/templates/vista/previews/spotlight.png +0 -0
- package/templates/vista/previews/tour.png +0 -0
- package/templates/vista/styles/bright.json +6 -0
- package/templates/vista/styles/cinematic.json +6 -0
- package/templates/vista/template.json +42 -0
- package/templates/walkthrough/blueprints/product-tour.json +107 -0
- package/templates/walkthrough/copy.md +16 -0
- package/templates/walkthrough/pacing.json +16 -0
- package/templates/walkthrough/previews/product-tour.png +0 -0
- package/templates/walkthrough/styles/calm.json +6 -0
- package/templates/walkthrough/styles/deep.json +6 -0
- package/templates/walkthrough/template.json +37 -0
package/stopwords.json
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
[
|
|
2
|
+
"a",
|
|
3
|
+
"an",
|
|
4
|
+
"and",
|
|
5
|
+
"are",
|
|
6
|
+
"as",
|
|
7
|
+
"at",
|
|
8
|
+
"be",
|
|
9
|
+
"but",
|
|
10
|
+
"by",
|
|
11
|
+
"for",
|
|
12
|
+
"from",
|
|
13
|
+
"has",
|
|
14
|
+
"have",
|
|
15
|
+
"how",
|
|
16
|
+
"i",
|
|
17
|
+
"in",
|
|
18
|
+
"into",
|
|
19
|
+
"is",
|
|
20
|
+
"it",
|
|
21
|
+
"its",
|
|
22
|
+
"of",
|
|
23
|
+
"on",
|
|
24
|
+
"or",
|
|
25
|
+
"our",
|
|
26
|
+
"so",
|
|
27
|
+
"that",
|
|
28
|
+
"the",
|
|
29
|
+
"their",
|
|
30
|
+
"them",
|
|
31
|
+
"then",
|
|
32
|
+
"there",
|
|
33
|
+
"these",
|
|
34
|
+
"they",
|
|
35
|
+
"this",
|
|
36
|
+
"to",
|
|
37
|
+
"up",
|
|
38
|
+
"us",
|
|
39
|
+
"use",
|
|
40
|
+
"using",
|
|
41
|
+
"was",
|
|
42
|
+
"we",
|
|
43
|
+
"what",
|
|
44
|
+
"when",
|
|
45
|
+
"where",
|
|
46
|
+
"which",
|
|
47
|
+
"who",
|
|
48
|
+
"why",
|
|
49
|
+
"will",
|
|
50
|
+
"with",
|
|
51
|
+
"you",
|
|
52
|
+
"your",
|
|
53
|
+
"about",
|
|
54
|
+
"can",
|
|
55
|
+
"do",
|
|
56
|
+
"does",
|
|
57
|
+
"make",
|
|
58
|
+
"need",
|
|
59
|
+
"needs",
|
|
60
|
+
"want",
|
|
61
|
+
"video",
|
|
62
|
+
"videos",
|
|
63
|
+
"short",
|
|
64
|
+
"quick"
|
|
65
|
+
]
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "versus",
|
|
3
|
+
"purpose": "Compare two options in 20-50s: title, side-by-side points, optional headline numbers, verdict, close.",
|
|
4
|
+
"discover": {
|
|
5
|
+
"useCases": [
|
|
6
|
+
"Put two options side by side and name a winner.",
|
|
7
|
+
"Weigh two alternatives for a decision and state the verdict in one line.",
|
|
8
|
+
"Back a recommendation with two to four headline numbers."
|
|
9
|
+
],
|
|
10
|
+
"audience": ["buyers", "teams", "readers"],
|
|
11
|
+
"goodFor": "Two options, one to five points each, a verdict and optionally a few key numbers.",
|
|
12
|
+
"notFor": "Persuasion or launches (pitch), three or more options (pitch/pricing).",
|
|
13
|
+
"tags": ["compare", "versus", "review", "kpi", "before-after"],
|
|
14
|
+
"tone": ["calm", "balanced"],
|
|
15
|
+
"aspects": ["16:9", "1:1"],
|
|
16
|
+
"lengths": { "min": 20, "max": 50 }
|
|
17
|
+
},
|
|
18
|
+
"slots": {
|
|
19
|
+
"title": { "type": "text", "max": 60, "required": true },
|
|
20
|
+
"leftLabel": { "type": "text", "max": 24, "required": true },
|
|
21
|
+
"leftPoints": { "type": "text[]", "min": 1, "max": 5, "itemMax": 40, "required": true },
|
|
22
|
+
"rightLabel": { "type": "text", "max": 24, "required": true },
|
|
23
|
+
"rightPoints": { "type": "text[]", "min": 1, "max": 5, "itemMax": 40, "required": true },
|
|
24
|
+
"winner": { "type": "enum", "values": ["left", "right"] },
|
|
25
|
+
"numbers": {
|
|
26
|
+
"type": "object",
|
|
27
|
+
"fields": { "value": "text", "label": "text" },
|
|
28
|
+
"list": true,
|
|
29
|
+
"min": 2,
|
|
30
|
+
"max": 4,
|
|
31
|
+
"optional": true
|
|
32
|
+
},
|
|
33
|
+
"verdict": { "type": "text", "max": 80, "required": true },
|
|
34
|
+
"length": { "type": "enum", "values": ["short", "standard", "long"], "default": "standard" },
|
|
35
|
+
"style": { "type": "enum", "values": ["tidy", "editorial", "punchy"], "default": "tidy" }
|
|
36
|
+
},
|
|
37
|
+
"example": {
|
|
38
|
+
"title": "Option A or Option B",
|
|
39
|
+
"leftLabel": "Option A",
|
|
40
|
+
"leftPoints": ["Lower cost", "Easy start", "Few options"],
|
|
41
|
+
"rightLabel": "Option B",
|
|
42
|
+
"rightPoints": ["Higher cost", "Takes longer", "More flexible"],
|
|
43
|
+
"winner": "left",
|
|
44
|
+
"numbers": [
|
|
45
|
+
{ "value": "20%", "label": "Lower cost" },
|
|
46
|
+
{ "value": "2 days", "label": "Faster start" }
|
|
47
|
+
],
|
|
48
|
+
"verdict": "Pick A unless you need the flexibility"
|
|
49
|
+
},
|
|
50
|
+
"meta": { "title": { "$slot": "title" }, "lang": "en" },
|
|
51
|
+
"scenes": [
|
|
52
|
+
{
|
|
53
|
+
"id": "intro",
|
|
54
|
+
"type": "title",
|
|
55
|
+
"props": { "kicker": "Versus", "title": { "$slot": "title" } }
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
"id": "sides",
|
|
59
|
+
"type": "compare",
|
|
60
|
+
"props": {
|
|
61
|
+
"left": { "label": { "$slot": "leftLabel" }, "points": { "$slot": "leftPoints" } },
|
|
62
|
+
"right": { "label": { "$slot": "rightLabel" }, "points": { "$slot": "rightPoints" } },
|
|
63
|
+
"winner": { "$slot": "winner" }
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
"when": "numbers",
|
|
68
|
+
"id": "numbers",
|
|
69
|
+
"type": "kpi-grid",
|
|
70
|
+
"props": { "title": "By the numbers", "items": { "$slot": "numbers" } }
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
"id": "verdict",
|
|
74
|
+
"type": "callout",
|
|
75
|
+
"props": { "kind": "statement", "label": "Verdict", "text": { "$slot": "verdict" } }
|
|
76
|
+
},
|
|
77
|
+
{ "id": "end", "type": "outro", "props": { "title": { "$slot": "title" } } }
|
|
78
|
+
]
|
|
79
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# Compare copy guide
|
|
2
|
+
|
|
3
|
+
Tone: fair, specific, decisive. Show both sides, then commit to a verdict.
|
|
4
|
+
|
|
5
|
+
Do
|
|
6
|
+
- Title: the choice as a question or "A or B", at most 8 words.
|
|
7
|
+
- Option labels: nouns of 1-3 words.
|
|
8
|
+
- Points: parallel phrases of 2-5 words, same order on both sides.
|
|
9
|
+
- Numbers: 2-4 headline figures with a unit; only what you can source.
|
|
10
|
+
- Verdict: one sentence naming the winner and the reason.
|
|
11
|
+
|
|
12
|
+
Don't
|
|
13
|
+
- No more than 5 points per side, 25 words per scene.
|
|
14
|
+
- No loaded adjectives (terrible, amazing); compare facts.
|
|
15
|
+
- No invented figures; leave the numbers out instead.
|
|
16
|
+
- Skip the winner when the honest answer is "it depends"; say what it depends on.
|
|
17
|
+
|
|
18
|
+
Vocabulary: "option" not "solution", "cost" not "price tag", "pick" not "go with".
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"wordsPerSecond": 2.5,
|
|
3
|
+
"sceneSeconds": {
|
|
4
|
+
"title": { "short": 3, "standard": 4, "long": 5 },
|
|
5
|
+
"compare": { "short": 7, "standard": 10, "long": 14 },
|
|
6
|
+
"kpi-grid": { "short": 4, "standard": 5, "long": 6 },
|
|
7
|
+
"callout": { "short": 4, "standard": 5, "long": 7 },
|
|
8
|
+
"outro": { "short": 3, "standard": 4, "long": 5 }
|
|
9
|
+
},
|
|
10
|
+
"lengths": {
|
|
11
|
+
"short": { "scenes": [3, 5], "totalSec": [15, 35] },
|
|
12
|
+
"standard": { "scenes": [4, 5], "totalSec": [20, 50] },
|
|
13
|
+
"long": { "scenes": [4, 5], "totalSec": [30, 60] }
|
|
14
|
+
}
|
|
15
|
+
}
|
|
Binary file
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
{
|
|
2
|
+
"templateVersion": 1,
|
|
3
|
+
"id": "compare",
|
|
4
|
+
"version": "1.0.0",
|
|
5
|
+
"title": "Compare",
|
|
6
|
+
"summary": "Two options side by side with a clear verdict. Calm, editorial or punchy.",
|
|
7
|
+
"domains": ["decision", "product", "analysis"],
|
|
8
|
+
"discover": {
|
|
9
|
+
"useCases": [
|
|
10
|
+
"Put two options side by side and name a winner.",
|
|
11
|
+
"Weigh alternatives for a buying or planning decision with a clear verdict.",
|
|
12
|
+
"Back a recommendation with two to four headline numbers."
|
|
13
|
+
],
|
|
14
|
+
"audience": ["buyers", "teams", "readers", "stakeholders"],
|
|
15
|
+
"goodFor": "Two options with one to five points each and a one-line verdict.",
|
|
16
|
+
"notFor": "Persuading an audience (pitch), long data analysis (datastory).",
|
|
17
|
+
"tags": ["compare", "versus", "review", "before-after", "kpi", "sales"],
|
|
18
|
+
"tone": ["calm", "balanced"],
|
|
19
|
+
"aspects": ["16:9", "1:1"]
|
|
20
|
+
},
|
|
21
|
+
"requires": {
|
|
22
|
+
"storyboard": 1,
|
|
23
|
+
"scenes": ["title", "compare", "kpi-grid", "callout", "outro"]
|
|
24
|
+
},
|
|
25
|
+
"themes": [
|
|
26
|
+
{ "id": "calm-light", "file": "@shared/calm-light.json", "mode": "light", "pair": "calm-dark" },
|
|
27
|
+
{ "id": "calm-dark", "file": "@shared/calm-dark.json", "mode": "dark", "pair": "calm-light" },
|
|
28
|
+
{
|
|
29
|
+
"id": "editorial-light",
|
|
30
|
+
"file": "@shared/editorial-light.json",
|
|
31
|
+
"mode": "light",
|
|
32
|
+
"pair": "editorial-dark"
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"id": "editorial-dark",
|
|
36
|
+
"file": "@shared/editorial-dark.json",
|
|
37
|
+
"mode": "dark",
|
|
38
|
+
"pair": "editorial-light"
|
|
39
|
+
},
|
|
40
|
+
{ "id": "tech-light", "file": "@shared/tech-light.json", "mode": "light", "pair": "tech-dark" },
|
|
41
|
+
{ "id": "tech-dark", "file": "@shared/tech-dark.json", "mode": "dark", "pair": "tech-light" }
|
|
42
|
+
],
|
|
43
|
+
"styles": [
|
|
44
|
+
{ "id": "tidy", "file": "styles/tidy.json" },
|
|
45
|
+
{ "id": "editorial", "file": "styles/editorial.json" },
|
|
46
|
+
{ "id": "punchy", "file": "styles/punchy.json" }
|
|
47
|
+
],
|
|
48
|
+
"blueprints": [{ "id": "versus", "file": "blueprints/versus.json" }],
|
|
49
|
+
"pacing": "pacing.json",
|
|
50
|
+
"copy": "copy.md",
|
|
51
|
+
"license": "Apache-2.0"
|
|
52
|
+
}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "data-story",
|
|
3
|
+
"purpose": "Tell one finding: a hook number, a bar or donut chart of 2-6 values, a takeaway sentence and the implication.",
|
|
4
|
+
"discover": {
|
|
5
|
+
"useCases": [
|
|
6
|
+
"Tell one insight with a hook number, a chart and a single takeaway sentence.",
|
|
7
|
+
"Show a share or composition of a whole and say what it implies.",
|
|
8
|
+
"Compare a few items by value and highlight the one that matters."
|
|
9
|
+
],
|
|
10
|
+
"audience": ["general-public", "readers", "stakeholders"],
|
|
11
|
+
"goodFor": "One finding with a hook number and a chart of 2-6 values.",
|
|
12
|
+
"notFor": "Change over time (trend), several statistics at once (infographic).",
|
|
13
|
+
"tags": ["data", "chart", "ranking", "news", "recap", "social"],
|
|
14
|
+
"tone": ["clear", "confident"],
|
|
15
|
+
"aspects": ["16:9", "9:16"],
|
|
16
|
+
"lengths": { "min": 20, "max": 55 }
|
|
17
|
+
},
|
|
18
|
+
"slots": {
|
|
19
|
+
"headline": { "type": "text", "max": 60, "required": true },
|
|
20
|
+
"hook": {
|
|
21
|
+
"type": "object",
|
|
22
|
+
"fields": { "value": "text", "unit": "text", "label": "text", "context": "text" },
|
|
23
|
+
"required": true
|
|
24
|
+
},
|
|
25
|
+
"kind": { "type": "enum", "values": ["bar", "donut"], "default": "bar" },
|
|
26
|
+
"chartTitle": { "type": "text", "max": 50, "required": true },
|
|
27
|
+
"unit": { "type": "text", "max": 12, "default": "%" },
|
|
28
|
+
"data": {
|
|
29
|
+
"type": "object",
|
|
30
|
+
"fields": { "label": "text", "value": "number" },
|
|
31
|
+
"list": true,
|
|
32
|
+
"min": 2,
|
|
33
|
+
"max": 6,
|
|
34
|
+
"required": true
|
|
35
|
+
},
|
|
36
|
+
"highlight": { "type": "number", "min": 0, "max": 5, "int": true, "default": 0 },
|
|
37
|
+
"takeaway": { "type": "text", "max": 110, "required": true },
|
|
38
|
+
"implication": { "type": "text", "max": 60, "required": true },
|
|
39
|
+
"source": { "type": "text", "max": 70, "required": true },
|
|
40
|
+
"length": { "type": "enum", "values": ["short", "standard", "long"], "default": "standard" },
|
|
41
|
+
"style": { "type": "enum", "values": ["clear", "editorial", "pop"], "default": "clear" }
|
|
42
|
+
},
|
|
43
|
+
"example": {
|
|
44
|
+
"headline": "Where the time goes",
|
|
45
|
+
"hook": {
|
|
46
|
+
"value": "62",
|
|
47
|
+
"unit": "%",
|
|
48
|
+
"label": "of the workday",
|
|
49
|
+
"context": "is spent outside focused work"
|
|
50
|
+
},
|
|
51
|
+
"kind": "donut",
|
|
52
|
+
"chartTitle": "Share of the day by activity",
|
|
53
|
+
"unit": "%",
|
|
54
|
+
"data": [
|
|
55
|
+
{ "label": "Meetings", "value": 30 },
|
|
56
|
+
{ "label": "Messages", "value": 20 },
|
|
57
|
+
{ "label": "Focus work", "value": 38 },
|
|
58
|
+
{ "label": "Admin", "value": 12 }
|
|
59
|
+
],
|
|
60
|
+
"highlight": 2,
|
|
61
|
+
"takeaway": "Only [38%] of the day goes to focused work",
|
|
62
|
+
"implication": "Protect two focus blocks a day",
|
|
63
|
+
"source": "Illustrative sample data"
|
|
64
|
+
},
|
|
65
|
+
"meta": { "title": { "$slot": "headline" }, "lang": "en" },
|
|
66
|
+
"scenes": [
|
|
67
|
+
{
|
|
68
|
+
"id": "intro",
|
|
69
|
+
"type": "title",
|
|
70
|
+
"props": { "kicker": "Data story", "title": { "$slot": "headline" } }
|
|
71
|
+
},
|
|
72
|
+
{ "id": "hook", "type": "stat", "props": { "$spread": "hook" } },
|
|
73
|
+
{
|
|
74
|
+
"id": "chart",
|
|
75
|
+
"type": "chart",
|
|
76
|
+
"props": {
|
|
77
|
+
"kind": { "$slot": "kind" },
|
|
78
|
+
"title": { "$slot": "chartTitle" },
|
|
79
|
+
"unit": { "$slot": "unit" },
|
|
80
|
+
"data": { "$slot": "data" },
|
|
81
|
+
"highlight": { "$slot": "highlight" }
|
|
82
|
+
}
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
"id": "takeaway",
|
|
86
|
+
"type": "callout",
|
|
87
|
+
"props": { "text": { "$slot": "takeaway" }, "kind": "statement", "label": "Takeaway" }
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
"id": "end",
|
|
91
|
+
"type": "outro",
|
|
92
|
+
"props": { "title": { "$slot": "implication" }, "lines": [{ "$slot": "source" }] }
|
|
93
|
+
}
|
|
94
|
+
]
|
|
95
|
+
}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "infographic",
|
|
3
|
+
"purpose": "A shareable infographic: 2-3 big numbers, an optional share-of-whole donut, 2-4 icon facts and a source.",
|
|
4
|
+
"discover": {
|
|
5
|
+
"useCases": [
|
|
6
|
+
"Turn a handful of statistics into a shareable infographic with a share-of-whole chart.",
|
|
7
|
+
"Present two or three big numbers and the facts that explain them.",
|
|
8
|
+
"Summarise a survey or study for readers who skim."
|
|
9
|
+
],
|
|
10
|
+
"audience": ["general-public", "readers", "customers"],
|
|
11
|
+
"goodFor": "2-3 big numbers, an optional breakdown of 2-6 parts and 2-4 facts.",
|
|
12
|
+
"notFor": "A single finding told with one visual (data-story), periodic results (report).",
|
|
13
|
+
"tags": ["infographic", "data", "chart", "survey", "social", "kpi"],
|
|
14
|
+
"tone": ["clear", "confident"],
|
|
15
|
+
"aspects": ["16:9", "9:16"],
|
|
16
|
+
"lengths": { "min": 25, "max": 70 }
|
|
17
|
+
},
|
|
18
|
+
"slots": {
|
|
19
|
+
"headline": { "type": "text", "max": 60, "required": true },
|
|
20
|
+
"big": {
|
|
21
|
+
"type": "object",
|
|
22
|
+
"fields": { "value": "text", "unit": "text", "label": "text" },
|
|
23
|
+
"list": true,
|
|
24
|
+
"min": 2,
|
|
25
|
+
"max": 3,
|
|
26
|
+
"required": true
|
|
27
|
+
},
|
|
28
|
+
"partsTitle": { "type": "text", "max": 50, "default": "How it breaks down" },
|
|
29
|
+
"parts": {
|
|
30
|
+
"type": "object",
|
|
31
|
+
"fields": { "label": "text", "value": "number" },
|
|
32
|
+
"list": true,
|
|
33
|
+
"min": 2,
|
|
34
|
+
"max": 6,
|
|
35
|
+
"optional": true
|
|
36
|
+
},
|
|
37
|
+
"facts": {
|
|
38
|
+
"type": "object",
|
|
39
|
+
"fields": { "icon": "text", "label": "text", "detail": "text" },
|
|
40
|
+
"list": true,
|
|
41
|
+
"min": 2,
|
|
42
|
+
"max": 4,
|
|
43
|
+
"required": true
|
|
44
|
+
},
|
|
45
|
+
"highlight": { "type": "number", "min": 0, "max": 5, "int": true, "default": 0 },
|
|
46
|
+
"source": { "type": "text", "max": 70, "required": true },
|
|
47
|
+
"length": { "type": "enum", "values": ["short", "standard", "long"], "default": "standard" },
|
|
48
|
+
"style": { "type": "enum", "values": ["clear", "editorial", "pop"], "default": "clear" }
|
|
49
|
+
},
|
|
50
|
+
"example": {
|
|
51
|
+
"headline": "A year of remote work",
|
|
52
|
+
"big": [
|
|
53
|
+
{ "value": "72", "unit": "%", "label": "Prefer hybrid" },
|
|
54
|
+
{ "value": "5", "unit": "days", "label": "Saved a month" },
|
|
55
|
+
{ "value": "3", "unit": "x", "label": "More async chat" }
|
|
56
|
+
],
|
|
57
|
+
"partsTitle": "Preferred work setup",
|
|
58
|
+
"parts": [
|
|
59
|
+
{ "label": "Hybrid", "value": 72 },
|
|
60
|
+
{ "label": "Remote", "value": 18 },
|
|
61
|
+
{ "label": "Office", "value": 10 }
|
|
62
|
+
],
|
|
63
|
+
"highlight": 0,
|
|
64
|
+
"facts": [
|
|
65
|
+
{ "icon": "clock", "label": "Commute", "detail": "Time saved" },
|
|
66
|
+
{ "icon": "users", "label": "Meetings", "detail": "Fewer" },
|
|
67
|
+
{ "icon": "house", "label": "Focus", "detail": "Quiet home" }
|
|
68
|
+
],
|
|
69
|
+
"source": "Illustrative sample data"
|
|
70
|
+
},
|
|
71
|
+
"meta": { "title": { "$slot": "headline" }, "lang": "en" },
|
|
72
|
+
"scenes": [
|
|
73
|
+
{
|
|
74
|
+
"id": "intro",
|
|
75
|
+
"type": "title",
|
|
76
|
+
"props": { "kicker": "In numbers", "title": { "$slot": "headline" } }
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
"id": "numbers",
|
|
80
|
+
"type": "kpi-grid",
|
|
81
|
+
"props": { "title": "The big numbers", "items": { "$slot": "big" } }
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
"when": "parts",
|
|
85
|
+
"id": "mix",
|
|
86
|
+
"type": "chart",
|
|
87
|
+
"props": {
|
|
88
|
+
"kind": "donut",
|
|
89
|
+
"title": { "$slot": "partsTitle" },
|
|
90
|
+
"unit": "%",
|
|
91
|
+
"data": { "$slot": "parts" },
|
|
92
|
+
"highlight": { "$slot": "highlight" }
|
|
93
|
+
}
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
"id": "facts",
|
|
97
|
+
"type": "icon-grid",
|
|
98
|
+
"props": { "title": "Behind the numbers", "items": { "$slot": "facts" } }
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
"id": "end",
|
|
102
|
+
"type": "outro",
|
|
103
|
+
"props": { "title": "Source", "lines": [{ "$slot": "source" }] }
|
|
104
|
+
}
|
|
105
|
+
]
|
|
106
|
+
}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "trend",
|
|
3
|
+
"purpose": "Show change over time: a hook number, a column chart of 3-8 periods, a takeaway sentence and the implication.",
|
|
4
|
+
"discover": {
|
|
5
|
+
"useCases": [
|
|
6
|
+
"Show how a measure changed over time and what the change implies.",
|
|
7
|
+
"Explain a rise or fall with one column chart and a single sentence of meaning.",
|
|
8
|
+
"Recap a period's trajectory for readers who only have half a minute."
|
|
9
|
+
],
|
|
10
|
+
"audience": ["general-public", "readers", "stakeholders"],
|
|
11
|
+
"goodFor": "One measure over 3-8 periods with a clear direction.",
|
|
12
|
+
"notFor": "Share of a whole or a ranking (data-story), many statistics (infographic).",
|
|
13
|
+
"tags": ["data", "chart", "news", "recap", "timeline", "kpi"],
|
|
14
|
+
"tone": ["clear", "confident"],
|
|
15
|
+
"aspects": ["16:9", "9:16"],
|
|
16
|
+
"lengths": { "min": 20, "max": 55 }
|
|
17
|
+
},
|
|
18
|
+
"slots": {
|
|
19
|
+
"headline": { "type": "text", "max": 60, "required": true },
|
|
20
|
+
"hook": {
|
|
21
|
+
"type": "object",
|
|
22
|
+
"fields": { "value": "text", "unit": "text", "label": "text", "context": "text" },
|
|
23
|
+
"required": true
|
|
24
|
+
},
|
|
25
|
+
"chartTitle": { "type": "text", "max": 50, "required": true },
|
|
26
|
+
"unit": { "type": "text", "max": 12, "default": "" },
|
|
27
|
+
"data": {
|
|
28
|
+
"type": "object",
|
|
29
|
+
"fields": { "label": "text", "value": "number" },
|
|
30
|
+
"list": true,
|
|
31
|
+
"min": 3,
|
|
32
|
+
"max": 8,
|
|
33
|
+
"required": true
|
|
34
|
+
},
|
|
35
|
+
"takeaway": { "type": "text", "max": 110, "required": true },
|
|
36
|
+
"implication": { "type": "text", "max": 60, "required": true },
|
|
37
|
+
"source": { "type": "text", "max": 70, "required": true },
|
|
38
|
+
"length": { "type": "enum", "values": ["short", "standard", "long"], "default": "standard" },
|
|
39
|
+
"style": { "type": "enum", "values": ["clear", "editorial", "pop"], "default": "clear" }
|
|
40
|
+
},
|
|
41
|
+
"example": {
|
|
42
|
+
"headline": "Reading time is shrinking",
|
|
43
|
+
"hook": {
|
|
44
|
+
"value": "9",
|
|
45
|
+
"unit": "min",
|
|
46
|
+
"label": "a day",
|
|
47
|
+
"context": "average reading time, down from 15"
|
|
48
|
+
},
|
|
49
|
+
"chartTitle": "Average minutes read per day",
|
|
50
|
+
"unit": "min",
|
|
51
|
+
"data": [
|
|
52
|
+
{ "label": "2019", "value": 15 },
|
|
53
|
+
{ "label": "2020", "value": 14 },
|
|
54
|
+
{ "label": "2021", "value": 12 },
|
|
55
|
+
{ "label": "2022", "value": 11 },
|
|
56
|
+
{ "label": "2023", "value": 9 }
|
|
57
|
+
],
|
|
58
|
+
"takeaway": "Daily reading time [fell by 40%] in five years",
|
|
59
|
+
"implication": "Shorter formats now win attention",
|
|
60
|
+
"source": "Illustrative sample data"
|
|
61
|
+
},
|
|
62
|
+
"meta": { "title": { "$slot": "headline" }, "lang": "en" },
|
|
63
|
+
"scenes": [
|
|
64
|
+
{
|
|
65
|
+
"id": "intro",
|
|
66
|
+
"type": "title",
|
|
67
|
+
"props": { "kicker": "Trend", "title": { "$slot": "headline" } }
|
|
68
|
+
},
|
|
69
|
+
{ "id": "hook", "type": "stat", "props": { "$spread": "hook" } },
|
|
70
|
+
{
|
|
71
|
+
"id": "chart",
|
|
72
|
+
"type": "chart",
|
|
73
|
+
"props": {
|
|
74
|
+
"kind": "bar",
|
|
75
|
+
"orient": "v",
|
|
76
|
+
"sort": "none",
|
|
77
|
+
"title": { "$slot": "chartTitle" },
|
|
78
|
+
"unit": { "$slot": "unit" },
|
|
79
|
+
"data": { "$slot": "data" }
|
|
80
|
+
}
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
"id": "takeaway",
|
|
84
|
+
"type": "callout",
|
|
85
|
+
"props": { "text": { "$slot": "takeaway" }, "kind": "statement", "label": "Takeaway" }
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
"id": "end",
|
|
89
|
+
"type": "outro",
|
|
90
|
+
"props": { "title": { "$slot": "implication" }, "lines": [{ "$slot": "source" }] }
|
|
91
|
+
}
|
|
92
|
+
]
|
|
93
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Data story copy guide
|
|
2
|
+
|
|
3
|
+
Tone: clear, confident, plain. One finding per video. The number is the hook; the chart is the proof; the takeaway is the point.
|
|
4
|
+
|
|
5
|
+
Do
|
|
6
|
+
- Hook: one number with its unit and a 2-5 word label ("62%", "of orders arrive late").
|
|
7
|
+
- Takeaway: one sentence, the finding in words, with the key term in [brackets] to be accented.
|
|
8
|
+
- Chart: 2-6 values, labels 1-2 words, unit stated once; highlight the item the story is about.
|
|
9
|
+
- Close with the implication ("what this means"), then the source line exactly as cited.
|
|
10
|
+
|
|
11
|
+
Don't
|
|
12
|
+
- No chart without a takeaway sentence; no takeaway that repeats the chart title.
|
|
13
|
+
- No more than 3 big numbers or 4 facts; split into a second story instead.
|
|
14
|
+
- No invented figures; mark illustrative data as illustrative.
|
|
15
|
+
|
|
16
|
+
Vocabulary: "share" not "proportion", "rose/fell" not "experienced a change".
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"wordsPerSecond": 2.5,
|
|
3
|
+
"sceneSeconds": {
|
|
4
|
+
"title": { "short": 3, "standard": 4, "long": 5 },
|
|
5
|
+
"stat": { "short": 4, "standard": 5, "long": 6 },
|
|
6
|
+
"chart": { "short": 5, "standard": 6, "long": 8 },
|
|
7
|
+
"callout": { "short": 4, "standard": 6, "long": 8 },
|
|
8
|
+
"kpi-grid": { "short": 5, "standard": 6, "long": 7 },
|
|
9
|
+
"icon-grid": { "short": 6, "standard": 8, "long": 10 },
|
|
10
|
+
"outro": { "short": 3, "standard": 4, "long": 5 }
|
|
11
|
+
},
|
|
12
|
+
"lengths": {
|
|
13
|
+
"short": { "scenes": [4, 5], "totalSec": [12, 35] },
|
|
14
|
+
"standard": { "scenes": [4, 6], "totalSec": [20, 50] },
|
|
15
|
+
"long": { "scenes": [5, 6], "totalSec": [35, 70] }
|
|
16
|
+
}
|
|
17
|
+
}
|
|
Binary file
|
|
Binary file
|
|
Binary file
|