@remixmate/cli 0.13.1 → 0.13.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.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "version": "0.13.1",
4
- "generatedAt": "2026-10-25T04:48:35.989Z",
3
+ "version": "0.13.2",
4
+ "generatedAt": "2026-10-25T07:41:14.830Z",
5
5
  "skills": [
6
6
  {
7
7
  "id": "doc-parse",
@@ -625,6 +625,7 @@
625
625
  "motion": {
626
626
  "type": "string",
627
627
  "enum": [
628
+ "auto",
628
629
  "static",
629
630
  "kenburns-in",
630
631
  "kenburns-out",
@@ -632,7 +633,7 @@
632
633
  "pan-right",
633
634
  "float"
634
635
  ],
635
- "description": "Camera motion for every scene (scenes[].animationHints.motion), replacing the skeleton's alternating push-in / pull-out. **Must** pass when the user picked one: `运镜效果: 缓慢推近(kenburns-in)` → `kenburns-in`."
636
+ "description": "Camera motion for every scene (scenes[].animationHints.motion), replacing the skeleton's alternating push-in / pull-out. **Must** pass when the user picked one: `运镜效果: 缓慢推近(kenburns-in)` → `kenburns-in`; `运镜效果: 自动搭配(auto)` → `auto` (the template varies the motion scene by scene; do not write animationHints.motion yourself then)."
636
637
  },
637
638
  "ending_payload": {
638
639
  "type": "array",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@remixmate/cli",
3
- "version": "0.13.1",
3
+ "version": "0.13.2",
4
4
  "description": "AI media generation skills for Claude Code / Codex — 12 skills covering image, video, voice, digital human, web screenshot, web recording, script, template registry, rendering, Jianying export, and video deconstruction.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -489,7 +489,7 @@ python3 <SkillDir>/scripts/gen_script.py \
489
489
  | `--payload KEY=VALUE` | Template-specific card choice, repeatable. `KEY` is a dotted path in `customPayloadSchema` (or `capabilities.frameLevelKeys`), e.g. `<field>=<value>`, `<object>.<field>=<value>`. Value is converted to the declared type (true/false, numbers) and checked against enum / range; undeclared keys are rejected. Written to every scene with sibling keys kept, applied before fit-caption duration estimation. | template default |
490
490
  | `--ending-payload KEY=VALUE` | Same as `--payload`, but written only to the ending scene, e.g. `<object>.<field>=<closing line>`. On countdown templates it also appends an ending scene after #1 (it carries the #1 index; fill its narration and the item field `capabilities.countdown.itemProp` names). Errors when the script has no ending scene. | none |
491
491
  | `--avatar-id` | Digital-human avatar id (`dh_xxx`) for templates declaring `capabilities.digitalHuman`. Adds asset `asset-avatar` (`type: avatar`, `source: gen-digital-human`, `payload.avatarId`) and sets `visuals.avatar.assetRef` on every scene whose slot reads it — one continuous presenter driven by the narration. Placement: template default, or `--payload digitalHuman.<field>=…` (a photo-only presenter is `--payload digitalHuman.posterUrl=<url>` without this flag). | none |
492
- | `--motion` | Camera motion for every scene (`animationHints.motion`): `static` / `kenburns-in` / `kenburns-out` / `pan-left` / `pan-right` / `float`. | skeleton alternates in / out |
492
+ | `--motion` | Camera motion for every scene (`animationHints.motion`): `static` / `kenburns-in` / `kenburns-out` / `pan-left` / `pan-right` / `float`. `auto` removes the motion from every scene so the template picks (image-slide rotates push / pan / pull / pan); nothing is locked then. | skeleton alternates in / out |
493
493
  | `--font-id` | Font library key (`font.uniq_id`), written to `global.font.fontId`; ab-render resolves and installs the real font at render time. Pass it whenever the user picked a font — the replicate card shows it as `名字(id)`, e.g. `字体: <名字>(<uniqId>)`; pass the id in the parentheses. Never pass a CSS family or the display name: an unknown key falls back to the template font with no error. | template font |
494
494
  | `--font-name` | Display name of the picked font → `global.font.fontName` (display only, never used for rendering). Pass it with `--font-id`. | — |
495
495
  | `--list-fonts` | Print the live font library (`/font/page`: id, name, lang, category, license) and exit; no script is generated and `--topic` is not needed. The ids it prints are the only valid `--font-id` values — use it when the user asks which fonts exist or names a font without its id. | — |
@@ -1873,18 +1873,23 @@ def _apply_scene_payload(
1873
1873
 
1874
1874
  writes = _parse_payload_specs(template_config, payload_specs)
1875
1875
  if motion:
1876
- allowed = ("static", "kenburns-in", "kenburns-out", "pan-left", "pan-right", "float")
1876
+ allowed = ("auto", "static", "kenburns-in", "kenburns-out", "pan-left", "pan-right", "float")
1877
1877
  if motion not in allowed:
1878
1878
  raise ValueError(f"--motion {motion!r}: choose one of: {', '.join(allowed)}")
1879
1879
 
1880
1880
  for scene in dsl.get("scenes", []):
1881
1881
  _write_payload(scene.setdefault("customPayload", {}), writes)
1882
- if motion:
1883
- hints = scene.get("animationHints") if isinstance(scene.get("animationHints"), dict) else {}
1884
- scene["animationHints"] = {**hints, "motion": motion}
1882
+ hints = scene.get("animationHints") if isinstance(scene.get("animationHints"), dict) else None
1883
+ if motion == "auto":
1884
+
1885
+
1886
+ if hints is not None:
1887
+ hints.pop("motion", None)
1888
+ elif motion:
1889
+ scene["animationHints"] = {**(hints or {}), "motion": motion}
1885
1890
  for parts, _ in writes:
1886
1891
  _lock_scene_path(dsl, "customPayload." + ".".join(parts))
1887
- if motion:
1892
+ if motion and motion != "auto":
1888
1893
  _lock_scene_path(dsl, "animationHints.motion")
1889
1894
 
1890
1895
 
@@ -2817,7 +2822,8 @@ Examples:
2817
2822
  parser.add_argument(
2818
2823
  "--motion", default=None,
2819
2824
  help="Camera motion for every scene (animationHints.motion): static / kenburns-in / kenburns-out / "
2820
- "pan-left / pan-right / float. Replaces the skeleton's alternating default.",
2825
+ "pan-left / pan-right / float. Replaces the skeleton's alternating default. `auto` removes the "
2826
+ "motion from every scene so the template picks (image-slide rotates push / pan / pull / pan).",
2821
2827
  )
2822
2828
  parser.add_argument("--allow-digital-human", action="store_true", help="Allow digital-human assets")
2823
2829
  parser.add_argument("--avatar-id", default=None, help="Digital-human avatar id (dh_xxx) for templates declaring capabilities.digitalHuman: adds one gen-digital-human asset referenced by every scene's visuals.avatar.assetRef (one continuous presenter driven by the narration). Placement stays the template default unless set with --payload digitalHuman.<field>=...")
@@ -83,6 +83,7 @@
83
83
  "motion": {
84
84
  "type": "string",
85
85
  "enum": [
86
+ "auto",
86
87
  "static",
87
88
  "kenburns-in",
88
89
  "kenburns-out",
@@ -90,7 +91,7 @@
90
91
  "pan-right",
91
92
  "float"
92
93
  ],
93
- "description": "Camera motion for every scene (scenes[].animationHints.motion), replacing the skeleton's alternating push-in / pull-out. **Must** pass when the user picked one: `运镜效果: 缓慢推近(kenburns-in)` → `kenburns-in`."
94
+ "description": "Camera motion for every scene (scenes[].animationHints.motion), replacing the skeleton's alternating push-in / pull-out. **Must** pass when the user picked one: `运镜效果: 缓慢推近(kenburns-in)` → `kenburns-in`; `运镜效果: 自动搭配(auto)` → `auto` (the template varies the motion scene by scene; do not write animationHints.motion yourself then)."
94
95
  },
95
96
  "ending_payload": {
96
97
  "type": "array",