@remixmate/cli 0.9.15 → 0.9.17

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 (48) hide show
  1. package/README.md +1 -1
  2. package/README.zh-CN.md +1 -1
  3. package/dist/capabilities.d.ts +5 -1
  4. package/dist/cli.js +12 -0
  5. package/dist/doctor.js +21 -0
  6. package/dist/manifest.json +13 -13
  7. package/dist/project/commands.d.ts +19 -0
  8. package/dist/project/commands.js +156 -0
  9. package/dist/project/host.d.ts +77 -0
  10. package/dist/project/host.js +106 -0
  11. package/dist/project/resolve.d.ts +43 -0
  12. package/dist/project/resolve.js +65 -0
  13. package/dist/project/store.d.ts +31 -0
  14. package/dist/project/store.js +97 -0
  15. package/dist/project/take.d.ts +46 -0
  16. package/dist/project/take.js +102 -0
  17. package/dist/registry.d.ts +4 -0
  18. package/dist/registry.js +2 -0
  19. package/dist/runner.js +59 -0
  20. package/dist/skill-schema.d.ts +14 -0
  21. package/dist/skill-schema.js +15 -0
  22. package/package.json +1 -1
  23. package/skills/export-jianying/version.json +1 -1
  24. package/skills/gen-digital-human/skill.json +78 -11
  25. package/skills/gen-digital-human/version.json +1 -1
  26. package/skills/gen-image/SKILL.md +40 -18
  27. package/skills/gen-image/skill.json +71 -12
  28. package/skills/gen-image/version.json +1 -1
  29. package/skills/gen-script/SKILL.md +17 -21
  30. package/skills/gen-script/version.json +1 -1
  31. package/skills/gen-video/SKILL.md +5 -3
  32. package/skills/gen-video/skill.json +77 -13
  33. package/skills/gen-video/version.json +1 -1
  34. package/skills/gen-voice/SKILL.md +1 -1
  35. package/skills/gen-voice/skill.json +34 -8
  36. package/skills/gen-voice/version.json +1 -1
  37. package/skills/prepare-video-assets/skill.json +43 -9
  38. package/skills/prepare-video-assets/version.json +1 -1
  39. package/skills/render-video/skill.json +43 -8
  40. package/skills/render-video/version.json +1 -1
  41. package/skills/template-registry/version.json +1 -1
  42. package/skills/video-parser/skill.json +29 -7
  43. package/skills/video-parser/version.json +1 -1
  44. package/skills/web-record/SKILL.md +131 -133
  45. package/skills/web-record/skill.json +137 -33
  46. package/skills/web-screenshot/SKILL.md +93 -96
  47. package/skills/web-screenshot/skill.json +66 -16
  48. package/skills/web-screenshot/version.json +1 -1
@@ -4,22 +4,81 @@
4
4
  "tier": "atomic",
5
5
  "category": "asset",
6
6
  "title": "AI Image Generation",
7
- "description": "AI image generation: produce an image from a text prompt. Supports Seedream and Gemini models, plus image-to-image with reference images.",
7
+ "description": "AI image generation: produce an image from a text prompt. Supports the Seedream family (including a high-fidelity 'pro' variant) and Gemini, plus image-to-image with reference images.",
8
8
  "auth": "required",
9
- "envVars": ["PRIV_TOKEN", "MM_API_BASE_URL", "AGENT_NAME", "MM_IMAGE_MODEL"],
10
- "entry": { "type": "http", "handler": "gen-image" },
9
+ "joinsTake": true,
10
+ "envVars": [
11
+ "PRIV_TOKEN",
12
+ "MM_API_BASE_URL",
13
+ "AGENT_NAME",
14
+ "MM_IMAGE_MODEL"
15
+ ],
16
+ "entry": {
17
+ "type": "http",
18
+ "handler": "gen-image"
19
+ },
11
20
  "parameters": {
12
21
  "type": "object",
13
22
  "properties": {
14
- "prompt": { "type": "string", "description": "Image description (required)" },
15
- "model": { "type": "string", "description": "Model id" },
16
- "size": { "type": "string", "description": "Aspect ratio or WxH, e.g. 1:1, 9:16" },
17
- "resolution": { "type": "string", "enum": ["1K", "2K", "4K"], "description": "Output resolution (Gemini only)" },
18
- "n": { "type": "number", "description": "Number of images, 1-4" },
19
- "reference": { "type": "string", "description": "Reference image path or URL" },
20
- "negative_prompt": { "type": "string", "description": "Negative prompt content to avoid" },
21
- "json_output": { "type": "boolean", "description": "Emit a JSON result ({ urls: [...] }) instead of human-readable output" }
23
+ "prompt": {
24
+ "type": "string",
25
+ "description": "Image description (required)"
26
+ },
27
+ "model": {
28
+ "type": "string",
29
+ "description": "Model: 'seedream' (default), 'seedream-pro' (high fidelity, precise placement and on-image text; costs more per image), or 'gemini'"
30
+ },
31
+ "size": {
32
+ "type": "string",
33
+ "description": "Aspect ratio or WxH, e.g. 1:1, 9:16"
34
+ },
35
+ "resolution": {
36
+ "type": "string",
37
+ "enum": [
38
+ "1K",
39
+ "2K",
40
+ "4K"
41
+ ],
42
+ "description": "Output resolution (Gemini only)"
43
+ },
44
+ "n": {
45
+ "type": "number",
46
+ "description": "Number of images, 1-4"
47
+ },
48
+ "reference": {
49
+ "type": "array",
50
+ "items": {
51
+ "type": "string"
52
+ },
53
+ "description": "Reference images for image-to-image: local file path, https URL, or data URI. Pass multiple to blend several references (seedream: max 14, seedream-pro: max 10, gemini: max 4 — over the limit fails before spending credits)."
54
+ },
55
+ "image_strength": {
56
+ "type": "number",
57
+ "description": "How strongly the reference images influence the result, 0-1 (Seedream family only). Omit to use the backend default."
58
+ },
59
+ "guidance_scale": {
60
+ "type": "number",
61
+ "description": "Prompt-adherence strength, where supported. Omit to use the backend default."
62
+ },
63
+ "negative_prompt": {
64
+ "type": "string",
65
+ "description": "Negative prompt — content to avoid"
66
+ },
67
+ "seed": {
68
+ "type": "number",
69
+ "description": "Random seed. Pass the same seed with the same prompt and model to make a run reproducible."
70
+ },
71
+ "watermark": {
72
+ "type": "boolean",
73
+ "description": "Add a watermark to the output. Only true has an effect; there is no opt-out override of the backend default."
74
+ },
75
+ "json_output": {
76
+ "type": "boolean",
77
+ "description": "Emit a JSON result ({ urls: [...] }) instead of human-readable output"
78
+ }
22
79
  },
23
- "required": ["prompt"]
80
+ "required": [
81
+ "prompt"
82
+ ]
24
83
  }
25
84
  }
@@ -3,5 +3,5 @@
3
3
  "repoName": "agent-skill-media-maker",
4
4
  "skillId": "337",
5
5
  "version": "V9",
6
- "skillDescription": "AI 生图技能,根据文字描述生成图片,也支持参考图进行图生图(调用 ab-api /model/genImg,支持 Seedream Gemini)。\n\n当用户提到以下任何需求时,立即使用本 skill:\n- AI 生图、AI 画图、文生图、文字生成图片、生成图像、帮我画、生成一张图\n- 图生图、以图生图、参考图、风格迁移、图片变体\n- 使用 doubao / 豆包 / seedream、Gemini 等生成图片\n- 用户提供图片提示词并希望生成图片\n\n即使用户没有明确说「使用 AI」,只要他们想要根据描述生成图片,也要使用本 skill。"
6
+ "skillDescription": "AI image generation skill: produce an image from a text prompt, or do image-to-image with reference images. Backed by ab-api's `/model/genImg` (Seedream and Gemini families).\n\nUse this skill immediately whenever the user asks for any of:\n- AI image generation, text-to-image, \"draw me ...\", \"generate an image of ...\"\n- Image-to-image, reference image, style transfer, image variation\n- Generate an image with Doubao / Seedream / Gemini\n- Provide a prompt and ask for an image\n\nEven without an explicit \"use AI\", any request that turns a description into an image should route here."
7
7
  }
@@ -293,26 +293,28 @@ Apply the following principles when producing the DSL:
293
293
  "text": "Alibaba's open-source AI video-editing project\nalready has 4.3k stars on GitHub"
294
294
  ```
295
295
  instead of one continuous paragraph.
296
- 4. **Moderate scene count**: 30-second videos work well with 4–6 scenes, 60-second videos with 6–10.
297
- 5. **Leave room for templates**: pick generic layouts; do not assume a specific template implementation.
298
- 6. **Image model allowlist**: every `type: image` + `source: gen-image` `AssetRef`'s `payload.model` **must** be one of the values in the table below. **Never** use display names, short forms, or made-up ids (e.g. `seedream`, `gemini-flash`, etc.).
296
+ 5. **Moderate scene count**: 30-second videos work well with 4–6 scenes, 60-second videos with 6–10.
297
+ 6. **Leave room for templates**: pick generic layouts; do not assume a specific template implementation.
298
+ 7. **Image model allowlist**: every `type: image` + `source: gen-image` `AssetRef`'s `payload.model` **must** be one of the values in the table below. **Never** use display names, short forms, or made-up ids (e.g. `seedream`, `gemini-flash`, etc.).
299
299
 
300
300
  ### Allowlist `model` values aligned with gen-image
301
301
 
302
- Mirrors the `gen-image` skill and `GEN_IMG_MODEL_PRESETS` in `gen_image.py`. **Only** the following four values are allowed (copy verbatim, including prefix and version):
302
+ The roster is owned by the backend catalog (`/model/capabilities`), which `gen-image` resolves at
303
+ runtime. A DSL is persisted and replayed later, so write the **full id** — copy verbatim, including
304
+ prefix and version — not a short alias:
303
305
 
304
- | LiteLLM `model` | Display name | Provider |
305
- |-----------------|--------------|----------|
306
- | `doubao/doubao-seedream-4-5-251128` | Seedream 4.5 | Volcano |
307
- | `doubao/doubao-seedream-5-0-260128` | Seedream 5.0 Lite | Volcano |
308
- | `gemini-3-pro-image` | Gemini 3 Pro | Google |
309
- | `gemini-3.1-flash-image-preview` | Gemini 3.1 Flash | Google |
306
+ | `payload.model` | Display name | Provider | Notes |
307
+ |-----------------|--------------|----------|-------|
308
+ | `doubao/doubao-seedream-5-0-260128` | Seedream 5.0 Lite | Volcano | Default. Highest output resolution, up to 14 reference images. |
309
+ | `doubao/doubao-seedream-5-0-pro-260628` | Seedream 5.0 Pro | Volcano | High fidelity: precise element placement, faithful on-image text. Up to 10 reference images, caps out around 2K. Costs noticeably more per image. |
310
+ | `gemini-3-pro` | Gemini 3 Pro | Google | Up to 4 reference images. |
310
311
 
311
312
  **Agent behavior (avoid accidentally rewriting `model`)**:
312
313
 
313
- - `gen_script.py` already writes a valid `payload.model` (currently `gemini-3.1-flash-image-preview` by default). When the user only asks to refine narration, change `payload.prompt`, add or remove scenes, etc. and does **not** ask to change the image model, the agent **must keep** each image asset's original `payload.model` — do not replace it under the guise of "polishing the script".
314
- - **Only when the user explicitly asks to change the image model** (e.g. switches to Seedream or a different Gemini), update the corresponding image `AssetRef`'s `payload.model` to the matching row id from the table. Writing a display name into JSON is wrong.
315
- - When creating a new image `AssetRef`, pick one of the values above for `payload.model`; default to `gemini-3.1-flash-image-preview` to match the script, or to whichever value the user specified.
314
+ - `gen_script.py` already writes a valid `payload.model` (`doubao/doubao-seedream-5-0-260128` unless `DEFAULT_IMAGE_MODEL` overrides it). When the user only asks to refine narration, change `payload.prompt`, add or remove scenes, etc. and does **not** ask to change the image model, the agent **must keep** each image asset's original `payload.model` — do not replace it under the guise of "polishing the script".
315
+ - **Only when the user explicitly asks to change the image model** (e.g. switches to the Pro variant or to Gemini), update the corresponding image `AssetRef`'s `payload.model` to the matching row id from the table. Writing a display name or an alias into JSON is wrong.
316
+ - When creating a new image `AssetRef`, pick one of the values above for `payload.model`; default to `doubao/doubao-seedream-5-0-260128` to match the script, or to whichever value the user specified.
317
+ - If a run fails with an unknown-model error, the catalog has moved on from this table — check `/model/capabilities` rather than guessing a version string.
316
318
 
317
319
  ## Error handling
318
320
 
@@ -325,11 +327,5 @@ Mirrors the `gen-image` skill and `GEN_IMG_MODEL_PRESETS` in `gen_image.py`. **O
325
327
  | File | Purpose |
326
328
  |------|---------|
327
329
  | `gen_script.py` | Core script — produces the Video DSL JSON from a topic. |
328
- | `dsl.json` | DSL example produced from the generic template (debug reference). |
329
- | `script.json` | Intermediate script-generation result (example). |
330
- | `html_slide.json` | DSL example for the html-slide template. |
331
- | `knowledge_card_dsl.json` | DSL example for the knowledge-card scene. |
332
- | `knowledge_card_script.json` | Intermediate knowledge-card script result. |
333
- | `script_knowledge_card.json` | Full knowledge-card script example. |
334
-
335
- These JSON files are reference data for development / debugging; they do not participate in runtime logic. The authoritative DSL examples live under `template-registry/video_dsl/schema/examples/`.
330
+
331
+ The authoritative DSL examples live under `template-registry/video_dsl/schema/examples/`; list them with `template_registry list_examples=true`.
@@ -3,5 +3,5 @@
3
3
  "repoName": "agent-skill-media-maker",
4
4
  "skillId": "474",
5
5
  "version": "V11",
6
- "skillDescription": "视频脚本生成技能,将用户主题转化为结构化 Video DSLJSON),描述视频的完整结构、素材需求与叙事逻辑。\n\n当用户提到以下任何需求时,立即使用本 skill:\n- 帮我写视频脚本、生成视频脚本、视频策划、写分镜脚本\n- 做一个短视频、帮我规划视频内容、生成视频 DSL\n- 把主题转成视频结构、视频内容规划\n\n即使用户没有明确说「生成 DSL」,只要他们想要把一个主题变成视频内容结构,也要使用本 skill。"
6
+ "skillDescription": "Video-script generation skill. Turns a user-supplied topic into a structured Video DSL (JSON) that describes the full video — scene structure, asset requirements, and narrative flow.\n\nUse this skill as soon as the user mentions any of these intents:\n- Write a video script, generate a video script, plan a video, write storyboards\n- Create a short video, plan video content, generate a Video DSL\n- Turn a topic into a video structure / video content plan\n\nEven when the user does not say \"generate the DSL\", use this skill whenever they want to turn a topic into a structured video plan.\n\n⚠️ Stop-and-confirm gate: after this skill returns a DSL, show the full script and wait for the user's explicit confirmation. Never call `prepare_video_assets` in the same turn."
7
7
  }
@@ -23,7 +23,9 @@ Wraps ab-api's `POST /model/genVideo` (the same endpoint the web "Lingchuang AI
23
23
 
24
24
  ## Models
25
25
 
26
- Aligned with the handler's `MODEL_ALIASES` and the frontend `AI_VIDEO_MODELS`:
26
+ The authoritative roster ids, aliases and per-model limits — lives in the backend catalog
27
+ (`/model/capabilities`), which the CLI fetches at runtime. The table below mirrors it; when the
28
+ two disagree, the catalog wins.
27
29
 
28
30
  | LiteLLM `model` | Display name | Provider | Duration | Notes |
29
31
  |-----------------|--------------|----------|----------|-------|
@@ -33,8 +35,8 @@ Aligned with the handler's `MODEL_ALIASES` and the frontend `AI_VIDEO_MODELS`:
33
35
 
34
36
  **Model shortcuts** (`--model` / `-m` accepts these directly):
35
37
  - `seedance` / `seedance-1.5` / `seedance-1.5-pro` → Seedance 1.5 Pro
36
- - `veo` / `veo-3.1` → Veo 3.1
37
- - `veo-fast` / `veo-3.1-fast` → Veo 3.1 Fast
38
+ - `veo` / `veo-3.1` / `veo-3.1-generate` → Veo 3.1
39
+ - `veo-fast` / `veo-3.1-fast` / `veo-3.1-fast-generate` → Veo 3.1 Fast
38
40
 
39
41
  ### Per-model parameter ranges
40
42
 
@@ -6,22 +6,86 @@
6
6
  "title": "AI Video Generation",
7
7
  "description": "AI video generation: produce a short video clip from a text prompt. Supports Seedance and Veo models, plus first/last frame and reference images.",
8
8
  "auth": "required",
9
- "envVars": ["PRIV_TOKEN", "MM_API_BASE_URL", "AGENT_NAME", "MM_VIDEO_MODEL"],
10
- "entry": { "type": "http", "handler": "gen-video" },
9
+ "joinsTake": true,
10
+ "envVars": [
11
+ "PRIV_TOKEN",
12
+ "MM_API_BASE_URL",
13
+ "AGENT_NAME",
14
+ "MM_VIDEO_MODEL"
15
+ ],
16
+ "entry": {
17
+ "type": "http",
18
+ "handler": "gen-video"
19
+ },
11
20
  "parameters": {
12
21
  "type": "object",
13
22
  "properties": {
14
- "prompt": { "type": "string", "description": "Video description" },
15
- "model": { "type": "string", "description": "Model: seedance / veo / veo-fast" },
16
- "duration": { "type": "number", "description": "Duration in seconds" },
17
- "ratio": { "type": "string", "description": "Aspect ratio" },
18
- "resolution": { "type": "string", "description": "Resolution" },
19
- "first_frame": { "type": "string", "description": "First-frame image path or URL" },
20
- "last_frame": { "type": "string", "description": "Last-frame image path or URL" },
21
- "reference": { "type": "string", "description": "Reference image (Veo only)" },
22
- "generate_audio": { "type": "boolean", "description": "Generate native audio" },
23
- "json_output": { "type": "boolean", "description": "Emit a JSON result ({ url }) instead of human-readable output" }
23
+ "prompt": {
24
+ "type": "string",
25
+ "description": "Video description"
26
+ },
27
+ "model": {
28
+ "type": "string",
29
+ "description": "Model: 'seedance' (default; 4-12s, adaptive/21:9 ratios, fixed camera), 'veo' (4/6/8s, native audio, up to 4k, reference images), or 'veo-fast' (faster Veo variant for iteration)"
30
+ },
31
+ "duration": {
32
+ "type": "number",
33
+ "description": "Duration in seconds"
34
+ },
35
+ "ratio": {
36
+ "type": "string",
37
+ "description": "Aspect ratio"
38
+ },
39
+ "resolution": {
40
+ "type": "string",
41
+ "description": "Resolution"
42
+ },
43
+ "first_frame": {
44
+ "type": "string",
45
+ "description": "First-frame image path or URL"
46
+ },
47
+ "last_frame": {
48
+ "type": "string",
49
+ "description": "Last-frame image path or URL"
50
+ },
51
+ "reference": {
52
+ "type": "array",
53
+ "items": {
54
+ "type": "string"
55
+ },
56
+ "description": "Reference images: local file path, https URL, or data URI. Veo only, max 3 — Seedance rejects them, use first_frame / last_frame instead."
57
+ },
58
+ "generate_audio": {
59
+ "type": "boolean",
60
+ "description": "Generate native audio"
61
+ },
62
+ "camera_fixed": {
63
+ "type": "boolean",
64
+ "description": "Lock the camera in place (Seedance)"
65
+ },
66
+ "negative_prompt": {
67
+ "type": "string",
68
+ "description": "Content to steer away from (Veo)"
69
+ },
70
+ "seed": {
71
+ "type": "number",
72
+ "description": "Random seed. Pass the same seed with the same prompt and model to make a run reproducible."
73
+ },
74
+ "person_generation": {
75
+ "type": "string",
76
+ "enum": [
77
+ "allow_all",
78
+ "dont_allow"
79
+ ],
80
+ "description": "Whether the model may render people (Veo). Omit to use the backend default."
81
+ },
82
+ "json_output": {
83
+ "type": "boolean",
84
+ "description": "Emit a JSON result ({ url }) instead of human-readable output"
85
+ }
24
86
  },
25
- "required": ["prompt"]
87
+ "required": [
88
+ "prompt"
89
+ ]
26
90
  }
27
91
  }
@@ -3,5 +3,5 @@
3
3
  "repoName": "agent-skill-media-maker",
4
4
  "skillId": "339",
5
5
  "version": "V8",
6
- "skillDescription": "AI 生视频技能,根据文字描述生成素材视频(调用 ab-api /model/genVideo,支持 Seedance Veo)。\n\n当用户提到以下任何需求时,立即使用本 skill:\n- AI 生视频、文生视频、文字生成视频、生成一段视频、AI 制作视频\n- 使用 doubao / 豆包 / seedance、VeoGoogle 等生成视频\n- 用户提供视频提示词并希望生成视频\n- 图生视频、首帧生成视频、参考图生成视频\n\n即使用户没有明确说「使用 AI」,只要他们想要根据描述生成视频,也要使用本 skill。"
6
+ "skillDescription": "AI video generation skill: produce a short clip from a text prompt. Backed by ab-api's `/model/genVideo` (Seedance and Veo families).\n\nUse this skill immediately whenever the user asks for any of:\n- Text-to-video, AI-generated clip, \"make a short video of ...\"\n- Generate video with Doubao / Seedance / Veo / Google\n- Image-to-video, first-frame / last-frame, reference-image-to-video\n\nEven without an explicit \"use AI\", any request that turns a description into a moving clip should route here."
7
7
  }
@@ -21,7 +21,7 @@ Wraps ab-api's unified `POST /tool/tts` with `provider: "minimax"` (the same end
21
21
 
22
22
  ## Auth & environment
23
23
 
24
- There is no skill-local env file — the executing process inherits the system environment. Examples below say `python`; on macOS you may need `python3`.
24
+ There is no skill-local env file — the executing process inherits the system environment.
25
25
 
26
26
  - **Enterprise OpenClaw**: auth is already injected, **no need** to set `PRIV_TOKEN` / `--priv-token`.
27
27
  - **Other environments**: configure the token. See the Tianyan privateToken doc internally. Without a token, non-interactive runs fail; interactive runs prompt.
@@ -6,17 +6,43 @@
6
6
  "title": "Text-to-Speech (Minimax)",
7
7
  "description": "Text-to-speech (TTS): synthesize narration audio from text via the Minimax TTS model. Returns the persisted audio URL — no download needed.",
8
8
  "auth": "required",
9
- "envVars": ["PRIV_TOKEN", "MM_API_BASE_URL", "AGENT_NAME"],
10
- "entry": { "type": "http", "handler": "gen-voice" },
9
+ "joinsTake": true,
10
+ "envVars": [
11
+ "PRIV_TOKEN",
12
+ "MM_API_BASE_URL",
13
+ "AGENT_NAME"
14
+ ],
15
+ "entry": {
16
+ "type": "http",
17
+ "handler": "gen-voice"
18
+ },
11
19
  "parameters": {
12
20
  "type": "object",
13
21
  "properties": {
14
- "text": { "type": "string", "description": "Text to synthesize (required)" },
15
- "voice_id": { "type": "string", "description": "Voice id. Default 'Chinese (Mandarin)_Male_Announcer'. When unsure, call with list_voices=true first to see what's available — do not invent ids." },
16
- "speed": { "type": "number", "description": "Speech rate, 0.5-2.0" },
17
- "list_voices": { "type": "boolean", "description": "List available voices and exit" },
18
- "local": { "type": "boolean", "description": "Used together with list_voices=true: print the voice-resolver fallback catalog with language tags (no remote /voice/page call). Output is one '<id>\\t<lang>\\t<name>' line per voice." },
19
- "json_output": { "type": "boolean", "description": "Emit a JSON result (url, audio_length_ms, subtitles)" }
22
+ "text": {
23
+ "type": "string",
24
+ "description": "Text to synthesize (required)"
25
+ },
26
+ "voice_id": {
27
+ "type": "string",
28
+ "description": "Voice id. Default 'Chinese (Mandarin)_Male_Announcer'. When unsure, call with list_voices=true first to see what's available — do not invent ids."
29
+ },
30
+ "speed": {
31
+ "type": "number",
32
+ "description": "Speech rate, 0.5-2.0"
33
+ },
34
+ "list_voices": {
35
+ "type": "boolean",
36
+ "description": "List available voices and exit"
37
+ },
38
+ "local": {
39
+ "type": "boolean",
40
+ "description": "Used together with list_voices=true: print the voice-resolver fallback catalog with language tags (no remote /voice/page call). Output is one '<id>\\t<lang>\\t<name>' line per voice."
41
+ },
42
+ "json_output": {
43
+ "type": "boolean",
44
+ "description": "Emit a JSON result (url, audio_length_ms, subtitles)"
45
+ }
20
46
  },
21
47
  "required": []
22
48
  }
@@ -3,5 +3,5 @@
3
3
  "repoName": "agent-skill-media-maker",
4
4
  "skillId": "338",
5
5
  "version": "V7",
6
- "skillDescription": "语音合成(TTS)技能,将文字转为语音音频(调用 ab-api 统一 /tool/ttsprovider=minimax,基于 Minimax TTS)。\n\n当用户提到以下任何需求时,立即使用本 skill:\n- AI 配音、语音合成、文字转语音、TTS、文本转音频、生成语音\n- 使用 minimax 语音合成\n- 用户想要将一段文字朗读出来、生成音频\n\n即使用户没有明确说「使用 AI」,只要他们想要将文字转为语音,也要使用本 skill。"
6
+ "skillDescription": "Text-to-speech (TTS) skill: synthesize narration audio from text via ab-api's unified `/tool/tts` endpoint with `provider: \"minimax\"` (Minimax TTS).\n\nUse this skill immediately whenever the user asks for any of:\n- AI voice-over, TTS, text-to-speech, generate narration audio\n- Use Minimax for speech synthesis\n- Read a piece of text aloud / produce an audio file from text\n\nEven when the user does not explicitly say \"AI\", any request that turns text into speech should route here."
7
7
  }
@@ -6,19 +6,53 @@
6
6
  "title": "Video Asset Preparation",
7
7
  "description": "Resolves and generates every asset (image / audio / video) referenced by a Video DSL, persists a RenderPlan to the database, and returns a job_id for the subsequent render_video call. This is Phase 1 of the two-phase video pipeline; Phase 3 (Remotion render) lives in render_video.",
8
8
  "auth": "required",
9
- "envVars": ["PRIV_TOKEN", "MM_API_BASE_URL", "MM_BACKEND_API_URL", "AGENT_NAME", "REMOTION_RENDER_API_URL", "REMOTION_RENDER_MODE", "REMOTION_OUTPUT_DIR", "ASSET_CACHE_DIR"],
9
+ "createsTake": true,
10
+ "envVars": [
11
+ "PRIV_TOKEN",
12
+ "MM_API_BASE_URL",
13
+ "MM_BACKEND_API_URL",
14
+ "AGENT_NAME",
15
+ "REMOTION_RENDER_API_URL",
16
+ "REMOTION_RENDER_MODE",
17
+ "REMOTION_OUTPUT_DIR",
18
+ "ASSET_CACHE_DIR"
19
+ ],
10
20
  "scriptPath": "scripts/prepare_video_assets.py",
11
21
  "parameters": {
12
22
  "type": "object",
13
23
  "properties": {
14
- "dsl_json": { "type": "string", "description": "DSL JSON as an inline string (preferred — no disk write needed; required for multi-user concurrent flows). Pass the full DSL JSON, or — when a gen_script skeleton is cached in the session — a minimal JSON with only scenes[].audio.narration.text overrides (the agent layer merges narration onto the cached skeleton)." },
15
- "dsl": { "type": "string", "description": "DSL file path (legacy fallback; prefer dsl_json inline)." },
16
- "template_id": { "type": "string", "description": "Template id. When provided, the script invokes template-registry internally; no separate binding step is needed." },
17
- "binding_json": { "type": "string", "description": "TemplateBinding JSON as an inline string (alternative to template_id; no file needed)." },
18
- "binding": { "type": "string", "description": "TemplateBinding file path (optional; auto-generated when template_id is provided)." },
19
- "save_job": { "type": "boolean", "description": "Persist the RenderPlan to the database (default true). On success the stdout contains '📦 render job jobId: N'. Auto-degrades to false when PRIV_TOKEN is missing, falling back to file mode. Pass false to opt out explicitly." },
20
- "stub_image_url": { "type": "string", "description": "Test-mode image stub URL (renderer-side short-circuit). Only pass when the user explicitly says things like 'just testing / don't actually generate / use a placeholder image / save credits' AND provides a concrete URL. With this set, every image+source=gen-image AssetRef is short-circuited to that URL with no gen-image call. Do not pass otherwise; if the user expressed the intent without a URL, ask for one — do not invent one." },
21
- "stub_video_url": { "type": "string", "description": "Test-mode video stub URL (renderer-side short-circuit). Only pass when the user explicitly says things like 'just testing / don't actually generate the video / use a placeholder clip / save credits' AND provides a concrete URL. With this set, every video+source=gen-video AssetRef is short-circuited to that URL with no gen-video call. Do not pass otherwise; if the user expressed the intent without a URL, ask for one — do not invent one." }
24
+ "dsl_json": {
25
+ "type": "string",
26
+ "description": "DSL JSON as an inline string (preferred no disk write needed; required for multi-user concurrent flows). Pass the full DSL JSON, or — when a gen_script skeleton is cached in the session a minimal JSON with only scenes[].audio.narration.text overrides (the agent layer merges narration onto the cached skeleton)."
27
+ },
28
+ "dsl": {
29
+ "type": "string",
30
+ "description": "DSL file path (legacy fallback; prefer dsl_json inline)."
31
+ },
32
+ "template_id": {
33
+ "type": "string",
34
+ "description": "Template id. When provided, the script invokes template-registry internally; no separate binding step is needed."
35
+ },
36
+ "binding_json": {
37
+ "type": "string",
38
+ "description": "TemplateBinding JSON as an inline string (alternative to template_id; no file needed)."
39
+ },
40
+ "binding": {
41
+ "type": "string",
42
+ "description": "TemplateBinding file path (optional; auto-generated when template_id is provided)."
43
+ },
44
+ "save_job": {
45
+ "type": "boolean",
46
+ "description": "Persist the RenderPlan to the database (default true). On success the stdout contains '📦 render job jobId: N'. Auto-degrades to false when PRIV_TOKEN is missing, falling back to file mode. Pass false to opt out explicitly."
47
+ },
48
+ "stub_image_url": {
49
+ "type": "string",
50
+ "description": "Test-mode image stub URL (renderer-side short-circuit). Only pass when the user explicitly says things like 'just testing / don't actually generate / use a placeholder image / save credits' AND provides a concrete URL. With this set, every image+source=gen-image AssetRef is short-circuited to that URL with no gen-image call. Do not pass otherwise; if the user expressed the intent without a URL, ask for one — do not invent one."
51
+ },
52
+ "stub_video_url": {
53
+ "type": "string",
54
+ "description": "Test-mode video stub URL (renderer-side short-circuit). Only pass when the user explicitly says things like 'just testing / don't actually generate the video / use a placeholder clip / save credits' AND provides a concrete URL. With this set, every video+source=gen-video AssetRef is short-circuited to that URL with no gen-video call. Do not pass otherwise; if the user expressed the intent without a URL, ask for one — do not invent one."
55
+ }
22
56
  },
23
57
  "required": []
24
58
  }
@@ -3,5 +3,5 @@
3
3
  "repoName": "agent-skill-media-maker",
4
4
  "skillId": "476",
5
5
  "version": "V1",
6
- "skillDescription": "Asset-preparation skill (Phase 1 of the two-phase video pipeline). Resolves and generates every asset (image / audio / video) referenced by a Video DSL, persists a RenderPlan to the database, and returns a job_id for the subsequent render_video call."
6
+ "skillDescription": "Asset-preparation skill: resolves and generates every asset (image / audio / video) referenced by a Video DSL, persists a RenderPlan to the database, and returns a `job_id` for the subsequent `render_video` call.\n\nUse this skill as soon as the user mentions any of these intents:\n- Generate / prepare video assets, resolve assets, render-ready\n- \"Make me a video about X\" (the agent calls gen_script → prepare_video_assets → render_video)\n- Regenerate one asset (image / audio) for a specific scene\n\nNext step: after the user confirms the resolved assets, call `render_video` with the `job_id` returned by this skill.\n\n⚠️ Stop-and-confirm gate: this skill runs only after the user has confirmed the script, and after it returns you must show the resolved assets and wait for the user's explicit confirmation. Never call `render_video` in the same turn."
7
7
  }
@@ -6,18 +6,53 @@
6
6
  "title": "Remotion Video Renderer",
7
7
  "description": "Loads a persisted RenderPlan by job_id and drives the Remotion engine to produce the final video. Assets must already be generated via prepare_video_assets — this skill never resolves or regenerates assets.",
8
8
  "auth": "required",
9
- "envVars": ["PRIV_TOKEN", "MM_API_BASE_URL", "MM_BACKEND_API_URL", "AGENT_NAME", "REMOTION_RENDER_API_URL", "REMOTION_RENDER_MODE", "REMOTION_OUTPUT_DIR", "ASSET_CACHE_DIR"],
9
+ "createsTake": true,
10
+ "envVars": [
11
+ "PRIV_TOKEN",
12
+ "MM_API_BASE_URL",
13
+ "MM_BACKEND_API_URL",
14
+ "AGENT_NAME",
15
+ "REMOTION_RENDER_API_URL",
16
+ "REMOTION_RENDER_MODE",
17
+ "REMOTION_OUTPUT_DIR",
18
+ "ASSET_CACHE_DIR"
19
+ ],
10
20
  "scriptPath": "scripts/render_video.py",
11
21
  "parameters": {
12
22
  "type": "object",
13
23
  "properties": {
14
- "job_id": { "type": "number", "minimum": 1, "description": "Render job id (positive integer, e.g. 8). This is the integer N parsed from prepare_video_assets's stdout line '📦 render job jobId: N' (also tolerated: legacy zh '📦 渲染任务 jobId: N'). Never pass 0, a placeholder string, or descriptive text." },
15
- "save_job": { "type": "boolean", "description": "Persist the render Manifest back to the database under the same jobId (default true). Auto-degrades to false when PRIV_TOKEN is missing. Pass false to opt out explicitly." },
16
- "upload_title": { "type": "string", "description": "Upload title for the resulting video file. Defaults to the local output filename." },
17
- "no_upload": { "type": "boolean", "description": "Skip the upload step. Only effective for local rendering; remote rendering uploads server-side." },
18
- "renderer": { "type": "string", "enum": ["local", "remote"], "description": "Render mode: local runs the Remotion CLI on this host; remote calls the standalone remotion-renderer service. Defaults to REMOTION_RENDER_MODE." },
19
- "render_plan": { "type": "string", "description": "Existing RenderPlan file path. Local / single-user fallback used only when job_id is unavailable; prefer job_id." }
24
+ "job_id": {
25
+ "type": "number",
26
+ "minimum": 1,
27
+ "description": "Render job id (positive integer, e.g. 8). This is the integer N parsed from prepare_video_assets's stdout line '📦 render job jobId: N' (also tolerated: legacy zh '📦 渲染任务 jobId: N'). Never pass 0, a placeholder string, or descriptive text."
28
+ },
29
+ "save_job": {
30
+ "type": "boolean",
31
+ "description": "Persist the render Manifest back to the database under the same jobId (default true). Auto-degrades to false when PRIV_TOKEN is missing. Pass false to opt out explicitly."
32
+ },
33
+ "upload_title": {
34
+ "type": "string",
35
+ "description": "Upload title for the resulting video file. Defaults to the local output filename."
36
+ },
37
+ "no_upload": {
38
+ "type": "boolean",
39
+ "description": "Skip the upload step. Only effective for local rendering; remote rendering uploads server-side."
40
+ },
41
+ "renderer": {
42
+ "type": "string",
43
+ "enum": [
44
+ "local",
45
+ "remote"
46
+ ],
47
+ "description": "Render mode: local runs the Remotion CLI on this host; remote calls the standalone remotion-renderer service. Defaults to REMOTION_RENDER_MODE."
48
+ },
49
+ "render_plan": {
50
+ "type": "string",
51
+ "description": "Existing RenderPlan file path. Local / single-user fallback used only when job_id is unavailable; prefer job_id."
52
+ }
20
53
  },
21
- "required": ["job_id"]
54
+ "required": [
55
+ "job_id"
56
+ ]
22
57
  }
23
58
  }
@@ -3,5 +3,5 @@
3
3
  "repoName": "agent-skill-media-maker",
4
4
  "skillId": "473",
5
5
  "version": "V19",
6
- "skillDescription": "Final-render skill (Phase 3 of the two-phase video pipeline). Loads a persisted RenderPlan by job_id and drives Remotion to produce the final video. Assets must already be generated via prepare_video_assets."
6
+ "skillDescription": "Final-render skill: loads a persisted RenderPlan by `job_id` and drives the Remotion engine to produce the final video.\n\nUse this skill as soon as the user mentions any of these intents (after assets are already prepared):\n- Render the video, composite the video, export the video\n- Turn the prepared assets into the final clip\n- Render with Remotion\n\nPrerequisite: assets must already be generated via `prepare_video_assets`. This skill never resolves or regenerates assets — pass it a `job_id` from a previous `prepare_video_assets` call.\n\n⚠️ Stop-and-confirm gate: never call this skill until the user has explicitly confirmed the assets prepared by `prepare_video_assets`. If those assets were prepared in the current turn and the user has not replied since, stop and ask instead of rendering."
7
7
  }
@@ -3,5 +3,5 @@
3
3
  "repoName": "agent-skill-media-maker",
4
4
  "skillId": "475",
5
5
  "version": "V13",
6
- "skillDescription": "视频模板仓库(列表查询)。存储所有视频模板定义,对外只暴露「列出可用模板」一个能力;DSL→TemplateBinding 的绑定逻辑已内嵌进 prepare-video-assets,不再作为独立步骤暴露。同时是跨 skill 共享 Python 库(registry_loader / match_template / template_paths / video_dsl 等)的存放位置。\n\n当用户提到以下任何需求时,立即使用本 skill:\n- 查看可用模板、列出所有模板"
6
+ "skillDescription": "Video-template registry skill. Stores every video-template definition and lists the available templates (templateId / name / aspect ratio / style tags).\n\nUse this skill as soon as the user mentions any of these intents:\n- View available templates / list every template\n\nNote: DSL→TemplateBinding is no longer a separate exposed step — once prepare_video_assets receives a template_id it builds the binding internally."
7
7
  }
@@ -6,17 +6,39 @@
6
6
  "title": "Video Deconstruction",
7
7
  "description": "Video deconstruction: split a video into reusable assets (audio extraction, ASR transcript, keyframe extraction, scene segmentation).",
8
8
  "auth": "required",
9
- "envVars": ["RENDER_API_URL", "PRIV_TOKEN", "CONVERSATION_ID"],
9
+ "joinsTake": true,
10
+ "envVars": [
11
+ "RENDER_API_URL",
12
+ "PRIV_TOKEN",
13
+ "CONVERSATION_ID"
14
+ ],
10
15
  "scriptPath": "scripts/parse_via_render.py",
11
16
  "parameters": {
12
17
  "type": "object",
13
18
  "properties": {
14
- "url": { "type": "string", "description": "Direct remote video URL (required). Share/page links are not supported." },
15
- "scene_threshold": { "type": "number", "description": "Scene-cut detection threshold 0.0-1.0 (default 0.3)" },
16
- "skip_asr": { "type": "boolean", "description": "Skip the ASR step" },
17
- "skip_keyframes": { "type": "boolean", "description": "Skip the keyframe-extraction step" },
18
- "json_output": { "type": "boolean", "description": "Pipeline mode — emit JSON only on stdout" }
19
+ "url": {
20
+ "type": "string",
21
+ "description": "Direct remote video URL (required). Share/page links are not supported."
22
+ },
23
+ "scene_threshold": {
24
+ "type": "number",
25
+ "description": "Scene-cut detection threshold 0.0-1.0 (default 0.3)"
26
+ },
27
+ "skip_asr": {
28
+ "type": "boolean",
29
+ "description": "Skip the ASR step"
30
+ },
31
+ "skip_keyframes": {
32
+ "type": "boolean",
33
+ "description": "Skip the keyframe-extraction step"
34
+ },
35
+ "json_output": {
36
+ "type": "boolean",
37
+ "description": "Pipeline mode — emit JSON only on stdout"
38
+ }
19
39
  },
20
- "required": ["url"]
40
+ "required": [
41
+ "url"
42
+ ]
21
43
  }
22
44
  }
@@ -3,5 +3,5 @@
3
3
  "repoName": "agent-skill-media-maker",
4
4
  "skillId": "553",
5
5
  "version": "V2",
6
- "skillDescription": "视频解构技能,将视频拆解为可复用的内容资产(音频、ASR 文本、关键帧、场景分段)。\n\n当用户提到以下任何需求时,立即使用本 skill:\n- 视频解构、视频拆解、视频分析、解析视频\n- 提取关键帧、提取视频文案、视频转文字\n- 视频内容资产、视频素材提取\n\n即使用户没有明确说「解构」,只要他们想要从视频中提取文案、关键帧或结构化信息,也要使用本 skill"
6
+ "skillDescription": "Video deconstruction skill. Splits a video into reusable content assets — audio, ASR transcript, scene segments, keyframe images.\n\nUse this skill as soon as the user mentions any of these intents:\n- Deconstruct / split / analyze / parse a video\n- Extract keyframes, extract the script from a video, transcribe a video\n- Pull content assets or raw material out of a video\n\nEven when the user does not say \"deconstruct\" explicitly, use this skill whenever they want to extract script text, keyframes, or structured information from a video."
7
7
  }