@milenyumai/film-kit 1.0.5 → 1.2.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 +77 -3
- package/build/cli.js +49 -5
- package/build/index.d.ts +1 -1
- package/build/lib/configure.js +20 -3
- package/build/lib/defaults.js +12 -1
- package/build/lib/templates.js +344 -13
- package/build/lib/types.d.ts +8 -0
- package/build/postinstall.js +5 -1
- package/content/ARCHITECTURE.md +18 -15
- package/content/FILM-KIT-INFO.md +26 -14
- package/content/MASTER.md +25 -17
- package/content/RULES.md +16 -14
- package/content/agents/prompt-engineer.md +104 -31
- package/content/skills/audio-design/SKILL.md +44 -1
- package/content/skills/frame-chaining/SKILL.md +49 -1
- package/content/skills/prompt-structure/SKILL.md +129 -36
- package/content/skills/visual-modes/SKILL.md +43 -0
- package/content/workflows/chain.md +10 -2
- package/content/workflows/finish.md +12 -0
- package/content/workflows/generate.md +81 -18
- package/content/workflows/safety-check.md +12 -0
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Film-Kit: Hollywood-Standard Cinematic Prompt Engineering
|
|
2
2
|
|
|
3
|
-
**Film-Kit**,
|
|
3
|
+
**Film-Kit**, model-seçilebilir sinematik prompt mühendisliği ajanlarını (Claude Code, Cursor, VS Code Copilot, Antigravity) projenize kuran bir araç setidir.
|
|
4
4
|
|
|
5
5
|
İki versiyonu vardır:
|
|
6
6
|
1. **Film-Kit (Core):** Tek ajanlı, manuel kontrollü üretim.
|
|
@@ -15,13 +15,49 @@ Yani kaynak kod için tek "source of truth" vardır: `film-kit` reposu.
|
|
|
15
15
|
|
|
16
16
|
---
|
|
17
17
|
|
|
18
|
+
## 🎯 Model Desteği
|
|
19
|
+
|
|
20
|
+
| Model ID | Durum | Not |
|
|
21
|
+
|----------|-------|-----|
|
|
22
|
+
| `veo31` | ✅ Destekleniyor | Flow/Veo prompt akışı, Image-to-Video, Re-Take Strategy |
|
|
23
|
+
| `kling-3.0` | ✅ Destekleniyor | Start+End, Multi-Shot (2-6), Element Binding, vCoT, Native Audio |
|
|
24
|
+
|
|
25
|
+
Soft geçiş politikası:
|
|
26
|
+
- `--model` verilmezse geçici olarak `veo31` atanır.
|
|
27
|
+
- CLI bir deprecation warning basar: gelecek major sürümde model zorunlu olacak.
|
|
28
|
+
- Alternatif: `FILM_KIT_MODEL=kling-3.0` environment variable ile default ayarlanabilir.
|
|
29
|
+
|
|
30
|
+
Kling preset:
|
|
31
|
+
- Varsayılan: `ultra-realism`
|
|
32
|
+
- Varsayılan CFG hedefi: `0.45`
|
|
33
|
+
|
|
34
|
+
### v1.2.0 — Yeni Özellikler
|
|
35
|
+
|
|
36
|
+
**Kling 3.0:**
|
|
37
|
+
- Golden Prompt Skeleton (6-step Start+End)
|
|
38
|
+
- 3 copy-paste template (Minimal Realism, Swap, Loop)
|
|
39
|
+
- Multi-Shot Protocol (2-6 shots, `Shot X,` prefix)
|
|
40
|
+
- Element Binding (karakter/nesne tutarlılığı)
|
|
41
|
+
- Advanced Camera (vCoT triggers: Dolly Zoom, Dutch angle, Bird's-eye)
|
|
42
|
+
- Native Audio (tonlama, lip sync, narrative SFX)
|
|
43
|
+
- Troubleshooting guide + 10-point checklist
|
|
44
|
+
|
|
45
|
+
**Veo 3.1:**
|
|
46
|
+
- Image-to-Video entropy rule (stil tekrarı yok)
|
|
47
|
+
- Re-Take Strategy table (7 hata tipi + seed yönetimi)
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
18
51
|
## 📦 Paket 1: Film-Kit (Core)
|
|
19
52
|
**Kullanım:** Bireysel projeler, öğrenme, <10 shot senaryolar.
|
|
53
|
+
**Platformlar:** Claude Code + Cursor + Copilot + Antigravity
|
|
20
54
|
|
|
21
55
|
### Kurulum (Tek Komut)
|
|
22
56
|
Boş bir klasörde terminali açın:
|
|
23
57
|
```bash
|
|
24
58
|
npx @milenyumai/film-kit init
|
|
59
|
+
npx @milenyumai/film-kit init --model veo31
|
|
60
|
+
npx @milenyumai/film-kit init --model kling-3.0 --kling-preset ultra-realism
|
|
25
61
|
```
|
|
26
62
|
|
|
27
63
|
### Kullanım
|
|
@@ -31,11 +67,18 @@ Claude Code içinde:
|
|
|
31
67
|
```
|
|
32
68
|
Tek bir ajan ("Prompt Engineer") senaryoyu okur, analiz eder ve shotları sırayla üretir.
|
|
33
69
|
|
|
70
|
+
Antigravity içinde:
|
|
71
|
+
- Skill: `.agent/skills/shotforge-generate/SKILL.md`
|
|
72
|
+
- Çalışma şekli: tek ajanlı, yüksek kontrol, shot-by-shot üretim
|
|
73
|
+
|
|
34
74
|
**Özellikler:**
|
|
35
75
|
- Veo 3.1 Prompt Flow (Subject > Action > Camera > Light)
|
|
76
|
+
- Kling 3.0 Start+End geçiş kuralları (model-profile üzerinden)
|
|
36
77
|
- Profesyonel Audio Blocks (Dialogue, SFX, Mix)
|
|
37
78
|
- Zorunlu Avoid Line
|
|
38
79
|
- Auto-Safety & Auto-Anonymous
|
|
80
|
+
- Hard Quality Gate: `ILK>=80`, `SON>=80`, `VIDEO>=120`, `Coverage>=70` kelime
|
|
81
|
+
- Specificity Gate: lens + ışık + FG/MG/BG aksiyon detayı zorunlu
|
|
39
82
|
|
|
40
83
|
---
|
|
41
84
|
|
|
@@ -47,6 +90,8 @@ Tek bir ajan ("Prompt Engineer") senaryoyu okur, analiz eder ve shotları sıray
|
|
|
47
90
|
Boş bir klasörde terminali açın:
|
|
48
91
|
```bash
|
|
49
92
|
npx @milenyumai/film-kit-multi init
|
|
93
|
+
npx @milenyumai/film-kit-multi init --model veo31
|
|
94
|
+
npx @milenyumai/film-kit-multi init --model kling-3.0 --kling-preset ultra-realism
|
|
50
95
|
```
|
|
51
96
|
|
|
52
97
|
### Kullanım
|
|
@@ -65,7 +110,7 @@ Antigravity içinde:
|
|
|
65
110
|
**Süreç:**
|
|
66
111
|
1. **Planning:** Lead Director senaryoyu analiz eder, `team-plan.json` oluşturur.
|
|
67
112
|
2. **Casting:** İhtiyaca göre 5'e kadar **Shot Generator** ajanı spawn eder.
|
|
68
|
-
3. **Execution:** Ajanlar shotları
|
|
113
|
+
3. **Execution:** Ajanlar shotları hard quality gate ile paralel üretir (`ILK>=80`, `SON>=80`, `VIDEO>=120`, `Coverage>=70`).
|
|
69
114
|
4. **Validation:** 3 Uzman Ajan devreye girer:
|
|
70
115
|
- `continuity-editor`: Zincirleme (chain) hatalarını yakalar.
|
|
71
116
|
- `safety-auditor`: Güvenlik ve anonimlik ihlallerini tarar.
|
|
@@ -74,6 +119,34 @@ Antigravity içinde:
|
|
|
74
119
|
|
|
75
120
|
---
|
|
76
121
|
|
|
122
|
+
## ⚙️ Config Dosyaları
|
|
123
|
+
|
|
124
|
+
Core (`shotforge-agent.config.json`):
|
|
125
|
+
|
|
126
|
+
```json
|
|
127
|
+
{
|
|
128
|
+
"outputDir": "./outputs",
|
|
129
|
+
"scenarioHint": "scenario.md",
|
|
130
|
+
"model": "kling-3.0",
|
|
131
|
+
"klingPreset": "ultra-realism"
|
|
132
|
+
}
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
Multi (`film-kit-multi.config.json`):
|
|
136
|
+
|
|
137
|
+
```json
|
|
138
|
+
{
|
|
139
|
+
"outputDir": "./outputs",
|
|
140
|
+
"scenarioHint": "scenario.md",
|
|
141
|
+
"model": "kling-3.0",
|
|
142
|
+
"klingPreset": "ultra-realism",
|
|
143
|
+
"maxTeammates": 5,
|
|
144
|
+
"batchSize": 4
|
|
145
|
+
}
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
---
|
|
149
|
+
|
|
77
150
|
## ⚡ Komut Referansı (Slash Commands)
|
|
78
151
|
|
|
79
152
|
| Komut | Paket | İşlev |
|
|
@@ -92,6 +165,7 @@ Antigravity içinde:
|
|
|
92
165
|
|---------|-----------------|----------------------|
|
|
93
166
|
| **Mimari** | Tek Ajan | Lead + Teammates + Specialists |
|
|
94
167
|
| **Hız (20 Shot)** | ~60 dk | ~20 dk (Paralel) |
|
|
168
|
+
| **Kalite Gate** | Hard prompt gate | Hard prompt gate + specialist gate |
|
|
95
169
|
| **Tutarlılık** | Manuel Kontrol | `continuity-editor` Denetimi |
|
|
96
170
|
| **Güvenlik** | Prompt İçi Filtre | `safety-auditor` Taraması |
|
|
97
171
|
| **Planlama** | Yok | `team-plan.json` Kontratlı |
|
|
@@ -102,7 +176,7 @@ Antigravity içinde:
|
|
|
102
176
|
## 🛠 Gereksinimler
|
|
103
177
|
- **Node.js:** v20+
|
|
104
178
|
- **Claude Code:** `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1` (Sadece Multi için)
|
|
105
|
-
- **Editör:** VS Code, Cursor veya
|
|
179
|
+
- **Editör/Platform:** VS Code, Cursor, Claude Code veya Antigravity
|
|
106
180
|
|
|
107
181
|
## 📄 Lisans
|
|
108
182
|
MIT
|
package/build/cli.js
CHANGED
|
@@ -3,13 +3,51 @@ import { configureAgents } from "./lib/configure.js";
|
|
|
3
3
|
const args = process.argv.slice(2);
|
|
4
4
|
const command = args[0];
|
|
5
5
|
const overwrite = args.includes("--overwrite") || args.includes("-f");
|
|
6
|
+
const SUPPORTED_MODELS = ["veo31", "kling-3.0"];
|
|
7
|
+
const SUPPORTED_KLING_PRESETS = ["ultra-realism", "balanced", "custom"];
|
|
8
|
+
function parseFlagValue(flag) {
|
|
9
|
+
const exactIndex = args.indexOf(flag);
|
|
10
|
+
if (exactIndex >= 0 && args[exactIndex + 1]) {
|
|
11
|
+
return args[exactIndex + 1];
|
|
12
|
+
}
|
|
13
|
+
const prefixed = args.find(a => a.startsWith(`${flag}=`));
|
|
14
|
+
if (prefixed) {
|
|
15
|
+
return prefixed.slice(flag.length + 1);
|
|
16
|
+
}
|
|
17
|
+
return undefined;
|
|
18
|
+
}
|
|
19
|
+
function parseModel() {
|
|
20
|
+
const modelRaw = parseFlagValue("--model");
|
|
21
|
+
if (!modelRaw)
|
|
22
|
+
return undefined;
|
|
23
|
+
if (SUPPORTED_MODELS.includes(modelRaw)) {
|
|
24
|
+
return modelRaw;
|
|
25
|
+
}
|
|
26
|
+
throw new Error(`Invalid --model value: ${modelRaw}. Supported: ${SUPPORTED_MODELS.join(", ")}`);
|
|
27
|
+
}
|
|
28
|
+
function parseKlingPreset() {
|
|
29
|
+
const presetRaw = parseFlagValue("--kling-preset");
|
|
30
|
+
if (!presetRaw)
|
|
31
|
+
return undefined;
|
|
32
|
+
if (SUPPORTED_KLING_PRESETS.includes(presetRaw)) {
|
|
33
|
+
return presetRaw;
|
|
34
|
+
}
|
|
35
|
+
throw new Error(`Invalid --kling-preset value: ${presetRaw}. Supported: ${SUPPORTED_KLING_PRESETS.join(", ")}`);
|
|
36
|
+
}
|
|
6
37
|
if (command === "init") {
|
|
7
38
|
console.log("🎬 Film-Kit: Configuring AI agents...\n");
|
|
8
39
|
try {
|
|
9
|
-
const
|
|
40
|
+
const model = parseModel();
|
|
41
|
+
const klingPreset = parseKlingPreset();
|
|
42
|
+
const configureOptions = {
|
|
10
43
|
rootDir: process.cwd(),
|
|
11
44
|
overwrite
|
|
12
|
-
}
|
|
45
|
+
};
|
|
46
|
+
if (model)
|
|
47
|
+
configureOptions.model = model;
|
|
48
|
+
if (klingPreset)
|
|
49
|
+
configureOptions.klingPreset = klingPreset;
|
|
50
|
+
const result = await configureAgents(configureOptions);
|
|
13
51
|
if (result.written.length > 0) {
|
|
14
52
|
console.log(`✅ Files written: ${result.written.length}`);
|
|
15
53
|
result.written.forEach(f => console.log(` ${f}`));
|
|
@@ -17,6 +55,10 @@ if (command === "init") {
|
|
|
17
55
|
if (result.skipped.length > 0) {
|
|
18
56
|
console.log(`⏭️ Files skipped (already exist): ${result.skipped.length}`);
|
|
19
57
|
}
|
|
58
|
+
if (result.warnings.length > 0) {
|
|
59
|
+
console.log("\n⚠️ Warnings:");
|
|
60
|
+
result.warnings.forEach(w => console.log(` - ${w}`));
|
|
61
|
+
}
|
|
20
62
|
console.log("\n🎬 Done! Your AI agents are configured for Hollywood-grade prompt engineering.");
|
|
21
63
|
console.log(" Use /generate in your AI editor to start creating shots.\n");
|
|
22
64
|
}
|
|
@@ -27,11 +69,13 @@ if (command === "init") {
|
|
|
27
69
|
}
|
|
28
70
|
else {
|
|
29
71
|
console.log(`
|
|
30
|
-
🎬 @milenyumai/film-kit — Hollywood-grade prompt engineering
|
|
72
|
+
🎬 @milenyumai/film-kit — Hollywood-grade prompt engineering (Veo 3.1 + Kling 3.0)
|
|
31
73
|
|
|
32
74
|
Usage:
|
|
33
|
-
npx @milenyumai/film-kit init
|
|
34
|
-
npx @milenyumai/film-kit init --
|
|
75
|
+
npx @milenyumai/film-kit init Configure AI agents in current directory
|
|
76
|
+
npx @milenyumai/film-kit init --model veo31|kling-3.0 Select target model profile
|
|
77
|
+
npx @milenyumai/film-kit init --model kling-3.0 --kling-preset ultra-realism|balanced|custom
|
|
78
|
+
npx @milenyumai/film-kit init --overwrite Force update existing .agent content files
|
|
35
79
|
|
|
36
80
|
Or install as a dependency (auto-configures on install):
|
|
37
81
|
npm install --save-dev @milenyumai/film-kit
|
package/build/index.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export { configureAgents } from "./lib/configure.js";
|
|
2
|
-
export type { AgentConfigOptions, ConfigureResult, SupportedPlatform } from "./lib/types.js";
|
|
2
|
+
export type { AgentConfigOptions, ConfigureResult, KlingPreset, SupportedModel, SupportedPlatform } from "./lib/types.js";
|
package/build/lib/configure.js
CHANGED
|
@@ -64,8 +64,14 @@ function renderContentTemplate(content, vars) {
|
|
|
64
64
|
return content
|
|
65
65
|
.replaceAll("$OUTPUT_DIR", vars.outputDir)
|
|
66
66
|
.replaceAll("$SCENARIO_HINT", vars.scenarioHint)
|
|
67
|
+
.replaceAll("$MODEL_DISPLAY", vars.modelDisplayName)
|
|
68
|
+
.replaceAll("$MODEL", vars.model)
|
|
69
|
+
.replaceAll("$KLING_PRESET", vars.klingPreset)
|
|
67
70
|
.replaceAll("$ARGUMENTS", "");
|
|
68
71
|
}
|
|
72
|
+
function getModelDisplayName(model) {
|
|
73
|
+
return model === "kling-3.0" ? "Kling 3.0" : "Google Flow + Veo 3.1";
|
|
74
|
+
}
|
|
69
75
|
export async function configureAgents(options = {}) {
|
|
70
76
|
const rootDir = options.rootDir ?? process.cwd();
|
|
71
77
|
const packageConfigPath = join(rootDir, "shotforge-agent.config.json");
|
|
@@ -74,6 +80,8 @@ export async function configureAgents(options = {}) {
|
|
|
74
80
|
const outputDir = options.outputDir ?? fromFile?.outputDir;
|
|
75
81
|
const scenarioHint = options.scenarioHint ?? fromFile?.scenarioHint;
|
|
76
82
|
const platforms = options.platforms ?? fromFile?.platforms;
|
|
83
|
+
const model = options.model ?? fromFile?.model;
|
|
84
|
+
const klingPreset = options.klingPreset ?? fromFile?.klingPreset;
|
|
77
85
|
const overwrite = options.overwrite ?? fromFile?.overwrite;
|
|
78
86
|
const includeAgentsMd = options.includeAgentsMd ?? fromFile?.includeAgentsMd;
|
|
79
87
|
const copyContent = options.copyContent ?? fromFile?.copyContent;
|
|
@@ -83,6 +91,10 @@ export async function configureAgents(options = {}) {
|
|
|
83
91
|
merged.scenarioHint = scenarioHint;
|
|
84
92
|
if (platforms !== undefined)
|
|
85
93
|
merged.platforms = platforms;
|
|
94
|
+
if (model !== undefined)
|
|
95
|
+
merged.model = model;
|
|
96
|
+
if (klingPreset !== undefined)
|
|
97
|
+
merged.klingPreset = klingPreset;
|
|
86
98
|
if (overwrite !== undefined)
|
|
87
99
|
merged.overwrite = overwrite;
|
|
88
100
|
if (includeAgentsMd !== undefined)
|
|
@@ -94,7 +106,10 @@ export async function configureAgents(options = {}) {
|
|
|
94
106
|
const contentResult = resolved.copyContent
|
|
95
107
|
? await copyContentFiles(resolved.rootDir, resolved.overwrite, {
|
|
96
108
|
outputDir: resolved.outputDir,
|
|
97
|
-
scenarioHint: resolved.scenarioHint
|
|
109
|
+
scenarioHint: resolved.scenarioHint,
|
|
110
|
+
model: resolved.model,
|
|
111
|
+
klingPreset: resolved.klingPreset,
|
|
112
|
+
modelDisplayName: getModelDisplayName(resolved.model)
|
|
98
113
|
})
|
|
99
114
|
: { written: [], skipped: [] };
|
|
100
115
|
// 2. Generate platform-specific config files
|
|
@@ -104,7 +119,8 @@ export async function configureAgents(options = {}) {
|
|
|
104
119
|
for (const [relativePath, content] of Object.entries(files)) {
|
|
105
120
|
const absolutePath = join(resolved.rootDir, relativePath);
|
|
106
121
|
const fileExists = await exists(absolutePath);
|
|
107
|
-
|
|
122
|
+
const isRuntimeModelFile = relativePath === ".agent/model-profile.md";
|
|
123
|
+
if (fileExists && !isRuntimeModelFile && !resolved.overwrite) {
|
|
108
124
|
skipped.push(relativePath);
|
|
109
125
|
continue;
|
|
110
126
|
}
|
|
@@ -114,6 +130,7 @@ export async function configureAgents(options = {}) {
|
|
|
114
130
|
return {
|
|
115
131
|
rootDir: resolved.rootDir,
|
|
116
132
|
written,
|
|
117
|
-
skipped
|
|
133
|
+
skipped,
|
|
134
|
+
warnings: resolved.warnings
|
|
118
135
|
};
|
|
119
136
|
}
|
package/build/lib/defaults.js
CHANGED
|
@@ -1,12 +1,23 @@
|
|
|
1
1
|
const ALL_PLATFORMS = ["cursor", "claude", "copilot", "antigravity"];
|
|
2
|
+
const DEFAULT_MODEL = "veo31";
|
|
3
|
+
const DEFAULT_KLING_PRESET = "ultra-realism";
|
|
2
4
|
export function resolveOptions(input) {
|
|
5
|
+
const warnings = [];
|
|
6
|
+
const model = input.model ?? DEFAULT_MODEL;
|
|
7
|
+
const klingPreset = input.klingPreset ?? DEFAULT_KLING_PRESET;
|
|
8
|
+
if (!input.model) {
|
|
9
|
+
warnings.push("Model not specified. Falling back to veo31. In the next major release, --model will be required.");
|
|
10
|
+
}
|
|
3
11
|
return {
|
|
4
12
|
rootDir: input.rootDir ?? process.cwd(),
|
|
5
13
|
outputDir: input.outputDir ?? "./outputs",
|
|
6
14
|
scenarioHint: input.scenarioHint ?? "scenario.md",
|
|
7
15
|
platforms: (input.platforms && input.platforms.length > 0 ? input.platforms : ALL_PLATFORMS).slice(),
|
|
16
|
+
model,
|
|
17
|
+
klingPreset,
|
|
8
18
|
overwrite: input.overwrite ?? false,
|
|
9
19
|
includeAgentsMd: input.includeAgentsMd ?? true,
|
|
10
|
-
copyContent: input.copyContent ?? true
|
|
20
|
+
copyContent: input.copyContent ?? true,
|
|
21
|
+
warnings
|
|
11
22
|
};
|
|
12
23
|
}
|