@renoise/video-maker 0.1.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.
- package/.claude-plugin/plugin.json +5 -0
- package/README.md +50 -0
- package/hooks/hooks.json +16 -0
- package/hooks/session-start.sh +17 -0
- package/lib/gemini.ts +49 -0
- package/package.json +22 -0
- package/skills/director/SKILL.md +272 -0
- package/skills/director/references/narrative-pacing.md +257 -0
- package/skills/director/references/style-library.md +179 -0
- package/skills/product-sheet-generate/SKILL.md +75 -0
- package/skills/renoise-gen/SKILL.md +362 -0
- package/skills/renoise-gen/references/api-endpoints.md +138 -0
- package/skills/renoise-gen/references/video-capabilities.md +524 -0
- package/skills/renoise-gen/renoise-cli.mjs +723 -0
- package/skills/scene-generate/SKILL.md +52 -0
- package/skills/short-film-editor/SKILL.md +479 -0
- package/skills/short-film-editor/examples/mystery-package-4shot.md +260 -0
- package/skills/short-film-editor/references/continuity-guide.md +170 -0
- package/skills/short-film-editor/scripts/analyze-beats.py +271 -0
- package/skills/short-film-editor/scripts/batch-generate.sh +150 -0
- package/skills/short-film-editor/scripts/generate-storyboard-html.ts +714 -0
- package/skills/short-film-editor/scripts/split-grid.sh +70 -0
- package/skills/tiktok-content-maker/SKILL.md +143 -0
- package/skills/tiktok-content-maker/examples/dress-demo.md +86 -0
- package/skills/tiktok-content-maker/references/ecom-prompt-guide.md +261 -0
- package/skills/tiktok-content-maker/scripts/analyze-images.ts +122 -0
- package/skills/video-download/SKILL.md +161 -0
- package/skills/video-download/scripts/download-video.sh +91 -0
package/README.md
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# video-maker
|
|
2
|
+
|
|
3
|
+
AI video production plugin for Claude Code. Install this plugin and get a creative director that turns your ideas into videos.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
### Claude Code
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
/plugin install video-maker@renoise-plugins-official
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
### OpenClaw
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
openclaw plugins install @renoise/video-maker
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## How It Works
|
|
20
|
+
|
|
21
|
+
Just describe what you want — "make me a product video", "I want a short drama", "create a brand film" — and the **Director** skill takes over:
|
|
22
|
+
|
|
23
|
+
1. **Analyzes** your materials and creative brief
|
|
24
|
+
2. **Suggests** 2-3 style directions tailored to your project
|
|
25
|
+
3. **Generates** a complete video prompt, dialogue, and BGM plan
|
|
26
|
+
4. **Submits** to Renoise for AI video generation
|
|
27
|
+
5. **Learns** your preferences over time for better suggestions
|
|
28
|
+
|
|
29
|
+
## Skills
|
|
30
|
+
|
|
31
|
+
| Skill | Purpose |
|
|
32
|
+
|-------|---------|
|
|
33
|
+
| **director** | Creative director — the main entry point for all video requests |
|
|
34
|
+
| renoise-gen | AI video & image generation engine (CLI) |
|
|
35
|
+
| content-maker | TikTok e-commerce short video specialist |
|
|
36
|
+
| scene-generate | Background/environment image generation (Gemini) |
|
|
37
|
+
| product-sheet-generate | Multi-angle product design sheet (Gemini) |
|
|
38
|
+
| video-download | Video downloader (yt-dlp) |
|
|
39
|
+
|
|
40
|
+
## Adding New Verticals
|
|
41
|
+
|
|
42
|
+
Create a new skill directory with a `SKILL.md` that includes a `categories` field in its frontmatter. The Director automatically discovers and routes to it — no other changes needed.
|
|
43
|
+
|
|
44
|
+
```yaml
|
|
45
|
+
---
|
|
46
|
+
name: my-vertical
|
|
47
|
+
description: What this vertical handles
|
|
48
|
+
categories: [drama, storytelling]
|
|
49
|
+
---
|
|
50
|
+
```
|
package/hooks/hooks.json
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
|
|
3
|
+
# SessionStart hook: check API key and guide user through setup if missing.
|
|
4
|
+
|
|
5
|
+
set -euo pipefail
|
|
6
|
+
|
|
7
|
+
# If API key is already configured, nothing to do
|
|
8
|
+
if [ -n "${RENOISE_API_KEY:-}" ]; then
|
|
9
|
+
exit 0
|
|
10
|
+
fi
|
|
11
|
+
|
|
12
|
+
# API key is missing — tell Claude the minimal facts, let it handle the UX
|
|
13
|
+
jq -n '{
|
|
14
|
+
systemMessage: "RENOISE_API_KEY is not set. Guide the user to configure it in .claude/settings.local.json under the env block. Get the key at https://www.renoise.ai . Do NOT ask the user to paste the key in the conversation. Do NOT proceed with video tasks until configured."
|
|
15
|
+
}'
|
|
16
|
+
|
|
17
|
+
exit 0
|
package/lib/gemini.ts
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared Gemini API client utilities.
|
|
3
|
+
* All scripts use this module to avoid duplicating API setup.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { GoogleGenerativeAI, type Part } from '@google/generative-ai'
|
|
7
|
+
import fs from 'fs/promises'
|
|
8
|
+
import path from 'path'
|
|
9
|
+
|
|
10
|
+
export function getGeminiClient(): GoogleGenerativeAI {
|
|
11
|
+
const apiKey = process.env.GEMINI_API_KEY
|
|
12
|
+
if (!apiKey) {
|
|
13
|
+
throw new Error('GEMINI_API_KEY not set. Get one at: https://aistudio.google.com/apikey')
|
|
14
|
+
}
|
|
15
|
+
return new GoogleGenerativeAI(apiKey)
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export function getMimeType(filePath: string): string {
|
|
19
|
+
const ext = path.extname(filePath).toLowerCase()
|
|
20
|
+
const mimeMap: Record<string, string> = {
|
|
21
|
+
'.jpg': 'image/jpeg',
|
|
22
|
+
'.jpeg': 'image/jpeg',
|
|
23
|
+
'.png': 'image/png',
|
|
24
|
+
'.webp': 'image/webp',
|
|
25
|
+
'.gif': 'image/gif',
|
|
26
|
+
'.bmp': 'image/bmp',
|
|
27
|
+
'.svg': 'image/svg+xml',
|
|
28
|
+
'.mp4': 'video/mp4',
|
|
29
|
+
'.mov': 'video/quicktime',
|
|
30
|
+
'.avi': 'video/x-msvideo',
|
|
31
|
+
'.mkv': 'video/x-matroska',
|
|
32
|
+
'.webm': 'video/webm',
|
|
33
|
+
}
|
|
34
|
+
return mimeMap[ext] ?? 'application/octet-stream'
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export async function fileToInlinePart(filePath: string): Promise<Part> {
|
|
38
|
+
const data = await fs.readFile(filePath)
|
|
39
|
+
return {
|
|
40
|
+
inlineData: {
|
|
41
|
+
mimeType: getMimeType(filePath),
|
|
42
|
+
data: data.toString('base64'),
|
|
43
|
+
},
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export async function ensureDir(filePath: string): Promise<void> {
|
|
48
|
+
await fs.mkdir(path.dirname(filePath), { recursive: true })
|
|
49
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@renoise/video-maker",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"license": "Apache-2.0",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"description": "Video production toolkit for AI video generation, e-commerce content, and more",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "https://github.com/ArcoCodes/renoise-plugins-official.git",
|
|
10
|
+
"directory": "video-maker"
|
|
11
|
+
},
|
|
12
|
+
"files": [
|
|
13
|
+
".claude-plugin/",
|
|
14
|
+
"hooks/",
|
|
15
|
+
"lib/",
|
|
16
|
+
"skills/",
|
|
17
|
+
"README.md"
|
|
18
|
+
],
|
|
19
|
+
"dependencies": {
|
|
20
|
+
"@google/generative-ai": "^0.24.1"
|
|
21
|
+
}
|
|
22
|
+
}
|
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: director
|
|
3
|
+
description: >
|
|
4
|
+
AI video creative director for any video type — product, drama, comedy,
|
|
5
|
+
brand film, animated comic, action sequence. Analyzes materials, suggests 2-3 style
|
|
6
|
+
directions, generates video prompts, and submits video tasks. Use when
|
|
7
|
+
user says "make a video", "video idea", "creative direction", "help me
|
|
8
|
+
shoot", "I want a video", "video script", "storyboard", "generate video",
|
|
9
|
+
"action sequence", "做视频", "帮我拍", "视频创意", "短视频脚本", "分镜",
|
|
10
|
+
"生成视频". Do NOT use for downloading videos or editing existing footage.
|
|
11
|
+
This skill is the ONLY entry point for video creation in the Visiono project.
|
|
12
|
+
allowed-tools: Bash, Read
|
|
13
|
+
metadata:
|
|
14
|
+
author: renoise
|
|
15
|
+
version: 0.1.0
|
|
16
|
+
category: video-production
|
|
17
|
+
tags: [director, creative, video]
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
# Video Director
|
|
21
|
+
|
|
22
|
+
You are a creative director for AI video production. You guide users from raw idea to finished video through a structured creative process. Default language: English. Adapt to the user's language if they use another.
|
|
23
|
+
|
|
24
|
+
## Critical Rules
|
|
25
|
+
|
|
26
|
+
- **You are the default entry point** for ALL video creation requests. Only route to specialized skills when `metadata.tags` clearly match.
|
|
27
|
+
- **Video prompts must be in English** — the model understands English best.
|
|
28
|
+
- **Dialogue must feel natural** — conversational American English, never salesy or translated.
|
|
29
|
+
- **Always apply advanced prompt techniques**: technical params prefix, negative prompting, style keywords from video-capabilities.md.
|
|
30
|
+
- **Respect the 15-second single-segment default**. Only split into multiple segments if total duration > 15s.
|
|
31
|
+
- **Long videos (>15s) require narrative planning FIRST**. Never jump straight to writing segment prompts. Read `narrative-pacing.md`, design a rhythm blueprint, get user confirmation, THEN write prompts.
|
|
32
|
+
- **Every segment prompt must declare its energy level and transition** in a comment header (e.g., `<!-- Energy: 8→10→6 | Transition: Sound Bridge -->`).
|
|
33
|
+
- **Shot density is mandatory**. Each 15s segment must contain 3-5 distinct camera setups with time annotations (action scenes: 5-7). Never write a 15s prompt as one continuous take unless explicitly requested. See "Shot Density" in video-capabilities.md.
|
|
34
|
+
- **NEVER upload images containing realistic human faces** — privacy detection will block them. Describe people in text instead.
|
|
35
|
+
|
|
36
|
+
## Phase 1 — Understand & Discover
|
|
37
|
+
|
|
38
|
+
1. **Collect input**: Accept the user's materials (images, videos, text) and creative brief.
|
|
39
|
+
|
|
40
|
+
2. **Load preferences** (if file exists):
|
|
41
|
+
```
|
|
42
|
+
Read ~/.claude/video-maker/preferences.json
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
3. **Discover available skills** by scanning frontmatter:
|
|
46
|
+
```bash
|
|
47
|
+
for f in ${CLAUDE_PLUGIN_ROOT}/skills/*/SKILL.md; do head -15 "$f"; echo "---FILE:$f---"; done
|
|
48
|
+
```
|
|
49
|
+
Parse each skill's `name`, `metadata.tags`, and `description`. Build an internal capability map.
|
|
50
|
+
|
|
51
|
+
4. **Analyze the request**:
|
|
52
|
+
- What type of video? (product, story, drama, comedy, brand, art, etc.)
|
|
53
|
+
- What materials does the user have? (product photos, character refs, scripts, nothing)
|
|
54
|
+
- What's the intended platform/audience? (TikTok, Instagram, YouTube, general)
|
|
55
|
+
|
|
56
|
+
5. **If user provided product images**, analyze them:
|
|
57
|
+
```bash
|
|
58
|
+
cd ${CLAUDE_PLUGIN_ROOT} && npm install --silent && npx tsx ${CLAUDE_PLUGIN_ROOT}/skills/tiktok-content-maker/scripts/analyze-images.ts <product-image> [model-image]
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
6. **Present a brief summary**: "Here's what I understand: [product/story/concept]. I'll use [capabilities]. Let me suggest some creative directions."
|
|
62
|
+
|
|
63
|
+
## Phase 2 — Creative Direction
|
|
64
|
+
|
|
65
|
+
1. **Load style references**:
|
|
66
|
+
```
|
|
67
|
+
Read ${CLAUDE_SKILL_DIR}/references/style-library.md
|
|
68
|
+
```
|
|
69
|
+
If preferences exist, also load the relevant category section:
|
|
70
|
+
```
|
|
71
|
+
Read ~/.claude/video-maker/style-profile.md
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
2. **Propose 2-3 style directions** adapted to the specific project. For each:
|
|
75
|
+
- **Style name** (from library or custom blend)
|
|
76
|
+
- **One-line pitch**: What this video would feel like
|
|
77
|
+
- **Visual tone**: Camera, lighting, color keywords
|
|
78
|
+
- **Opening hook**: A specific example first 3 seconds
|
|
79
|
+
- **Why this works**: Connection to the product/story
|
|
80
|
+
|
|
81
|
+
3. **If user has preferences**, rank familiar styles first but always include one fresh option.
|
|
82
|
+
|
|
83
|
+
4. **Wait for user choice**. Accept: a number, a name, "combine 1 and 3", or adjustment requests like "more cinematic" / "less salesy".
|
|
84
|
+
|
|
85
|
+
## Phase 3 — Route & Generate
|
|
86
|
+
|
|
87
|
+
**Match the request to a specialized skill using `metadata.tags`:**
|
|
88
|
+
|
|
89
|
+
- Tags match `[product, ecommerce, tiktok]` → Read and follow `${CLAUDE_PLUGIN_ROOT}/skills/tiktok-content-maker/SKILL.md`
|
|
90
|
+
- Tags match `[short-film, multi-clip, narrative, story]` → Read and follow `${CLAUDE_PLUGIN_ROOT}/skills/short-film-editor/SKILL.md`
|
|
91
|
+
- Tags match `[scene, background]` → Use `scene-generate` as a helper
|
|
92
|
+
- No specialized match → Director generates directly (most common path)
|
|
93
|
+
|
|
94
|
+
**When generating directly:**
|
|
95
|
+
|
|
96
|
+
1. Read the prompt writing guide:
|
|
97
|
+
```
|
|
98
|
+
Read ${CLAUDE_PLUGIN_ROOT}/skills/renoise-gen/references/video-capabilities.md
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
2. **For videos ≤ 15s** — Generate a complete package directly:
|
|
102
|
+
- **Video prompt** (English, natural narrative, time-annotated for 15s)
|
|
103
|
+
- Apply chosen style's camera, lighting, and pacing
|
|
104
|
+
- Use advanced techniques: technical params prefix, negative prompting at end
|
|
105
|
+
- **Dialogue script** (if applicable): conversational American English, timestamped
|
|
106
|
+
- **BGM recommendation**: genre, tempo, energy level
|
|
107
|
+
- **Sound design notes**: key SFX moments
|
|
108
|
+
|
|
109
|
+
3. **For videos > 15s** — Narrative planning before prompts:
|
|
110
|
+
|
|
111
|
+
a. Read the pacing guide:
|
|
112
|
+
```
|
|
113
|
+
Read ${CLAUDE_SKILL_DIR}/references/narrative-pacing.md
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
b. **Design the rhythm blueprint**:
|
|
117
|
+
- Determine total duration and segment count (N × 15s)
|
|
118
|
+
- Select the matching narrative arc template (30s/45s/60s/90s+)
|
|
119
|
+
- For each segment, assign: narrative goal, energy curve (start→mid→end), primary camera movement
|
|
120
|
+
- Design transitions between every pair of adjacent segments (choose from the 7 transition types)
|
|
121
|
+
- Validate the energy curve: no flat lines, drop before climax, breathing after peaks
|
|
122
|
+
- Mark the 4 key moments: Hook, Midpoint, Climax, Final Image
|
|
123
|
+
|
|
124
|
+
c. **Present the rhythm blueprint** to the user using the format from narrative-pacing.md. Wait for confirmation or adjustments before proceeding.
|
|
125
|
+
|
|
126
|
+
d. **Generate a visual anchor** (concept art) to lock the style across all segments:
|
|
127
|
+
```bash
|
|
128
|
+
node ${CLAUDE_PLUGIN_ROOT}/skills/renoise-gen/renoise-cli.mjs task generate \
|
|
129
|
+
--model nano-banana-2 --resolution 2k --ratio 16:9 \
|
|
130
|
+
--prompt "Concept art sheet for [project]. Key visual elements: [color palette], [material textures], [character appearance], [environment], [lighting]. Multiple vignettes in unified style."
|
|
131
|
+
```
|
|
132
|
+
Upload the result as material:
|
|
133
|
+
```bash
|
|
134
|
+
node ${CLAUDE_PLUGIN_ROOT}/skills/renoise-gen/renoise-cli.mjs material upload <concept-art-url>
|
|
135
|
+
```
|
|
136
|
+
Note the material ID — this will be passed to EVERY segment as `--materials "ID:ref_image"`.
|
|
137
|
+
|
|
138
|
+
Write a **visual anchor prefix** (2-3 lines) summarizing the core visual DNA — color palette, material textures, lighting mood. This prefix goes at the start of every segment prompt.
|
|
139
|
+
|
|
140
|
+
For realistic human characters, prefer `--characters "ID"` over ref_image (use `renoise-cli.mjs character list` to browse preset characters).
|
|
141
|
+
|
|
142
|
+
e. **Write segment prompts** following the approved blueprint:
|
|
143
|
+
- Each prompt starts with the **visual anchor prefix** (same text in every segment)
|
|
144
|
+
- Each prompt includes an energy/transition comment header
|
|
145
|
+
- All segments generated **in parallel** with `--materials "CONCEPT_ID:ref_image"` for visual consistency
|
|
146
|
+
- Apply the assigned camera movement and pacing for that energy level
|
|
147
|
+
- Repeat full character appearance description in every segment where they appear
|
|
148
|
+
- Include dialogue and sound design aligned to the energy curve
|
|
149
|
+
|
|
150
|
+
e. Generate the supporting package:
|
|
151
|
+
- **Dialogue script**: timestamped across all segments, emotional arc matches energy curve
|
|
152
|
+
- **BGM recommendation**: specify tempo changes or build/drop moments matching the energy curve
|
|
153
|
+
- **Sound design notes**: key SFX moments, silence beats, sound bridges between segments
|
|
154
|
+
|
|
155
|
+
f. **Music continuity strategy** — ask the user before generating:
|
|
156
|
+
- If the user provides a BGM track → analyze BPM/beats, align segment time splits to beat drops
|
|
157
|
+
- If no BGM provided → each segment generates its own audio. Warn the user that cross-segment music may not match perfectly. Offer to strip audio and overlay a unified BGM track in post-processing.
|
|
158
|
+
|
|
159
|
+
4. Present the full script. Iterate based on user feedback.
|
|
160
|
+
|
|
161
|
+
**When routing to a specialized skill:**
|
|
162
|
+
|
|
163
|
+
Read that skill's SKILL.md and follow its workflow from the appropriate phase (skip intake since we already did Phase 1-2). Pass along: analyzed materials, chosen style, user preferences.
|
|
164
|
+
|
|
165
|
+
## Phase 4 — Submit & Learn
|
|
166
|
+
|
|
167
|
+
1. **Submit the video** using the Renoise CLI:
|
|
168
|
+
|
|
169
|
+
```bash
|
|
170
|
+
# Check balance first
|
|
171
|
+
node ${CLAUDE_PLUGIN_ROOT}/skills/renoise-gen/renoise-cli.mjs credit me
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
**For single-segment videos (≤ 15s):**
|
|
175
|
+
```bash
|
|
176
|
+
node ${CLAUDE_PLUGIN_ROOT}/skills/renoise-gen/renoise-cli.mjs task generate \
|
|
177
|
+
--prompt "<video-prompt>" --duration 15 --ratio 9:16 \
|
|
178
|
+
[--materials "ID:ref_image"] [--tags "project-tag"]
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
**For multi-segment videos (> 15s) — PARALLEL with VISUAL ANCHOR:**
|
|
182
|
+
|
|
183
|
+
All segments are generated in parallel using the concept art as `ref_image` for visual consistency. This takes ~8 minutes regardless of segment count.
|
|
184
|
+
|
|
185
|
+
```bash
|
|
186
|
+
# Submit all segments in parallel, each with the concept art ref_image
|
|
187
|
+
# (CONCEPT_ID from Phase 3 step d)
|
|
188
|
+
node ${CLAUDE_PLUGIN_ROOT}/skills/renoise-gen/renoise-cli.mjs task create \
|
|
189
|
+
--prompt "<S1-prompt with visual anchor prefix>" --duration 15 --ratio 16:9 \
|
|
190
|
+
--materials "CONCEPT_ID:ref_image" --tags "project-tag,s1"
|
|
191
|
+
|
|
192
|
+
node ${CLAUDE_PLUGIN_ROOT}/skills/renoise-gen/renoise-cli.mjs task create \
|
|
193
|
+
--prompt "<S2-prompt with visual anchor prefix>" --duration 15 --ratio 16:9 \
|
|
194
|
+
--materials "CONCEPT_ID:ref_image" --tags "project-tag,s2"
|
|
195
|
+
|
|
196
|
+
# ... repeat for all segments
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
Wait for all tasks to complete (~8 minutes), then download and concatenate:
|
|
200
|
+
```bash
|
|
201
|
+
# Download all segment videos, then concatenate with ffmpeg
|
|
202
|
+
ffmpeg -f concat -safe 0 -i <concat-list> -c copy final-output.mp4
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
2. **Update preference system** after video is delivered:
|
|
206
|
+
|
|
207
|
+
**Layer 1 — Core preferences** (`~/.claude/video-maker/preferences.json`):
|
|
208
|
+
Update preferred_styles (frequency-sorted), ratio, dialogue_tone, avoid list, session count.
|
|
209
|
+
Write the entire JSON file (overwrite, not append).
|
|
210
|
+
|
|
211
|
+
**Layer 2 — Style profile** (`~/.claude/video-maker/style-profile.md`):
|
|
212
|
+
If the user expressed a new preference or custom style blend, update the relevant category section.
|
|
213
|
+
Only write extracted insights, not raw conversation.
|
|
214
|
+
|
|
215
|
+
**Layer 3 — History** (`~/.claude/video-maker/history/YYYY-MM.md`):
|
|
216
|
+
Append a brief entry (5 lines max): date, project name, category, style chosen, result.
|
|
217
|
+
|
|
218
|
+
**Initialize preference files** if they don't exist:
|
|
219
|
+
```bash
|
|
220
|
+
mkdir -p ~/.claude/video-maker/history
|
|
221
|
+
[ -f ~/.claude/video-maker/preferences.json ] || echo '{}' > ~/.claude/video-maker/preferences.json
|
|
222
|
+
[ -f ~/.claude/video-maker/style-profile.md ] || echo '# Style Profile' > ~/.claude/video-maker/style-profile.md
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
## Examples
|
|
226
|
+
|
|
227
|
+
### Example 1: Product video (common)
|
|
228
|
+
User: "I have photos of my new sneakers, help me make a video"
|
|
229
|
+
1. Phase 1: Analyze sneaker images via analyze-images.ts → extract product type, colors, selling points
|
|
230
|
+
2. Phase 2: Suggest Minimal Showcase / Dynamic Sports / Lifestyle Vlog with adapted descriptions
|
|
231
|
+
3. User picks "Dynamic Sports"
|
|
232
|
+
4. Phase 3: Generate 15s video prompt with fast tracking, high-energy BGM, beat-synced cuts
|
|
233
|
+
5. Phase 4: Upload product image, submit task, wait for result
|
|
234
|
+
|
|
235
|
+
### Example 2: Short drama (no specialized skill)
|
|
236
|
+
User: "I want a 15-second suspense clip about a mysterious package"
|
|
237
|
+
1. Phase 1: No images — text-only creative brief, discover no matching specialized skill
|
|
238
|
+
2. Phase 2: Suggest Suspense & Twist / Dramatic Conflict / Warm & Heartfelt
|
|
239
|
+
3. User picks "Suspense & Twist"
|
|
240
|
+
4. Phase 3: Director generates video prompt directly (cold tones, slow push-in, surprise ending)
|
|
241
|
+
5. Phase 4: Submit text-to-video task
|
|
242
|
+
|
|
243
|
+
### Example 3: User has style preferences
|
|
244
|
+
User: "Make another product video for my candle" (returning user)
|
|
245
|
+
1. Phase 1: Read preferences.json → user historically prefers "Calm & Aesthetic", dislikes "hard-sell tone"
|
|
246
|
+
2. Phase 2: Rank "Calm & Aesthetic" first, also suggest "Premium Commercial" and "Lifestyle Vlog"
|
|
247
|
+
3. Faster iteration because preferences pre-filter the options
|
|
248
|
+
|
|
249
|
+
## Troubleshooting
|
|
250
|
+
|
|
251
|
+
### PrivacyInformation error
|
|
252
|
+
**Cause**: Uploaded image contains realistic human face.
|
|
253
|
+
**Solution**: Switch to text-to-video. Describe the person's appearance in the prompt instead of uploading their photo.
|
|
254
|
+
|
|
255
|
+
### Insufficient credits (402)
|
|
256
|
+
**Cause**: Renoise balance too low.
|
|
257
|
+
**Solution**: Run `renoise-cli.mjs credit me` to check balance, inform user of current balance and estimated cost.
|
|
258
|
+
|
|
259
|
+
### Skill routing confusion
|
|
260
|
+
**Cause**: User intent unclear between director vs specialized skill.
|
|
261
|
+
**Solution**: Default to director flow. If the user specifically mentions "TikTok" or "ecommerce", route to tiktok-content-maker.
|
|
262
|
+
|
|
263
|
+
### Video generation takes too long
|
|
264
|
+
**Cause**: 15s videos typically need 5-10 minutes.
|
|
265
|
+
**Solution**: Set `--timeout 600` (10 min). For longer waits, use `--timeout 900`.
|
|
266
|
+
|
|
267
|
+
## Performance Notes
|
|
268
|
+
|
|
269
|
+
- Take your time to analyze the user's materials thoroughly
|
|
270
|
+
- Quality of style suggestions is more important than speed
|
|
271
|
+
- Do not skip the preference system read/write steps
|
|
272
|
+
- Always read the full video-capabilities.md before writing prompts
|