Continuity
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| SD_SERVER | No | URL of the stable-diffusion.cpp sd-server for image generation. Example: http://127.0.0.1:9020. If unset, expects a local engine. | |
| ASR_SERVER | No | URL of an OpenAI-shaped ASR server. Defaults to AUDIO_SERVER. | |
| ASR_API_KEY | No | API key for the ASR server, if required. | |
| AUDIO_SERVER | No | URL of the audio.cpp audiocpp_server for TTS/ASR/music. Example: http://127.0.0.1:9021 | |
| ASR_SEND_RATE | No | Send audio to the ASR backend at this sample rate. Set to 16000 for backends that reject 22.05/24 kH z (e.g. vLLM). | |
| IMAGE_API_KEY | No | API key for the image API, if required. | |
| IMAGE_API_SIZES | No | Comma-separated list of sises supported by the image API provider, if using IMAGE_API_SERVER. | |
| IMAGE_API_SERVER | No | URL of an OpenAI-shaped image API. Overrides SD_SERVER when set. | |
| CONTINUITY_HTTP_HOST | No | Host to bind when using streamable-http transport. | 127.0.0.1 |
| CONTINUITY_HTTP_PATH | No | Path to serve when using streamable-http transport. | /mcp |
| CONTINUITY_HTTP_PORT | No | Port to bind when using streamable-http transport. | 9030 |
| CONTINUITY_STATE_DIR | No | Directory where generated assets and state are stored. Example: ~/.continuity | |
| CONTINUITY_TRANSPORT | No | Transport protocol: stdio, sse, or streamable-http. Can also be set via --transport flag. | stdio |
| CONTINUITY_INLINE_IMAGES | No | Set to 0 to disable inline image content in tool results. Default is 1. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| create_actorA | 给一个角色铸声(定妆), 之后用 actor_tts 让他说任意台词都保持同一个音色。 为什么要有这一步: 直接用文字描述合成语音, 那段描述只圈定一个大致的音色区间, 区间内每句台词各漂各的 —— 实测同 voice 同 seed 四句台词基频极差 125 Hz, 关掉采样走贪心反而涨到 242 Hz(音色是文本的函数, 不是采样随机性, 锁 seed 或 temperature 都锁不住)。本工具先用 voice 描述生成一段参考音, 之后所有台词 改由克隆模型照着这段参考音说, 音色与台词内容无关。实测极差降到 5 Hz。 重要: 铸完请先听那段试音, 确认是不是你要的那个人。铸砸了会把整个角色锁死在 错的音色上, 而且它之后每一句都错得很一致。不满意就 force=true 重铸。 参数: name: 角色名(字母/数字/下划线/连字符/中文, 1~40 字), 之后 actor_tts 用它指代 voice: 声音的自然语言描述, 英文效果最佳。写年龄/性别/音色/语速/情绪, 例如 "An elderly Chinese man, gravelly chest voice, commanding" sample_text: 铸声用的台词(可选)。默认用一段覆盖面较广的中文 seed: 随机种子(可选) force: 覆盖已有角色。会让该角色之前所有台词的音色对不上, 慎用 返回: 试音片段的本机路径 —— 先听再用 |
| import_actorA | 用一段现成的录音铸声 —— 声音是别处做的(真人录音 / 其它 TTS)也照样能保持一致。 和 create_actor 得到的东西完全一样, 只是参考音由你提供而不是我们生成。之后 actor_tts 让他说任意台词, 音色都来自这段录音。 参数: name: 角色名, 之后 actor_tts 用它指代 audio_path: 录音的本机路径。16-bit PCM WAV, 2~30 秒, 单人清唱式的干净人声 最好(没有背景音乐和混响)。采样率/声道数会自动转成 24 kHz 单声道。 其它格式先转: ffmpeg -i 原文件 -acodec pcm_s16le -ac 1 -ar 24000 ref.wav transcript: 那段录音里念的是什么。不给就自动听写一遍填上, 但那是机器听的, 会在返回里标出来让你核 —— 克隆模型拿它对齐音频和文字, 错一个词 音色就会明显不对。手上有准确的文字就直接给, 别让它猜。 force: 覆盖已有角色 注意: 你有权使用这段声音才导入它。克隆一个真人的嗓子在很多地方是需要本人同意的。 |
| actor_ttsA | 让某个已铸声的角色说一句台词, 音色与他之前每一句都一致。 做游戏 NPC 对白用这个, 不要用 generate_speech —— 后者每句音色会漂。 角色不存在会告诉你先去 create_actor。 参数: actor: 角色名(create_actor 时定的) text: 台词, 上限 200 字(约 45 秒), 超出截断 speaking_rate: 语速倍率(可选) seed: 随机种子(可选) 返回: 24 kHz 单声道 WAV 的本机路径 |
| list_actorsB | 列出已铸声的角色(名字 + 当初的声音描述 + 铸声时间)。 |
| delete_actorB | 删掉一个已铸声的角色。不可逆: 参考音不可复现, 重铸出来是另一个人。 |
| transcribeA | 听一段录音, 返回里面说的文字。 两个用处, 都是"核对"而不是"生产字幕":
参数: audio_path: 录音的本机路径, 只收 WAV language: 语种提示 (可选, 如 zh / en)。不给就让模型自己判 —— 它本来就带语种识别, 只有在把方言听成另一种语言时才需要指定。 |
| generate_speechA | 一次性旁白 —— 不保证跨句音色一致, 会重复出现的角色请用 create_actor + actor_tts。 适合系统提示音、一次性播报这类"说完就没了"的语音。任何会说第二句的角色都不该 用这个: 同一段 voice 描述的两句台词不是同一个人。 参数: text: 要念的台词, 上限 200 字 voice: 声音的自然语言描述(英文效果最佳), 不传则用中性旁白嗓 seed / speaking_rate: 可选 返回: 24 kHz 单声道 WAV 的本机路径 |
| generate_musicA | 生成一段背景音乐(Stable Audio), 返回 WAV 的本机路径。 参数: prompt: 音乐描述(风格/乐器/情绪, 英文效果最佳) seed: 随机种子(可选) duration: 秒数, 上限 120 num_inference_steps: 推理步数(默认 100, 越多越慢) 注意: 出来的是一段有头有尾的音乐, 没有做无缝循环点。要循环播放的 BGM 请自己在编辑器里找循环点, 或把它当作一次性过场音乐。 |
| create_characterA | 给一个人物定妆(生成并存下参考图), 之后 subject_image 出的每张图长相都一致。 为什么要有这一步: generate_image 每次给的是"长得不一样的人"。同一个角色的头像 / 战斗立绘 / 地图小人, 直接用文字描述生成出来是三个人。 appearance 分两部分, 分清楚很重要: (1) 身份 —— 必须写死, 漏掉的每一项模型都会自己编, 而且每张编得不一样:
(2) 默认服装 —— 只是个基线, 不是身份的一部分。照样写进 appearance, 但 subject_image 的 scene 里写新衣服就能换掉(实测: 定妆穿布袍, scene 写 "wearing heavy red armor" 能换成甲胄而脸不变)。所以一个角色不需要按套装 定妆很多次。 不要写场景、动作、表情 —— 那些留给 subject_image 的 scene。 定完先看返回的定妆图确认是不是你要的人; 定砸了会把整个角色锁死在错的长相上, 不满意就 force=true 重定。 |
| create_animalA | 给一只动物/坐骑/灵兽定妆, 之后每张图它都是同一只。 appearance 里必须写死这几样:
定完先看定妆图, 不满意 force=true 重定。 |
| create_objectC | 给一件道具/物件定妆, 之后每张图它都长一个样, 换角度也不变。 物件最容易漂的是几何, 不是材质配色 —— 实测一个宝箱, 材质配色五金件都对得上, 盖子却一会儿是平的方的、一会儿是拱的圆的, 因为原始描述里压根没写盖子什么形状。 appearance 里必须写死这几样:
定完先看定妆图, 不满意 force=true 重定。 |
| import_subjectA | 用一张现成的图定妆 —— 角色/物件是别处画的也照样能保持一致。 和 create_character / create_object 得到的东西完全一样, 只是定妆图由你提供。 之后 subject_image 让它出任意场景图, 外观都来自这张图。 参数: name: 名字, 之后 subject_image 用它指代 image_path: 参考图的本机路径。要求和我们自己生成的定妆图一样: 单个主体、 正面或四分之三视角、背景干净、看得全。一张有场景有动作的插画 当参考图, 场景会跟着一起被复制过去。 appearance: 这是什么的文字描述 —— 必填, 它会被拼进之后每一张场景图的提示词。 只给参考图而不给描述, 模型对"这是什么"没有着落, 外观照样会漂。 写法同 create_character / create_animal / create_object 的要求。 kind: character / animal / object force: 覆盖已有的 大图会缩到 1024 以内; 带透明通道的图会转成 RGB(透明区交给引擎会变成黑块)。 |
| subject_imageA | 让某个已定妆的角色或物件出一张新图, 外观与它之前每一张都一致。 做游戏素材用这个, 不要用 generate_image —— 后者每张长相会变。 subject 不存在会告诉你先去 create_character / create_animal / create_object。 参数: subject: 名字(定妆时定的) scene: 这张图里它在干什么 / 在哪 / 什么角度 —— 只写场景动作视角, 身份由定妆图决定。例如 "opened, seen from behind, on a stone floor"。 人物/动物还可以在这里换装: "wearing heavy red armor" 会换掉定妆图 里那身衣服而保住脸。 width/height: 上限 1024 seed: 随机种子(可选) num_inference_steps: 采样步数(可选, 不传用引擎默认)。多了更精细也更慢 guidance_scale: 提示词贴合度(可选, 不传用引擎默认)。高了更贴提示词但更容易糊 返回: 本机路径 |
| list_subjectsA | 列出已定妆的角色、动物和物件。 |
| delete_subjectA | 删掉一个已定妆的角色或物件。不可逆: 定妆图不可复现, 重定出来是另一个。 |
| generate_imageA | 生成一张一次性图片 —— 不保证与任何其它图一致。 会重复出现的角色/物件请先 create_character / create_object 定妆, 再用 subject_image 出图。这个工具适合背景板、UI 底图这类只出现一次的东西。 参数: prompt: 图片描述(英文效果最佳) width/height: 上限 1024 seed: 随机种子(可选) reference_image_path: 参考图的本机路径(可选), 传了就是图生图 num_inference_steps: 采样步数(可选, 不传用引擎默认)。多了更精细也更慢 guidance_scale: 提示词贴合度(可选, 不传用引擎默认)。高了更贴提示词但更容易糊 返回: 本机路径 |
| remove_bgA | 抠掉图片背景, 输出真正带 alpha 通道的 RGBA PNG。 生图模型画不出 alpha: 你让它画"透明背景", 它是把 PS 那种灰白棋盘格当成不透明 像素画出来的。做游戏精灵图必须用本工具把它转成真的 RGBA。 参数: image_path: 图片的本机路径(其它工具返回的路径可直接用) image_base64: 或者直接给 base64 mode: auto (默认, 按结构证据判断是不是棋盘格: 恰好两级灰度 + 周期方格; 不是就走 通用抠图) / checker (强制只抠棋盘格) / rembg (强制通用显著物体抠图, CPU) quality: best (birefnet-general-lite, ~7s, 峰值内存 ~6.8 GB) / fast (u2netp, ~0.6s, 峰值 ~1.3 GB)。只影响 rembg 分支。 不传则用安装时按本机内存定下的默认值。 返回: RGBA PNG 的本机路径, 附带实际走的分支与透明像素占比。抠出来明显不对 (几乎全透明 / 几乎没抠掉 / 碎成一堆小块 / 主体被啃出洞) 时会附一行 ⚠️ 警告 —— 那种结果别直接用。 |
| slice_sheetA | 把排成网格的 sprite sheet 切成单帧 PNG。 让生图模型画"4 帧动画"时它会摆成 2x2 网格而不是 4 张图, 用本工具切开。 参数: image_path / image_base64: 同其它图片工具 rows, cols: 网格行列数(二者都给) frame_width, frame_height: 单帧像素尺寸(与 rows+cols 二选一) trim: 是否把每帧裁到非透明/非背景的外接框(默认 True) 返回: 各帧 PNG 的本机路径 |
| gen_sfxA | 合成一枚 sfxr/jsfxr 风格的游戏音效(纯程序化, 不用模型), 返回 WAV 路径。 不要用 generate_music 做音效: 那是扩散模型, 出来的是几十秒的宽带糊音。游戏音效 是 10~200ms 的瞬态, 要精确、即时、可复现 —— 本工具毫秒级出结果, 同 seed 逐字节可复现, 而且完全不占显存。 参数: preset: jump / coin / hit / explosion / powerup / laser / select / hurt seed: 随机种子。给了就在 preset 周围抖动参数(不是抖采样点), 同 seed 结果完全相同; 不给则严格使用 preset 的原始参数。 base_freq: 覆盖基频 Hz (noise 波形下是采样保持的刷新率) wave: 覆盖波形 square / saw / sine / triangle / noise overrides: 覆盖任意合成参数的字典, 例如 {"freq_slide": -3.0, "release": 0.4, "lpf": 0.5, "duty": 0.25} 可覆盖的完整字段名和默认值: 调 sfx_presets() 返回: 44.1kHz 16bit 单声道 WAV 的本机路径。结构化返回里的 params 是这一枚音效 用到的全部合成参数 —— 拿它加一点改动再调一次, 就能做出一整组同族音效。 |
| sfx_presetsA | 列出 gen_sfx 能用的 preset, 以及 overrides 里可以覆盖的全部字段和它们的默认值。 先看这里再去 overrides: 字段名写错了 gen_sfx 会直接失败, 而"有哪些字段"是猜不出来的 (占空比扫描叫 duty_sweep 还是 duty_slide, 低通叫 lpf 还是 cutoff)。 返回: preset 名单 + 参数默认值表 + 采样率。 |
| continuity_statusA | 本插件当前的状态: 两个引擎在不在、哪些能力开着、资产存在哪。 某个工具"不存在"时先看这里 —— 显存不够的机器上生图那半是被安装脚本关掉的, 不是坏了。 |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 21 tools
Each tool has a clearly distinct purpose, and the descriptions explicitly draw the boundaries between the easily-confused pairs: create_actor+actor_tts (consistent voice) vs generate_speech (one-off), and create_character/subject_image (consistent appearance) vs generate_image (one-off). The casting tools split cleanly by subject kind (character/animal/object) and by source (generate vs import), leaving no meaningful overlap.
Most names follow a clean verb_noun pattern (create_actor, import_actor, list_actors, delete_actor, create_character, generate_image, remove_bg, slice_sheet). A minority deviate with noun_verb or bare-noun forms (actor_tts, subject_image, sfx_presets, continuity_status) and one abbreviation (gen_sfx vs generate_speech/generate_music/generate_image), but the scheme remains readable and predictable overall.
21 tools is on the heavier side, but the server spans several genuinely separate sub-domains (voice casting, image casting, image post-processing, music, procedural SFX, status), so the count is justified rather than padded. Each tool maps to a real capability with no obvious filler.
Coverage is strong: full lifecycle for actors and subjects (create/import/list/delete), plus generation, transcription, background removal, sprite slicing, music, SFX, and a diagnostic status tool. The only minor gap is no in-place update/edit for an actor or subject (you must delete and re-cast), which agents can work around.