@milenyumai/film-kit 1.0.4 → 1.2.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/README.md CHANGED
@@ -1,20 +1,63 @@
1
1
  # Film-Kit: Hollywood-Standard Cinematic Prompt Engineering
2
2
 
3
- **Film-Kit**, Google Veo 3.1 ve Flow için optimize edilmiş, profesyonel "Prompt Engineering" ajanlarını (Claude Code, Cursor) projenize kuran bir araç setidir.
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.
7
7
  2. **Film-Kit Multi (Pro):** Çok ajanlı, paralel üretim ve uzman denetimi.
8
8
 
9
+ ## 🧱 Repository Modeli (Tek Repo)
10
+ Bu proje **tek GitHub repository (monorepo)** olarak yönetilir:
11
+ - Core paket: repo kökü (`@milenyumai/film-kit`)
12
+ - Multi paket: `packages/multi` (`@milenyumai/film-kit-multi`)
13
+
14
+ Yani kaynak kod için tek "source of truth" vardır: `film-kit` reposu.
15
+
16
+ ---
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
+
9
49
  ---
10
50
 
11
51
  ## 📦 Paket 1: Film-Kit (Core)
12
52
  **Kullanım:** Bireysel projeler, öğrenme, <10 shot senaryolar.
53
+ **Platformlar:** Claude Code + Cursor + Copilot + Antigravity
13
54
 
14
55
  ### Kurulum (Tek Komut)
15
56
  Boş bir klasörde terminali açın:
16
57
  ```bash
17
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
18
61
  ```
19
62
 
20
63
  ### Kullanım
@@ -24,34 +67,50 @@ Claude Code içinde:
24
67
  ```
25
68
  Tek bir ajan ("Prompt Engineer") senaryoyu okur, analiz eder ve shotları sırayla üretir.
26
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
+
27
74
  **Özellikler:**
28
75
  - Veo 3.1 Prompt Flow (Subject > Action > Camera > Light)
76
+ - Kling 3.0 Start+End geçiş kuralları (model-profile üzerinden)
29
77
  - Profesyonel Audio Blocks (Dialogue, SFX, Mix)
30
78
  - Zorunlu Avoid Line
31
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
32
82
 
33
83
  ---
34
84
 
35
85
  ## 🚀 Paket 2: Film-Kit Multi (Pro)
36
86
  **Kullanım:** Profesyonel stüdyo işleri, uzun metraj, 10+ shot senaryolar.
87
+ **Platformlar:** Claude Code Agent Teams + Antigravity Mission Control
37
88
 
38
89
  ### Kurulum (Tek Komut)
39
90
  Boş bir klasörde terminali açın:
40
91
  ```bash
41
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
42
95
  ```
43
96
 
44
97
  ### Kullanım
45
98
  Claude Code içinde:
46
99
  ```text
47
- /generate-multi
100
+ /generate
48
101
  ```
49
102
  **Lead Director** ajanı ekibi kurar ve yönetir.
50
103
 
104
+ Antigravity içinde:
105
+ - Skill: `.agent/skills/shotforge-generate/SKILL.md`
106
+ - Alias: `.agent/skills/shotforge-generate-multi/SKILL.md`
107
+ - Çalışma şekli: Mission Control'de Lead + paralel Shot Generator + Specialist quality gates
108
+ - Not: Skill içinde copy-paste Lead/Worker/Specialist görev şablonları ve hard quality gate bulunur.
109
+
51
110
  **Süreç:**
52
111
  1. **Planning:** Lead Director senaryoyu analiz eder, `team-plan.json` oluşturur.
53
112
  2. **Casting:** İhtiyaca göre 5'e kadar **Shot Generator** ajanı spawn eder.
54
- 3. **Execution:** Ajanlar shotları (Min 60 kelime + coverage) paralel üretir.
113
+ 3. **Execution:** Ajanlar shotları hard quality gate ile paralel üretir (`ILK>=80`, `SON>=80`, `VIDEO>=120`, `Coverage>=70`).
55
114
  4. **Validation:** 3 Uzman Ajan devreye girer:
56
115
  - `continuity-editor`: Zincirleme (chain) hatalarını yakalar.
57
116
  - `safety-auditor`: Güvenlik ve anonimlik ihlallerini tarar.
@@ -60,15 +119,42 @@ Claude Code içinde:
60
119
 
61
120
  ---
62
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
+
63
150
  ## ⚡ Komut Referansı (Slash Commands)
64
151
 
65
152
  | Komut | Paket | İşlev |
66
153
  |-------|-------|-------|
67
- | `/generate` | Core | Tek ajanla sıralı üretim başlatır. |
68
- | `/generate-multi` | Multi | Multi-ajan takımıyla paralel üretim başlatır. |
154
+ | `/generate` | Core / Multi | Kurulu moda göre tekli veya multi üretim başlatır. |
69
155
  | `/chain` | Her İkisi | Son üretilen shot'ın bitiş karesinden devam eder. |
70
156
  | `/finish` | Her İkisi | Projeyi sonlandırır ve `FINAL-SUMMARY.md` yazar. |
71
- | `/recover` | Multi | Başarısız batch'leri veya kalite kontrol takılanları onarır. |
157
+ | `/recover` | Her İkisi | Başarısız üretimleri veya kalite kontrol takılanlarını onarır. |
72
158
  | `/safety-check` | Her İkisi | Manuel güvenlik taraması yapar. |
73
159
 
74
160
  ---
@@ -79,6 +165,7 @@ Claude Code içinde:
79
165
  |---------|-----------------|----------------------|
80
166
  | **Mimari** | Tek Ajan | Lead + Teammates + Specialists |
81
167
  | **Hız (20 Shot)** | ~60 dk | ~20 dk (Paralel) |
168
+ | **Kalite Gate** | Hard prompt gate | Hard prompt gate + specialist gate |
82
169
  | **Tutarlılık** | Manuel Kontrol | `continuity-editor` Denetimi |
83
170
  | **Güvenlik** | Prompt İçi Filtre | `safety-auditor` Taraması |
84
171
  | **Planlama** | Yok | `team-plan.json` Kontratlı |
@@ -87,9 +174,9 @@ Claude Code içinde:
87
174
  ---
88
175
 
89
176
  ## 🛠 Gereksinimler
90
- - **Node.js:** v18+
177
+ - **Node.js:** v20+
91
178
  - **Claude Code:** `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1` (Sadece Multi için)
92
- - **Editör:** VS Code, Cursor veya Terminal
179
+ - **Editör/Platform:** VS Code, Cursor, Claude Code veya Antigravity
93
180
 
94
181
  ## 📄 Lisans
95
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 result = await configureAgents({
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 for Veo 3.1
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 Configure AI agents in current directory
34
- npx @milenyumai/film-kit init --overwrite Force update existing .agent content files
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";
@@ -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
- if (fileExists && !resolved.overwrite) {
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
  }
@@ -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
  }