@remixmate/cli 0.9.9 → 0.9.11

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.9.9",
4
- "generatedAt": "2026-07-26T13:09:06.488Z",
3
+ "version": "0.9.11",
4
+ "generatedAt": "2026-07-27T06:23:26.117Z",
5
5
  "skills": [
6
6
  {
7
7
  "id": "export-jianying",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@remixmate/cli",
3
- "version": "0.9.9",
3
+ "version": "0.9.11",
4
4
  "description": "AI media generation skills for Claude Code / Codex — 11 skills covering image, video, voice, digital human, web capture, script, template registry, rendering, Jianying export, and video deconstruction.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -43,14 +43,14 @@ Phases 1–3 (DSL validation, template binding, asset resolution) are owned by *
43
43
 
44
44
  Rendering supports two modes:
45
45
 
46
- - **local** (default if `REMOTION_RENDER_MODE` unset): runs Remotion CLI locally; requires Node.js 18+ and a headless Chrome.
47
- - **remote**: calls the standalone **remotion-renderer** service (at `<monorepo-root>/remotion-renderer/`) — best for environments without Node.js, long videos, or to avoid consuming local resources.
46
+ - **local** (opt-in via `REMOTION_RENDER_MODE=local`): runs Remotion CLI locally; requires Node.js 18+, a headless Chrome, and the renderer directory present on the host.
47
+ - **remote** (default when `REMOTION_RENDER_MODE` is unset or empty): calls the standalone **remotion-renderer** service (ab-render) — best for environments without Node.js, long videos, or to avoid consuming local resources. Only an explicit `REMOTION_RENDER_MODE=local` selects local rendering.
48
48
 
49
49
  | Env var | Description | Default |
50
50
  |---------|-------------|---------|
51
51
  | `PRIV_TOKEN` | Tianyan token (needed to load the RenderPlan from the DB and to upload). | (none) |
52
52
  | `MM_BACKEND_API_URL` | Backend API root URL (RenderPlan / VOD lookups). | `https://api.remixmate.com/api` |
53
- | `REMOTION_RENDER_API_URL` | Remote renderer base URL (ab-render). | `https://api-render.remixmate.com` |
53
+ | `REMOTION_RENDER_API_URL` | Remote renderer base URL (ab-render). Falls back to `RENDER_API_URL` (same value across skills). | `https://api-render.remixmate.com` |
54
54
  | `REMOTION_RENDER_MODE` | Default render mode (`remote` / `local`); CLI `--renderer` overrides it. | `remote` |
55
55
  | `REMOTION_OUTPUT_DIR` | Render output directory. | `./output/` |
56
56
  | `REMOTION_CONCURRENCY` | Local Remotion render concurrency. | `2` |
@@ -40,7 +40,10 @@ def poll_vod_playback_url(
40
40
  - 看到阿里云 OSS 直链时记为 fallback,继续等 CDN
41
41
  - 超时仍未拿到 CDN 时退回到 OSS 原始地址
42
42
  """
43
- api_base = os.environ.get("MM_BACKEND_API_URL", "https://api.remixmate.com/api").rstrip("/")
43
+ api_base = os.environ.get(
44
+ "MM_API_BASE_URL",
45
+ os.environ.get("MM_BACKEND_API_URL", "https://api.remixmate.com/api"),
46
+ ).rstrip("/")
44
47
  url = f"{api_base}/file/get"
45
48
  headers = {
46
49
  "Content-Type": "application/json",
@@ -36,7 +36,11 @@ import urllib.request
36
36
  from typing import Callable, Optional
37
37
 
38
38
  DEFAULT_API_BASE_URL = "https://api-render.remixmate.com"
39
- API_BASE_URL = (os.environ.get("REMOTION_RENDER_API_URL") or DEFAULT_API_BASE_URL).strip()
39
+ API_BASE_URL = (
40
+ os.environ.get("REMOTION_RENDER_API_URL")
41
+ or os.environ.get("RENDER_API_URL")
42
+ or DEFAULT_API_BASE_URL
43
+ ).strip()
40
44
  SKILL_NAME = "render-video"
41
45
  AGENT_NAME = os.environ.get("AGENT_NAME", "")
42
46
 
@@ -1927,7 +1927,9 @@ Examples:
1927
1927
  parser.add_argument(
1928
1928
  "--renderer",
1929
1929
  choices=["local", "remote"],
1930
- default=os.environ.get("REMOTION_RENDER_MODE", "remote"),
1930
+ # 只有显式等于 local 才本地渲染;空串 / 拼写错误 / 未设一律 remote
1931
+ # 避免 Nacos 里该键为空值时静默掉进 local 模式(本地渲染需容器内自带 renderer)。
1932
+ default=(os.environ.get("REMOTION_RENDER_MODE") or "remote").strip().lower(),
1931
1933
  help="Render mode: remote=call the remote renderer service (default); local=local Remotion CLI (needs Node.js 18+)",
1932
1934
  )
1933
1935
  parser.add_argument(
@@ -6,7 +6,9 @@ render_job_client.py — ab-api renderJob 接口 Python 客户端
6
6
  gen_jianying_draft.py 使用。
7
7
 
8
8
  认证方式: X-Priv-Token header(与其他 skill 脚本一致)
9
- 接口地址: 由环境变量 MM_BACKEND_API_URL 控制(默认 https://api.remixmate.com/api)
9
+ 接口地址: 优先读 MM_API_BASE_URL(executor 显式转发、全链路标准名),
10
+ 回退 MM_BACKEND_API_URL,再回退默认 https://api.remixmate.com/api。
11
+ 两个变量语义相同,保留回退是为兼容只配了其中一个的部署环境。
10
12
  """
11
13
 
12
14
  import json
@@ -17,7 +19,10 @@ import urllib.request
17
19
 
18
20
 
19
21
  def _api_base() -> str:
20
- return os.environ.get("MM_BACKEND_API_URL", "https://api.remixmate.com/api").rstrip("/")
22
+ return os.environ.get(
23
+ "MM_API_BASE_URL",
24
+ os.environ.get("MM_BACKEND_API_URL", "https://api.remixmate.com/api"),
25
+ ).rstrip("/")
21
26
 
22
27
 
23
28
  def _make_headers(priv_token: str) -> dict:
@@ -30,7 +30,7 @@ No skill-local env file — the executing process inherits the system environmen
30
30
 
31
31
  | Env var | Description | Default |
32
32
  |---------|-------------|---------|
33
- | `RENDER_API_URL` | ab-render service base URL (e.g. `https://api-render.remixmate.com`). Required. | (none) |
33
+ | `RENDER_API_URL` | ab-render service base URL. Falls back to `REMOTION_RENDER_API_URL` (same value across skills), then the default. | `https://api-render.remixmate.com` |
34
34
  | `PRIV_TOKEN` | Tianyan token, sent as `X-Priv-Token`. | (none) |
35
35
  | `CONVERSATION_ID` | Optional, sent as `x-conversation-id` for file association. | (none) |
36
36
 
@@ -24,7 +24,11 @@ import urllib.request
24
24
 
25
25
  # ─── 环境变量 ─────────────────────────────────────────────────────────────────
26
26
 
27
- RENDER_API_URL = os.environ.get("RENDER_API_URL", "https://api-render.remixmate.com").rstrip("/")
27
+ RENDER_API_URL = (
28
+ os.environ.get("RENDER_API_URL")
29
+ or os.environ.get("REMOTION_RENDER_API_URL")
30
+ or "https://api-render.remixmate.com"
31
+ ).rstrip("/")
28
32
  PRIV_TOKEN = os.environ.get("PRIV_TOKEN", "")
29
33
  CONVERSATION_ID = os.environ.get("CONVERSATION_ID", "")
30
34
 
@@ -38,7 +38,12 @@ class FinalizeError(RuntimeError):
38
38
 
39
39
 
40
40
  def _base_url(explicit: Optional[str]) -> str:
41
- base = (explicit or os.environ.get("REMOTION_RENDER_API_URL") or DEFAULT_API_BASE_URL).strip()
41
+ base = (
42
+ explicit
43
+ or os.environ.get("REMOTION_RENDER_API_URL")
44
+ or os.environ.get("RENDER_API_URL")
45
+ or DEFAULT_API_BASE_URL
46
+ ).strip()
42
47
  return base.rstrip("/")
43
48
 
44
49