@a-company/atelier 0.36.0 → 0.38.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.
Files changed (99) hide show
  1. package/dist/{chunk-JPZ4F4PW.js → chunk-3ARBOSWY.js} +64 -5
  2. package/dist/chunk-3ARBOSWY.js.map +1 -0
  3. package/dist/cli.js +11469 -413
  4. package/dist/cli.js.map +1 -1
  5. package/dist/{dist-M67UZGFQ.js → dist-3YQK6PI6.js} +2 -2
  6. package/dist/index.cjs +3193 -227
  7. package/dist/index.cjs.map +1 -1
  8. package/dist/index.d.cts +701 -8
  9. package/dist/index.d.ts +701 -8
  10. package/dist/index.js +7237 -72
  11. package/dist/index.js.map +1 -1
  12. package/dist/mcp.js +2898 -507
  13. package/dist/mcp.js.map +1 -1
  14. package/package.json +14 -9
  15. package/src/web/inline-app.ts +55 -4
  16. package/src/web/timeline-state-types.ts +28 -0
  17. package/src/web/timeline-view.test.ts +99 -0
  18. package/src/web/timeline-view.ts +339 -0
  19. package/src/web/workspace-app.ts +3146 -0
  20. package/templates/workspace/.claude/agents/atelier-iris.md +75 -0
  21. package/templates/workspace/.claude/agents/atelier-lux.md +67 -0
  22. package/templates/workspace/.claude/agents/atelier-quill.md +61 -0
  23. package/templates/workspace/.gitignore +30 -0
  24. package/templates/workspace/.paradigm/personas/_shared/cascade-merge.md +172 -0
  25. package/templates/workspace/CLAUDE.md +93 -0
  26. package/templates/workspace/README.md +75 -0
  27. package/templates/workspace/SETUP.md +127 -0
  28. package/templates/workspace/_brand/.atelier-brand.yaml +34 -0
  29. package/templates/workspace/_brand/DESIGN.md +56 -0
  30. package/templates/workspace/_brand/SCRIPT.md +41 -0
  31. package/templates/workspace/_brand/STORYBOARD.md +33 -0
  32. package/templates/workspace/_packs/README.md +54 -0
  33. package/templates/workspace/projects/README.md +49 -0
  34. package/templates/workspace/workspace.atelier +22 -0
  35. package/university/content/notes/N-atel-001-first-render.md +114 -0
  36. package/university/content/notes/N-atel-001-install-and-launch.md +84 -0
  37. package/university/content/notes/N-atel-001-what-is-atelier.md +51 -0
  38. package/university/content/notes/N-atel-101-easings.md +97 -0
  39. package/university/content/notes/N-atel-101-layers.md +106 -0
  40. package/university/content/notes/N-atel-101-states-and-deltas.md +94 -0
  41. package/university/content/notes/N-atel-101-the-atelier-format.md +72 -0
  42. package/university/content/notes/N-atel-201-authoring-tools.md +141 -0
  43. package/university/content/notes/N-atel-201-mcp-overview.md +86 -0
  44. package/university/content/notes/N-atel-201-patterns.md +108 -0
  45. package/university/content/notes/N-atel-201-visual-and-effects.md +125 -0
  46. package/university/content/notes/N-atel-301-composition-and-overlays.md +141 -0
  47. package/university/content/notes/N-atel-301-effects.md +136 -0
  48. package/university/content/notes/N-atel-301-images-and-video.md +126 -0
  49. package/university/content/notes/N-atel-301-shapes-and-text.md +118 -0
  50. package/university/content/notes/N-atel-401-hierarchical-states.md +71 -0
  51. package/university/content/notes/N-atel-401-motion-deep-dive.md +106 -0
  52. package/university/content/notes/N-atel-401-presets-and-templates.md +98 -0
  53. package/university/content/notes/N-atel-401-transitions.md +94 -0
  54. package/university/content/notes/N-atel-501-detected-vs-user-edited.md +76 -0
  55. package/university/content/notes/N-atel-501-layer-tag-isolation.md +62 -0
  56. package/university/content/notes/N-atel-501-silence-trim.md +98 -0
  57. package/university/content/notes/N-atel-501-transcribe-and-captions.md +98 -0
  58. package/university/content/notes/N-atel-601-carousel.md +71 -0
  59. package/university/content/notes/N-atel-601-overlay-rules.md +96 -0
  60. package/university/content/notes/N-atel-601-recipe-tools-and-apply.md +84 -0
  61. package/university/content/notes/N-atel-601-studio-recipe.md +103 -0
  62. package/university/content/notes/N-atel-701-choosing-output.md +68 -0
  63. package/university/content/notes/N-atel-701-png-and-frames.md +84 -0
  64. package/university/content/notes/N-atel-701-vector.md +85 -0
  65. package/university/content/notes/N-atel-701-video.md +88 -0
  66. package/university/content/notes/N-atel-801-editing-surface.md +69 -0
  67. package/university/content/notes/N-atel-801-live-bridge.md +84 -0
  68. package/university/content/notes/N-atel-801-studio-app.md +72 -0
  69. package/university/content/notes/N-atel-801-symbiotic-loop.md +56 -0
  70. package/university/content/paths/LP-atel-001.yaml +21 -0
  71. package/university/content/paths/LP-atel-101.yaml +22 -0
  72. package/university/content/paths/LP-atel-201.yaml +23 -0
  73. package/university/content/paths/LP-atel-301.yaml +22 -0
  74. package/university/content/paths/LP-atel-401.yaml +22 -0
  75. package/university/content/paths/LP-atel-501.yaml +22 -0
  76. package/university/content/paths/LP-atel-601.yaml +22 -0
  77. package/university/content/paths/LP-atel-701.yaml +22 -0
  78. package/university/content/paths/LP-atel-801.yaml +22 -0
  79. package/university/content/quizzes/Q-atel-001-orientation.yaml +66 -0
  80. package/university/content/quizzes/Q-atel-101-document-model.yaml +66 -0
  81. package/university/content/quizzes/Q-atel-201-mcp-authoring.yaml +66 -0
  82. package/university/content/quizzes/Q-atel-301-visual-system.yaml +66 -0
  83. package/university/content/quizzes/Q-atel-401-state-machines.yaml +66 -0
  84. package/university/content/quizzes/Q-atel-501-video-pipeline.yaml +66 -0
  85. package/university/content/quizzes/Q-atel-601-recipes.yaml +66 -0
  86. package/university/content/quizzes/Q-atel-701-export.yaml +66 -0
  87. package/university/content/quizzes/Q-atel-801-studio-loop.yaml +66 -0
  88. package/university/index.yaml +720 -0
  89. package/university/pack.yaml +21 -0
  90. package/dist/chunk-5QQESXI6.js +0 -4432
  91. package/dist/chunk-5QQESXI6.js.map +0 -1
  92. package/dist/chunk-JPZ4F4PW.js.map +0 -1
  93. package/dist/cli.cjs +0 -6313
  94. package/dist/cli.cjs.map +0 -1
  95. package/dist/cli.d.cts +0 -1
  96. package/dist/cli.d.ts +0 -1
  97. package/dist/mcp.cjs +0 -5462
  98. package/dist/mcp.cjs.map +0 -1
  99. /package/dist/{dist-M67UZGFQ.js.map → dist-3YQK6PI6.js.map} +0 -0
@@ -0,0 +1,127 @@
1
+ # Workspace setup runbook
2
+
3
+ > **For the agent team.** When the creator asks to "get set up" (or "run the
4
+ > setup checklist", "am I ready to render", "check my environment"), work
5
+ > through this file top to bottom. For each item: run the **Check**, judge it
6
+ > against **Pass**, and if it fails, walk the creator through the **Fix** — then
7
+ > re-run the Check to confirm. Do NOT skip steps silently. End with the
8
+ > **Report** at the bottom: a ✓/✗/– line per item plus the single next action.
9
+ >
10
+ > Run the checks with the `Bash` tool. Surface command output verbatim when an
11
+ > item fails — don't paraphrase errors. Detect the OS first (`uname`) so you
12
+ > give the right install command (the Fixes below show macOS/Homebrew; on Linux
13
+ > use the distro package manager, on Windows use winget/scoop or the installer
14
+ > links).
15
+
16
+ ---
17
+
18
+ ## Required — the creator cannot render without these
19
+
20
+ ### 1. Claude Code
21
+ - **Check:** You're running inside it, so this passes by definition.
22
+ - **Pass:** This session exists.
23
+ - **Fix:** n/a.
24
+
25
+ ### 2. Node.js 22+
26
+ - **Check:** `node --version`
27
+ - **Pass:** major version ≥ 22. (Everything below runs through `npx`, which needs
28
+ Node — so check this first.)
29
+ - **Fix:** Install Node 22 LTS from <https://nodejs.org> (or `nvm install 22 && nvm use 22`).
30
+ Re-run the Check.
31
+
32
+ ### 3. Hyperframes + the render toolchain ← the important one
33
+ Hyperframes is the render engine (Iris drives it via `npx hyperframes preview` /
34
+ `render`). There is **no manual install** — `npx` auto-fetches the published
35
+ `hyperframes` package on first run. It ships its own dependency checker; use it
36
+ as the authoritative check for the whole render toolchain:
37
+
38
+ - **Check:** `npx --yes hyperframes doctor`
39
+ - **Pass:** read the `✓ / ✗` lines it prints. You want `✓` on **FFmpeg**,
40
+ **FFprobe**, and **Chrome** (the three render-critical deps), plus Node and
41
+ adequate Disk/Memory.
42
+ > ⚠️ **`doctor` exits 0 even when a check fails.** Do NOT trust the exit code —
43
+ > judge by the `✗` markers in the output. Surface any `✗` line verbatim.
44
+ - **Fix**, per failing line:
45
+ - **FFmpeg / FFprobe ✗** → macOS `brew install ffmpeg` (ships both); Debian/Ubuntu
46
+ `sudo apt install ffmpeg`; Windows `winget install Gyan.FFmpeg`. Required for the
47
+ render → `.mp4`/`.mov`/`.webm` mux and all audio. Re-run `doctor`.
48
+ - **Chrome ✗** → `npx --yes hyperframes browser install` (Hyperframes renders by
49
+ driving headless Chrome). Re-run `doctor`.
50
+ - **Low Memory / Disk ⚠** → renders may fail or run slowly; have the creator free
51
+ resources. Not a hard blocker.
52
+ - **`npx hyperframes` errors entirely** → confirm step 2 passed and the first run
53
+ can reach the npm registry (a corporate proxy may need `npm config set proxy`).
54
+
55
+ ---
56
+
57
+ ## Optional — enhances the workflow, not required to render
58
+
59
+ ### 5. Whisper (transcription)
60
+ - **Check:** `whisper-cli --help 2>/dev/null || whisper-cpp --help 2>/dev/null || echo MISSING`
61
+ - **Pass:** either binary responds. (Only needed if the creator will drop raw
62
+ recordings into `projects/<name>/media/` for auto-transcription.)
63
+ - **Fix:** macOS `brew install whisper-cpp`; otherwise build whisper.cpp from
64
+ <https://github.com/ggerganov/whisper.cpp>. Safe to skip until the first recording.
65
+
66
+ ### 6. Paradigm learning loop (cross-session memory)
67
+ - **Check:** `ls ~/.paradigm/notebooks/quill ~/.paradigm/notebooks/lux ~/.paradigm/notebooks/iris 2>/dev/null || echo MISSING`
68
+ - **Pass:** all three notebook dirs exist → the team accumulates learning across
69
+ sessions. If MISSING, the agents still work fully from their workspace shims;
70
+ they just don't persist learning between sessions.
71
+ - **Fix:** Install the Paradigm plugin and the Atelier personas (Quill / Lux /
72
+ Iris) into `~/.paradigm/`. This is optional — only set it up if the creator
73
+ wants the agents to get smarter over time. Don't block setup on it.
74
+
75
+ ---
76
+
77
+ ## Workspace verification — is THIS workspace intact?
78
+
79
+ ### 7. Scaffold integrity
80
+ - **Check:** confirm these exist (use `Glob`/`ls`):
81
+ `workspace.atelier`, `_brand/`, `_packs/`, `projects/`,
82
+ `.claude/agents/atelier-quill.md`, `atelier-lux.md`, `atelier-iris.md`,
83
+ `.paradigm/personas/_shared/cascade-merge.md`, `CLAUDE.md`.
84
+ - **Pass:** all present.
85
+ - **Fix:** re-run `atelier workspace` in this folder — it's idempotent and
86
+ refreshes scaffold files without touching authored brand artifacts.
87
+
88
+ ### 8. Brand artifacts authored (not placeholders)
89
+ - **Check:** read `_brand/DESIGN.md`, `_brand/SCRIPT.md`, `_brand/STORYBOARD.md`
90
+ and `_brand/.atelier-brand.yaml`; look for remaining `TODO` markers or template
91
+ placeholder text.
92
+ - **Pass:** the brand reflects the creator's real palette / typography / voice.
93
+ - **Fix:** offer to have **@atelier-quill** (voice + design) and **@atelier-lux**
94
+ (visual patterns) interview the creator and fill these in. Placeholders are not
95
+ a hard failure — flag them and move on.
96
+
97
+ ### 9. Fonts staged (if the brand uses custom fonts)
98
+ - **Check:** if `_brand/.atelier-brand.yaml` names non-system fonts, confirm the
99
+ files exist under `_assets/fonts/<family>/`.
100
+ - **Pass:** every named custom font is present locally.
101
+ - **Fix:** stage the font files into `_assets/fonts/<family>/`. This is the
102
+ font-staging pattern — Hyperframes' render step does NOT reliably load web-CDN
103
+ fonts, so brand fonts must be local or renders fall back to a generic sans.
104
+
105
+ ---
106
+
107
+ ## Report
108
+
109
+ Summarize like this, then state the single next action:
110
+
111
+ ```
112
+ Atelier setup check
113
+ ✓ Node.js 22+ v22.x
114
+ ✓ Hyperframes 0.6.x (npx)
115
+ ✓ ffmpeg present
116
+ – Whisper not installed (optional — needed for transcription)
117
+ – Paradigm learning loop not installed (optional)
118
+ ✓ Workspace scaffold intact
119
+ ⚠ Brand artifacts still has TODO placeholders
120
+ ✓ Fonts n/a (system fonts only)
121
+
122
+ Next: your brand still has placeholders — want @atelier-quill to draft your
123
+ voice + @atelier-lux your visual patterns? Or jump straight to a first project.
124
+ ```
125
+
126
+ Use ✓ pass, ✗ required-and-failing (must fix before render), ⚠ works-but-attention,
127
+ – optional-and-absent.
@@ -0,0 +1,34 @@
1
+ # {{WORKSPACE_NAME}} — structured brand overlay
2
+ #
3
+ # Agents read this for fields the markdown doesn't structure cleanly.
4
+ # DESIGN.md / SCRIPT.md / STORYBOARD.md are the source of truth for prose;
5
+ # this overlay captures the things agents query as data (palette, fonts,
6
+ # whitelists, etc).
7
+ #
8
+ # Cascade: project-tier `projects/<name>/.atelier-overlay.yaml` extends this
9
+ # per `.paradigm/personas/_shared/cascade-merge.md` (lists extend, scalars
10
+ # override, maps override-at-key).
11
+
12
+ name: "{{WORKSPACE_NAME}}"
13
+
14
+ voice:
15
+ register: TODO # one short phrase, e.g. clinical-editorial
16
+ tone: TODO # e.g. confident-not-cocky
17
+ exemplars: [] # quill mirrors these tonally
18
+ do: [] # tonal moves to make
19
+ dont: [] # tonal moves to never make
20
+
21
+ visual:
22
+ primary_palette: [paper, ink, accent]
23
+ typography:
24
+ display: Inter
25
+ body: Inter
26
+ treatment:
27
+ photos: TODO # e.g. high-key, generous negative space
28
+ motion: TODO # e.g. gentle ease-out, never bounce
29
+ aspect: 9:16 # default canvas aspect (1080:1920); override per project
30
+
31
+ techniques_whitelist:
32
+ - TODO
33
+ techniques_blacklist:
34
+ - TODO
@@ -0,0 +1,56 @@
1
+ # {{WORKSPACE_NAME}} — Brand Design
2
+
3
+ > **Workspace-tier brand design.** This file describes the durable visual + tonal
4
+ > brand identity for **every** project under this workspace. Project-tier
5
+ > `projects/<name>/DESIGN.md` overrides + extends per the cascade rules
6
+ > (`.paradigm/personas/_shared/cascade-merge.md`).
7
+
8
+ ## Audience
9
+
10
+ <!-- Who is this brand FOR? Specifics, not generics. Replace this placeholder. -->
11
+ TODO — who watches / reads / interacts with this brand?
12
+
13
+ ## Voice register
14
+
15
+ <!-- The tonal posture. One short paragraph. Examples: "clinical-editorial,
16
+ confident-not-cocky" / "warm-conversational, never preachy" / etc. -->
17
+ TODO — describe the voice register.
18
+
19
+ ## Visual register
20
+
21
+ <!-- The visual posture. One short paragraph. Examples: "editorial generosity,
22
+ restrained palette, type-led" / "kinetic-bold with primary-color blocks" -->
23
+ TODO — describe the visual register.
24
+
25
+ ## Palette
26
+
27
+ <!-- Brand colors with semantic roles. Hex values. Lux reads these to make
28
+ palette decisions; Iris emits these as `--brand-palette-<role>` CSS vars
29
+ in every Hyperframes scaffold. -->
30
+ - `paper` — `#FFFFFF` — primary background
31
+ - `ink` — `#000000` — primary foreground / text
32
+ - `accent` — `#FF6B35` — single accent color used sparingly
33
+
34
+ ## Typography
35
+
36
+ <!-- Brand fonts with usage. Lux reads these for typography staging; Iris emits
37
+ these as `--brand-font-<usage>` CSS vars. Use Hyperframes-compatible
38
+ fonts when possible (see https://hyperframes.mintlify.app/docs/fonts). -->
39
+ - `display` — Inter — large headlines, hero copy
40
+ - `body` — Inter — captions, body text, secondary copy
41
+
42
+ ## Constraints
43
+
44
+ <!-- Hard rules. Lux and Iris MUST respect these. Examples:
45
+ - never use stock photography
46
+ - aspect is portrait 9:16 unless explicitly requested otherwise
47
+ - no exclamation marks in any on-screen copy -->
48
+ - TODO — list the brand hard rules.
49
+
50
+ ## Success criteria
51
+
52
+ <!-- How do we know a finished video is "on brand"? Specific signals creator
53
+ uses to evaluate output. Examples:
54
+ - viewer can identify the brand from the first 1.5s without a logo
55
+ - palette restraint never exceeds 3 hues per frame -->
56
+ - TODO — list signals of brand-correct output.
@@ -0,0 +1,41 @@
1
+ # {{WORKSPACE_NAME}} — Brand Voice
2
+
3
+ > **Workspace-tier voice exemplars + do/don't.** Quill reads this as the
4
+ > default voice for every project. Project-tier `projects/<name>/SCRIPT.md`
5
+ > overrides + extends per the cascade rules.
6
+
7
+ ## Voice exemplars
8
+
9
+ <!-- Real phrases that exemplify the brand voice. Quill mirrors these tonally
10
+ when drafting. Concrete > abstract. Three to five is enough.
11
+ Replace these placeholders with actual brand-voice samples. -->
12
+ - TODO — exemplar 1 (real phrase the brand would say)
13
+ - TODO — exemplar 2
14
+ - TODO — exemplar 3
15
+
16
+ ## Do
17
+
18
+ <!-- Tonal moves the brand SHOULD make. -->
19
+ - TODO — e.g. "lead with the metric, not the brag"
20
+ - TODO — e.g. "end on the actionable beat, not the inspirational one"
21
+
22
+ ## Don't
23
+
24
+ <!-- Tonal moves the brand should NEVER make. -->
25
+ - TODO — e.g. "no exclamation marks"
26
+ - TODO — e.g. "no hype adjectives (amazing, incredible, game-changing)"
27
+
28
+ ## Default structure
29
+
30
+ <!-- The brand's default short-form structure. Quill uses this unless overridden.
31
+ Default is hook → story → proof → CTA — replace if the brand prefers
32
+ a different shape. -->
33
+ - hook
34
+ - story
35
+ - proof
36
+ - CTA
37
+
38
+ ## Sign-off
39
+
40
+ <!-- The brand's canonical closing beat / tagline / sign-off. Optional. -->
41
+ TODO — closing beat if the brand has one (otherwise delete this section).
@@ -0,0 +1,33 @@
1
+ # {{WORKSPACE_NAME}} — Brand Storyboard Patterns
2
+
3
+ > **Workspace-tier visual patterns.** Lux reads this for recurring storyboard
4
+ > primitives the brand favors. Project-tier `projects/<name>/STORYBOARD.md`
5
+ > overrides + extends per the cascade rules.
6
+
7
+ ## Signature transitions
8
+
9
+ <!-- Named transitions the brand uses. Lux selects from this whitelist when
10
+ deciding scene-to-scene transitions. Each entry: name + when-to-use. -->
11
+ - TODO — e.g. "hard-cut: between distinct beats"
12
+ - TODO — e.g. "fade-under-vo: when voiceover continues across visual change"
13
+
14
+ ## Recurring frames
15
+
16
+ <!-- Named frames the brand uses across episodes (intro shells, outro shells,
17
+ hero compositions). Lux references these by name in project storyboards
18
+ instead of redescribing each time. -->
19
+ - TODO — e.g. "swiss-grid-3up: 3-column comparison hero"
20
+ - TODO — e.g. "ken-burns-restrained: photographic still with gentle zoom"
21
+
22
+ ## Technique whitelist
23
+
24
+ <!-- Visual techniques the brand allows. Lux picks from this list. -->
25
+ - TODO — e.g. swiss-grid
26
+ - TODO — e.g. ken-burns-restrained
27
+ - TODO — e.g. fade-under-vo
28
+
29
+ ## Technique blacklist
30
+
31
+ <!-- Visual techniques the brand never uses (overrides any whitelist). -->
32
+ - TODO — e.g. glitch
33
+ - TODO — e.g. kinetic-typography-heavy
@@ -0,0 +1,54 @@
1
+ # Asset Packs
2
+
3
+ Asset packs are **folders + sidecars**. Each subdirectory here is a pack.
4
+ Anywhere else on disk works too — register external folders via:
5
+
6
+ ```sh
7
+ atelier pack register ~/Dropbox/Shared/CompanyBrand
8
+ ```
9
+
10
+ (`atelier pack register` ships in a later release. For now, register by
11
+ editing `workspace.atelier`'s `packs.external` list.)
12
+
13
+ ## Pack structure
14
+
15
+ ```
16
+ _packs/<pack-name>/
17
+ ├── .atelier-pack.yaml # required — sidecar describes what/when/how
18
+ ├── logos/ # category folders (yours to name)
19
+ ├── photos/
20
+ ├── transitions/
21
+ └── ...
22
+ ```
23
+
24
+ ## Sidecar shape
25
+
26
+ See `.paradigm/personas/lux/skills/walk-asset-packs.md` for the canonical
27
+ schema. Quick reference:
28
+
29
+ ```yaml
30
+ name: swiss-grid
31
+ owner: you
32
+ vibe: editorial, clinical, generous whitespace
33
+ categories:
34
+ logos:
35
+ when: full-screen reveals, watermarks
36
+ when_not: inline with body copy
37
+ treatment: monochrome on photos; full color on solid paper
38
+ restrictions:
39
+ - never combine logos/ with grids/ in same frame
40
+ ```
41
+
42
+ ## Who reads packs
43
+
44
+ - **Lux** (Cinematographer) walks `_packs/*/` to resolve asset slots when
45
+ storyboarding. Cites pack-relative paths or category descriptors in
46
+ STORYBOARD.md.
47
+ - **Iris** (Composer) symlinks the cited pack assets into
48
+ `projects/<name>/assets/` at scaffold time.
49
+
50
+ ## What NOT to put here
51
+
52
+ - Bytes you want to share publicly — packs are local-first (`TD-2026-05-26-271`)
53
+ - Generated outputs — those live in `projects/<name>/out/`
54
+ - Per-project raw recordings — those live in `projects/<name>/media/`
@@ -0,0 +1,49 @@
1
+ # Projects
2
+
3
+ Each subdirectory here is one **output series** — typically one video or a
4
+ small batch of related variants (teaser-15s / trailer-30s / full-spot-60s
5
+ sharing the same beat).
6
+
7
+ ## Project structure
8
+
9
+ ```
10
+ projects/<name>/
11
+ ├── DESIGN.md # project overrides to workspace _brand/DESIGN.md
12
+ ├── SCRIPT.md # this project's actual script
13
+ ├── STORYBOARD.md # this project's shot list
14
+ ├── .atelier-overlay.yaml # optional — structured overrides to brand .yaml
15
+ ├── media/ # raw recordings for this project
16
+ ├── transcripts/ # auto-generated from media/
17
+ ├── _packs/ # optional — project-only packs (rare)
18
+ └── (Iris emits these as needed)
19
+ ├── index.html # Hyperframes composition
20
+ ├── assets/ # symlinks into media/ + _packs/
21
+ └── out/ # final renders
22
+ ```
23
+
24
+ ## Creating a project
25
+
26
+ Ask Quill in a Claude Code session:
27
+
28
+ > @atelier-quill draft a 15s teaser for `<project-name>`
29
+
30
+ Quill will scaffold `projects/<name>/` with starter DESIGN.md / SCRIPT.md /
31
+ STORYBOARD.md that inherit the workspace `_brand/` voice + visual register
32
+ via the cascade rules.
33
+
34
+ ## Cascade rules (TL;DR)
35
+
36
+ When agents work in `projects/<name>/`, the **effective brand** they read is
37
+ `_brand/<file>` (workspace) overlaid with `projects/<name>/<file>`:
38
+
39
+ - **Strings** → project overrides workspace
40
+ - **Lists** → project extends workspace (additive)
41
+ - **Map bindings** → project overrides at the key, leaves siblings intact
42
+
43
+ Full rules: `.paradigm/personas/_shared/cascade-merge.md`.
44
+
45
+ ## What NOT to put here
46
+
47
+ - Brand-level rules (those go in `_brand/` — agents will prompt promotion when
48
+ they see something repeat across projects)
49
+ - Pack bytes (those go in `_packs/<pack-name>/` or external pack folders)
@@ -0,0 +1,22 @@
1
+ # Atelier v2 workspace manifest.
2
+ # Created by `atelier workspace`. Edit fields freely.
3
+ #
4
+ # A workspace is a brand container. It holds:
5
+ # - _brand/ brand artifacts (DESIGN/SCRIPT/STORYBOARD + .atelier-brand.yaml)
6
+ # inherited by every project
7
+ # - _packs/ asset packs (folders with .atelier-pack.yaml sidecars)
8
+ # visible to every project
9
+ # - projects/ output series (each a self-contained brief + Hyperframes scaffold)
10
+ #
11
+ # Agents (Quill / Lux / Iris) read the workspace from cwd. There is no
12
+ # `.atelier/active.yaml` in v2 — explicit project arg or cwd determines scope.
13
+
14
+ version: 2.0.0
15
+ name: "{{WORKSPACE_NAME}}"
16
+ created: "{{ISO_DATE}}"
17
+
18
+ # External pack pointers — register folders anywhere on disk so agents can
19
+ # resolve them under `_packs/<pack>/`. Add via `atelier pack register <dir>`.
20
+ # (`atelier pack register` ships in a later release; for now edit by hand.)
21
+ packs:
22
+ external: []
@@ -0,0 +1,114 @@
1
+ ---
2
+ id: N-atel-001-first-render
3
+ title: Render your first animation
4
+ type: note
5
+ track: ATEL-001
6
+ author: atelier
7
+ created: '2026-05-18'
8
+ updated: '2026-05-18'
9
+ tags:
10
+ - course
11
+ - atel-001
12
+ - first-render
13
+ - cli
14
+ difficulty: beginner
15
+ estimatedMinutes: 5
16
+ prerequisites:
17
+ - N-atel-001-install-and-launch
18
+ summary: Create a minimal `.atelier` document by hand, preview a frame, and export to PNG — three CLI calls, no studio needed. Demystifies the document format before the visual surfaces hide it.
19
+ ---
20
+
21
+ ## The smallest possible document
22
+
23
+ Save this as `hello.atelier` in any directory:
24
+
25
+ ```yaml
26
+ name: Hello
27
+ canvas:
28
+ width: 800
29
+ height: 600
30
+ fps: 60
31
+ background: "#0F1115"
32
+ layers:
33
+ - id: title
34
+ visual:
35
+ type: text
36
+ content: Hello, Atelier
37
+ style:
38
+ fontFamily: Inter, system-ui, sans-serif
39
+ fontSize: 64
40
+ fontWeight: 600
41
+ color: "#F5F5F7"
42
+ frame:
43
+ x: 400
44
+ y: 300
45
+ bounds:
46
+ width: 600
47
+ height: 100
48
+ anchorPoint:
49
+ x: 0.5
50
+ y: 0.5
51
+ opacity: 0
52
+ states:
53
+ default:
54
+ duration: 60
55
+ deltas:
56
+ - layer: title
57
+ property: opacity
58
+ from: 0
59
+ to: 1
60
+ startFrame: 0
61
+ endFrame: 30
62
+ easing: ease-out
63
+ ```
64
+
65
+ That's a full Atelier document. One text layer, one state, one delta that fades the title in over 30 frames.
66
+
67
+ ## Validate it
68
+
69
+ ```bash
70
+ atelier validate hello.atelier
71
+ ```
72
+
73
+ The schema catches malformed easings, references to nonexistent layers, out-of-range frame numbers, missing required fields. Validation runs against a Zod schema with AI-readable error messages — if you ever ship a corrupt document, the validator will point at the field, not just say "invalid YAML."
74
+
75
+ ## Preview a frame
76
+
77
+ ```bash
78
+ atelier preview hello.atelier --frame 15
79
+ ```
80
+
81
+ Outputs the resolved layer state at frame 15: the title at 50% opacity, mid-fade. This is the same `resolveFrame` call the renderer makes; `preview` lets you inspect it without rendering.
82
+
83
+ ## Export
84
+
85
+ ```bash
86
+ atelier export-image hello.atelier --frame 30 --out hello.png
87
+ ```
88
+
89
+ PNG export from a single frame, via the `@napi-rs/canvas` rasterizer (prebuilt binaries — no native build, works on a plain `npm install`). For video, use `atelier render`:
90
+
91
+ ```bash
92
+ atelier render hello.atelier --format mp4 --out hello.mp4
93
+ ```
94
+
95
+ The CLI's `render` uses FFmpeg (must be on `$PATH`) and outputs MP4 or GIF. The browser studio exports via WebCodecs (MP4 / WebM / GIF, no FFmpeg dependency). Vector output is `atelier export-svg` and `atelier export-lottie` — see ATEL-701.
96
+
97
+ ## What you just learned about the format
98
+
99
+ - **Canvas** sets dimensions, frame rate, background — the global render context.
100
+ - **Layers** are visual elements with an ID, a `visual` (shape/text/image/video/group/ref), a `frame` (position), `bounds` (size), `anchorPoint`, and animatable properties (opacity, rotation, scale).
101
+ - **States** are named keyframes. Each has a `duration` (in frames) and `deltas` (interpolations).
102
+ - **Deltas** animate one property of one layer from a `from` value to a `to` value across `startFrame`–`endFrame`, with an `easing`.
103
+
104
+ That's the mental model. Layers describe what exists. States describe how long. Deltas describe how things change. Everything else — easings, presets, templates, interactions, refs — extends these primitives.
105
+
106
+ ## Where to go next
107
+
108
+ - **ATEL-101**: Document Model Fundamentals — every layer type, every easing, the resolveFrame interpolation model
109
+ - **ATEL-201**: Authoring via MCP — the 61 tools an agent uses to build documents like this without touching YAML
110
+ - **ATEL-301**: Visual System — shapes, typography, images, video; fills, strokes, shadows, blend modes, motion paths
111
+ - **ATEL-501**: Video Project Pipeline — silence-trim, transcribe, captions, parametric cuts
112
+ - **ATEL-601**: Studio Recipes — bundle silence policy + caption style + overlay rules + palette into a reusable preset
113
+
114
+ You can also just run `atelier studio hello.atelier` and edit this document in the browser. Anything you change in the studio writes back to the same file.
@@ -0,0 +1,84 @@
1
+ ---
2
+ id: N-atel-001-install-and-launch
3
+ title: Install Atelier and launch the studio
4
+ type: note
5
+ track: ATEL-001
6
+ author: atelier
7
+ created: '2026-05-18'
8
+ updated: '2026-05-18'
9
+ tags:
10
+ - course
11
+ - atel-001
12
+ - install
13
+ - cli
14
+ difficulty: beginner
15
+ estimatedMinutes: 4
16
+ prerequisites:
17
+ - N-atel-001-what-is-atelier
18
+ summary: One npm install gives you three commands — `atelier` (CLI), `atelier-mcp` (MCP server for AI agents), and `atelier studio` (local browser editor). Walks through install, what each command does, and how the three relate.
19
+ ---
20
+
21
+ ## Install
22
+
23
+ ```bash
24
+ npm i -g @a-company/atelier
25
+ ```
26
+
27
+ That single install gives you three executables on your `$PATH`:
28
+
29
+ | Command | What it does | When you use it |
30
+ |---|---|---|
31
+ | `atelier` | CLI for validating, inspecting, rendering, and processing `.atelier` files | Scripts, CI, Makefiles, ad-hoc inspection |
32
+ | `atelier-mcp` | MCP server an AI agent can connect to for authoring | Configure once in Claude Desktop or any MCP-aware client |
33
+ | `atelier studio` | Boots a local browser editor on `localhost` | Hands-on editing; image overlays; watching an agent mutate live |
34
+
35
+ You only need Node 20+ and a modern browser. No native build, no cloud account, no signup.
36
+
37
+ ## Launch the studio
38
+
39
+ ```bash
40
+ atelier studio
41
+ ```
42
+
43
+ That command:
44
+
45
+ 1. Probes a free port starting at `4321` (override with `--port 5000` or `--port-range 4321-4340`)
46
+ 2. Boots a local HTTP server bound to `127.0.0.1` (never `0.0.0.0`)
47
+ 3. Opens your default browser to `http://localhost:<port>` (suppress with `--no-open`)
48
+ 4. Watches the current working directory for `.atelier` files and lists them in the sidebar
49
+ 5. If the directory is empty, scaffolds a `welcome.atelier` so you land in a real document instead of an empty shell
50
+
51
+ The studio runs entirely on your machine. Nothing is sent anywhere.
52
+
53
+ ## Configure the MCP server (for AI agents)
54
+
55
+ In your Claude Desktop config (or any MCP client):
56
+
57
+ ```json
58
+ {
59
+ "mcpServers": {
60
+ "atelier": {
61
+ "command": "atelier-mcp"
62
+ }
63
+ }
64
+ }
65
+ ```
66
+
67
+ The agent now has 61 tools across 15 groups — document/layer/state/delta operations, visual configuration, asset and variable management, presets, templates, exports, and more. ATEL-201 covers the full tool surface and when to use which.
68
+
69
+ ## How the three commands relate
70
+
71
+ They share a single underlying engine (`@atelier/core`) and document store. Mutations made by `atelier-mcp` are observable by `atelier studio` running in the same project — when you wire the live-mutation bridge (the WebSocket transport between the MCP store and the studio), an agent's tool calls appear in the studio canvas in real time, with a toast attributing each change to its source.
72
+
73
+ This is the symbiotic loop Atelier is built for: the agent proposes, you tweak, the agent re-proposes, your tweaks survive. The detected-vs-user-edited convention from ATEL-501 (video pipelines) is the same idea generalized — every channel (silence-trim, captions, overlays, agent mutations) carries a source tag, and re-runs preserve human authorship.
74
+
75
+ ## Sanity-check your install
76
+
77
+ ```bash
78
+ atelier --version
79
+ atelier list
80
+ ```
81
+
82
+ `atelier list` enumerates the `.atelier` files in CWD. If there are none and you haven't launched the studio yet, that's expected — the welcome scaffold only happens on `atelier studio` first run.
83
+
84
+ Next: render your first animation.
@@ -0,0 +1,51 @@
1
+ ---
2
+ id: N-atel-001-what-is-atelier
3
+ title: What is Atelier?
4
+ type: note
5
+ track: ATEL-001
6
+ author: atelier
7
+ created: '2026-05-18'
8
+ updated: '2026-05-18'
9
+ tags:
10
+ - course
11
+ - atel-001
12
+ - orientation
13
+ difficulty: beginner
14
+ estimatedMinutes: 3
15
+ prerequisites: []
16
+ summary: Atelier is an AI-native animation engine — a declarative YAML format authored through MCP tools, runnable from a CLI, embeddable as a widget, and now bootable as a local browser editor with `atelier studio`.
17
+ ---
18
+
19
+ ## The short version
20
+
21
+ Atelier is an **animation engine that an AI agent can author through tool calls**. A `.atelier` document is plain YAML describing layers (shapes, text, images, video, groups), states, and deltas (per-frame interpolations). An agent calling `atelier_create`, `atelier_add_layer`, `atelier_add_state`, `atelier_add_delta` builds a document the same way a human would in a GUI — except every step is structured, validated, and reproducible.
22
+
23
+ Once a document exists, Atelier can:
24
+
25
+ - **Resolve** any frame by interpolating delta values through easings (linear, cubic-bezier, ease presets, spring physics, step)
26
+ - **Render** to Canvas 2D, SVG strings, or Lottie JSON
27
+ - **Export** to PNG, MP4, WebM, GIF — from a browser (WebCodecs) or the CLI (FFmpeg)
28
+ - **Edit** in a browser studio with a canvas preview, layer panel, property panel, and YAML view
29
+ - **Trim, transcribe, caption** video projects with the silence-detect + Whisper + caption pipelines
30
+
31
+ ## What makes it "AI-native"
32
+
33
+ Three things, in order of importance:
34
+
35
+ 1. **The document format was designed for an agent to write.** Layers have descriptive IDs, deltas reference layers by ID, states reference each other by name. There is no "drag this onto the canvas" — there is `atelier_add_layer({ id: "title", visual: { type: "text", content: "Hello", style: {...} } })`. The schema gives AI-readable validation errors when the agent gets it wrong.
36
+ 2. **61 MCP tools cover the full authoring surface.** An agent doesn't compose YAML by hand and pray it parses. It calls typed tools that mutate a document store, validate after each mutation, and return the updated document. Mistakes are caught at the tool boundary, not at render time.
37
+ 3. **The detected-vs-user-edited convention.** When a pipeline (silence-trim, captions) generates layers from analysis, those layers are tagged. User edits set `userEdited` / `userAdded` / `hidden` flags. Re-running the pipeline preserves user fixes by matching on timing tolerance. The human and the agent can both edit the same document forever without one erasing the other.
38
+
39
+ ## What it is not
40
+
41
+ - **Not a code framework.** It does not ship React components, runtime hooks, or HTTP handlers.
42
+ - **Not a cloud product.** Everything runs locally. There is no signup, no SaaS, no telemetry by default.
43
+ - **Not a replacement for After Effects.** It is a programmable, AI-author-first format. You will not draw bezier paths with a mouse here (yet). You will describe them in YAML or generate them via tool calls.
44
+
45
+ ## Who uses Atelier today
46
+
47
+ - **AI agents** authoring social-media-ready motion graphics, explainer animations, and short-form video composition
48
+ - **Developers** scripting animations via the Builder API (`@atelier/core`) or driving the CLI from a Makefile
49
+ - **Content creators** in `atelier studio` for hands-on layer editing with AI assistance live in the loop
50
+
51
+ The rest of this track shows you how to install Atelier and render your first animation in under two minutes.