@kolbo/mcp 1.96.2 → 1.97.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kolbo/mcp",
3
- "version": "1.96.2",
3
+ "version": "1.97.0",
4
4
  "description": "Kolbo AI MCP Server - Generate images, videos, music, speech, and sound effects from Claude Code",
5
5
  "main": "src/index.js",
6
6
  "bin": {
@@ -1,6 +1,6 @@
1
1
  # AUTO-GENERATED — do not edit
2
2
 
3
- This tree is mirrored from kolbo-code@8d24f6e, the single source of truth.
3
+ This tree is mirrored from kolbo-code@8dfe9b0, the single source of truth.
4
4
  Canonical source: packages/opencode/skills/kolbo/
5
5
  Distribution: .github/workflows/sync-skill-to-plugin.yml
6
6
 
package/skill/SKILL.md CHANGED
@@ -467,6 +467,8 @@ If at this point you still don't know which `references/` file to load, default
467
467
  ## Media selection preferences
468
468
  Honor explicit models, presets, budget and inputs. Choose only eligible catalog candidates with all required capabilities. Use requested presets; otherwise use fitting presets when useful. For video generation, editing and lip-sync, when the user has not explicitly selected an output resolution, use the cheapest supported output resolution from the live catalog and pass it explicitly; do not inherit an expensive provider default. Preserve explicit user-selected resolution/settings. Finish fully, cinematic, professional, final, production and available credits are NOT permission to increase resolution. Never infer output resolution from reference media or export settings. A budget is a ceiling, not a spending target. Do not upscale or regenerate at a higher tier without explicit user authorization. If pricing or supported resolutions cannot be verified, inspect the catalog before dispatch; never invent a tier. Models with fixed output resolution use their native output. Never treat a policy refusal as a technical failure or route around safeguards.
469
469
  Default images and edits: GPT Image 2.5 Flare/Sunburst; medium for value, high for ordinary maximum quality. Reserve xhigh/max for exceptional dense or difficult multilingual text after medium/high prove insufficient; do not automatically spend on retries. Nano Banana 2 is secondary. Seedream 5.0 Pro favors cinematic aesthetics over complex instruction fidelity; Wan 2.7 Pro is another creative alternative. Z Image/P Image for cheap tests. Midjourney for artistic concepts only, never editing. Soul V2 for realistic people/UGC concepts; derive character sheets before registering finished Visual DNA. Mirage Film 2 for environments and cinematic inspiration.
470
+ **Seedance 2.5 Draft:** explicitly pass `model: "seedance-2-5", resolution: "480p-draft"` on the matching video generation tool. Plain `480p` is regular video, never Draft. Use ordinary credits. Finalize a saved draft via `edit_video` `draft_quote` then authorized `draft_enhance`, with its video URL, original project and quoted supported resolution; do not regenerate the prompt. See `references/models/seedance25.md`.
471
+
470
472
  Default video: Seedance 2.5 for general cinematic work (not Hebrew speech). Kling specializes in controlled single-image and first/last-frame shots. Wan 3.0 specializes in motion graphics and animated typography — native Hebrew speech is poor; attached-audio lip-sync works well. MiniMax H3 offers higher resolution and strong attached-audio lip-sync; H3 Max favors speed at lower resolution with the same audio lip-sync strength. **Native Hebrew dialogue:** Gemini Omni Flash 1.1 or Gemini Omni 1 (best). Seedance 2 / 2.5 do not speak Hebrew — use Latin transliteration in quotes on Seedance, or switch to Gemini Omni. Grok Imagine 1.5 and Seedance 2.0 are non-Hebrew alternatives. P Video/Draft for cheap fast tests. Use base, edit or extend variants only with their required inputs.
471
473
  Existing-video lip-sync: Sync 3 for active-speaker handling; PixVerse for cartoons/2D and economical faster work. Portrait lip-sync: Veed Fabric or HeyGen Avatar; P Avatar for budget work. LTX Audio to Video for camera/environment motion with audio-driven performance.
472
474
  Default music: Suno v6. ElevenLabs Music is an alternative, especially for duration-directed scoring. Both accept custom duration requests; validate the selected tool schema and inspect actual output duration.
@@ -15,6 +15,14 @@ Load this file when the user wants a **Seedance 2.5** video (they said "2.5" / "
15
15
 
16
16
  **Use the cheapest supported tier unless the user selected an output resolution.** Resolution is a credit MULTIPLIER, not a flat rate. Relative to 720p: 480p ×0.44, 1080p ×2.25. A 30s pass costs ~540cr at 480p against ~1230cr at 720p and ~2770cr at 1080p. When no output resolution was selected and 480p is the cheapest supported tier, block the film at 480p, get the user's sign-off on staging, performance and timing, then re-run only the approved cut at a higher delivery resolution if the user explicitly authorizes that resolution increase. Approval of the creative cut alone does not authorize a more expensive resolution. If no output resolution was selected, use the cheapest supported tier from the live catalog even for final work; pass it explicitly.
17
17
 
18
+ ## Special Draft mode and full-quality rendering
19
+
20
+ **Draft is a distinct generation mode, not a synonym for low resolution.** When the user requests Seedance 2.5 Draft, use the ordinary generation tool for their inputs (`generate_video`, `generate_video_from_image`, or `generate_elements`) with `model: "seedance-2-5"` and `resolution: "480p-draft"`. `resolution: "480p"` is a regular generation and cannot be presented as Draft. Do not silently substitute regular 480p when Draft was requested. Read the live catalog's `supported_resolutions` and draft capabilities; do not invent draft support for other models.
21
+
22
+ Draft uses ordinary credits, not Unlimited. Keep the user's complete prompt, duration, aspect ratio, references, audio and shot settings. Tell the user which mode was actually submitted; the widget should say **480p Draft** for Draft. Choosing the cheapest pixel size alone does not select Draft.
23
+
24
+ To turn an approved draft into full quality, use its saved output video URL and original project: call `edit_video` with `operation: "draft_quote"`, `video_url`, `project_id`, and the desired supported `resolution`. Read the exact credits, expiry and supported resolutions from that quote. Once the paid finalization is authorized, call `edit_video` with `operation: "draft_enhance"` and the same source/project/resolution. This is a dedicated render of the saved draft, not a new text-to-video generation or generic upscale. Never ask the user for provider task IDs or cache handles. If the draft has expired or cannot be finalized, explain that result before proposing a new paid generation.
25
+
18
26
  ## What's NEW in 2.5 (verified — never hedge)
19
27
 
20
28
  - **Duration 4–30 seconds**, whole seconds. 30s IS supported.
@@ -288,7 +288,7 @@ function resolutionLabel(sc) {
288
288
  var s = sc.settings || {};
289
289
  var resolution = String(s.resolution || '');
290
290
  var model = String(sc.model || '');
291
- var draft = /-draft$/i.test(resolution) || /-draft$/i.test(model) || s.is_draft === true || sc.is_draft === true;
291
+ var draft = s.is_draft === false || sc.is_draft === false ? false : /-draft$/i.test(resolution) || /-draft$/i.test(model) || s.is_draft === true || sc.is_draft === true;
292
292
  var pixels = resolution.replace(/-draft$/i, '');
293
293
  return draft ? (pixels ? pixels + ' Draft' : 'Draft') : resolution;
294
294
  }
@@ -1387,7 +1387,7 @@ function preRefSc(toolName, a) {
1387
1387
  PRE_AUDIO_KEYS.forEach(function (k) { take(a[k], aud); });
1388
1388
  return {
1389
1389
  tool: toolName,
1390
- is_draft: /-draft$/i.test(String(a.model || '')),
1390
+ is_draft: typeof a.draft === 'boolean' ? a.draft : /-draft$/i.test(String(a.model || '')) ? true : undefined,
1391
1391
  kind: kindFromTool(toolName, null),
1392
1392
  count: a.num_images || (Array.isArray(a.prompts) ? a.prompts.length : 1),
1393
1393
  reference_images: img,
@@ -1395,7 +1395,7 @@ function preRefSc(toolName, a) {
1395
1395
  reference_audio: aud,
1396
1396
  settings: {
1397
1397
  duration: a.duration,
1398
- resolution: a.resolution,
1398
+ resolution: a.draft === true ? '480p-draft' : a.draft === false ? String(a.resolution || '').replace(/-draft$/i, '') : a.resolution,
1399
1399
  aspect_ratio: a.aspect_ratio,
1400
1400
  quality: a.quality,
1401
1401
  mode: a.mode,
@@ -1464,7 +1464,8 @@ function liveFromTimedOut(sc) {
1464
1464
  model: sc.model || originArgs.model,
1465
1465
  settings: {
1466
1466
  duration: originArgs.duration,
1467
- resolution: originArgs.resolution,
1467
+ is_draft: originArgs.draft,
1468
+ resolution: originArgs.draft === true ? '480p-draft' : originArgs.draft === false ? String(originArgs.resolution || '').replace(/-draft$/i, '') : originArgs.resolution,
1468
1469
  aspect_ratio: originArgs.aspect_ratio,
1469
1470
  quality: originArgs.quality,
1470
1471
  visual_dna_ids: originArgs.visual_dna_ids,
@@ -1492,7 +1493,8 @@ function completedFromPlain(sc) {
1492
1493
  model: sc.model || originArgs.model,
1493
1494
  settings: {
1494
1495
  duration: sc.duration || originArgs.duration,
1495
- resolution: originArgs.resolution,
1496
+ is_draft: originArgs.draft,
1497
+ resolution: originArgs.draft === true ? '480p-draft' : originArgs.draft === false ? String(originArgs.resolution || '').replace(/-draft$/i, '') : originArgs.resolution,
1496
1498
  aspect_ratio: originArgs.aspect_ratio,
1497
1499
  quality: originArgs.quality
1498
1500
  },