@kolbo/mcp 1.67.0 → 1.68.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 +1 -1
- package/package.json +1 -1
- package/skill/SKILL.md +1 -1
- package/src/tools/generate.js +22 -8
package/README.md
CHANGED
|
@@ -128,7 +128,7 @@ Without the optional skill, the config block alone already exposes every tool
|
|
|
128
128
|
| `generate_lipsync` | Source image/video + audio → lipsynced video (Sync-3 adds active-speaker selection, emotion, model mode, temperature) |
|
|
129
129
|
| `generate_creative_director` | One brief → N coordinated scenes (image or video) |
|
|
130
130
|
| `generate_music` | Text (+ optional lyrics) → song. Style, title, negative tags, length, and Suno fine-controls (style weight, weirdness, audio weight, persona / singing voice) |
|
|
131
|
-
| `generate_speech` | Text + voice → spoken audio. Full expressive/style control:
|
|
131
|
+
| `generate_speech` | Text + voice → spoken audio. Full expressive/style control: Google/Gemini named voice-direction presets (`style_instructions_preset_id`: warm/dramatic/whisper/…) or free-form `style_instructions`, preset styles + emotions (DeepDub / MiniMax / Cartesia), speed, accent/`language`, and per-provider voice settings (ElevenLabs similarity/style, DeepDub accent/variance/tempo, MiniMax pitch/volume/intensity/timbre). Status returns the same fields for reuse. |
|
|
132
132
|
| `generate_sound` | Text → sound effect. Duration, prompt influence, and per-provider controls (Stable Audio guidance, Kie loop/tempo/key, Seed-Audio voice/speed/volume/pitch + reference audio/image) |
|
|
133
133
|
| `generate_3d` | Text or reference images → 3D model (GLB/FBX/OBJ/USDZ) |
|
|
134
134
|
| `transcribe_audio` | Audio/video URL or file → text + SRT subtitles. Language, speaker diarization, audio-event tagging, and SRT formatting (words/line, lines/subtitle, caption stretch) |
|
package/package.json
CHANGED
package/skill/SKILL.md
CHANGED
|
@@ -103,7 +103,7 @@ Each `references/models/*.md` mirrors the matching skill prompt in `kolbo-api/sr
|
|
|
103
103
|
| `generate_first_last_frame` | Keyframe interpolation between two frames. |
|
|
104
104
|
| `generate_lipsync` | Lipsync audio to an image or video face. |
|
|
105
105
|
| `generate_music` | Music generation (Suno + variants). |
|
|
106
|
-
| `generate_speech` | TTS. Use `list_voices` to pick a voice. |
|
|
106
|
+
| `generate_speech` | TTS. Use `list_voices` to pick a voice. Pass provider controls: Google/Gemini `style_instructions_preset_id` (warm/dramatic/whisper/excited/calm/cheerful/serious/storyteller/sad/intimate/british/commercial) or free-form `style_instructions` + `language` as Accent; DeepDub/MiniMax/Cartesia `selected_style`/`emotion`; `speaking_speed`; ElevenLabs `similarity_boost`/`style`; MiniMax `minimax_pitch`/`minimax_vol`/…. |
|
|
107
107
|
| `generate_sound` | Sound effects. |
|
|
108
108
|
| `generate_3d` | 3D models from text / single image / multi-view. Returns GLB/FBX/OBJ/USDZ. |
|
|
109
109
|
|
package/src/tools/generate.js
CHANGED
|
@@ -660,12 +660,20 @@ function registerGenerateTools(server, client, options = {}) {
|
|
|
660
660
|
text: z.string().describe('The text to convert to speech'),
|
|
661
661
|
voice: z.string().optional().describe('Voice ID or display name — MUST come from a `list_voices` result, never constructed. Google/Gemini ids in particular are not validated provider-side: an id that is not in the catalog is silently mapped to another voice (or a default one) and the audio comes back in a voice nobody asked for. Do not pattern-match a locale onto an id you saw for another language. Default: "Rachel"'),
|
|
662
662
|
model: z.string().optional().describe('Model identifier. Use list_models type="text_to_speech" to see options. Default: eleven_v3'),
|
|
663
|
-
language: z.string().optional().describe('Language code (e.g., "en-US", "he-IL", "es-ES"). Default: "en-US"'),
|
|
663
|
+
language: z.string().optional().describe('Language / accent code (e.g., "en-US", "he-IL", "es-ES"). For Google/Gemini voices this is the Accent control (does not translate the text). Default: "en-US"'),
|
|
664
664
|
// ── Expressive style / emotion (provider-specific) ──
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
665
|
+
// Google/Gemini: prefer a named preset id from the Kolbo UI picker; free-form
|
|
666
|
+
// style_instructions is the escape hatch for custom direction.
|
|
667
|
+
style_instructions_preset_id: z.enum([
|
|
668
|
+
'warm', 'dramatic', 'whisper', 'excited', 'calm', 'cheerful',
|
|
669
|
+
'serious', 'storyteller', 'sad', 'intimate', 'british', 'commercial',
|
|
670
|
+
'custom', 'none',
|
|
671
|
+
]).optional().describe('Google/Gemini voices ONLY. Named voice-direction preset from the Kolbo TTS picker (warm, dramatic, whisper, excited, calm, cheerful, serious, storyteller, sad, intimate, british, commercial). Use "custom" with style_instructions for free-form direction, or "none" for default delivery. Preferred over raw style_instructions when a preset fits — the API expands it to the English directive fal receives and stores the label for history/reuse.'),
|
|
672
|
+
style_instructions: z.string().optional().describe('Google/Gemini voices ONLY. Free-form natural-language voice direction, e.g. "whisper conspiratorially, slightly amused" or "excited sports announcer". Max 500 chars. When set without a preset_id, treated as custom. Ignored by other providers.'),
|
|
673
|
+
style_instructions_label: z.string().optional().describe('Google/Gemini voices ONLY. Friendly label stored on the generation for history cards (defaults to the preset name or the custom text). Usually omit — the API fills it.'),
|
|
674
|
+
selected_style: z.string().optional().describe('DeepDub, MiniMax & Cartesia voices. Preset expressive style/emotion. DeepDub: reading, conversational, angry, breathy, panic, amused, sad, whisper, singing, shout, scream, mumbling, excited. MiniMax/Cartesia: happy, sad, angry, fearful, disgusted, surprised, calm, fluent, whisper (or provider emotion names). Ignored by other providers.'),
|
|
675
|
+
emotion: z.string().optional().describe('MiniMax / Cartesia voices. Emotion: happy, sad, angry, fearful, disgusted, surprised, calm, fluent, whisper. Prefer this OR selected_style (both map to the same delivery control).'),
|
|
676
|
+
speaking_speed: z.number().optional().describe('Speech speed 0.5 (slow) – 2.0 (fast); Cartesia clamped 0.6–1.5. Default 1.0. Applies to ElevenLabs / OpenAI / Google / MiniMax / Cartesia / DeepDub (as tempo when tempo omitted).'),
|
|
669
677
|
// ── ElevenLabs voice settings ──
|
|
670
678
|
similarity_boost: z.number().optional().describe('ElevenLabs voice similarity, 0–1. Default 0.75. Higher hews closer to the original voice.'),
|
|
671
679
|
style: z.number().optional().describe('ElevenLabs style exaggeration, 0–1. Default 0.5. Higher = more expressive/dramatic.'),
|
|
@@ -689,7 +697,7 @@ function registerGenerateTools(server, client, options = {}) {
|
|
|
689
697
|
project_id: projectIdField,
|
|
690
698
|
session_id: sessionIdField
|
|
691
699
|
},
|
|
692
|
-
async ({ text, voice, model, language, style_instructions, selected_style, emotion, speaking_speed, similarity_boost, style, use_speaker_boost, variance, tempo, promptBoost, seed, accentControl, voiceTitle, minimax_pitch, minimax_vol, minimax_intensity, minimax_timbre, project_id, session_id }) => {
|
|
700
|
+
async ({ text, voice, model, language, style_instructions_preset_id, style_instructions, style_instructions_label, selected_style, emotion, speaking_speed, similarity_boost, style, use_speaker_boost, variance, tempo, promptBoost, seed, accentControl, voiceTitle, minimax_pitch, minimax_vol, minimax_intensity, minimax_timbre, project_id, session_id }) => {
|
|
693
701
|
model = await canonicalModelId(client, model, 'text_to_speech'); // lenient id resolution ("z-image" → "z-image/turbo")
|
|
694
702
|
// Resolve the requested voice against the REAL catalog (cached) so the card
|
|
695
703
|
// can show its display name + portrait instead of a raw id, and so an id
|
|
@@ -703,7 +711,8 @@ function registerGenerateTools(server, client, options = {}) {
|
|
|
703
711
|
: null;
|
|
704
712
|
const gen = await client.post('/v1/generate/speech', {
|
|
705
713
|
text, voice, model, language,
|
|
706
|
-
|
|
714
|
+
style_instructions_preset_id, style_instructions, style_instructions_label,
|
|
715
|
+
selected_style, emotion, speaking_speed,
|
|
707
716
|
similarity_boost, style, use_speaker_boost,
|
|
708
717
|
variance, tempo, promptBoost, seed, accentControl, voiceTitle,
|
|
709
718
|
minimax_pitch, minimax_vol, minimax_intensity, minimax_timbre,
|
|
@@ -713,7 +722,12 @@ function registerGenerateTools(server, client, options = {}) {
|
|
|
713
722
|
if (ui()) return uiGenerating({
|
|
714
723
|
tool: 'generate_speech', kind: 'audio', gen, client, model, prompt: text,
|
|
715
724
|
voice: voiceRecord,
|
|
716
|
-
settings: {
|
|
725
|
+
settings: {
|
|
726
|
+
voice: voice || 'Rachel',
|
|
727
|
+
style: selected_style || emotion || style_instructions_preset_id || style_instructions,
|
|
728
|
+
speaking_speed,
|
|
729
|
+
language,
|
|
730
|
+
},
|
|
717
731
|
warning: unknownVoice
|
|
718
732
|
});
|
|
719
733
|
|