@autoaiai/aicut 0.0.0-stage → 0.1.7
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/LICENSE +21 -0
- package/MANUAL.md +84 -0
- package/README.md +36 -2
- package/SPEC.md +221 -0
- package/THIRD_PARTY_NOTICES.md +10 -0
- package/TRADEMARK.md +25 -0
- package/bin/aicut.mjs +264 -0
- package/package.json +89 -6
- package/product.json +5 -0
- package/skills/aicut/LICENSE +21 -0
- package/skills/aicut/SKILL.md +66 -0
- package/skills/aicut/references/commands.md +72 -0
- package/skills/aicut/references/film-format.md +119 -0
- package/skills/aicut/references/recipes.md +184 -0
- package/skills/aicut/references/troubleshooting.md +57 -0
- package/skills/aicut-motion/LICENSE +21 -0
- package/skills/aicut-motion/SKILL.md +255 -0
- package/skills/aicut-motion/references/design-systems/README.md +25 -0
- package/skills/aicut-motion/references/design-systems/bold-poster.md +62 -0
- package/skills/aicut-motion/references/design-systems/data-instrument.md +71 -0
- package/skills/aicut-motion/references/design-systems/drafting-table.md +76 -0
- package/skills/aicut-motion/references/design-systems/editorial-ink.md +83 -0
- package/skills/aicut-motion/references/design-systems/riso-halftone.md +70 -0
- package/skills/aicut-motion/references/design-systems/storybook-scene.md +75 -0
- package/skills/aicut-motion/references/design-systems/swiss-kinetic.md +67 -0
- package/skills/aicut-motion/references/pages.md +258 -0
- package/src/film-doc.d.mts +204 -0
- package/src/film-doc.mjs +1225 -0
- package/src/host.d.mts +35 -0
- package/src/host.mjs +542 -0
- package/src/look.d.mts +2 -0
- package/src/look.mjs +358 -0
- package/src/media-links.mjs +68 -0
- package/src/of-filters.mjs +237 -0
- package/src/overrides.mjs +75 -0
- package/src/render.mjs +202 -0
- package/src/seekable.mjs +101 -0
- package/src/shared.d.mts +27 -0
- package/src/shared.mjs +391 -0
- package/src/timeline.mjs +1158 -0
- package/studio/client.mjs +311 -0
- package/studio/server/atomic.mjs +41 -0
- package/studio/server/bridge.js +89 -0
- package/studio/server/browse.mjs +104 -0
- package/studio/server/captions.mjs +502 -0
- package/studio/server/chat.mjs +49 -0
- package/studio/server/closure.mjs +407 -0
- package/studio/server/compound.mjs +133 -0
- package/studio/server/custom-services.mjs +299 -0
- package/studio/server/derived.mjs +225 -0
- package/studio/server/examples.mjs +89 -0
- package/studio/server/exports.mjs +1621 -0
- package/studio/server/fetch-error.mjs +14 -0
- package/studio/server/fetch-github.mjs +181 -0
- package/studio/server/fetch-repo.mjs +399 -0
- package/studio/server/files.mjs +628 -0
- package/studio/server/film-subtitle.mjs +869 -0
- package/studio/server/film.mjs +109 -0
- package/studio/server/folder-picker.mjs +199 -0
- package/studio/server/fonts.mjs +308 -0
- package/studio/server/get.mjs +700 -0
- package/studio/server/heard.mjs +108 -0
- package/studio/server/hidden.mjs +85 -0
- package/studio/server/history-migrate.mjs +239 -0
- package/studio/server/history-store.mjs +538 -0
- package/studio/server/history.mjs +682 -0
- package/studio/server/html-deck.mjs +168 -0
- package/studio/server/html-film.mjs +686 -0
- package/studio/server/html-pages.mjs +604 -0
- package/studio/server/http.mjs +40 -0
- package/studio/server/jianying.mjs +289 -0
- package/studio/server/keys.mjs +126 -0
- package/studio/server/main.mjs +120 -0
- package/studio/server/markers.mjs +80 -0
- package/studio/server/nle.mjs +537 -0
- package/studio/server/ops.mjs +506 -0
- package/studio/server/page-links.mjs +98 -0
- package/studio/server/pageframes.mjs +335 -0
- package/studio/server/pages.mjs +197 -0
- package/studio/server/prefs.mjs +56 -0
- package/studio/server/project-fonts.mjs +263 -0
- package/studio/server/project-settings.mjs +130 -0
- package/studio/server/projects.mjs +457 -0
- package/studio/server/providers/azure.mjs +100 -0
- package/studio/server/providers/brave.mjs +55 -0
- package/studio/server/providers/common.mjs +321 -0
- package/studio/server/providers/contract.mjs +98 -0
- package/studio/server/providers/doubao.mjs +65 -0
- package/studio/server/providers/edge-drm.mjs +263 -0
- package/studio/server/providers/edge-speech.mjs +292 -0
- package/studio/server/providers/edge-tts.mjs +112 -0
- package/studio/server/providers/elevenlabs.mjs +144 -0
- package/studio/server/providers/fal.mjs +212 -0
- package/studio/server/providers/google.mjs +201 -0
- package/studio/server/providers/groq.mjs +97 -0
- package/studio/server/providers/index.mjs +284 -0
- package/studio/server/providers/local-mdx.mjs +293 -0
- package/studio/server/providers/local-whisper.mjs +847 -0
- package/studio/server/providers/mdx-net.mjs +275 -0
- package/studio/server/providers/openai.mjs +131 -0
- package/studio/server/providers/pexels.mjs +40 -0
- package/studio/server/providers/pixabay.mjs +53 -0
- package/studio/server/providers/tar-bz2.mjs +356 -0
- package/studio/server/providers/tavily.mjs +68 -0
- package/studio/server/providers/web.mjs +231 -0
- package/studio/server/proxies.mjs +151 -0
- package/studio/server/recycle.mjs +222 -0
- package/studio/server/render-worker.mjs +29 -0
- package/studio/server/separate.mjs +44 -0
- package/studio/server/server.mjs +1021 -0
- package/studio/server/sfx.mjs +321 -0
- package/studio/server/skills.mjs +357 -0
- package/studio/server/slides.mjs +230 -0
- package/studio/server/stage.js +1553 -0
- package/studio/server/stock.mjs +122 -0
- package/studio/server/subtitle-edits.mjs +234 -0
- package/studio/server/subtitle-segments.mjs +602 -0
- package/studio/server/template-posters.mjs +68 -0
- package/studio/server/templates-page.mjs +93 -0
- package/studio/server/templates-styles.mjs +583 -0
- package/studio/server/templates.mjs +269 -0
- package/studio/server/transcripts.mjs +490 -0
- package/studio/server/transition-pages.mjs +43 -0
- package/studio/server/trash.mjs +143 -0
- package/studio/server/video-models.mjs +226 -0
- package/studio/server/watch.mjs +160 -0
- package/studio/server/web-agents.mjs +143 -0
- package/studio/server/websocket.mjs +82 -0
- package/studio/server/zip.mjs +159 -0
- package/studio/ui/dist/assets/ExportCenter-F-2vF-lQ.js +1 -0
- package/studio/ui/dist/assets/SettingsModal-BgVYguNu.js +2 -0
- package/studio/ui/dist/assets/app-icon-BpqHp2uj.png +0 -0
- package/studio/ui/dist/assets/es-BRUzvuoM.js +1 -0
- package/studio/ui/dist/assets/index-Bhg-9dA3.css +1 -0
- package/studio/ui/dist/assets/index-CWur1Iw9.js +1625 -0
- package/studio/ui/dist/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
- package/studio/ui/dist/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
- package/studio/ui/dist/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
- package/studio/ui/dist/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
- package/studio/ui/dist/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
- package/studio/ui/dist/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
- package/studio/ui/dist/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
- package/studio/ui/dist/assets/ja-Cth-uDcW.js +1 -0
- package/studio/ui/dist/assets/ko-upvw591D.js +1 -0
- package/studio/ui/dist/assets/zh-CN-BCfJFazB.js +1 -0
- package/studio/ui/dist/index.html +23 -0
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# data-instrument
|
|
2
|
+
|
|
3
|
+
Fits: explainers, finance, science, health, SaaS, any film carried by numbers or a process. Not for: pure mood pieces.
|
|
4
|
+
|
|
5
|
+
## Palette
|
|
6
|
+
|
|
7
|
+
- Paper white `#F7F7F5` or deep slate `#0F1419`; ink `#1C2430` or `#E6EDF3`.
|
|
8
|
+
- One data accent: `#2F6BFF` on light, `#4CC2FF` on dark.
|
|
9
|
+
- A second series colour `#F2994A`, only when comparing.
|
|
10
|
+
- Grid and axes in ink at 15–25%.
|
|
11
|
+
|
|
12
|
+
## Type
|
|
13
|
+
|
|
14
|
+
- Inter or Geist 600–800 for headlines (90–160 px).
|
|
15
|
+
- Geist Mono or IBM Plex Mono 400–500 for numbers and labels (20–28 px), `font-variant-numeric: tabular-nums`.
|
|
16
|
+
|
|
17
|
+
## Marks, in a page
|
|
18
|
+
|
|
19
|
+
- 1.5–2 px axes and leader lines; 3 px data lines; 8 px dots with a 2 px ring.
|
|
20
|
+
- Bars with square ends (`<rect>`, no radius).
|
|
21
|
+
- Diagrams from boxes with 8 px corners and 1.5 px strokes.
|
|
22
|
+
- Lines draw on with `drawOn`; values roll with `counter()` (`references/pages.md`).
|
|
23
|
+
|
|
24
|
+
```js
|
|
25
|
+
const draw = prog(t, 1.0, 0.9, EASE.out);
|
|
26
|
+
line.setAttribute('d', toPath(series.slice(0, Math.ceil(draw * series.length)), false));
|
|
27
|
+
dot.setAttribute('cx', String(xAt(draw * (series.length - 1)))); // the dot rides the line's head, not a timer
|
|
28
|
+
counter(valueEl, 0, 412, draw);
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## Texture
|
|
32
|
+
|
|
33
|
+
None, or one grain rect at 0.04. Precision is the look.
|
|
34
|
+
|
|
35
|
+
## Layout
|
|
36
|
+
|
|
37
|
+
- A 12-column grid with 150 px margins.
|
|
38
|
+
- One chart or diagram per scene, about 60% of the frame.
|
|
39
|
+
- Labels attach to their marks with leader lines, never a legend if avoidable.
|
|
40
|
+
|
|
41
|
+
## Composition
|
|
42
|
+
|
|
43
|
+
- Occupancy: one chart or diagram fills about 60% of the frame.
|
|
44
|
+
- Labels attached to their marks; 150 px margins; nothing bleeds.
|
|
45
|
+
|
|
46
|
+
## Motion character
|
|
47
|
+
|
|
48
|
+
- 100–120 BPM. Axes first, then data, then the annotation, in that order — never all three at once.
|
|
49
|
+
- `EASE.out` 0.4–0.7 s; `settle` without bounce. Numbers roll on `EASE.smooth`.
|
|
50
|
+
|
|
51
|
+
## Transition grammar
|
|
52
|
+
|
|
53
|
+
- A data point becomes the next scene's origin: zoom into the dot, the dot becomes a ring, the ring becomes a chart.
|
|
54
|
+
- A line chart's line unbends into the next scene's timeline (one path, morphing through an intermediate shape).
|
|
55
|
+
- A bar grows until it is the full-frame background colour (one `<rect>`, no cut).
|
|
56
|
+
|
|
57
|
+
## Signature details
|
|
58
|
+
|
|
59
|
+
- A live time code and a source line in mono at the bottom.
|
|
60
|
+
- The key number repeated large at the end.
|
|
61
|
+
- Thin crosshairs that track the value being discussed.
|
|
62
|
+
|
|
63
|
+
## Sound
|
|
64
|
+
|
|
65
|
+
- A soft pad; `tick` as counters roll and values land; a `bell` when the key number lands; `whoosh` on zoom
|
|
66
|
+
transitions.
|
|
67
|
+
- 100–120 BPM.
|
|
68
|
+
|
|
69
|
+
## Bans
|
|
70
|
+
|
|
71
|
+
3D charts, pie charts with more than four slices, gradients, glow, invented numbers presented as real, chartjunk.
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
# drafting-table
|
|
2
|
+
|
|
3
|
+
Fits: designers, creative tools, process, engineering, "how it's made". Not for: luxury, emotional storytelling, food.
|
|
4
|
+
|
|
5
|
+
## Palette
|
|
6
|
+
|
|
7
|
+
- PAPER: background `#EDE6D5`, graphite line `#16161A`, accent blue `#1B3ED2`.
|
|
8
|
+
- BLUEPRINT: background `#1B3ED2`, lines `#FFFFFF`, accent cyan `#45F0DD`.
|
|
9
|
+
- HOLOGRAM: background `#07080A`, lines `#45F0DD`, white core `#FFFFFF`.
|
|
10
|
+
- Rule: each material's accent is the next material's main colour — the film's transitions are already argued for.
|
|
11
|
+
|
|
12
|
+
## Type
|
|
13
|
+
|
|
14
|
+
Geist only. 900 for big words; 600–800 for labels at 24–28 px, tracked 0.14–0.3 em.
|
|
15
|
+
|
|
16
|
+
## Marks, in a page
|
|
17
|
+
|
|
18
|
+
- **Paper:** 4 px strokes with `filter="url(#rough)"` (baseFrequency 0.03, scale 5). Fills are a 45° `<pattern>` of
|
|
19
|
+
2 px blue rules on an 8–9 px pitch; big type is SVG `<text>` with `fill="url(#hatch)"` and a 2 px stroke.
|
|
20
|
+
- **Blueprint:** clean 3–4 px white paths, drawn on with `drawOn(path, p)`; hidden edges 2 px dashed
|
|
21
|
+
(`stroke-dasharray: 10 8`); fine 1.2 px hatching as a `<pattern>`.
|
|
22
|
+
- **Hologram:** the same path twice — cyan at full width, white at 30% of it on top. Fills are horizontal lines on an
|
|
23
|
+
8 px pitch; thicker means more lit. No blur, no glow.
|
|
24
|
+
|
|
25
|
+
A material change is the same `d` with new paint, never a new shape:
|
|
26
|
+
|
|
27
|
+
```js
|
|
28
|
+
const d = toPath(morphPts(cube, panel, prog(t, 3.2, 0.5, EASE.inOut))); // X02
|
|
29
|
+
shape.setAttribute('d', d);
|
|
30
|
+
shape.setAttribute('class', materialAt(t)); // .paper | .blueprint | .hologram — colour, stroke, filter only
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Texture
|
|
34
|
+
|
|
35
|
+
A grain `<rect>` with `filter="url(#grain)"`, `mix-blend-mode: multiply`, opacity 0.15–0.2, on paper only. A 60 px
|
|
36
|
+
grid at 13%, every fifth line at 26%, drawn in the current material's line colour.
|
|
37
|
+
|
|
38
|
+
## Layout
|
|
39
|
+
|
|
40
|
+
Locked camera, front-on. Safe area 150 / 90 px. Centred, with ruler-like rails running to the frame edge.
|
|
41
|
+
|
|
42
|
+
## Composition
|
|
43
|
+
|
|
44
|
+
- Occupancy: the subject fills 40–70% of the width.
|
|
45
|
+
- Centred and symmetric; construction marks extend out from it.
|
|
46
|
+
- No bleed except a scan line or a flood mask in transit.
|
|
47
|
+
|
|
48
|
+
## Motion character
|
|
49
|
+
|
|
50
|
+
120 BPM, an event on every beat. `settle(t, beat, { lead: 0.05 })` with no overshoot. `EASE.in` for presses and
|
|
51
|
+
drops, `EASE.inOut` for scans. Holds ≤ 0.5 s.
|
|
52
|
+
|
|
53
|
+
## Transition grammar
|
|
54
|
+
|
|
55
|
+
- A carrier line morphs through shapes (line → circle → polygon → tiles) on equal point counts.
|
|
56
|
+
- Paper → blueprint: a shape floods the frame — `revealCircle(p)` on a full-frame rect.
|
|
57
|
+
- Blueprint → hologram: one horizontal scan line, `revealInset(p, 'top')` on the new material plus a drawn 4 px line
|
|
58
|
+
travelling with it.
|
|
59
|
+
- Cubes unfold into dashboard panels (one path, morphing).
|
|
60
|
+
|
|
61
|
+
## Signature details
|
|
62
|
+
|
|
63
|
+
- Corner labels: "FIG. 07 — GEAR" top left, "BEAT 27 / 60" bottom right.
|
|
64
|
+
- Pen-tool handles labelled EASE, ruler ticks, dimension lines with live numbers, gears labelled 16T.
|
|
65
|
+
- Charts that describe the film itself.
|
|
66
|
+
- A small box mascot holding a pencil.
|
|
67
|
+
|
|
68
|
+
## Sound
|
|
69
|
+
|
|
70
|
+
- A `scratch` under each line being drawn on; a `tick` on every beat; a `knock` on presses and claps; a `whoosh` on
|
|
71
|
+
floods and scans; a soft pad bed.
|
|
72
|
+
- 120 BPM. One `<audio>` clip per hit, placed on the `T` block.
|
|
73
|
+
|
|
74
|
+
## Bans
|
|
75
|
+
|
|
76
|
+
Particles, glows, lens flares, camera shake, RGB split, crossfades, gradients, bounce.
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
# editorial-ink
|
|
2
|
+
|
|
3
|
+
Fits: culture, food and tea, books, craft, heritage, Chinese and East Asian themes, slow luxury. Not for: tech
|
|
4
|
+
launches, sport.
|
|
5
|
+
|
|
6
|
+
## Palette
|
|
7
|
+
|
|
8
|
+
- Rice paper `#F3EEE3`, ink black `#1A1814`.
|
|
9
|
+
- Washes of ink at 8–40% opacity.
|
|
10
|
+
- Seal red `#B8322A` as the only accent.
|
|
11
|
+
- Optional tea or ochre `#A7774A`.
|
|
12
|
+
|
|
13
|
+
## Type
|
|
14
|
+
|
|
15
|
+
- Serif with character. Latin: Fraunces 300–600, or Noto Serif SC for Chinese, at 120–260 px.
|
|
16
|
+
- Captions: Noto Sans SC or Inter 400, 22–26 px, tracked 0.1 em.
|
|
17
|
+
- Vertical Chinese titles are welcome: `writing-mode: vertical-rl` on the block, one column per line, right to left
|
|
18
|
+
across the frame.
|
|
19
|
+
|
|
20
|
+
## Marks, in a page
|
|
21
|
+
|
|
22
|
+
- **Brush strokes:** a `<path>` stroked 10–40 px, round caps, drawn on with `drawOn(path, p)`. Dry edges come from
|
|
23
|
+
`filter="url(#rough)"` with `baseFrequency` 0.02–0.04 and `scale` 4–10: crisper and denser for small or near
|
|
24
|
+
marks, softer and fainter for large or far ones.
|
|
25
|
+
- **Washes and mountains:** layered shapes far to near, 15–40% opacity far and 80–90% near, each layer with its own
|
|
26
|
+
filter `seed`. A wash spreads by morphing outward from a drop (`morphPts` from a small ring to the wash's
|
|
27
|
+
outline) — never by scaling, which reads as a zoom.
|
|
28
|
+
- **Mist:** thin horizontal strokes 10–25 px tall at 10–15% opacity, drifting with `wobble(seed, i, t, 0.15)`. Never
|
|
29
|
+
blurred blobs.
|
|
30
|
+
- **Seals:** a red rounded square with knocked-out characters (`<rect>` plus white `<text>`).
|
|
31
|
+
|
|
32
|
+
```js
|
|
33
|
+
const spread = prog(t, 1.2, 1.4, EASE.out); // a wash arriving
|
|
34
|
+
wash.setAttribute('d', toPath(morphPts(dropRing, washRing, spread)));
|
|
35
|
+
wash.style.opacity = String(0.15 + 0.5 * spread); // opacity is part of the same move
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Texture
|
|
39
|
+
|
|
40
|
+
Paper is the background: a full-frame rect of `#F3EEE3` under one grain rect (multiply, 0.2). Ink carries its own
|
|
41
|
+
grain through `url(#rough)`. Keep the two textures separate — never one noise layer over everything.
|
|
42
|
+
|
|
43
|
+
## Layout
|
|
44
|
+
|
|
45
|
+
Generous negative space; asymmetric, the subject on a third. Columns of vertical text; a seal near a corner of the
|
|
46
|
+
title.
|
|
47
|
+
|
|
48
|
+
## Composition
|
|
49
|
+
|
|
50
|
+
- Occupancy: the subject within about 60% of the width.
|
|
51
|
+
- At least 50% of the frame is empty paper; nothing bleeds.
|
|
52
|
+
- Mist and washes stay inside the safe area.
|
|
53
|
+
- Title on the right or left third, never centred over the subject.
|
|
54
|
+
|
|
55
|
+
## Motion character
|
|
56
|
+
|
|
57
|
+
- 60–80 BPM; breathing, never snappy. `EASE.smooth` over 0.8–1.6 s.
|
|
58
|
+
- Ink spreads on `EASE.out`. Holds of 1–2 s are allowed for reading.
|
|
59
|
+
- No overshoot, no bounce.
|
|
60
|
+
|
|
61
|
+
## Transition grammar
|
|
62
|
+
|
|
63
|
+
- A wash spreads until it fills the frame, then thins into the next scene's paper — one full-frame rect whose
|
|
64
|
+
`clip-path` grows, then fades.
|
|
65
|
+
- A brush stroke sweeps across as a wipe (`revealInset(p, 'left')` clipped to the stroke's path).
|
|
66
|
+
- A shape (a leaf, a mountain) dissolves into wash and re-forms as the next shape: one path, two morphs, wash in
|
|
67
|
+
between.
|
|
68
|
+
|
|
69
|
+
## Signature details
|
|
70
|
+
|
|
71
|
+
- A seal that stamps on beat 1 of the title (scale down onto the frame with `settle`, no bounce).
|
|
72
|
+
- Small vertical captions with dates or places.
|
|
73
|
+
- One slow drifting element: steam, a petal, mist.
|
|
74
|
+
|
|
75
|
+
## Sound
|
|
76
|
+
|
|
77
|
+
- A low drone on the root; a `pluck` on a pentatonic scale (for example D E F# A B) once per bar.
|
|
78
|
+
- `drop` for ink and water; `knock` for seals and stamps; a light `scratch` under brush strokes.
|
|
79
|
+
- 60–80 BPM, long reverb.
|
|
80
|
+
|
|
81
|
+
## Bans
|
|
82
|
+
|
|
83
|
+
Neon, gradients, glossy 3D, fast cuts, sans-serif titles, emoji, more than one red element per scene.
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# riso-halftone
|
|
2
|
+
|
|
3
|
+
Fits: indie brands, zines, retro, nostalgia, playful education, small makers. Not for: corporate, luxury.
|
|
4
|
+
|
|
5
|
+
## Palette
|
|
6
|
+
|
|
7
|
+
- Two or three spot inks on paper `#F4EFE4`: fluorescent pink `#FF48B0`, blue `#0078BF`, yellow `#FFE800`, or teal
|
|
8
|
+
`#00838A`.
|
|
9
|
+
- Overlaps multiply (`mix-blend-mode: multiply`) to make the third colour — that is what the third ink is for, so
|
|
10
|
+
never use it as a flat fill where two others already overlap.
|
|
11
|
+
|
|
12
|
+
## Type
|
|
13
|
+
|
|
14
|
+
- Chunky grotesk or rounded at 700–900 (Space Grotesk, Archivo, or ZCOOL KuaiLe for Chinese) at 140–300 px.
|
|
15
|
+
- Typewriter-like mono for captions (IBM Plex Mono, 22 px).
|
|
16
|
+
|
|
17
|
+
## Marks, in a page
|
|
18
|
+
|
|
19
|
+
- **Halftone fills:** a `<pattern>` of dots 4–10 px in pitch, dot radius scaled per area to fake tone
|
|
20
|
+
(`patternTransform="scale(0.7)"` on lighter areas, 1.3 on darker ones). Two patterns are enough for a whole film.
|
|
21
|
+
- **Misregistration:** each ink layer is its own element, offset 2–6 px, drifting with
|
|
22
|
+
`wobble(seed, layer, t, 0.3)` — the offset is what makes it read as printed.
|
|
23
|
+
- **Shapes:** simple and blobby, flat fill, drawn as paths — no outlines.
|
|
24
|
+
|
|
25
|
+
```html
|
|
26
|
+
<g style="mix-blend-mode: multiply">
|
|
27
|
+
<circle cx="820" cy="520" r="260" fill="url(#dotsPink)" style="transform: translate(3px, -2px)"/>
|
|
28
|
+
<circle cx="1080" cy="560" r="300" fill="url(#dotsBlue)" style="transform: translate(-4px, 2px)"/>
|
|
29
|
+
</g>
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Texture
|
|
33
|
+
|
|
34
|
+
Paper grain at 0.2, plus a mottled `feTurbulence` mask on large fills so some paper shows through
|
|
35
|
+
(`<mask>` with a `feTurbulence` + `feComponentTransfer` alpha ramp). Never a clean vector fill at full opacity.
|
|
36
|
+
|
|
37
|
+
## Layout
|
|
38
|
+
|
|
39
|
+
Collage-like, slightly off-grid; elements tilted ±3°; tape and sticker motifs; printed margins.
|
|
40
|
+
|
|
41
|
+
## Composition
|
|
42
|
+
|
|
43
|
+
- Occupancy 50–80%, collage-like and slightly off-grid.
|
|
44
|
+
- Printed margins: a 120 px paper border; nothing bleeds unless it is a page turn.
|
|
45
|
+
|
|
46
|
+
## Motion character
|
|
47
|
+
|
|
48
|
+
- 100–120 BPM, stepped: positions update on twos — `stepped(t, 12)` — which reads as hand-made.
|
|
49
|
+
- Mild overshoot allowed (`settle(..., { bounce: 0.2 })`). Layers slide into register on the beat: from a 4–6 px
|
|
50
|
+
offset to 0, in 0.12 s.
|
|
51
|
+
|
|
52
|
+
## Transition grammar
|
|
53
|
+
|
|
54
|
+
- A page turn or a new "sheet" sliding in over the old one.
|
|
55
|
+
- One ink layer wipes across and the next scene is printed in it.
|
|
56
|
+
- A halftone dot grows until it becomes the next background (`revealCircle`, with the dot pattern behind it).
|
|
57
|
+
|
|
58
|
+
## Signature details
|
|
59
|
+
|
|
60
|
+
Registration crosses in the corners; a print-run counter ("№ 027 / 300"); colour separations shown briefly before
|
|
61
|
+
they combine.
|
|
62
|
+
|
|
63
|
+
## Sound
|
|
64
|
+
|
|
65
|
+
- A lo-fi `pluck` figure; `knock` when a layer slides into register; `scratch` for paper slides; `tick` on beats.
|
|
66
|
+
- 100–120 BPM.
|
|
67
|
+
|
|
68
|
+
## Bans
|
|
69
|
+
|
|
70
|
+
Smooth gradients, glossy effects, perfect vector precision everywhere, more than three inks.
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# storybook-scene
|
|
2
|
+
|
|
3
|
+
Fits: short stories, characters, music videos and lyric clips, picture books, emotional moments, mascots acting. Not
|
|
4
|
+
for: data, product specs.
|
|
5
|
+
|
|
6
|
+
## Palette
|
|
7
|
+
|
|
8
|
+
- One dominant mood colour for sky and air (night `#2B3150`–`#4A4F7A`, dusk `#5B6A8F`, day `#BFD8E6`).
|
|
9
|
+
- Darker values of it for ground and silhouettes.
|
|
10
|
+
- Two or three accents carry the story: the key object's colour, the light colour (warm lamp `#F2C46D`), skin or
|
|
11
|
+
material tones.
|
|
12
|
+
- Characters are told apart by one flat colour each.
|
|
13
|
+
|
|
14
|
+
## Type
|
|
15
|
+
|
|
16
|
+
- Title: brush or serif display in a corner, vertical for Chinese (Ma Shan Zheng, Noto Serif SC 700).
|
|
17
|
+
- Captions: Noto Serif SC or Noto Sans SC at 40–48 px, warm white or lamp yellow, with an optional word-by-word
|
|
18
|
+
highlight (one `<span>` per word, `color` swapped on the beat — never a fade).
|
|
19
|
+
|
|
20
|
+
## Marks, in a page
|
|
21
|
+
|
|
22
|
+
- Flat shapes, one darker shade per object for volume, corners slightly rounded.
|
|
23
|
+
- **Characters are drawn for the story, not rigged from a library.** Give each one a silhouette the story suggests,
|
|
24
|
+
a shade side, clothing or material details, and an expressive face (eyes, brows, mouth). Never a stick figure
|
|
25
|
+
unless asked. Interpolate between named poses with the `poseAt` pattern in `references/pages.md`; anything they hold
|
|
26
|
+
is drawn at the hand's grip point.
|
|
27
|
+
- Weather as many thin streaks (rain) or drifting dots (snow) across the whole frame, in two depths, each offset by
|
|
28
|
+
`rand(seed + i)` so no two are in step.
|
|
29
|
+
- Light as translucent wedge shapes under lamps, lit windows, and reflections as vertical streaks in puddles — no
|
|
30
|
+
blur, no glow.
|
|
31
|
+
|
|
32
|
+
## Texture
|
|
33
|
+
|
|
34
|
+
Grain at 0.06, or paper at low strength; a soft `url(#rough)` on ground and foliage for a cut-paper edge when the
|
|
35
|
+
story is gentle.
|
|
36
|
+
|
|
37
|
+
## Composition
|
|
38
|
+
|
|
39
|
+
- Occupancy: the world fills the frame, characters about 25–40% of its height.
|
|
40
|
+
- Wide and locked: horizon on the lower third, characters on a third line, the key object at the focal point.
|
|
41
|
+
- Layers back to front: sky or wall, far (skyline, hills, shelves), mid (the main set), ground, foreground (posts,
|
|
42
|
+
plants, puddles, objects).
|
|
43
|
+
- Captions in the lower third, never over a face.
|
|
44
|
+
|
|
45
|
+
## Motion character
|
|
46
|
+
|
|
47
|
+
- 60–90 BPM, character-led.
|
|
48
|
+
- Acting in small readable poses: a hand over, a head turn, a wave, a slump. `settle` with `{ bounce: 0.15 }` for
|
|
49
|
+
gestures only.
|
|
50
|
+
- Weather and ambient elements move continuously. The big moves (an arrival, a departure, a gift handed over, a
|
|
51
|
+
reveal) get the most screen time.
|
|
52
|
+
|
|
53
|
+
## Transition grammar
|
|
54
|
+
|
|
55
|
+
- One continuous shot: the story changes by action inside the world — something arrives or leaves, lights switch on,
|
|
56
|
+
time of day shifts — not by cuts.
|
|
57
|
+
- A slow push-in is allowed only on the emotional beat, and returns to wide for the ending. Push in by scaling the
|
|
58
|
+
world group, holding the characters' scale, so the depth reads.
|
|
59
|
+
|
|
60
|
+
## Signature details
|
|
61
|
+
|
|
62
|
+
- A sign, label or object in the world that names the place or the theme.
|
|
63
|
+
- A written word inside the world (on fogged glass, a letter, a ticket) that echoes the caption.
|
|
64
|
+
- A final title card over the emptied scene.
|
|
65
|
+
|
|
66
|
+
## Sound
|
|
67
|
+
|
|
68
|
+
- An ambience bed matching the environment (rain, wind, room) for the whole film, plus event sounds on the story's
|
|
69
|
+
hits: `knock` for doors and objects, `boom` for vehicles or big arrivals, `drop` for water.
|
|
70
|
+
- An optional soft pluck or pad motif under the captions.
|
|
71
|
+
|
|
72
|
+
## Bans
|
|
73
|
+
|
|
74
|
+
Camera shake, fast cuts, gradients, glow effects (bloom, neon halos), grey captions on a grey sky, characters cropped
|
|
75
|
+
by the frame at rest.
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# swiss-kinetic
|
|
2
|
+
|
|
3
|
+
Fits: brand statements, launches, conferences, tech, manifestos. Not for: cosy, handmade, heritage.
|
|
4
|
+
|
|
5
|
+
## Palette
|
|
6
|
+
|
|
7
|
+
- Off-white `#F2F0EB`, near-black `#0E0E0E`, one hot accent picked for the brand (default signal red `#FF3B1F`).
|
|
8
|
+
- Optional support grey `#9A9A96`.
|
|
9
|
+
- Full-frame inversions (black ↔ white) count as scene changes: they are the transition, so do not also wipe.
|
|
10
|
+
|
|
11
|
+
## Type
|
|
12
|
+
|
|
13
|
+
- One grotesk: Inter Tight, Space Grotesk or Geist. 800–900 for words at 180–420 px, set tight (−0.03 to −0.05 em),
|
|
14
|
+
often cropped by the frame.
|
|
15
|
+
- 500 labels at 22–26 px, tracked 0.08 em, all caps.
|
|
16
|
+
|
|
17
|
+
## Marks, in a page
|
|
18
|
+
|
|
19
|
+
- Solid rectangles and rules (2–12 px) snapped to the grid — plain `<rect>`, no filter, no radius.
|
|
20
|
+
- Circles only as solid dots.
|
|
21
|
+
- Arrows built from rules (a shaft `<rect>` plus two short strokes).
|
|
22
|
+
- No outlines on type except one deliberately outlined word (`-webkit-text-stroke: 2px currentColor; color: transparent`).
|
|
23
|
+
|
|
24
|
+
## Texture
|
|
25
|
+
|
|
26
|
+
None, or one grain rect at opacity 0.05. Sharpness is the texture.
|
|
27
|
+
|
|
28
|
+
## Layout
|
|
29
|
+
|
|
30
|
+
- A 12-column grid: 120 px columns, 40 px gutters, 150 px margins; a 24 px baseline grid.
|
|
31
|
+
- Asymmetric: hang type from the top-left column, keep big negative space.
|
|
32
|
+
- Numbers (01, 02, 03) mark sections.
|
|
33
|
+
|
|
34
|
+
## Composition
|
|
35
|
+
|
|
36
|
+
- Occupancy: type fills 60–100% and may bleed off an edge on purpose.
|
|
37
|
+
- Everything else snaps to the grid.
|
|
38
|
+
- At least 30% of the frame is empty background in every scene.
|
|
39
|
+
|
|
40
|
+
## Motion character
|
|
41
|
+
|
|
42
|
+
- 120–128 BPM. Decisive: `EASE.snap` or `EASE.out`, 0.25–0.45 s moves, no bounce.
|
|
43
|
+
- Words slide in on rails along grid lines, letters stagger 0.02–0.04 s (`letters(el, t, beat)` in
|
|
44
|
+
`references/pages.md`).
|
|
45
|
+
- A block wipes on, the word appears behind it, then the block wipes off — three beats, one element each.
|
|
46
|
+
|
|
47
|
+
## Transition grammar
|
|
48
|
+
|
|
49
|
+
- Hard-edged block wipes along columns: one full-frame rect per column, `revealInset(p, 'bottom')` staggered by
|
|
50
|
+
0.04 s, on the beat.
|
|
51
|
+
- Inversion cuts on the beat — the background and the type swap colour in one frame, holding for at least a beat.
|
|
52
|
+
- A word scales until the counter of its O becomes the next frame (scale the whole `<svg>` group, then cut).
|
|
53
|
+
- A rule extends to become the next scene's baseline (one path, `drawOn`).
|
|
54
|
+
|
|
55
|
+
## Signature details
|
|
56
|
+
|
|
57
|
+
Running section numbers; a thin ticker line at the bottom with a time code; the accent used for exactly one thing per
|
|
58
|
+
scene.
|
|
59
|
+
|
|
60
|
+
## Sound
|
|
61
|
+
|
|
62
|
+
- `kick` on bar 1; `tick` or `hat` on each beat; a short `clap` on word slams; `whoosh` on block wipes.
|
|
63
|
+
- No pads, or one very low drone. 120–128 BPM.
|
|
64
|
+
|
|
65
|
+
## Bans
|
|
66
|
+
|
|
67
|
+
Gradients, drop shadows, rounded cards, more than one accent, centred-title-over-three-cards, decorative icons.
|