@kolbo/mcp 1.70.0 → 1.70.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/README.md +7 -7
  2. package/bin/kolbo-mcp.js +14 -5
  3. package/package.json +3 -2
  4. package/skill/GENERATED.md +4 -5
  5. package/skill/SKILL.md +11 -18
  6. package/skill/VERSION +1 -1
  7. package/skill/assets/filmmaking/continuity-ledger.template.json +27 -0
  8. package/skill/assets/filmmaking/generation-log.template.csv +2 -0
  9. package/skill/assets/filmmaking/production-bible.template.json +97 -0
  10. package/skill/assets/filmmaking/scene-card.template.json +40 -0
  11. package/skill/assets/filmmaking/shot-card.template.json +72 -0
  12. package/skill/references/filmmaking/acting-direction.md +131 -0
  13. package/skill/references/filmmaking/asset-preproduction.md +97 -0
  14. package/skill/references/filmmaking/audio-dialogue-music.md +111 -0
  15. package/skill/references/filmmaking/blocking-continuity.md +125 -0
  16. package/skill/references/filmmaking/cinematography.md +101 -0
  17. package/skill/references/filmmaking/physics-action.md +93 -0
  18. package/skill/references/filmmaking/production-bible.md +108 -0
  19. package/skill/references/filmmaking/prompt-contracts.md +140 -0
  20. package/skill/references/filmmaking/routing.md +105 -0
  21. package/skill/references/filmmaking/scene-engine.md +95 -0
  22. package/skill/references/filmmaking/validation.md +109 -0
  23. package/skill/references/filmmaking/workflows.md +80 -0
  24. package/skill/references/models/gpt-image.md +1 -1
  25. package/skill/references/models/nano-banana.md +1 -1
  26. package/skill/references/models/prompt-copilot.md +0 -1
  27. package/skill/references/models/seedance.md +24 -44
  28. package/skill/references/models/seedance25.md +3 -3
  29. package/skill/references/workflows/filmmaking.md +168 -0
  30. package/skill/scripts/filmmaking/lint_prompt.py +249 -0
  31. package/skill/scripts/filmmaking/validate_film_package.py +435 -0
  32. package/src/apps/widgets/generation.js +7 -2
  33. package/src/install.js +62 -3
  34. package/src/tools/_shared.js +11 -3
  35. package/src/tools/generate.js +22 -16
@@ -178,7 +178,7 @@ function registerGenerateTools(server, client, options = {}) {
178
178
  generation_ids: batch.ids, prompts: batch.ok.map((o) => o.prompt),
179
179
  failed_submissions: batch.failed,
180
180
  status_args: { generation_ids: batch.ids, wait: true },
181
- reference_image: reference_images?.[0]
181
+ reference_images
182
182
  });
183
183
  return pollBatch(client, batch, { interval: (batch.ok[0].gen.poll_interval_hint || 3) * 1000, timeout: 240000 });
184
184
  }
@@ -188,7 +188,7 @@ function registerGenerateTools(server, client, options = {}) {
188
188
  if (ui()) return uiGenerating({
189
189
  tool: 'generate_image', kind: 'image', gen, client, model, prompt,
190
190
  count: num_images, settings: imageSettings(shared),
191
- reference_image: reference_images?.[0]
191
+ reference_images
192
192
  });
193
193
 
194
194
  const poll = await pollOrTimedOut(client, gen.generation_id, {
@@ -247,7 +247,7 @@ function registerGenerateTools(server, client, options = {}) {
247
247
  tool: 'generate_image_edit', kind: 'image', gen, client, model, prompt,
248
248
  count: num_images,
249
249
  settings: imageSettings({ resolution, aspect_ratio, enhance_prompt, enable_web_search, visual_dna_ids, moodboard_id, preset_id, cinematic }),
250
- reference_image: source_images?.[0]
250
+ reference_images: source_images
251
251
  });
252
252
 
253
253
  // Multi-source compositing or DNA-anchored edits routinely exceed 120s
@@ -309,7 +309,7 @@ function registerGenerateTools(server, client, options = {}) {
309
309
  tool: 'generate_creative_director', kind: 'scenes', gen, client, model, prompt,
310
310
  count: scene_count || 4,
311
311
  settings: { duration, resolution, aspect_ratio, mode: workflow_type || 'image' },
312
- reference_image: reference_images?.[0],
312
+ reference_images,
313
313
  poll_tool: 'get_creative_director_status',
314
314
  status_args: { generation_id: gen.generation_id, wait: true }
315
315
  });
@@ -466,7 +466,7 @@ function registerGenerateTools(server, client, options = {}) {
466
466
  generation_ids: batch.ids, prompts: batch.ok.map((o) => o.prompt),
467
467
  failed_submissions: batch.failed,
468
468
  status_args: { generation_ids: batch.ids, wait: true },
469
- reference_image: reference_images?.[0]
469
+ reference_images
470
470
  });
471
471
  return pollBatch(client, batch, { interval: (batch.ok[0].gen.poll_interval_hint || 8) * 1000, timeout: 900000 });
472
472
  }
@@ -476,7 +476,7 @@ function registerGenerateTools(server, client, options = {}) {
476
476
  if (ui()) return uiGenerating({
477
477
  tool: 'generate_video', kind: 'video', gen, client, model, prompt,
478
478
  settings: { duration, resolution, aspect_ratio },
479
- reference_image: reference_images?.[0]
479
+ reference_images
480
480
  });
481
481
 
482
482
  // 15 min — Kling O3 4K, Veo 3.1 at higher durations/resolutions, Hailuo 2.3,
@@ -550,7 +550,7 @@ function registerGenerateTools(server, client, options = {}) {
550
550
  generation_ids: batch.ids, prompts: batch.ok.map((o) => o.prompt),
551
551
  failed_submissions: batch.failed,
552
552
  status_args: { generation_ids: batch.ids, wait: true },
553
- reference_image: items[0].image_url
553
+ reference_images: items.map((item) => item.image_url)
554
554
  });
555
555
  return pollBatch(client, batch, { interval: (batch.ok[0].gen.poll_interval_hint || 8) * 1000, timeout: 900000 });
556
556
  }
@@ -560,7 +560,7 @@ function registerGenerateTools(server, client, options = {}) {
560
560
  if (ui()) return uiGenerating({
561
561
  tool: 'generate_video_from_image', kind: 'video', gen, client, model, prompt,
562
562
  settings: { duration, resolution, aspect_ratio },
563
- reference_image: image_url
563
+ reference_images: [image_url]
564
564
  });
565
565
 
566
566
  // 15 min — same real-world generation times as generate_video (Kling O3 4K,
@@ -791,7 +791,8 @@ function registerGenerateTools(server, client, options = {}) {
791
791
 
792
792
  if (ui()) return uiGenerating({
793
793
  tool: 'generate_sound', kind: 'audio', gen, client, model, prompt,
794
- settings: { duration }
794
+ settings: { duration },
795
+ reference_images: seed_reference_image_url ? [seed_reference_image_url] : []
795
796
  });
796
797
 
797
798
  const poll = await pollOrTimedOut(client, gen.generation_id, {
@@ -1050,7 +1051,11 @@ function registerGenerateTools(server, client, options = {}) {
1050
1051
  if (ui()) return uiGenerating({
1051
1052
  tool: 'generate_elements', kind: 'video', gen: startResponse, client, model, prompt,
1052
1053
  settings: { duration, resolution, aspect_ratio },
1053
- reference_image: reference_images?.[0]
1054
+ reference_images: [
1055
+ ...(reference_images || []),
1056
+ ...(keyframes || []).map((keyframe) => keyframe.image_url),
1057
+ ...(files || []).filter((source) => /^https?:\/\//i.test(source))
1058
+ ]
1054
1059
  });
1055
1060
 
1056
1061
  const poll = await pollOrTimedOut(client, startResponse.generation_id, {
@@ -1134,7 +1139,8 @@ function registerGenerateTools(server, client, options = {}) {
1134
1139
  if (ui()) return uiGenerating({
1135
1140
  tool: 'generate_first_last_frame', kind: 'video', gen: startResponse, client, model, prompt,
1136
1141
  settings: { duration, resolution, aspect_ratio },
1137
- reference_image: first_frame_url || undefined
1142
+ reference_images: [first_frame_url || first_frame, last_frame_url || last_frame]
1143
+ .filter((source) => /^https?:\/\//i.test(source || ''))
1138
1144
  });
1139
1145
 
1140
1146
  const poll = await pollOrTimedOut(client, startResponse.generation_id, {
@@ -1249,7 +1255,7 @@ function registerGenerateTools(server, client, options = {}) {
1249
1255
  if (ui()) return uiGenerating({
1250
1256
  tool: 'generate_lipsync', kind: 'video', gen: startResponse, client, model,
1251
1257
  prompt: text_prompt, settings: { mode: 'lipsync' },
1252
- reference_image: sourceIsUrl && !/\.(mp4|mov|webm|mkv|avi|m4v)(\?|$)/i.test(source) ? source : undefined,
1258
+ reference_images: sourceIsUrl && !/\.(mp4|mov|webm|mkv|avi|m4v)(\?|$)/i.test(source) ? [source] : [],
1253
1259
  });
1254
1260
 
1255
1261
  const poll = await pollOrTimedOut(client, startResponse.generation_id, {
@@ -1354,7 +1360,7 @@ function registerGenerateTools(server, client, options = {}) {
1354
1360
  tool: 'generate_video_from_video', kind: 'video', gen: startResponse, client, model,
1355
1361
  prompt: prompt || (preset ? `Subtitles preset: ${preset}` : undefined),
1356
1362
  settings: { duration, resolution, aspect_ratio, mode: preset ? 'subtitles' : 'restyle' },
1357
- reference_image: reference_images?.[0]
1363
+ reference_images: [...(reference_images || []), ...(elements || [])]
1358
1364
  });
1359
1365
 
1360
1366
  const poll = await pollOrTimedOut(client, startResponse.generation_id, {
@@ -1497,7 +1503,7 @@ function registerGenerateTools(server, client, options = {}) {
1497
1503
  if (ui()) return uiGenerating({
1498
1504
  tool: 'generate_3d', kind: '3d', gen: startResponse, client, model, prompt,
1499
1505
  settings: { mode: mode || (reference_images?.length > 1 ? 'multi' : reference_images?.length === 1 ? 'single' : 'text') },
1500
- reference_image: reference_images?.[0]
1506
+ reference_images
1501
1507
  });
1502
1508
 
1503
1509
  const poll = await pollOrTimedOut(client, startResponse.generation_id, {
@@ -1643,7 +1649,7 @@ function registerGenerateTools(server, client, options = {}) {
1643
1649
  tool: 'edit_image', kind: 'image', gen, client, model,
1644
1650
  prompt: prompt || operation,
1645
1651
  settings: { mode: operation, aspect_ratio, scale, resolution },
1646
- reference_image: image_url
1652
+ reference_images: [image_url, mask_image_url, ...(additional_images || [])].filter(Boolean)
1647
1653
  });
1648
1654
 
1649
1655
  const poll = await pollOrTimedOut(client, gen.generation_id, {
@@ -1808,7 +1814,7 @@ function registerGenerateTools(server, client, options = {}) {
1808
1814
  tool: 'edit_video', kind: 'video', gen, client, model,
1809
1815
  prompt: prompt || operation,
1810
1816
  settings: { mode: operation, duration, aspect_ratio, resolution },
1811
- reference_image: image_url
1817
+ reference_images: image_url ? [image_url] : []
1812
1818
  });
1813
1819
 
1814
1820
  const poll = await pollOrTimedOut(client, gen.generation_id, {