@bitmagic/cli 0.1.61-dev.0 → 0.1.61-dev.2

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 (119) hide show
  1. package/README.md +47 -8
  2. package/assets/fonts/NotoSans-Bold.ttf +0 -0
  3. package/assets/fonts/OFL.txt +94 -0
  4. package/dist/chrome-launch.d.ts +18 -0
  5. package/dist/chrome-launch.js +24 -0
  6. package/dist/chrome-launch.js.map +1 -0
  7. package/dist/cli.d.ts +1 -0
  8. package/dist/cli.js +2 -0
  9. package/dist/cli.js.map +1 -1
  10. package/dist/commands/generate.d.ts +44 -0
  11. package/dist/commands/generate.js +143 -0
  12. package/dist/commands/generate.js.map +1 -1
  13. package/dist/commands/trailer-publish.d.ts +15 -0
  14. package/dist/commands/trailer-publish.js +45 -0
  15. package/dist/commands/trailer-publish.js.map +1 -0
  16. package/dist/commands/trailer.d.ts +3 -0
  17. package/dist/commands/trailer.js +396 -0
  18. package/dist/commands/trailer.js.map +1 -0
  19. package/dist/editor/hud-replay-page.d.ts +7 -0
  20. package/dist/editor/hud-replay-page.js +219 -0
  21. package/dist/editor/hud-replay-page.js.map +1 -0
  22. package/dist/editor/recording-panel.d.ts +3 -1
  23. package/dist/editor/recording-panel.js +6 -2
  24. package/dist/editor/recording-panel.js.map +1 -1
  25. package/dist/editor/recording-sink.d.ts +3 -20
  26. package/dist/editor/recording-sink.js +14 -35
  27. package/dist/editor/recording-sink.js.map +1 -1
  28. package/dist/editor/server.js +15 -18
  29. package/dist/editor/server.js.map +1 -1
  30. package/dist/editor/shell-page.d.ts +0 -8
  31. package/dist/editor/shell-page.js +23 -19
  32. package/dist/editor/shell-page.js.map +1 -1
  33. package/dist/generate/music.d.ts +51 -0
  34. package/dist/generate/music.js +93 -0
  35. package/dist/generate/music.js.map +1 -0
  36. package/dist/generate/stream.d.ts +13 -0
  37. package/dist/generate/stream.js +17 -1
  38. package/dist/generate/stream.js.map +1 -1
  39. package/dist/project/jobs.d.ts +1 -1
  40. package/dist/scaffold/project-files.d.ts +0 -1
  41. package/dist/scaffold/project-files.js +6 -33
  42. package/dist/scaffold/project-files.js.map +1 -1
  43. package/dist/scaffold/project.js +3 -1
  44. package/dist/scaffold/project.js.map +1 -1
  45. package/dist/scaffold/skill-files.d.ts +22 -0
  46. package/dist/scaffold/skill-files.js +198 -0
  47. package/dist/scaffold/skill-files.js.map +1 -0
  48. package/dist/trailer/analyze.d.ts +23 -0
  49. package/dist/trailer/analyze.js +186 -0
  50. package/dist/trailer/analyze.js.map +1 -0
  51. package/dist/trailer/auto-edl.d.ts +46 -0
  52. package/dist/trailer/auto-edl.js +148 -0
  53. package/dist/trailer/auto-edl.js.map +1 -0
  54. package/dist/trailer/beat-cut.d.ts +57 -0
  55. package/dist/trailer/beat-cut.js +232 -0
  56. package/dist/trailer/beat-cut.js.map +1 -0
  57. package/dist/trailer/client.d.ts +52 -0
  58. package/dist/trailer/client.js +133 -0
  59. package/dist/trailer/client.js.map +1 -0
  60. package/dist/trailer/edl-time.d.ts +61 -0
  61. package/dist/trailer/edl-time.js +105 -0
  62. package/dist/trailer/edl-time.js.map +1 -0
  63. package/dist/trailer/ffmpeg.d.ts +8 -0
  64. package/dist/trailer/ffmpeg.js +55 -0
  65. package/dist/trailer/ffmpeg.js.map +1 -0
  66. package/dist/trailer/hud-raster.d.ts +28 -0
  67. package/dist/trailer/hud-raster.js +114 -0
  68. package/dist/trailer/hud-raster.js.map +1 -0
  69. package/dist/trailer/hud-state.d.ts +110 -0
  70. package/dist/trailer/hud-state.js +410 -0
  71. package/dist/trailer/hud-state.js.map +1 -0
  72. package/dist/trailer/io.d.ts +20 -0
  73. package/dist/trailer/io.js +15 -0
  74. package/dist/trailer/io.js.map +1 -0
  75. package/dist/trailer/make.d.ts +54 -0
  76. package/dist/trailer/make.js +205 -0
  77. package/dist/trailer/make.js.map +1 -0
  78. package/dist/trailer/merge.d.ts +7 -0
  79. package/dist/trailer/merge.js +144 -0
  80. package/dist/trailer/merge.js.map +1 -0
  81. package/dist/trailer/music-beats.d.ts +123 -0
  82. package/dist/trailer/music-beats.js +707 -0
  83. package/dist/trailer/music-beats.js.map +1 -0
  84. package/dist/trailer/paths.d.ts +28 -0
  85. package/dist/trailer/paths.js +101 -0
  86. package/dist/trailer/paths.js.map +1 -0
  87. package/dist/trailer/publish-record.d.ts +17 -0
  88. package/dist/trailer/publish-record.js +59 -0
  89. package/dist/trailer/publish-record.js.map +1 -0
  90. package/dist/trailer/publish.d.ts +45 -0
  91. package/dist/trailer/publish.js +149 -0
  92. package/dist/trailer/publish.js.map +1 -0
  93. package/dist/trailer/record-session.d.ts +72 -0
  94. package/dist/trailer/record-session.js +331 -0
  95. package/dist/trailer/record-session.js.map +1 -0
  96. package/dist/trailer/render.d.ts +57 -0
  97. package/dist/trailer/render.js +475 -0
  98. package/dist/trailer/render.js.map +1 -0
  99. package/dist/trailer/revision.d.ts +8 -0
  100. package/dist/trailer/revision.js +31 -0
  101. package/dist/trailer/revision.js.map +1 -0
  102. package/dist/trailer/synth.d.ts +9 -0
  103. package/dist/trailer/synth.js +120 -0
  104. package/dist/trailer/synth.js.map +1 -0
  105. package/dist/trailer/timeline-types.d.ts +176 -0
  106. package/dist/trailer/timeline-types.js +379 -0
  107. package/dist/trailer/timeline-types.js.map +1 -0
  108. package/dist/trailer/title-raster.d.ts +6 -0
  109. package/dist/trailer/title-raster.js +47 -0
  110. package/dist/trailer/title-raster.js.map +1 -0
  111. package/dist/trailer/titles.d.ts +44 -0
  112. package/dist/trailer/titles.js +119 -0
  113. package/dist/trailer/titles.js.map +1 -0
  114. package/dist/trailer/video-chain.d.ts +41 -0
  115. package/dist/trailer/video-chain.js +78 -0
  116. package/dist/trailer/video-chain.js.map +1 -0
  117. package/dist/verify/browser.js +12 -19
  118. package/dist/verify/browser.js.map +1 -1
  119. package/package.json +5 -4
@@ -1,7 +1,7 @@
1
1
  import type { ForgeProgressSnapshot } from '../forge/progress.js';
2
2
  import type { ForgeLayoutMap } from '@bitmagic/world-forger/pipeline/index.js';
3
3
  /** Which command is running. Shown as-is in the dev view, so these are creator-facing words. */
4
- export type JobKind = 'skybox' | 'background' | 'block-type' | 'sound' | 'image' | 'character' | 'animation' | 'animation-video' | 'prop' | 'vehicle' | 'forge' | 'cover' | 'reference' | 'hq' | 'judge' | 'upload' | 'model';
4
+ export type JobKind = 'skybox' | 'background' | 'block-type' | 'sound' | 'music' | 'image' | 'character' | 'animation' | 'animation-video' | 'prop' | 'vehicle' | 'forge' | 'cover' | 'reference' | 'hq' | 'judge' | 'upload' | 'model';
5
5
  export interface JobRecord {
6
6
  jobId: string;
7
7
  kind: JobKind;
@@ -183,4 +183,3 @@ export declare function renderJudgeSkill(): string;
183
183
  export declare function renderGameDesignMd(idea?: string): string;
184
184
  export declare function renderClaudeMd(): string;
185
185
  export declare function renderThemingSkill(): string;
186
- export declare function renderSkillsReadme(): string;
@@ -728,9 +728,8 @@ If you are unsure whether one is already running, \`bitmagic reload\` says so an
728
728
  deliberately deferred. Nothing reads it but you and the human, and it is excluded from the publish
729
729
  fingerprint, so revising it never invalidates a passing \`bitmagic verify\`.
730
730
  - \`.claude/skills/\` — **shipped by the CLI, re-rendered by \`bitmagic upgrade\`:**
731
- \`planning-a-game/\` (what to build first), \`finding-engine-apis/\` (where the engine's APIs are
732
- documented), \`generating-assets/\` (the CLI's generation commands), and \`checking-usage/\` (what
733
- sparks were spent on, and what allowance is left). They document the CLI and the engine, so they
731
+ \`planning-a-game/\` (what to build first), \`finding-engine-apis/\` (engine docs), \`generating-assets/\`,
732
+ \`checking-usage/\`, \`judging-quality/\`, \`theming-the-hud/\`, \`making-a-trailer/\`. They document the CLI and the engine, so they
734
733
  stay current with both; edits to them are lost. Skills you add yourself are never touched.
735
734
  - \`.claude/settings.json\` — **yours**, seeded with one Stop hook that runs \`bitmagic reload\` so
736
735
  the owner's browser refreshes when you finish a turn. \`upgrade\` adds that hook if it is missing
@@ -1076,6 +1075,7 @@ bitmagic generate skybox --description "a stormy alien sky with two moons"
1076
1075
  bitmagic generate background --description "layered pine forest at dusk"
1077
1076
  bitmagic generate block-type --name mossy_brick --description "damp green moss on red brick"
1078
1077
  bitmagic generate sound --prompt "heavy wooden door slamming" [--duration 3] [--loop]
1078
+ bitmagic generate music --prompt "driving synthwave, no vocals" [--duration 30] [--instrumental] [--out bed.mp3 --no-world]
1079
1079
  bitmagic generate image --name hero-portrait --prompt "..." [--width 512] [--height 512]
1080
1080
  bitmagic generate character --name guard --prompt "..." [--apply-to-player] [--no-library]
1081
1081
  bitmagic generate animation --family gait --name LimpStride --based-on walk [--dial limpSide=right]
@@ -1519,12 +1519,12 @@ you work. Re-read it before editing it.
1519
1519
  export function renderGenerateSkill() {
1520
1520
  return `---
1521
1521
  name: generating-assets
1522
- description: Use when this Bitmagic game needs a new skybox, 2D background, custom block type, sound effect, image, character, animation or drivable vehicle, when a reference image of the world should steer how assets look, or when the creator has a model, sound, image or .vxl file of their own to add — anything that would otherwise require the web editor.
1522
+ description: Use when this Bitmagic game needs a new skybox, 2D background, custom block type, sound effect, music track, image, character, animation or drivable vehicle, when a reference image of the world should steer how assets look, or when the creator has a model, sound, image or .vxl file of their own to add — anything that would otherwise require the web editor.
1523
1523
  ---
1524
1524
 
1525
1525
  # Generating game assets
1526
1526
 
1527
- The \`bitmagic\` CLI generates content directly into this project. Nine types work today:
1527
+ The \`bitmagic\` CLI generates content directly into this project. Ten types work today:
1528
1528
 
1529
1529
  | Command | Makes | Lands in |
1530
1530
  |---|---|---|
@@ -1532,6 +1532,7 @@ The \`bitmagic\` CLI generates content directly into this project. Nine types wo
1532
1532
  | \`bitmagic generate background --description "..."\` | a flat 2D backdrop | \`worldProfileData.skyboxUrl\` |
1533
1533
  | \`bitmagic generate block-type --name <id> --description "..."\` | a custom voxel block | \`worldProfileData.customBlockTypes[]\` |
1534
1534
  | \`bitmagic generate sound --prompt "..."\` | a sound effect | \`assets[]\` |
1535
+ | \`bitmagic generate music --prompt "..." [--duration 30]\` | a music track (loops by default; billed per second) | \`assets[]\` (or a file with \`--out <mp3> --no-world\`) |
1535
1536
  | \`bitmagic generate image --name <id> --prompt "..."\` | a 2D image | \`assets[]\` |
1536
1537
  | \`bitmagic generate character --name <id> --prompt "..."\` | a rigged character (a close-enough ready-made one when the library has it, in seconds; \`--no-library\` always makes a new one) | \`assets[]\` |
1537
1538
  | \`bitmagic generate animation --family gait ...\` or \`--spec <file>\` | an animation clip | \`assets[]\` |
@@ -1882,32 +1883,4 @@ Rules that save a session:
1882
1883
  pacifico, shrikhand, grenze-gotisch) need \`"case": "normal"\`.
1883
1884
  `;
1884
1885
  }
1885
- export function renderSkillsReadme() {
1886
- return `# Claude Code skills
1887
-
1888
- Claude Code skills placed in this directory apply to this project. See \`AGENTS.md\` at the
1889
- project root for the guidance an agent should read before editing this game.
1890
-
1891
- ## Which of these are yours
1892
-
1893
- \`planning-a-game/\`, \`finding-engine-apis/\`, \`generating-assets/\`, \`checking-usage/\`,
1894
- \`judging-quality/\`, \`theming-the-hud/\` — and
1895
- this README — are shipped by the Bitmagic CLI and **re-rendered by \`bitmagic upgrade\`**. They
1896
- describe what the CLI and the engine can do, so they have to stay current with both; edits to them
1897
- are lost on the next upgrade.
1898
-
1899
- | Skill | Use it when |
1900
- |---|---|
1901
- | \`planning-a-game/\` | starting a game, a genre, or anything touching more than one gameplay feature — scoping the first playable slice and writing \`mechanics-plan.md\` |
1902
- | \`finding-engine-apis/\` | you need an engine API and do not know its name or signature, or \`bitmagic check\` cannot resolve a symbol |
1903
- | \`generating-assets/\` | the game needs a skybox, a background, a custom block type, sound, image, character, animation or vehicle |
1904
- | \`checking-usage/\` | asked what sparks were spent on, how much Pro allowance is left, or whether there is enough left to keep generating |
1905
- | \`judging-quality/\` | a milestone is done and the game deserves an independent quality verdict — \`bitmagic judge\` |
1906
- | \`theming-the-hud/\` | any ask about the game's LOOK — colors, fonts, rounder/sharper, outlines, glow, glossy, mobile-button styling |
1907
-
1908
- Every other directory here is yours. \`upgrade\` never opens a skill it does not ship, and never
1909
- deletes anything under \`.claude/\`. Put project-specific guidance in a skill of your own, or in
1910
- \`AGENTS.md\` — both are left alone.
1911
- `;
1912
- }
1913
1886
  //# sourceMappingURL=project-files.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"project-files.js","sourceRoot":"","sources":["../../src/scaffold/project-files.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"project-files.js","sourceRoot":"","sources":["../../src/scaffold/project-files.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,8 @@ import * as fs from 'fs';
2
2
  import * as path from 'path';
3
3
  import { CliError } from '../errors.js';
4
4
  import { aliasSourceDir } from './aliases.js';
5
- import { renderPackageJson, renderTsconfig, renderIndexHtml, renderViteConfig, renderVitePublishConfig, renderVitePublishStandaloneConfig, renderGitignore, renderBitmagicJson, renderAgentsMd, renderGameDesignMd, renderClaudeMd, renderJudgeSkill, renderThemingSkill, renderSkillsReadme, renderGenerateSkill, renderPlanningSkill, renderEngineApiSkill, renderUsageSkill, } from './project-files.js';
5
+ import { renderPackageJson, renderTsconfig, renderIndexHtml, renderViteConfig, renderVitePublishConfig, renderVitePublishStandaloneConfig, renderGitignore, renderBitmagicJson, renderAgentsMd, renderGameDesignMd, renderClaudeMd, renderJudgeSkill, renderThemingSkill, renderGenerateSkill, renderPlanningSkill, renderEngineApiSkill, renderUsageSkill, } from './project-files.js';
6
+ import { renderSkillsReadme, renderTrailerSkill } from './skill-files.js';
6
7
  import { hashAgentsMd } from './agents-md.js';
7
8
  import { CLAUDE_SETTINGS_FILE, renderClaudeSettings } from './claude-settings.js';
8
9
  /**
@@ -163,6 +164,7 @@ export const PLATFORM_GENERATED_FILES = [
163
164
  ['.claude/skills/checking-usage/SKILL.md', renderUsageSkill],
164
165
  ['.claude/skills/judging-quality/SKILL.md', renderJudgeSkill],
165
166
  ['.claude/skills/theming-the-hud/SKILL.md', renderThemingSkill],
167
+ ['.claude/skills/making-a-trailer/SKILL.md', renderTrailerSkill],
166
168
  ];
167
169
  /**
168
170
  * Every template the downloaded bundle carries, in index order.
@@ -1 +1 @@
1
- {"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/scaffold/project.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/scaffold/project.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Shipped skills that did not fit in `project-files.ts`, which sits at the 2000-line ESLint cap.
3
+ *
4
+ * Same contract as the renderers there: each is a pure function returning the file's contents,
5
+ * registered in `PLATFORM_GENERATED_FILES` (project.ts) so `bitmagic init` writes it and
6
+ * `bitmagic upgrade` refreshes it — the only path by which an existing project learns about a new
7
+ * capability. `project-files.test.ts` enforces the frontmatter (name == directory) and that
8
+ * AGENTS.md names every shipped skill. The same template-literal rule applies: the markdown is
9
+ * full of backticks, so every one inside is escaped as \` and the test checks the rendered output.
10
+ */
11
+ export declare function renderSkillsReadme(): string;
12
+ /**
13
+ * `.claude/skills/making-a-trailer/SKILL.md` — the whole trailer flow, and the craft that makes a
14
+ * cut watchable.
15
+ *
16
+ * Two kinds of knowledge live here on purpose. The FLOW (record → make → look → publish) is plain
17
+ * command routing an agent could read off \`--help\`. The CRAFT — ordering, pacing, the five variety
18
+ * axes, the selection rules the repo's own trailer reviews paid for — is not derivable from any
19
+ * command, and without it the agent's "tuning" is random. The tuning table at the end is the part
20
+ * the creator actually experiences: a prompt in, a shots.json edit out, one command to see it.
21
+ */
22
+ export declare function renderTrailerSkill(): string;
@@ -0,0 +1,198 @@
1
+ /**
2
+ * Shipped skills that did not fit in `project-files.ts`, which sits at the 2000-line ESLint cap.
3
+ *
4
+ * Same contract as the renderers there: each is a pure function returning the file's contents,
5
+ * registered in `PLATFORM_GENERATED_FILES` (project.ts) so `bitmagic init` writes it and
6
+ * `bitmagic upgrade` refreshes it — the only path by which an existing project learns about a new
7
+ * capability. `project-files.test.ts` enforces the frontmatter (name == directory) and that
8
+ * AGENTS.md names every shipped skill. The same template-literal rule applies: the markdown is
9
+ * full of backticks, so every one inside is escaped as \` and the test checks the rendered output.
10
+ */
11
+ export function renderSkillsReadme() {
12
+ return `# Claude Code skills
13
+
14
+ Claude Code skills placed in this directory apply to this project. See \`AGENTS.md\` at the
15
+ project root for the guidance an agent should read before editing this game.
16
+
17
+ ## Which of these are yours
18
+
19
+ \`planning-a-game/\`, \`finding-engine-apis/\`, \`generating-assets/\`, \`checking-usage/\`,
20
+ \`judging-quality/\`, \`theming-the-hud/\`, \`making-a-trailer/\` — and
21
+ this README — are shipped by the Bitmagic CLI and **re-rendered by \`bitmagic upgrade\`**. They
22
+ describe what the CLI and the engine can do, so they have to stay current with both; edits to them
23
+ are lost on the next upgrade.
24
+
25
+ | Skill | Use it when |
26
+ |---|---|
27
+ | \`planning-a-game/\` | starting a game, a genre, or anything touching more than one gameplay feature — scoping the first playable slice and writing \`mechanics-plan.md\` |
28
+ | \`finding-engine-apis/\` | you need an engine API and do not know its name or signature, or \`bitmagic check\` cannot resolve a symbol |
29
+ | \`generating-assets/\` | the game needs a skybox, a background, a custom block type, sound, music, image, character, animation or vehicle |
30
+ | \`checking-usage/\` | asked what sparks were spent on, how much Pro allowance is left, or whether there is enough left to keep generating |
31
+ | \`judging-quality/\` | a milestone is done and the game deserves an independent quality verdict — \`bitmagic judge\` |
32
+ | \`theming-the-hud/\` | any ask about the game's LOOK — colors, fonts, rounder/sharper, outlines, glow, glossy, mobile-button styling |
33
+ | \`making-a-trailer/\` | asked for a trailer, a highlight reel, a gameplay video, or to record gameplay — \`bitmagic trailer\` from recording to a CDN link, and how to tune the cut from prompts |
34
+
35
+ Every other directory here is yours. \`upgrade\` never opens a skill it does not ship, and never
36
+ deletes anything under \`.claude/\`. Put project-specific guidance in a skill of your own, or in
37
+ \`AGENTS.md\` — both are left alone.
38
+ `;
39
+ }
40
+ /**
41
+ * `.claude/skills/making-a-trailer/SKILL.md` — the whole trailer flow, and the craft that makes a
42
+ * cut watchable.
43
+ *
44
+ * Two kinds of knowledge live here on purpose. The FLOW (record → make → look → publish) is plain
45
+ * command routing an agent could read off \`--help\`. The CRAFT — ordering, pacing, the five variety
46
+ * axes, the selection rules the repo's own trailer reviews paid for — is not derivable from any
47
+ * command, and without it the agent's "tuning" is random. The tuning table at the end is the part
48
+ * the creator actually experiences: a prompt in, a shots.json edit out, one command to see it.
49
+ */
50
+ export function renderTrailerSkill() {
51
+ return `---
52
+ name: making-a-trailer
53
+ description: Make, tune and publish a trailer for this game with bitmagic trailer — record gameplay (or a camera fly-through), auto-cut the highlights to generated music, render an MP4, put it on the CDN and the game page. Use when asked for a trailer, highlight reel, gameplay video, or to record gameplay.
54
+ ---
55
+
56
+ # Making a trailer
57
+
58
+ \`bitmagic trailer\` takes a gameplay recording to a finished MP4 and a public link. You are the
59
+ editor: the tool finds the candidates, cuts on the beat and renders; you decide which moments,
60
+ in what order, and what the end card says — and you change your mind by editing one JSON file
61
+ and running one command again.
62
+
63
+ ## The flow
64
+
65
+ 1. **Have \`bitmagic dev\` running** (it is the sink the recorder streams frames to, and the HUD
66
+ replay for \`--ui\`). ffmpeg and Google Chrome must be installed; the commands say so if not.
67
+ 2. **Record.** \`bitmagic trailer record --seconds 60\` opens Chrome on the dev view, waits for the
68
+ creator to press Play, starts the recorder for them, stops after 60 s (or when they press F9),
69
+ and prints the recording directory. Ask the creator to PLAY WELL for a minute — the trailer is
70
+ only as good as the footage: overtakes, jumps, kills, close calls, a finish. Two sittings?
71
+ \`bitmagic trailer merge <dirA> <dirB> --out <dir>\`.
72
+ No human available: author \`trailer/flythrough.json\` (below) and
73
+ \`bitmagic trailer record --flythrough trailer/flythrough.json\` records a camera path with
74
+ nobody playing — scenery trailers, world reveals.
75
+ 3. **Make.** \`bitmagic trailer make --music-prompt "<style that fits the game>" --title "<name>"\`
76
+ analyzes the recording, generates a music bed (sparks — say so to the creator; \`--music <file>\`
77
+ uses their own track, \`--no-music\` skips it), writes a first cut to \`trailer/shots.json\`,
78
+ renders \`.bitmagic/trailer/<recording>/<game>-trailer.mp4\`, and prints where everything is.
79
+ Build the music prompt from GAME-DESIGN.md: genre, mood, tempo ("driving synthwave, 128 bpm,
80
+ no vocals").
81
+ 4. **Look before you deliver.** Open \`.bitmagic/trailer/<recording>/sheets/\` — one contact sheet
82
+ per candidate window — and extract stills from the RENDERED file to check framing
83
+ (\`ffmpeg -ss 12 -i <mp4> -frames:v 1 still.png\`). The timeline knows about events, not about
84
+ beauty, occlusion or a camera pointing at a wall.
85
+ 5. **Tune** (below), then **publish**: \`bitmagic trailer make --publish\` (or
86
+ \`bitmagic trailer publish <mp4>\`) uploads to the CDN and puts the video first in the game
87
+ page gallery; re-running replaces the previous trailer. Give the creator the printed URL.
88
+
89
+ Renders never overwrite — each run writes the next \`-rN\` — so compare against the previous
90
+ cut before delivering.
91
+
92
+ ## What is where
93
+
94
+ | File | What it is |
95
+ |---|---|
96
+ | \`trailer/shots.json\` | **The cut.** Committed. Your edits live here; \`make\` re-cuts from it every run. |
97
+ | \`trailer/flythrough.json\` | Optional camera path for a no-human recording. |
98
+ | \`.bitmagic/trailer/recordings/<name>/\` | A recording: \`<name>_%06d.png\` at 60 fps + \`timeline.json\` (events, sounds, HUD). |
99
+ | \`.bitmagic/trailer/<name>/analysis.json\` | Scored highlight windows: \`startFrame\`, \`endFrame\`, \`score\`, event digests (\`"f3121 explosion i0.9"\`), \`sheet\`. |
100
+ | \`.bitmagic/trailer/<name>/sheets/\` | Contact sheets, one per window — read these. |
101
+ | \`.bitmagic/trailer/<name>/beats.json\`, \`music.mp3\` | The bed and its beat grid. |
102
+ | \`.bitmagic/trailer/<name>/edl.json\`, \`*-trailer[-rN].mp4\` | The frame-exact cut and the renders (each with its \`.edl.json\`). |
103
+
104
+ ### shots.json
105
+
106
+ \`\`\`jsonc
107
+ {
108
+ "version": 1,
109
+ "recording": "gameplay_recording_2026-09-02_14-03-22",
110
+ "shots": [
111
+ { "in": 3100, "beats": 4, "label": "chain explosion" }, // beats with music …
112
+ { "in": 7440, "seconds": 2, "label": "clean overtake", "ui": false } // … or seconds without
113
+ ],
114
+ "titles": [ { "at": "last-clip", "text": "JOYRIDE", "sub": "by Bitmagic", "style": "card" } ]
115
+ }
116
+ \`\`\`
117
+
118
+ \`in\` is a source frame (60 fps: seconds × 60). Shots may be non-chronological. \`speed\` stays
119
+ 1.0. \`ui: false\` hides the HUD replay on that shot (menus need it). \`titles[].at\` is output
120
+ seconds or \`"last-clip"\` for the end card. \`bitmagic trailer cut\` turns this into
121
+ \`edl.json\`; \`make\` does that and renders.
122
+
123
+ ### flythrough.json
124
+
125
+ \`\`\`json
126
+ { "version": 1, "markers": [
127
+ { "position": { "x": 0, "y": 14, "z": -60 }, "lookAt": { "x": 0, "y": 2, "z": 0 }, "timestamp": 0 },
128
+ { "position": { "x": 45, "y": 10, "z": -10 }, "lookAt": { "x": 0, "y": 2, "z": 0 }, "timestamp": 6 },
129
+ { "position": { "x": 20, "y": 6, "z": 40 }, "lookAt": { "x": 0, "y": 3, "z": 20 }, "timestamp": 12 } ] }
130
+ \`\`\`
131
+
132
+ Positions are world units (\`engine/agent-docs/coordinate-system.md\`); \`timestamp\` is seconds,
133
+ ascending from 0; \`lookAt\` (or an Euler \`rotation\`) per marker. The camera glides through the
134
+ markers and the recording stops at the last one.
135
+
136
+ ## Craft — read before touching the cut
137
+
138
+ **Order: Genre → Hook → Anchors → Content.** The first 1–2 shots must say what kind of game this
139
+ is. The hook — the thing only this game has — lands inside the first third. The middle holds the
140
+ anchors people expect from the genre; breadth (levels, modes) comes last.
141
+
142
+ **Skeleton first, footage last.** Cold open → introduction → escalation → climax → one breath →
143
+ end card. Reserve the end card (2–3 s, one card) before anything else, then find the ONE clip
144
+ that proves each beat — not "fifteen great clips", which drifts toward sameness.
145
+
146
+ **Pacing.** Shots run 1.5–3 s for arcade action, with a few longer holds where one continuous
147
+ action is the payoff. Vary lengths (2, 3, 4, 6 beats); do not cut on every beat — let a musical
148
+ hit land on an in-clip impact sometimes. Build to a peak, then a calmer wider shot, then build
149
+ again. 30–45 s total. More cutting is not better editing: if one take shows the whole stunt,
150
+ keep the take.
151
+
152
+ **Variety, five axes** — audit the labels in shots.json top to bottom, repetition shows in text
153
+ before you ever re-watch: content (different actions, escalate rather than repeat), composition
154
+ (camera distance and framing), energy (intense vs quiet), pacing (section tempo), shot length.
155
+ **Rule of three**: never more than three similar things in a row, and max three of any shot
156
+ type in the whole cut.
157
+
158
+ **Text.** End card only, unless the footage cannot say it. ≤ 6 words, evocative verbs, sounds
159
+ like this game and no other. Banned: quantities ("5 unique levels"), genre stacks, verb lists
160
+ ("Race! Drift! Win!"), stock phrases ("Get ready…", "…like never before"). Cards get their own
161
+ beat — never over action.
162
+
163
+ ## Selection rules this project already paid for
164
+
165
+ - **Never slow motion.** On gameplay footage it reads as a low framerate. \`speed\` is 1.0.
166
+ - **Numbers are not interest.** A high \`impactSpeed\` is often a car dead against a wall — the
167
+ worst clip. A crash earns its slot only if things visibly break and motion continues.
168
+ - **Low speed can BE the drama.** Wheelspin recoveries, plowing back onto the track, being
169
+ overtaken while struggling — often the best clips, and they score near zero.
170
+ - **"Some shots of X" means a few.** One standing start is an opener; five is a broken trailer.
171
+ - **Menu and selection screens need \`"ui": false\`** — the HUD replay paints the race HUD over them.
172
+ - **Verify on pixels.** Sheets and stills, every candidate. Then render — iterating is minutes and
173
+ revisions are kept, so render rather than debate.
174
+
175
+ ## Tuning from prompts
176
+
177
+ The creator talks; you edit \`trailer/shots.json\`, run \`bitmagic trailer make\` (add
178
+ \`--publish\` when they want the link updated), and look at the new render.
179
+
180
+ | They say | You do |
181
+ |---|---|
182
+ | "faster", "punchier", "more energy" | fewer \`beats\`/\`seconds\` per shot (2–3 beats), MORE shots; keep one longer hold and the breath |
183
+ | "slower", "let it breathe", "calmer" | longer shots (4–6 beats), fewer of them, a wider calmer shot before the end |
184
+ | "more crashes / jumps / kills / X" | swap 1–3 shots for windows whose digests carry \`vehicle-collision\`, \`explosion\`, \`player-death\`, … from analysis.json (check the sheet) — max three, never three in a row |
185
+ | "show the menu / the map / the start" | add ONE shot from the recording's opening with \`"ui": false\` |
186
+ | "put the title at the end" / "change the tagline" | \`titles: [{ "at": "last-clip", "text": "…", "sub": "…", "style": "card" }]\` |
187
+ | "add a title at the start" | a \`title\`-style cue at \`at: 0\` for ~2.5 s, and make the first shot calm enough to read over |
188
+ | "different music", "more epic / chill" | \`--music-prompt\` with the new direction (spends sparks), or \`--music <file>\`; shots keep their beat counts and re-snap |
189
+ | "no HUD" / "show the HUD" | drop or add \`--ui\` (per shot: \`"ui": false\`) |
190
+ | "shorter / longer" | \`--seconds N\` only matters for a fresh auto cut (\`--reset-shots\`); otherwise add or remove shots |
191
+ | "start over" | \`bitmagic trailer make --reset-shots\` |
192
+ | "use the other recording" | \`--recording <dir>\`; shots.json from another recording is kept beside a fresh cut |
193
+
194
+ Then: **quota check** the labels (rule of three, one standing start), render, extract two stills
195
+ from the changed region, compare with the previous \`-rN\`, deliver the URL.
196
+ `;
197
+ }
198
+ //# sourceMappingURL=skill-files.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-files.js","sourceRoot":"","sources":["../../src/scaffold/skill-files.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,UAAU,kBAAkB;IAChC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;CA0BR,CAAC;AACF,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,kBAAkB;IAChC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiJR,CAAC;AACF,CAAC"}
@@ -0,0 +1,23 @@
1
+ import type { Analysis, Timeline } from './timeline-types.js';
2
+ export declare const EVENT_WEIGHTS: Readonly<Record<string, number>>;
3
+ export declare const DEFAULT_EVENT_WEIGHT = 0.5;
4
+ export declare const FORCED_EVENT_TYPES: readonly string[];
5
+ export declare function eventWeight(type: string): number;
6
+ export interface SelectedWindow {
7
+ startFrame: number;
8
+ endFrame: number;
9
+ score: number;
10
+ forced: boolean;
11
+ events: string[];
12
+ }
13
+ /**
14
+ * Deterministic window selection over a timeline. Pure — no filesystem or
15
+ * ffmpeg — so it is unit-testable on synthetic timelines.
16
+ */
17
+ export declare function selectWindows(timeline: Timeline, windowSec: number, top: number): SelectedWindow[];
18
+ /**
19
+ * Score the timeline and write `analysis.json` + `sheets/` into `outDir` (default: the recording
20
+ * dir itself, the web-lane layout; the CLI lane points it at the trailer work dir so recordings
21
+ * stay pristine). Sheet paths inside analysis.json are relative to `outDir`.
22
+ */
23
+ export declare function runAnalyze(recordingDir: string, windowSec: number, top: number, outDir?: string): Promise<Analysis>;
@@ -0,0 +1,186 @@
1
+ /**
2
+ * Timeline analysis: score events into 0.5s bins, Gaussian-smooth, pick
3
+ * top-N non-overlapping highlight windows (plus force-included windows around
4
+ * score/lap/goal/match-end events), and render a 3x2 contact sheet per window.
5
+ */
6
+ import * as fs from 'fs';
7
+ import * as path from 'path';
8
+ import { frameFilePath, loadTimeline } from './timeline-types.js';
9
+ import { runFfmpeg } from './ffmpeg.js';
10
+ import { out } from './io.js';
11
+ const BIN_SEC = 0.5;
12
+ const SMOOTH_SIGMA_BINS = 2; // sigma ~= 1s at 0.5s bins
13
+ const DEFAULT_INTENSITY = 0.7;
14
+ const SHEET_FRAME_COUNT = 6;
15
+ const SHEET_TILE_WIDTH = 320;
16
+ /**
17
+ * Top-N candidate peaks below this are ignored: they are smoothing tails
18
+ * (a single event bleeds a tiny score across the whole kernel radius), not
19
+ * real highlights. Force-included windows bypass the floor by design.
20
+ */
21
+ const MIN_WINDOW_PEAK_SCORE = 0.05;
22
+ export const EVENT_WEIGHTS = {
23
+ explosion: 1.0,
24
+ 'match-end': 1.0,
25
+ 'player-death': 0.9,
26
+ 'vehicle-collision': 0.9,
27
+ score: 0.9,
28
+ lap: 0.9,
29
+ goal: 0.9,
30
+ death: 0.8,
31
+ 'vehicle-hits-character': 0.8,
32
+ 'projectile-hit': 0.5,
33
+ damage: 0.4,
34
+ pickup: 0.3,
35
+ shot: 0.15,
36
+ state: 0
37
+ };
38
+ export const DEFAULT_EVENT_WEIGHT = 0.5;
39
+ export const FORCED_EVENT_TYPES = ['score', 'lap', 'goal', 'match-end'];
40
+ export function eventWeight(type) {
41
+ return EVENT_WEIGHTS[type] ?? DEFAULT_EVENT_WEIGHT;
42
+ }
43
+ /**
44
+ * Gaussian smoothing with an UNNORMALIZED kernel (peak weight 1): a bin's
45
+ * smoothed value reads as the gaussian-weighted event mass around it, so
46
+ * window scores stay on the same scale as the summed per-event weights.
47
+ */
48
+ function gaussianSmooth(values, sigma) {
49
+ const radius = Math.max(1, Math.ceil(sigma * 3));
50
+ const kernel = [];
51
+ for (let d = -radius; d <= radius; d++) {
52
+ kernel.push(Math.exp(-(d * d) / (2 * sigma * sigma)));
53
+ }
54
+ const smoothed = new Float64Array(values.length);
55
+ for (let i = 0; i < values.length; i++) {
56
+ let acc = 0;
57
+ for (let d = -radius; d <= radius; d++) {
58
+ const j = i + d;
59
+ if (j >= 0 && j < values.length)
60
+ acc += values[j] * kernel[d + radius];
61
+ }
62
+ smoothed[i] = acc;
63
+ }
64
+ return smoothed;
65
+ }
66
+ /**
67
+ * Deterministic window selection over a timeline. Pure — no filesystem or
68
+ * ffmpeg — so it is unit-testable on synthetic timelines.
69
+ */
70
+ export function selectWindows(timeline, windowSec, top) {
71
+ const { fps, frameCount } = timeline.recording;
72
+ const binFrames = fps * BIN_SEC;
73
+ const totalBins = Math.max(1, Math.ceil(frameCount / binFrames));
74
+ const binOf = (frame) => Math.min(totalBins - 1, Math.max(0, Math.floor(frame / binFrames)));
75
+ const raw = new Float64Array(totalBins);
76
+ for (const event of timeline.events) {
77
+ const contribution = eventWeight(event.type) * (event.intensity ?? DEFAULT_INTENSITY);
78
+ if (contribution > 0)
79
+ raw[binOf(event.frame)] += contribution;
80
+ }
81
+ for (const sound of timeline.sounds) {
82
+ raw[binOf(sound.frame)] += sound.kind === 'asset' ? 0.1 : 0.05;
83
+ }
84
+ const smoothed = gaussianSmooth(raw, SMOOTH_SIGMA_BINS);
85
+ const windowBins = Math.max(1, Math.round(windowSec / BIN_SEC));
86
+ const windowFrames = Math.round(windowSec * fps);
87
+ const maxStartBin = Math.max(0, totalBins - windowBins);
88
+ const chosen = [];
89
+ const overlapsChosen = (startBin) => chosen.some((c) => startBin < c.startBin + windowBins && c.startBin < startBin + windowBins);
90
+ // Top-N peaks, greedily, highest smoothed bin first (ties -> earlier bin).
91
+ const order = Array.from({ length: totalBins }, (_, i) => i).sort((a, b) => smoothed[b] - smoothed[a] || a - b);
92
+ for (const bin of order) {
93
+ if (chosen.length >= top)
94
+ break;
95
+ if (smoothed[bin] < MIN_WINDOW_PEAK_SCORE)
96
+ break; // sorted descending: only noise remains
97
+ const startBin = Math.min(maxStartBin, Math.max(0, bin - Math.floor(windowBins / 2)));
98
+ if (!overlapsChosen(startBin))
99
+ chosen.push({ startBin, forced: false });
100
+ }
101
+ // Force-include a window centered on every score/lap/goal/match-end event,
102
+ // even if low-scoring; drop ones overlapping already-selected windows.
103
+ for (const event of timeline.events) {
104
+ if (!FORCED_EVENT_TYPES.includes(event.type))
105
+ continue;
106
+ const idealStartBin = (event.frame - windowFrames / 2) / binFrames;
107
+ const startBin = Math.min(maxStartBin, Math.max(0, Math.round(idealStartBin)));
108
+ if (!overlapsChosen(startBin))
109
+ chosen.push({ startBin, forced: true });
110
+ }
111
+ chosen.sort((a, b) => a.startBin - b.startBin);
112
+ return chosen.map((candidate) => {
113
+ const startFrame = Math.round(candidate.startBin * binFrames);
114
+ const endFrame = Math.min(frameCount, startFrame + windowFrames);
115
+ let peak = 0;
116
+ const lastBin = Math.min(totalBins, candidate.startBin + windowBins);
117
+ for (let b = candidate.startBin; b < lastBin; b++)
118
+ peak = Math.max(peak, smoothed[b]);
119
+ const digest = timeline.events
120
+ .filter((e) => e.frame >= startFrame && e.frame < endFrame && eventWeight(e.type) > 0)
121
+ .map((e) => `f${e.frame} ${e.type} i${e.intensity ?? DEFAULT_INTENSITY}`);
122
+ return {
123
+ startFrame,
124
+ endFrame,
125
+ score: Math.round(peak * 1000) / 1000,
126
+ forced: candidate.forced,
127
+ events: digest
128
+ };
129
+ });
130
+ }
131
+ /** Find the frame index nearest to `ideal` whose PNG actually exists on disk. */
132
+ function nearestExistingFrame(recordingDir, name, ideal, frameCount) {
133
+ for (let distance = 0; distance < frameCount; distance++) {
134
+ const candidates = distance === 0 ? [ideal] : [ideal - distance, ideal + distance];
135
+ for (const frame of candidates) {
136
+ if (frame >= 0 && frame < frameCount && fs.existsSync(frameFilePath(recordingDir, name, frame))) {
137
+ return frame;
138
+ }
139
+ }
140
+ }
141
+ throw new Error(`no frame files found near frame ${ideal} in ${recordingDir}`);
142
+ }
143
+ async function renderContactSheet(recordingDir, timeline, window, sheetPath) {
144
+ const { name, frameCount } = timeline.recording;
145
+ const span = Math.max(1, window.endFrame - window.startFrame);
146
+ const args = ['-y'];
147
+ const labels = [];
148
+ for (let k = 0; k < SHEET_FRAME_COUNT; k++) {
149
+ const ideal = window.startFrame + Math.round((k * (span - 1)) / (SHEET_FRAME_COUNT - 1));
150
+ const frame = nearestExistingFrame(recordingDir, name, ideal, frameCount);
151
+ args.push('-i', frameFilePath(recordingDir, name, frame));
152
+ labels.push(`[${k}:v]`);
153
+ }
154
+ args.push('-filter_complex', `${labels.join('')}concat=n=${SHEET_FRAME_COUNT}:v=1:a=0,scale=${SHEET_TILE_WIDTH}:-1,tile=3x2[sheet]`, '-map', '[sheet]', '-frames:v', '1', sheetPath);
155
+ await runFfmpeg(args);
156
+ }
157
+ /**
158
+ * Score the timeline and write `analysis.json` + `sheets/` into `outDir` (default: the recording
159
+ * dir itself, the web-lane layout; the CLI lane points it at the trailer work dir so recordings
160
+ * stay pristine). Sheet paths inside analysis.json are relative to `outDir`.
161
+ */
162
+ export async function runAnalyze(recordingDir, windowSec, top, outDir = recordingDir) {
163
+ const timeline = loadTimeline(recordingDir);
164
+ const selected = selectWindows(timeline, windowSec, top);
165
+ const sheetsDir = path.join(outDir, 'sheets');
166
+ fs.mkdirSync(sheetsDir, { recursive: true });
167
+ const windows = [];
168
+ for (let i = 0; i < selected.length; i++) {
169
+ const sheetRel = path.join('sheets', `window_${String(i).padStart(2, '0')}.png`);
170
+ await renderContactSheet(recordingDir, timeline, selected[i], path.join(outDir, sheetRel));
171
+ const { startFrame, endFrame, score, events } = selected[i];
172
+ windows.push({ startFrame, endFrame, score, events, sheet: sheetRel });
173
+ }
174
+ const analysis = {
175
+ version: 1,
176
+ fps: timeline.recording.fps,
177
+ frameCount: timeline.recording.frameCount,
178
+ windows
179
+ };
180
+ const analysisPath = path.join(outDir, 'analysis.json');
181
+ fs.writeFileSync(analysisPath, `${JSON.stringify(analysis, null, 2)}\n`);
182
+ const forcedCount = selected.filter((w) => w.forced).length;
183
+ out(`Wrote ${analysisPath} — ${windows.length} windows (${forcedCount} forced), sheets in ${sheetsDir}`);
184
+ return analysis;
185
+ }
186
+ //# sourceMappingURL=analyze.js.map