30x-web-to-video 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +19 -0
- package/cli.mjs +109 -0
- package/package.json +36 -0
- package/skill/AGENTS.md +37 -0
- package/skill/FUSION-REPORT.md +77 -0
- package/skill/README.md +168 -0
- package/skill/SKILL.md +398 -0
- package/skill/benchmarks/AGENTS.md +20 -0
- package/skill/benchmarks/README.md +88 -0
- package/skill/benchmarks/manifest.json +164 -0
- package/skill/examples/INDEX.md +26 -0
- package/skill/examples/caylent/MainVideo.tsx +145 -0
- package/skill/examples/caylent/scenes/Act1.tsx +168 -0
- package/skill/examples/caylent/scenes/Act2.tsx +78 -0
- package/skill/examples/caylent/scenes/Act3.tsx +206 -0
- package/skill/examples/caylent/scenes/Act4.tsx +191 -0
- package/skill/examples/caylent/scenes/Act5.tsx +60 -0
- package/skill/examples/caylent/scenes-v2/Act1V2.tsx +46 -0
- package/skill/examples/caylent/scenes-v2/Act2V2.tsx +71 -0
- package/skill/examples/caylent/scenes-v2/Act3V2.tsx +293 -0
- package/skill/examples/caylent/scenes-v2/Act4V2.tsx +239 -0
- package/skill/examples/caylent/scenes-v2/Act5V2.tsx +28 -0
- package/skill/examples/caylent/theme.ts +51 -0
- package/skill/examples/cofounder/MainVideo.tsx +164 -0
- package/skill/examples/cofounder/scenes/AGENTS.md +18 -0
- package/skill/examples/cofounder/scenes/Act1.tsx +73 -0
- package/skill/examples/cofounder/scenes/Act2.tsx +78 -0
- package/skill/examples/cofounder/scenes/Act3a.tsx +203 -0
- package/skill/examples/cofounder/scenes/Act3b.tsx +269 -0
- package/skill/examples/cofounder/scenes/Act3c.tsx +216 -0
- package/skill/examples/cofounder/scenes/Act4.tsx +143 -0
- package/skill/examples/cofounder/scenes/Act5.tsx +109 -0
- package/skill/examples/cofounder/scenes/World.tsx +115 -0
- package/skill/examples/cofounder/theme.ts +56 -0
- package/skill/examples/happy-model/MainVideo.tsx +161 -0
- package/skill/examples/happy-model/scenes/AGENTS.md +18 -0
- package/skill/examples/happy-model/scenes/Act1.tsx +217 -0
- package/skill/examples/happy-model/scenes/Act2.tsx +262 -0
- package/skill/examples/happy-model/scenes/Act3.tsx +442 -0
- package/skill/examples/happy-model/scenes/Act4.tsx +490 -0
- package/skill/examples/happy-model/scenes/Act5.tsx +280 -0
- package/skill/examples/happy-model/scenes/copy.ts +12 -0
- package/skill/examples/happy-model/theme.ts +51 -0
- package/skill/examples/mana/MainVideo.tsx +124 -0
- package/skill/examples/mana/scenes/AGENTS.md +14 -0
- package/skill/examples/mana/scenes/Act1Open.tsx +75 -0
- package/skill/examples/mana/scenes/Act2Hero.tsx +93 -0
- package/skill/examples/mana/scenes/Act3Flavors.tsx +260 -0
- package/skill/examples/mana/scenes/Act4Label.tsx +180 -0
- package/skill/examples/mana/scenes/Act5Close.tsx +129 -0
- package/skill/examples/mana/scenes/World.tsx +218 -0
- package/skill/examples/mana/theme.ts +77 -0
- package/skill/examples/parker/MainVideo.tsx +150 -0
- package/skill/examples/parker/scenes/AGENTS.md +15 -0
- package/skill/examples/parker/scenes/Act1Hook.tsx +97 -0
- package/skill/examples/parker/scenes/Act2Meet.tsx +64 -0
- package/skill/examples/parker/scenes/Act2Problem.tsx +114 -0
- package/skill/examples/parker/scenes/Act3Steps.tsx +143 -0
- package/skill/examples/parker/scenes/Act4Proof.tsx +94 -0
- package/skill/examples/parker/scenes/Act5Close.tsx +81 -0
- package/skill/examples/parker/scenes/PaperWorld.tsx +209 -0
- package/skill/examples/parker/theme.ts +57 -0
- package/skill/examples/perplexity-pc/MainVideo.tsx +110 -0
- package/skill/examples/perplexity-pc/scenes/Act1.tsx +55 -0
- package/skill/examples/perplexity-pc/scenes/Act2.tsx +73 -0
- package/skill/examples/perplexity-pc/scenes/Act3.tsx +69 -0
- package/skill/examples/perplexity-pc/scenes/Act4.tsx +40 -0
- package/skill/examples/perplexity-pc/scenes/Act5.tsx +56 -0
- package/skill/examples/perplexity-pc/theme.ts +81 -0
- package/skill/references/AGENTS.md +13 -0
- package/skill/references/animations.md +539 -0
- package/skill/references/audio.md +256 -0
- package/skill/references/components.md +340 -0
- package/skill/references/lottie.md +174 -0
- package/skill/references/visual-effects.md +157 -0
- package/skill/remotion-best-practices/SKILL.md +61 -0
- package/skill/remotion-best-practices/rules/3d.md +86 -0
- package/skill/remotion-best-practices/rules/animations.md +27 -0
- package/skill/remotion-best-practices/rules/assets/charts-bar-chart.tsx +173 -0
- package/skill/remotion-best-practices/rules/assets/text-animations-typewriter.tsx +100 -0
- package/skill/remotion-best-practices/rules/assets/text-animations-word-highlight.tsx +103 -0
- package/skill/remotion-best-practices/rules/assets.md +78 -0
- package/skill/remotion-best-practices/rules/audio-visualization.md +198 -0
- package/skill/remotion-best-practices/rules/audio.md +169 -0
- package/skill/remotion-best-practices/rules/calculate-metadata.md +134 -0
- package/skill/remotion-best-practices/rules/can-decode.md +75 -0
- package/skill/remotion-best-practices/rules/charts.md +120 -0
- package/skill/remotion-best-practices/rules/compositions.md +154 -0
- package/skill/remotion-best-practices/rules/display-captions.md +184 -0
- package/skill/remotion-best-practices/rules/extract-frames.md +229 -0
- package/skill/remotion-best-practices/rules/ffmpeg.md +38 -0
- package/skill/remotion-best-practices/rules/fonts.md +152 -0
- package/skill/remotion-best-practices/rules/get-audio-duration.md +58 -0
- package/skill/remotion-best-practices/rules/get-video-dimensions.md +68 -0
- package/skill/remotion-best-practices/rules/get-video-duration.md +60 -0
- package/skill/remotion-best-practices/rules/gifs.md +141 -0
- package/skill/remotion-best-practices/rules/images.md +134 -0
- package/skill/remotion-best-practices/rules/import-srt-captions.md +69 -0
- package/skill/remotion-best-practices/rules/light-leaks.md +73 -0
- package/skill/remotion-best-practices/rules/lottie.md +70 -0
- package/skill/remotion-best-practices/rules/maps.md +412 -0
- package/skill/remotion-best-practices/rules/measuring-dom-nodes.md +34 -0
- package/skill/remotion-best-practices/rules/measuring-text.md +140 -0
- package/skill/remotion-best-practices/rules/parameters.md +109 -0
- package/skill/remotion-best-practices/rules/sequencing.md +118 -0
- package/skill/remotion-best-practices/rules/sfx.md +26 -0
- package/skill/remotion-best-practices/rules/subtitles.md +36 -0
- package/skill/remotion-best-practices/rules/tailwind.md +11 -0
- package/skill/remotion-best-practices/rules/text-animations.md +20 -0
- package/skill/remotion-best-practices/rules/timing.md +179 -0
- package/skill/remotion-best-practices/rules/transcribe-captions.md +70 -0
- package/skill/remotion-best-practices/rules/transitions.md +197 -0
- package/skill/remotion-best-practices/rules/transparent-videos.md +106 -0
- package/skill/remotion-best-practices/rules/trimming.md +51 -0
- package/skill/remotion-best-practices/rules/videos.md +171 -0
- package/skill/remotion-best-practices/rules/voiceover.md +99 -0
- package/skill/rules/AGENTS.md +30 -0
- package/skill/rules/archetypes.md +81 -0
- package/skill/rules/artifact-catalog.md +100 -0
- package/skill/rules/beat-sync.md +61 -0
- package/skill/rules/cards.md +67 -0
- package/skill/rules/cinematic.md +148 -0
- package/skill/rules/color.md +65 -0
- package/skill/rules/composition.md +133 -0
- package/skill/rules/data-viz.md +56 -0
- package/skill/rules/finish-gate.md +131 -0
- package/skill/rules/layout.md +158 -0
- package/skill/rules/media-resolve.md +58 -0
- package/skill/rules/motion.md +181 -0
- package/skill/rules/narration-sync.md +67 -0
- package/skill/rules/narrative-templates.md +152 -0
- package/skill/rules/narrative.md +165 -0
- package/skill/rules/qc-gates.md +142 -0
- package/skill/rules/taste.md +221 -0
- package/skill/rules/transitions.md +81 -0
- package/skill/rules/typography.md +87 -0
- package/skill/rules/ui-mockups.md +135 -0
- package/skill/rules/workflow.md +908 -0
- package/skill/scaffold/.prettierrc +5 -0
- package/skill/scaffold/AGENTS.md +21 -0
- package/skill/scaffold/eslint.config.mjs +3 -0
- package/skill/scaffold/package-lock.json +5277 -0
- package/skill/scaffold/package.json +55 -0
- package/skill/scaffold/remotion.config.ts +6 -0
- package/skill/scaffold/src/AGENTS.md +16 -0
- package/skill/scaffold/src/MainVideo.tsx +1257 -0
- package/skill/scaffold/src/Root.tsx +60 -0
- package/skill/scaffold/src/components/AGENTS.md +20 -0
- package/skill/scaffold/src/components/Animations.tsx +242 -0
- package/skill/scaffold/src/components/Atmosphere.tsx +232 -0
- package/skill/scaffold/src/components/Background.tsx +134 -0
- package/skill/scaffold/src/components/Captions.tsx +195 -0
- package/skill/scaffold/src/components/LogoEntrance.tsx +481 -0
- package/skill/scaffold/src/components/MockupTemplates.tsx +695 -0
- package/skill/scaffold/src/components/PhoneFrame.tsx +105 -0
- package/skill/scaffold/src/components/ShaderFX.tsx +166 -0
- package/skill/scaffold/src/components/Transitions.tsx +229 -0
- package/skill/scaffold/src/components/UI.tsx +110 -0
- package/skill/scaffold/src/components/VisualEffects.tsx +412 -0
- package/skill/scaffold/src/generated/AGENTS.md +10 -0
- package/skill/scaffold/src/generated/beat-map.ts +38 -0
- package/skill/scaffold/src/generated/project-data.ts +156 -0
- package/skill/scaffold/src/index.css +18 -0
- package/skill/scaffold/src/index.ts +13 -0
- package/skill/scaffold/src/lib/AGENTS.md +11 -0
- package/skill/scaffold/src/lib/fonts.ts +26 -0
- package/skill/scaffold/src/lib/modes.ts +54 -0
- package/skill/scaffold/src/lib/utils.ts +12 -0
- package/skill/scaffold/src/theme.ts +81 -0
- package/skill/scaffold/tsconfig.json +15 -0
- package/skill/scripts/AGENTS.md +20 -0
- package/skill/scripts/__pycache__/analyze-audiomap.cpython-314.pyc +0 -0
- package/skill/scripts/__pycache__/generate-bgm.cpython-314.pyc +0 -0
- package/skill/scripts/analyze-audiomap.py +322 -0
- package/skill/scripts/beat-sync.ts +352 -0
- package/skill/scripts/benchmark-suite.ts +627 -0
- package/skill/scripts/critique-scenes.ts +245 -0
- package/skill/scripts/evidence-model.ts +319 -0
- package/skill/scripts/generate-bgm.py +238 -0
- package/skill/scripts/iterate.ts +97 -0
- package/skill/scripts/project-blueprint.ts +319 -0
- package/skill/scripts/regenerate-scene.ts +186 -0
- package/skill/scripts/render-qa.ts +222 -0
- package/skill/scripts/scene-constitution.ts +360 -0
- package/skill/scripts/timing-audit.ts +324 -0
- package/skill/scripts/url-to-video.ts +1862 -0
- package/skill/scripts/visual-audit.ts +760 -0
package/README.md
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# 30x-web-to-video
|
|
2
|
+
|
|
3
|
+
**One URL in, an agency-grade brand launch video out.**
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
npx 30x-web-to-video https://your-brand.com
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
Harvests the real site (colors, fonts, copy, logo, screenshots, BGM), scaffolds a Remotion project, installs the **30x-web-to-video** Claude Code skill into your project, and hands the five-act design to Claude under a battle-tested taste codex — validated across 10 brands in one night, each producing a visually distinct world.
|
|
10
|
+
|
|
11
|
+
- Asset-audit gates (file names lie; every image gets looked at)
|
|
12
|
+
- Claim→World artifact selection (20+ proven visual families + rotation ledger)
|
|
13
|
+
- Word-timestamp narration sync (ElevenLabs, or zero-key Kokoro fallback)
|
|
14
|
+
- 7 transition families, GPU shader textures, word-timed captions
|
|
15
|
+
- Evidence-frame QC: Claude renders and *looks at* every act before you do
|
|
16
|
+
|
|
17
|
+
Requires node 20+ and [Claude Code](https://claude.com/claude-code). System tools (ffmpeg/yt-dlp/playwright) auto-install during harvest.
|
|
18
|
+
|
|
19
|
+
MIT © Nora He
|
package/cli.mjs
ADDED
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* 30x-web-to-video — one URL in, a launch video project out.
|
|
4
|
+
*
|
|
5
|
+
* Stage 1 (deterministic): harvest the brand site + scaffold a Remotion
|
|
6
|
+
* project via the bundled orchestrator.
|
|
7
|
+
* Stage 2 (agentic taste): install the bundled skill into the project's
|
|
8
|
+
* .claude/skills/ and hand off to Claude Code, which designs the five
|
|
9
|
+
* acts under the battle-tested rules (10-brand validated codex).
|
|
10
|
+
*/
|
|
11
|
+
import { spawnSync } from "node:child_process";
|
|
12
|
+
import { cpSync, existsSync, mkdirSync } from "node:fs";
|
|
13
|
+
import { createRequire } from "node:module";
|
|
14
|
+
import { dirname, join, resolve } from "node:path";
|
|
15
|
+
import { fileURLToPath } from "node:url";
|
|
16
|
+
|
|
17
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
18
|
+
const require = createRequire(import.meta.url);
|
|
19
|
+
|
|
20
|
+
const args = process.argv.slice(2);
|
|
21
|
+
const flags = new Set(args.filter((a) => a.startsWith("--")));
|
|
22
|
+
const url = args.find((a) => !a.startsWith("--"));
|
|
23
|
+
|
|
24
|
+
const HELP = `
|
|
25
|
+
30x-web-to-video — one URL in, an agency-grade launch video out.
|
|
26
|
+
|
|
27
|
+
Usage:
|
|
28
|
+
npx 30x-web-to-video <brand-url> [--out <dir>] [--agent] [--no-harvest]
|
|
29
|
+
|
|
30
|
+
Options:
|
|
31
|
+
--out <dir> Output project directory (default: ./<brand>-launch-video)
|
|
32
|
+
--agent After harvest, launch Claude Code on the build prompt
|
|
33
|
+
(requires the \`claude\` CLI; agent time/tokens are yours)
|
|
34
|
+
--no-harvest Skip harvest; only (re)install the skill + print next steps
|
|
35
|
+
-h, --help Show this help
|
|
36
|
+
|
|
37
|
+
What you get:
|
|
38
|
+
1. Brand harvest: real colors/fonts/copy/logo/screenshots/BGM from the site
|
|
39
|
+
2. A Remotion project scaffold wired with the evidence
|
|
40
|
+
3. The 30x-web-to-video skill installed into ./.claude/skills/ — Claude Code
|
|
41
|
+
picks it up automatically and designs the five acts under its taste codex
|
|
42
|
+
(asset-audit gates, Claim→World artifact selection, small-text budget,
|
|
43
|
+
transition families, word-timestamp narration sync, BGM variety mandate)
|
|
44
|
+
|
|
45
|
+
Requirements: node 20+. ffmpeg/yt-dlp/playwright auto-install during harvest.
|
|
46
|
+
Optional: ELEVENLABS_API_KEY in the project .env for premium narration
|
|
47
|
+
(falls back to Kokoro local TTS — zero keys needed).
|
|
48
|
+
`;
|
|
49
|
+
|
|
50
|
+
if (!url || flags.has("--help") || flags.has("-h")) {
|
|
51
|
+
console.log(HELP.trim());
|
|
52
|
+
process.exit(url ? 0 : 1);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
const slug = (() => {
|
|
56
|
+
try {
|
|
57
|
+
return new URL(url.startsWith("http") ? url : `https://${url}`).hostname
|
|
58
|
+
.replace(/^www\./, "")
|
|
59
|
+
.split(".")[0];
|
|
60
|
+
} catch {
|
|
61
|
+
return "brand";
|
|
62
|
+
}
|
|
63
|
+
})();
|
|
64
|
+
const outIdx = args.indexOf("--out");
|
|
65
|
+
const outDir = resolve(outIdx > -1 && args[outIdx + 1] ? args[outIdx + 1] : `./${slug}-launch-video`);
|
|
66
|
+
|
|
67
|
+
// ── 1) install the skill into the project-local .claude/skills ──────────
|
|
68
|
+
const skillSrc = join(__dirname, "skill");
|
|
69
|
+
const skillDst = join(process.cwd(), ".claude", "skills", "30x-web-to-video");
|
|
70
|
+
mkdirSync(dirname(skillDst), { recursive: true });
|
|
71
|
+
cpSync(skillSrc, skillDst, { recursive: true });
|
|
72
|
+
console.log(`✔ skill installed → ${skillDst}`);
|
|
73
|
+
|
|
74
|
+
// ── 2) deterministic harvest + scaffold ─────────────────────────────────
|
|
75
|
+
if (!flags.has("--no-harvest")) {
|
|
76
|
+
const tsxCli = require.resolve("tsx/cli");
|
|
77
|
+
const orchestrator = join(skillSrc, "scripts", "url-to-video.ts");
|
|
78
|
+
console.log(`⛏ harvesting ${url} → ${outDir}\n`);
|
|
79
|
+
const r = spawnSync(process.execPath, [tsxCli, orchestrator, url, "--out", outDir, "--yes"], {
|
|
80
|
+
stdio: "inherit",
|
|
81
|
+
});
|
|
82
|
+
if (r.status !== 0) {
|
|
83
|
+
console.error(
|
|
84
|
+
"\n✖ harvest failed. If the site blocks scrapers (403), open Claude Code and say:\n" +
|
|
85
|
+
` "用 30x-web-to-video skill 的 403 playbook 给 ${url} 人工采收后出片"`,
|
|
86
|
+
);
|
|
87
|
+
process.exit(r.status ?? 1);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
// ── 3) hand off to the agent ─────────────────────────────────────────────
|
|
92
|
+
const prompt = `用 30x-web-to-video skill 完成 ${outDir} 的 launch video:先读 SKILL.md 与 rules/(尤其 artifact-catalog 选型优先级、taste、typography、narration-sync),Gate 1 逐张审计素材,然后设计五幕、配音配乐、每幕渲证据帧自检,最后开 remotion studio 给我预览。`;
|
|
93
|
+
|
|
94
|
+
const hasClaude = spawnSync("claude", ["--version"], { stdio: "ignore" }).status === 0;
|
|
95
|
+
if (flags.has("--agent") && hasClaude) {
|
|
96
|
+
console.log("\n🤖 handing off to Claude Code…\n");
|
|
97
|
+
const a = spawnSync("claude", [prompt], { stdio: "inherit", cwd: outDir });
|
|
98
|
+
process.exit(a.status ?? 0);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
console.log(`
|
|
102
|
+
── next step ────────────────────────────────────────────────
|
|
103
|
+
${hasClaude ? "Run:" : "Install Claude Code (https://claude.com/claude-code), then run:"}
|
|
104
|
+
|
|
105
|
+
cd ${outDir}
|
|
106
|
+
claude "${prompt.replace(/"/g, '\\"')}"
|
|
107
|
+
|
|
108
|
+
(or re-run with --agent to launch it automatically)
|
|
109
|
+
─────────────────────────────────────────────────────────────`);
|
package/package.json
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "30x-web-to-video",
|
|
3
|
+
"version": "1.0.1",
|
|
4
|
+
"description": "One URL in, an agency-grade brand launch video out. Harvests the site, scaffolds a Remotion project, and hands Claude Code a battle-tested taste codex (10-brand validated) to design the five acts.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"author": "Nora He",
|
|
8
|
+
"repository": {
|
|
9
|
+
"type": "git",
|
|
10
|
+
"url": "https://github.com/norahe0304-art/30x-video"
|
|
11
|
+
},
|
|
12
|
+
"homepage": "https://github.com/norahe0304-art/30x-video#readme",
|
|
13
|
+
"keywords": [
|
|
14
|
+
"remotion",
|
|
15
|
+
"video",
|
|
16
|
+
"claude-code",
|
|
17
|
+
"skill",
|
|
18
|
+
"marketing",
|
|
19
|
+
"launch-video",
|
|
20
|
+
"agent"
|
|
21
|
+
],
|
|
22
|
+
"bin": {
|
|
23
|
+
"30x-web-to-video": "cli.mjs"
|
|
24
|
+
},
|
|
25
|
+
"files": [
|
|
26
|
+
"cli.mjs",
|
|
27
|
+
"skill/",
|
|
28
|
+
"README.md"
|
|
29
|
+
],
|
|
30
|
+
"engines": {
|
|
31
|
+
"node": ">=20"
|
|
32
|
+
},
|
|
33
|
+
"dependencies": {
|
|
34
|
+
"tsx": "^4.7.0"
|
|
35
|
+
}
|
|
36
|
+
}
|
package/skill/AGENTS.md
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# remotion-video-skill/
|
|
2
|
+
> L2 | 父级: ../AGENTS.md
|
|
3
|
+
|
|
4
|
+
Claude Code 原生 skill。主链保持 `SKILL.md -> rules -> scaffold -> scripts`,V2 额外加入 `benchmarks/` 作为稳定评测面。外部设计资料只允许增强判断,不允许取代真实品牌证据或现有生产经验。
|
|
5
|
+
|
|
6
|
+
## 成员清单
|
|
7
|
+
|
|
8
|
+
- `SKILL.md`: 主入口;定义触发条件、总流程、门禁、引用地图。
|
|
9
|
+
- `README.md`: 对外安装与使用说明;解释 skill 的定位与能力边界。
|
|
10
|
+
- `FUSION-REPORT.md`: 融合决策记录 — 对 hyperframes/claude-shorts/super-video-maker/video-editing-skill 各候选核心的 ADOPT/ADAPT/REJECT 判断与发布差异点;差异化说明书底稿。
|
|
11
|
+
- `rules/`: 设计法则与工作流主脑;包含抓取、叙事、taste、archetype、finish gate、证据型 qc-gates。
|
|
12
|
+
- `references/`: 可复制的 Remotion 模式与组件参考;只做证据库,不主导流程。
|
|
13
|
+
- `remotion-best-practices/`: Bundled Remotion API knowledge;低层实现参考。
|
|
14
|
+
- `scaffold/`: Ready-to-run Remotion project template;承接 scene constitution 与 generated project data,不承接风格决策。
|
|
15
|
+
- `scripts/`: Music-map analyzer (analyze-audiomap.py,librosa 自装 preflight + aubiotrack 降级)、beat sync (legacy 脉冲常量)、timing audit、visual audit、benchmark suite、URL intake orchestrator、scene constitution generator、project blueprint writer。
|
|
16
|
+
- `benchmarks/`: URL-to-video V2 benchmark suite;定义 canonical URL 集与评测产物契约。
|
|
17
|
+
|
|
18
|
+
## 依赖关系
|
|
19
|
+
|
|
20
|
+
```text
|
|
21
|
+
SKILL.md -> rules/ -> scaffold/
|
|
22
|
+
SKILL.md -> scripts/ -> scaffold/
|
|
23
|
+
SKILL.md -> benchmarks/
|
|
24
|
+
SKILL.md -> references/ + remotion-best-practices/
|
|
25
|
+
rules/workflow.md -> rules/archetypes.md -> rules/taste.md + rules/finish-gate.md
|
|
26
|
+
SKILL.md step 4 -> rules/composition.md -> scaffold Atmosphere.tsx + rules/qc-gates.md Gate 2
|
|
27
|
+
rules/motion.md -> ~/.claude/skills/remotion-motion/ (organic AE vocabulary, 按需深读)
|
|
28
|
+
SKILL.md steps 2.5/4/7.5/8 -> rules/qc-gates.md -> scripts/iterate.ts + scripts/render-qa.ts
|
|
29
|
+
SKILL.md step 4 (narrated only) -> rules/narration-sync.md -> rules/qc-gates.md Gate 4
|
|
30
|
+
SKILL.md step 4 (bgm) -> scripts/analyze-audiomap.py -> audiomap.json -> rules/beat-sync.md
|
|
31
|
+
scripts/url-to-video.ts -> evidence-model.ts + scene-constitution.ts + project-blueprint.ts
|
|
32
|
+
scripts/benchmark-suite.ts -> benchmarks/manifest.json + scripts/url-to-video.ts
|
|
33
|
+
scripts/ -> scaffold/ output verification
|
|
34
|
+
benchmarks/manifest.json -> orchestrator regression coverage
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
[PROTOCOL]: 变更时更新此头部,然后检查 AGENTS.md
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
[INPUT]: 四个已克隆竞品/邻品仓库的实读 (hyperframes, claude-shorts, super-video-maker-skill, video-editing-skill) + hyperframes-caylent 实测笔记; 第二轮: hyperframes music-to-video 的 analyze-beatgrid.py + 卡点创作规则
|
|
3
|
+
[OUTPUT]: 每个候选核心的 ADOPT/ADAPT/REJECT 判断与落点; 发布版三大杀手差异点 — 差异化说明书底稿
|
|
4
|
+
[POS]: skill 根目录的融合决策记录; 说明 rules/qc-gates.md、rules/narration-sync.md、scripts/render-qa.ts 从哪来、为什么要、以及什么被有意拒绝
|
|
5
|
+
[PROTOCOL]: 变更时更新此头部,然后检查 AGENTS.md
|
|
6
|
+
-->
|
|
7
|
+
|
|
8
|
+
# Fusion Report — what we took, what we refused, and why
|
|
9
|
+
|
|
10
|
+
Decision record for the pre-release fusion pass (2026-07). Principle: **fusion is not accumulation.** Every candidate got a verdict; only capabilities that raise release competitiveness were wired in — into existing workflow steps, never as parallel side-pipelines.
|
|
11
|
+
|
|
12
|
+
## Verdicts
|
|
13
|
+
|
|
14
|
+
### From hyperframes `website-to-video` (field-tested against caylent.com, see TEST-NOTES)
|
|
15
|
+
|
|
16
|
+
| Candidate | Verdict | Landing | Reason |
|
|
17
|
+
|---|---|---|---|
|
|
18
|
+
| Asset Audit gate (contact sheet + USE/SKIP per asset) | **ADOPT** | `rules/qc-gates.md` Gate 1 → SKILL Step 2.5 | In field test it caught real bugs: padded logo art, portrait-in-landscape-slot, mislabeled file formats. Kills "downloaded but never viewed." |
|
|
19
|
+
| Per-beat evidence blocks (read the artifact, write structured evidence) | **ADAPT** | Gate 2 → SKILL Step 4, per act | Hyperframes reads beat HTML; we verify the *rendered frame* instead (`remotion still` + Read) — pixels are the artifact TypeScript can't fake. |
|
|
20
|
+
| DoD + critic sub-agent | **ADAPT** | Gate 3 → SKILL Step 7.5 | We already had `iterate.ts`; the fusion move was promoting it from post-render optional to pre-render recommended path, chained after Gates 1-2. |
|
|
21
|
+
| Honest disclosure ("What I did NOT verify") | **ADOPT** | Gate 4 → SKILL Step 8 delivery | In field test this section carried a real pronunciation bug ("Kalent") to the user. Cheapest trust-builder in the whole pipeline. |
|
|
22
|
+
| `w2h-verify.mjs` static verify script | **REJECT** | — (codified as the "Evidence, Never Grep" rule in qc-gates.md) | Field-tested failure: its coverage checker only saw literal `duration: <number>`, flagged idiomatic `duration: BEAT`, and forced code changes purely to satisfy the checker. A check fooled by renaming a variable is not a check. |
|
|
23
|
+
| Intent routing table (route "make a video" across 11 workflow skills) | **REJECT** | — (added a slim "NOT for" scope note in SKILL.md) | Routing tables pay off for a skill *family*; remotion-video is deliberately single-purpose (brand URL → launch video). A boundary note buys the discoverability without the surface area. |
|
|
24
|
+
| `media-use` catalog resolver (frozen file + ledger + one-line resolve) | **REJECT** | — | Hard-depends on the HeyGen CLI + API key; our orchestrator already auto-resolves logo/screenshots/BGM, and the new `asset-audit.md` covers the review/provenance need. Field test also showed the capture side produced ~85% duplicate assets — the ledger doesn't fix that. |
|
|
25
|
+
|
|
26
|
+
### From `claude-shorts`
|
|
27
|
+
|
|
28
|
+
| Candidate | Verdict | Landing | Reason |
|
|
29
|
+
|---|---|---|---|
|
|
30
|
+
| Claude caption-cleanup layer (fix brand words + filler, timestamps untouched) | **ADOPT** | `rules/narration-sync.md` Rule 2 → SKILL Step 4 | Directly answers the field-test bug class: whisper wrote "Kalent" for "Caylent". Doubles as a pronunciation warning feeding Gate 4. |
|
|
31
|
+
| `snap_boundaries.py` audio-aware boundary snapping | **ADAPT** | `rules/narration-sync.md` Rule 3 | Concept ported (sentence-end + pad, silencedetect confirmation, narration-beats-BGM priority), not the script — our cuts are frame-computed in TSX, not ffmpeg segment cuts, so a Python dependency would be dead weight. |
|
|
32
|
+
|
|
33
|
+
### From `super-video-maker-skill`
|
|
34
|
+
|
|
35
|
+
| Candidate | Verdict | Landing | Reason |
|
|
36
|
+
|---|---|---|---|
|
|
37
|
+
| Rule #14 beat-lock (all visual changes pinned to whisper word timestamps) | **ADOPT** | `rules/narration-sync.md` Rule 1 → SKILL Step 4 | The single highest-leverage rule for narrated videos: "timing estimated from the script" is how narrated cuts ship broken. Made conditional — BGM-only videos skip it. |
|
|
38
|
+
| Rule #10 synthetic-presenter disclosure | **ADAPT** | `rules/qc-gates.md` Gate 4 bullet | Their rule is avatar-specific (baked-in spoken line + PiP badge). We have no avatars; the honest kernel — tell the user the voice is synthetic + provider/voice ID — became a Gate 4 disclosure item. The user decides about on-screen disclosure. |
|
|
39
|
+
|
|
40
|
+
### From `video-editing-skill` (maxazure)
|
|
41
|
+
|
|
42
|
+
| Candidate | Verdict | Landing | Reason |
|
|
43
|
+
|---|---|---|---|
|
|
44
|
+
| `render_qa.py` post-render machine QC (blackdetect / freezedetect / silencedetect / stream checks) | **ADOPT (ported)** | `scripts/render-qa.ts` → SKILL Step 8, blocking | Our biggest release gap: rendered MP4s had zero machine verification. Ported to TypeScript (matches every other script here), thresholds retuned for this skill's language (freeze ≥3s = review window, not failure — hold-then-snap is intentional; BGM silence >3s = fail — BGM is mandatory). Tested against synthetic pass/fail videos. |
|
|
45
|
+
| `content_guard.py` platform lint (广告法极限词 / 引流 / 医疗词) | **REJECT** | — | Rule bank is Xiaohongshu/抖音-policy-specific; this skill delivers a brand launch MP4, not a Chinese social post package. Importing another platform's policy list is a maintenance liability with near-zero hit rate here. Revisit only if social-variant export becomes a target. |
|
|
46
|
+
| Five-field narrative rewrite (hook/pain/turn/value/cta) | **REJECT** | — | Duplicate of our existing 5-act structure (`rules/narrative.md` + industry templates), and tuned for 口播 short video, not brand launch pacing. Two competing narrative skeletons in one skill = incoherence. |
|
|
47
|
+
|
|
48
|
+
### From hyperframes `music-to-video` (second fusion pass, 2026-07 — music-map analysis)
|
|
49
|
+
|
|
50
|
+
| Candidate | Verdict | Landing | Reason |
|
|
51
|
+
|---|---|---|---|
|
|
52
|
+
| `analyze-beatgrid.py` music-map analyzer (bpm/beats + energy phases/density + onsets + rolls + silences + hard stops) | **ADOPT (ported)** | `scripts/analyze-audiomap.py` → SKILL Step 4 → `rules/beat-sync.md` | Our beat-sync was aubiotrack BPM + first-beat offset — a metronome. The audiomap lets transitions breathe with energy and phrasing instead of counting beats. Ported slim: per-event drum classification / metrical grid / phrase budgets dropped (they serve hyperframes' per-frame sub-agent dispatch, dead weight for a 5-act launch video); added a `ROLL_MAX_BEATS` guard so a uniformly dense groove can't register as one track-long "roll". |
|
|
53
|
+
| "One analyzer, trust it unconditionally" + rhythm-trust design law (bpm/beats_sec reliable only on genuinely rhythmic music) | **ADOPT** | `rules/beat-sync.md` Laws 1–2 | The two ideas that make the analyzer safe: no second-sourcing beats (kills drift arguments), and an explicit machine `rhythmic: true/false` verdict (beat CV ≤ 0.12 + ≥50% beat-onset support + ≥0.8 onsets/s) instead of hyperframes' per-frame LLM pacing call — this skill has no per-frame sub-agents, so the verdict must be computed, not judged. Non-rhythmic → energy-phase/silence pacing, hard cuts to the grid forbidden. |
|
|
54
|
+
| beat-direction / kinetic-beat-slam creative kernels (one shared beat array drives every element; energy peaks earn the hit) | **ADAPT** | `rules/beat-sync.md` Law 3 + `references/audio.md` beats.ts note | Kernel kept: BEATS come from the audiomap verbatim (never BPM arithmetic), hold-then-snap resolves on `key_moments` SURGEs, rolls are cascade cues, `hard_stops` are the only earned smash cuts. HyperFrames/GSAP-specific mechanics (metronome chrome, GSAP ease table) not imported — Remotion springs already cover them via rules/motion.md. |
|
|
55
|
+
| librosa dependency handling | **ADAPT** | self-preflight inside `analyze-audiomap.py` | Wiring librosa into url-to-video.ts TOOLCHAIN would violate the "orchestrator untouched" red line; the analyzer pip-installs its own deps (plain → `--break-system-packages` → `--user`) and degrades to aubiotrack when install fails: audiomap then carries bpm+beats only, all other fields null, `rhythmic: false` — downstream treats the grid as untrusted. Verified both paths against a 30.9s MusicGen track (librosa: 123 BPM / 59 beats / rhythmic; fallback: 125.8 BPM / 56 beats / untrusted). |
|
|
56
|
+
|
|
57
|
+
## Score: 5 adopted/adapted in, 5 rejected (pass 1) · 4 adopted/adapted in (pass 2, music-map)
|
|
58
|
+
|
|
59
|
+
Pass-1 surface: 2 rule files (`qc-gates.md`, `narration-sync.md`), 1 script (`render-qa.ts`), 1 workflow step (2.5), 1 step repositioned (8.5 → 7.5). Pass-2 surface: 1 script (`analyze-audiomap.py`), 1 rule file (`beat-sync.md`), wired into existing Step 4 — orchestrator (`url-to-video.ts`) untouched, `beat-sync.ts` demoted to legacy pulse carrier. Everything on the existing 8-step spine; no parallel pipelines.
|
|
60
|
+
|
|
61
|
+
## Composition-debt repair (pass 3, 2026-07-03 — field failure driven)
|
|
62
|
+
|
|
63
|
+
Trigger: a happy-model launch first cut was killed by the user ("写死了,每次都是那几个动态") — every act was spring logo + shimmer / hub-and-spoke pill diagram / hollow-card triptych / CountUp row, all floating dead-center on bare `#000`. Root cause was structural, not per-project: the scaffold's compositional vocabulary was too narrow (one skeleton — `padding + eyebrow + headline + centered box` — worn by every act), the root atmosphere was near-invisible (GradientMesh 0.2 + grid 0.035), and no rule governed how content OCCUPIES the frame (taste.md bans elements, nothing banned compositions).
|
|
64
|
+
|
|
65
|
+
| Fix | Landing | Source |
|
|
66
|
+
|---|---|---|
|
|
67
|
+
| Bespoke Composition Law — 五铁律 (zero vacuum / full-bleed moment / editorial 200-320px type / real assets first / composition diversity) + compositional SLOP BLACKLIST with named replacements + thin-evidence playbook (score < 40 → grow a brand world from logo geometry, never empty cards) | **`rules/composition.md`** (new) → SKILL.md Step 4 reads it FIRST; Gate 2 evidence block gained a four-law Composition self-check line ("敢不敢把这一帧发给骂过你丑的人") | Generalized from the user-approved happy-model ART-DIRECTION v2 + the hyperframes-caylent benchmark's full-bleed/size-driven grammar |
|
|
68
|
+
| `Atmosphere` primitive — composed zero-vacuum base (VolumetricLight multi-layer radial glow eating `theme.color.primary` + GridHorizon perspective wireframe floor + DriftParticles deterministic sin-hash drift + optional grain), default-on at MainVideo root replacing the anemic GradientMesh/GridOverlay pair | **`scaffold/src/components/Atmosphere.tsx`** (new), wired in `scaffold/src/MainVideo.tsx` root | ART-DIRECTION v2 铁律 1 (氛围底座), parameterized for any brand |
|
|
69
|
+
| Organic motion vocabulary wiring — wiggle / inertia-overshoot / idle float / stagger-follow / loop / lookAt / exponential approach, as a when-to-use-which table with a pointer to the source skill for code + determinism rules | **`rules/motion.md`** new top section → `~/.claude/skills/remotion-motion/` | remotion-motion skill existed all along but was never wired in — idle ammunition |
|
|
70
|
+
|
|
71
|
+
Discipline note: no new scripts, no new gates — the five laws ride existing Step 4 + Gate 2; scaffold verified with a clean `tsc --noEmit` after the Atmosphere wiring.
|
|
72
|
+
|
|
73
|
+
## Three killer differentiators vs hyperframes (release positioning)
|
|
74
|
+
|
|
75
|
+
1. **Closed-loop taste iteration, pre-render.** Hyperframes' critic sub-agent produces a report a human applies. Our Step 7.5 critic *acts*: vision-LLM scores every act → rewrites the weakest scene → `tsc --noEmit` guard with auto-rollback → re-renders stills → repeats to threshold. The first MP4 the user sees is the post-critic cut.
|
|
76
|
+
2. **Machine QC on the actual output file.** Hyperframes' machine verification layer misfired in field test (animation-map broken, w2h-verify fighting idiomatic code); final-MP4 checking was manual frame reads. We ship `render-qa.ts`: black/freeze/silence/clipping/stream checks on the rendered file, blocking, with review windows a human (Claude) then Reads. Signal analysis where machines are right, eyes where they're not.
|
|
77
|
+
3. **One-command zero-manual intake with evidence scoring.** Hyperframes' pipeline is capture → 7 collaborative steps across multiple skills. Our orchestrator is a single command: preflight auto-installs tools, harvests brand evidence, scores it, picks a mode, writes the scene constitution and a runnable first-cut project — then the four evidence gates (adopted from hyperframes' best idea, minus its grep trap) guard the path to render.
|
package/skill/README.md
ADDED
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
[INPUT]: Claude Code users evaluating installation and capability fit
|
|
3
|
+
[OUTPUT]: High-level skill positioning, installation flow, and capability summary
|
|
4
|
+
[POS]: remotion-video-skill 的对外说明; 解释它是什么、为什么存在、以及它和普通模板型视频技能的差别
|
|
5
|
+
[PROTOCOL]: 变更时更新此头部,然后检查 AGENTS.md
|
|
6
|
+
-->
|
|
7
|
+
|
|
8
|
+
# Remotion Video Skill
|
|
9
|
+
|
|
10
|
+
> ⚠️ **DEPRECATED — Superseded by [30x-video](https://github.com/norahe0304-art/30x-video).**
|
|
11
|
+
>
|
|
12
|
+
> This skill is no longer actively developed. Its taste philosophy
|
|
13
|
+
> (`rules/taste.md`, `rules/finish-gate.md`, `rules/archetypes.md`) and
|
|
14
|
+
> engine-neutral scripts (beat-sync, scene-constitution, evidence-model,
|
|
15
|
+
> visual-audit, timing-audit, critique-scenes) have been ported to
|
|
16
|
+
> 30x-video, which uses **Hyperframes** (Apache 2.0, HTML+GSAP) instead
|
|
17
|
+
> of Remotion as the rendering engine.
|
|
18
|
+
>
|
|
19
|
+
> 30x-video adds:
|
|
20
|
+
> - Refero MCP integration for design-library search
|
|
21
|
+
> - Auto-composed voice over (multi-provider TTS) and BGM
|
|
22
|
+
> - Confirmation Gate before render (zero rework)
|
|
23
|
+
> - 5-dimensional Style Composer (replaces fixed templates)
|
|
24
|
+
> - 50-video real-reference library (instead of abstract rules)
|
|
25
|
+
>
|
|
26
|
+
> Use 30x-video for new work. This repo remains for reference.
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
Generate premium 40-second product launch videos with Claude Code + Remotion. Give it a brand URL, and the skill builds around real website evidence, enterprise-grade taste, and product-faithful motion instead of generic SaaS templates.
|
|
31
|
+
|
|
32
|
+
## URL-to-Video V2
|
|
33
|
+
|
|
34
|
+
The skill now includes a real URL intake orchestrator. Preferred flow:
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
node --experimental-strip-types <installed-skill-dir>/scripts/url-to-video.ts https://brand.com --out ./brand-launch-video
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
It emits a **team-editable first cut project**, not a black-box final render. Every generated project includes:
|
|
41
|
+
|
|
42
|
+
- `brand-report.json`
|
|
43
|
+
- `scene-constitution.json`
|
|
44
|
+
- `asset-manifest.json`
|
|
45
|
+
- `story.md`
|
|
46
|
+
- `review.md`
|
|
47
|
+
- `src/generated/project-data.ts`
|
|
48
|
+
- `public/brand/beat-map.json` when BGM harvest succeeds
|
|
49
|
+
|
|
50
|
+
For regression coverage across canonical brands:
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
node --experimental-strip-types <installed-skill-dir>/scripts/benchmark-suite.ts --match stripe-fintech --offline --reuse-brand-dir ./public/brand --install --verify --render
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
This writes per-benchmark `benchmark-result.json` files plus one suite summary.
|
|
57
|
+
|
|
58
|
+
## Installation
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
npx skills add norahe0304-art/remotion-video-skill -g
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
Or project-level:
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
npx skills add norahe0304-art/remotion-video-skill
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## Usage
|
|
71
|
+
|
|
72
|
+
Just tell Claude Code:
|
|
73
|
+
|
|
74
|
+
> "Make a launch video for linear.app"
|
|
75
|
+
|
|
76
|
+
The skill will scrape the brand, ask for your storyline, build animated UI mockups, add BGM, and render to MP4.
|
|
77
|
+
In V2, the default is stronger: it can turn one URL into a mode-aware editable first cut, choose between `product-evidence` and `editorial`, keep audio `BGM-only`, generate a beat-map when music exists, and leave the last 10-20% of polish to Claude or a human in Remotion.
|
|
78
|
+
|
|
79
|
+
## What Changed
|
|
80
|
+
|
|
81
|
+
- Added a **three-layer constitution**: phenomenal evidence, archetype inference, and finish-gate philosophy
|
|
82
|
+
- Added **enterprise design archetypes** abstracted from high-quality design references
|
|
83
|
+
- Added an **Impeccable-style finish gate** to reject monoculture defaults before render
|
|
84
|
+
- Upgraded the workflow so **screenshots are mandatory** and **video is preferred**
|
|
85
|
+
- Added a **URL-to-video orchestrator** that emits reports, scene constitution, and a Remotion-ready project from one URL
|
|
86
|
+
- Added an **executable benchmark suite runner** for 12+ canonical URLs across product-heavy and editorial-heavy brands
|
|
87
|
+
- Kept the existing `SKILL.md -> rules -> scaffold` production chain intact
|
|
88
|
+
|
|
89
|
+
## What's Inside
|
|
90
|
+
|
|
91
|
+
**3,200+ lines of rules** across 13 files, **4,100+ lines of bundled Remotion API reference**, **1,900+ lines of scaffold code**, and **5 reference files** with copy-paste components.
|
|
92
|
+
|
|
93
|
+
### Design System (rules/)
|
|
94
|
+
| File | What it covers |
|
|
95
|
+
|------|---------------|
|
|
96
|
+
| `layout.md` | Grid system, safe zones, nowrap rules, card padding minimums, SplitText flex-column fix |
|
|
97
|
+
| `typography.md` | Font weights (max 600), size hierarchy (min 28px), text safety |
|
|
98
|
+
| `color.md` | Brand polarity detection, neutral tinting, 60-30-10 rule |
|
|
99
|
+
| `ui-mockups.md` | Product UI construction, density, title bars, syntax coloring |
|
|
100
|
+
| `cards.md` | Staggered card grids, interior fill, animated card bodies |
|
|
101
|
+
| `data-viz.md` | SVG charts, animated metrics, tabular-nums, status badges |
|
|
102
|
+
|
|
103
|
+
### Motion & Production (rules/)
|
|
104
|
+
| File | What it covers |
|
|
105
|
+
|------|---------------|
|
|
106
|
+
| `motion.md` | Spring physics, easeOutExpo, per-character stagger, timing standards |
|
|
107
|
+
| `transitions.md` | TransitionSeries, light leaks, fluid backgrounds, parallax |
|
|
108
|
+
| `cinematic.md` | Film grain, vignette, shimmer sweep, color grading, render settings |
|
|
109
|
+
|
|
110
|
+
### Strategy & Quality (rules/)
|
|
111
|
+
| File | What it covers |
|
|
112
|
+
|------|---------------|
|
|
113
|
+
| `taste.md` | 23-item AI slop blacklist, cognitive UX laws, self-review checklist |
|
|
114
|
+
| `narrative.md` | 5-act evidence-driven structure, headline/UI rhythm, story arc |
|
|
115
|
+
| `narrative-templates.md` | 7 industry templates (AI SaaS, FinTech, DevTool, E-Commerce, etc.) |
|
|
116
|
+
| `workflow.md` | Brand scraping, yt-dlp video download, staticFile() enforcement, BGM sourcing, asset relevance checks |
|
|
117
|
+
| `archetypes.md` | Enterprise design archetypes distilled from great product design references |
|
|
118
|
+
| `finish-gate.md` | Impeccable-style finish protocol, anti-monoculture checks, render blocking criteria |
|
|
119
|
+
|
|
120
|
+
### Orchestration & QA (scripts/ + benchmarks/)
|
|
121
|
+
| File | What it covers |
|
|
122
|
+
|------|---------------|
|
|
123
|
+
| `scripts/url-to-video.ts` | One-URL intake, evidence scoring, mode selection, project generation |
|
|
124
|
+
| `scripts/benchmark-suite.ts` | Batch benchmark runner with optional install, verify, and render passes |
|
|
125
|
+
| `scripts/evidence-model.ts` | Evidence dimensions, report schema, manifest schema |
|
|
126
|
+
| `scripts/scene-constitution.ts` | Archetype inference and 5-scene constitution generation |
|
|
127
|
+
| `scripts/project-blueprint.ts` | Scaffold copying + generated output files |
|
|
128
|
+
| `scripts/beat-sync.ts` | Beat-map generation for BGM-backed scene timing |
|
|
129
|
+
| `benchmarks/manifest.json` | Canonical benchmark suite for regression testing |
|
|
130
|
+
|
|
131
|
+
### Code Patterns (references/)
|
|
132
|
+
| File | Components |
|
|
133
|
+
|------|-----------|
|
|
134
|
+
| `animations.md` | FadeIn, ScaleIn, SplitText, Typewriter, CountUp, AnimatedPath |
|
|
135
|
+
| `components.md` | GradientMesh, GlassPanel, FilmGrain, ProductFrame, BrandIcon |
|
|
136
|
+
| `audio.md` | Beat sync, voiceover ducking, audio layers |
|
|
137
|
+
| `visual-effects.md` | ShimmerSweep, PulseGlow, PathDraw, ParticleField |
|
|
138
|
+
| `lottie.md` | @remotion/lottie integration |
|
|
139
|
+
|
|
140
|
+
### Bundled Remotion API Reference (remotion-best-practices/)
|
|
141
|
+
37 Remotion-specific rule files covering videos, audio, timing, transitions, compositions, fonts, images, charts, captions, 3D, maps, and more. No external dependency needed.
|
|
142
|
+
|
|
143
|
+
### Scaffold (scaffold/)
|
|
144
|
+
Ready-to-run Remotion project template that acts as the first-cut receiver for `scene-constitution`, generated project data, and harvested brand evidence inside `public/brand/`.
|
|
145
|
+
|
|
146
|
+
## Battle-Tested
|
|
147
|
+
|
|
148
|
+
Built and validated across 8 real brand videos: Google Gemini, Linear, Mercury, Shopify, 1Password, Notion, Cursor, and Anthropic. Every rule comes from a real bug or a real design review — not theory.
|
|
149
|
+
|
|
150
|
+
## License
|
|
151
|
+
|
|
152
|
+
MIT
|
|
153
|
+
|
|
154
|
+
## Quickstart(followers 上手)
|
|
155
|
+
|
|
156
|
+
```bash
|
|
157
|
+
npx skills add norahe0304-art/30x-video --skill 30x-web-to-video # 或手动放入 .claude/skills/
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
**系统依赖**(orchestrator 会自动装,锁死环境手动装):node 20+ / ffmpeg / yt-dlp / aubio / playwright
|
|
161
|
+
|
|
162
|
+
**可选凭据(没有也能全链路跑)**:
|
|
163
|
+
- `ELEVENLABS_API_KEY`(项目 .env)→ 高质量配音 + 词级时间戳;没有则自动走 Kokoro 本地 TTS(零 key,见 references/audio.md)
|
|
164
|
+
- WebGL 渲染(ShaderFX)需要 `--gl=angle`,scaffold render script 已内置
|
|
165
|
+
|
|
166
|
+
**用法**:对 Claude 说 "用 30x-web-to-video 给 https://你的品牌.com 做个 launch video"。管线:抓站 → 素材审计 → 选型(rules/artifact-catalog.md 优先级五条)→ VO/BGM → 五幕 → 渲帧验收 → Studio 预览 → 渲染。
|
|
167
|
+
|
|
168
|
+
**质量的来源**(好好读 rules/,那是十个品牌实测淬出来的法典):taste.md(禁令清单)、composition.md(Claim→World)、artifact-catalog.md(词汇库 + 轮换台账)、typography/layout(排版铁律)、narration-sync(旁白力学)。examples/ 有六个品牌的完整场景源码可抄结构。
|