Skill: aaalenwow/ai-video-pro (version 0.2.0)

--- name: ai-video-pro description: 电影级镜头语言解码器。零依赖可用：将创意描述解码为影视级提示词，系统化建模打击感/面部表情渐变/机甲运动五维镜头语言。可选配 API Key 直接生成视频（LumaAI/Runway/Replicate/ComfyUI）。提示词优化本身无需任何外部服务。 user-invocable: true metadata: {"openclaw":{"requires":{"env":[],"anyBins":[]},"primaryEnv":"LUMAAI_API_KEY","stage":"beta","version":"0.2.0"}} --- 用户提供创意描述，输出影视级提示词。可选连接生成后端直接产出视频。 **⚠️ BETA** — 勿用于生产环境。 --- ## 运行模式 | 模式 | 依赖 | 输出 | |------|------|------| | **提示词模式**（默认） | 无 | 影视级优化 prompt，可复制到任意生成工具 | | **生成模式** | API Key 或本地 GPU | 直接调用后端生成视频文件 | > 提示词模式是核心价值所在：无需任何配置，立即可用，输出的 prompt 可直接用于 LumaAI / Runway / ComfyUI 等任意工具。 --- ## 调用示例 ``` # 基础描述 → 影视级 prompt 帮我把这个描述转成视频 prompt：一个武士在雨中拔刀 # 指定风格和平台 生成一个抖音竖屏的动作场景 prompt，风格写实，要有打击感 # 迭代优化 上一个 prompt 的打击感不够，帮我加强一下 # 生成模式（需配置 API Key） 用 LumaAI 生成这个场景：[场景描述] ``` --- ## 核心方法论：五维镜头语言解码 ``` 用户描述 ──解码──→ [镜头类型 × 运镜 × 灯光 × 色彩 × 时间] ──适配──→ Provider Prompt ``` 普通描述和电影级描述的差异在于**隐性专业知识的显性化**： | 维度 | 解码内容 | 关键判断点 | |------|---------|-----------| | 镜头类型 | ECU/CU/MS/FS/WS/鸟瞰/仰拍/荷兰角 | 情感距离与叙事权力 | | 运镜方式 | 固定/Pan/Dolly/Tracking/手持/斯坦尼康 | 观众与场景的关系感 | | 灯光设计 | 轮廓光/伦勃朗/体积光/黄金时刻/霓虹 | 情绪基调与质感 | | 色彩分级 | 青橙对比/去饱和/胶片模拟/冷暖对比 | 风格化程度 | | 时间控制 | 慢动作/延时/变速/定格 | 叙事节奏 | --- ## Phase 1: 镜头语言解码（提示词模式，零依赖） ### 1.1 动作/冲击场景 — 打击感五要素 国内短视频最核心的差异化维度，必须精确建模： ``` ① 重量感 — 攻击者的预备动作幅度、身体质量感 ② 力度反馈 — 被击中者的形变程度（衣物/头发/身体弯曲） ③ 冲击特效 — 火花/碎片/冲击波的密度和扩散方向 ④ 时间节奏 — 预备→接触→反应的帧率变化（慢进快出 / 快进慢出） ⑤ 画面反应 — 镜头抖动幅度、运动模糊方向、色差效果 ``` 未指定时询问：打击力度（轻触/重击/影视夸张）、特效风格（写实/漫画/机甲）。 ### 1.2 角色场景 — 面部表情渐变序列 建模表情的**时间序列变化**，而非静态描述： ``` 示例：[0s] 惊讶（眉上扬、瞳孔扩张）→ [2s] 坚定（下颌收紧、目光聚焦）→ [5s] 胜利（嘴角微扬） ``` 未指定时询问：镜头起止的表情分别是什么、是否有眼神交流。 ### 1.3 机甲/硬核运动 额外建模：关节铰接方向、液压延迟感、质量惯性（重型机甲响应慢）、变形序列节点。 ### 1.4 缺失维度补全 解码时主动检查必要参数，如未指定则询问： - 画面比例（16:9 横屏 / 9:16 抖音竖屏 / 1:1 小红书） - 目标时长（3s/5s/10s） - 视觉风格（写实/动漫/3D/水彩） ### 1.5 Provider 适配输出 根据目标平台重新编码 prompt 风格（或同时输出多平台版本）： | Provider | Prompt 偏好 | |---------|------------| | LumaAI Dream Machine | 自然语言嵌入镜头指令，"camera slowly pans…" | | Runway Gen-3/4 | 结构化，镜头/主体/风格分段 | | Replicate/SVD | 简洁，强调主体动态 | | ComfyUI 本地 | checkpoint + scheduler + LoRA 标签 | **同时展示原始描述和优化后 prompt**，用户确认后再进行下一步。 --- ## Phase 2: 视频生成（生成模式，需 API Key 或 GPU） **后端选择（最小代价优先）：** | 优先级 | 后端 | 条件 | 成本 | |--------|------|------|------| | 1 | ComfyUI 本地 | NVIDIA 8GB+ VRAM | 免费 | | 2 | Replicate 免费层 | API Token | 免费(有限) | | 3 | LumaAI 免费层 | API Key | 免费(有限) | | 4 | LumaAI 付费 | API Key | ~¥3.5/视频 | | 5 | Runway 付费 | API Key | ~¥7/视频 | 推荐方案和预估成本先展示给用户确认，再调用 API。 ```bash python3 scripts/env_detect.py # 检测可用后端 python3 scripts/provider_manager.py --backend <backend> --prompt <prompt_file> python3 scripts/preview_server.py --file <video_path> --port 8765 ``` **数据流向**：优化后的 prompt 发送至用户选择的生成后端（LumaAI/Runway/Replicate）。原始描述仅在本次会话中处理，不向其他第三方传输。 --- ## Phase 3: 迭代优化 保留解码结构，仅调整目标维度： | 反馈 | 调整方向 | |------|---------| | 打击感不足 | 增加特效密度、加强时间节奏对比 | | 镜头感弱 | 升级运镜（手持 → 斯坦尼康 / 固定 → Dolly） | | 情绪不对 | 调整色彩分级基调 + 表情序列终点 | | 风格漂移 | 固定 LoRA/风格标签，切换 Provider | 支持图生视频：上传关键帧作为风格锚点，保持角色一致性。 --- ## 输出格式（提示词模式） ```json { "original_description": "用户原始描述", "decoded_dimensions": { "shot_type": "CU 近景", "camera_movement": "手持跟拍", "lighting": "伦勃朗光 + 轮廓光", "color_grading": "青橙对比，高饱和", "temporal": "接触瞬间慢动作 0.3x" }, "prompts": { "lumai": "A close-up shot, handheld camera following...", "runway": "Shot type: CU. Subject: ...", "universal": "通用版本（可用于任意平台）" }, "missing_params": ["画面比例未指定，建议确认"] } ``` --- ## 边界与合规 **本技能做什么：** 提示词工程优化、镜头语言建模、生成后端调度。 **本技能不做什么：** - 提示词模式不需要、不访问任何外部服务 - 不存储用户提交的创意描述 - 不自动发布到任何平台（发布需要用户显式授权和凭证配置） **凭证（均为可选，仅生成模式需要）：** - `LUMAAI_API_KEY` / `RUNWAY_API_KEY` / `REPLICATE_API_TOKEN` / `OPENAI_API_KEY` - 所有凭证仅通过环境变量读取，不持久化、不记录

path: assets/platform_configs/douyin.json
content: {
  "platform": "douyin",
  "display_name": "抖音",
  "video": {
    "max_resolution": {"width": 1080, "height": 1920},
    "max_file_size_mb": 128,
    "max_duration_seconds": 900,
    "supported_aspect_ratios": ["9:16"],
    "preferred_aspect_ratio": "9:16",
    "format": "mp4",
    "video_codec": "libx264",
    "audio_codec": "aac",
    "audio_bitrate": "128k",
    "fps": 30,
    "crf": 23,
    "preset": "medium"
  },
  "api": {
    "base_url": "https://open.douyin.com/",
    "upload_endpoint": "api/douyin/v1/video/upload/",
    "publish_endpoint": "api/douyin/v1/video/create/",
    "auth_type": "oauth2",
    "env_var": "DOUYIN_ACCESS_TOKEN",
    "doc_url": "https://developer.open-douyin.com/"
  },
  "ffmpeg_command": "ffmpeg -i {input} -c:v libx264 -preset medium -crf 23 -c:a aac -b:a 128k -movflags +faststart -vf \"scale=1080:1920:force_original_aspect_ratio=decrease,pad=1080:1920:-1:-1:black\" {output}"
}


path: assets/platform_configs/weibo.json
content: {
  "platform": "weibo",
  "display_name": "微博",
  "video": {
    "max_resolution": {"width": 1920, "height": 1080},
    "max_file_size_mb": 500,
    "max_duration_seconds": 900,
    "supported_aspect_ratios": ["16:9", "9:16", "1:1"],
    "preferred_aspect_ratio": "16:9",
    "format": "mp4",
    "video_codec": "libx264",
    "audio_codec": "aac",
    "audio_bitrate": "128k",
    "fps": 30,
    "crf": 23,
    "preset": "medium"
  },
  "api": {
    "base_url": "https://api.weibo.com/2/",
    "upload_endpoint": "statuses/upload_video.json",
    "auth_type": "oauth2",
    "env_var": "WEIBO_ACCESS_TOKEN",
    "doc_url": "https://open.weibo.com/wiki/"
  },
  "ffmpeg_command": "ffmpeg -i {input} -c:v libx264 -preset medium -crf 23 -c:a aac -b:a 128k -movflags +faststart -vf \"scale='min(1920,iw)':'min(1080,ih)'\" {output}"
}


path: assets/platform_configs/xiaohongshu.json
content: {
  "platform": "xiaohongshu",
  "display_name": "小红书",
  "video": {
    "max_resolution": {"width": 1080, "height": 1440},
    "max_file_size_mb": 100,
    "max_duration_seconds": 900,
    "supported_aspect_ratios": ["3:4", "1:1", "9:16"],
    "preferred_aspect_ratio": "3:4",
    "format": "mp4",
    "video_codec": "libx264",
    "audio_codec": "aac",
    "audio_bitrate": "128k",
    "fps": 30,
    "crf": 23,
    "preset": "medium"
  },
  "cover": {
    "required": true,
    "recommended_size": {"width": 1080, "height": 1440},
    "format": "jpg"
  },
  "api": {
    "base_url": null,
    "auth_type": "cookie",
    "env_var": "XHS_COOKIE",
    "warning": "小红书无官方开放 API，使用 Cookie 模拟发布存在 TOS 违规风险。建议导出发布就绪文件后手动上传。",
    "doc_url": "https://www.xiaohongshu.com/"
  },
  "ffmpeg_command": "ffmpeg -i {input} -c:v libx264 -preset medium -crf 23 -c:a aac -b:a 128k -movflags +faststart -vf \"scale=1080:1440:force_original_aspect_ratio=decrease,pad=1080:1440:-1:-1:black\" {output}"
}


path: assets/prompt_templates/action_scene.md
content: # 动作/战斗场景提示词模板

## 必需元素清单

- [ ] 参与角色数量及描述
- [ ] 打击类型（拳击、武器、能量攻击等）
- [ ] 打击力度级别（轻触/重击/影视夸张）
- [ ] 被击反应（倒退/倒地/防御/格挡）
- [ ] 冲击特效（火花/碎片/冲击波/无）
- [ ] 角色受伤表现（划痕/破损/变形/无）
- [ ] 面部表情变化序列
- [ ] 运镜方式
- [ ] 镜头速度（正常/慢动作/变速）
- [ ] 画面比例和时长

## 缺失检测规则

如果用户未指定以下要素，必须主动询问：
1. **打击力度**: "这个打击场景需要什么级别的冲击力？轻柔的接触、沉重的打击、还是夸张的影视效果？"
2. **受击反应**: "被击中的角色应该如何反应？后退、倒地、格挡还是被击飞？"
3. **表情变化**: "攻击者和被击者在打击前后的面部表情分别是怎样的？"
4. **受伤效果**: "需要表现受伤效果吗？比如划痕、护甲破损、流血等。"

## 示例 Prompt

### 输入
"两个武士在雨中决斗"

### 分析输出
```
场景类型: 动作/战斗
角色: 两名武士（需补充外观细节）
环境: 雨中（需确认具体场景——竹林/城镇/河边？）
缺失要素:
  - 打击力度未指定
  - 受击反应未指定
  - 面部表情未指定
  - 受伤效果未指定
  - 运镜方式未指定
```

### 优化后 Prompt (LumaAI 适配)
```
Cinematic slow-motion shot of two samurai warriors locked in a
rain-drenched duel. Camera tracks in a low-angle orbit around them.
The first warrior swings his katana with devastating force, the blade
cutting through sheets of rain. The second warrior parries, sparks
flying from the clash of steel. Rain droplets freeze in mid-air
during the impact moment. The attacker's face shows fierce
determination with gritted teeth, while the defender's expression
shifts from shock to resolute defiance. Rembrandt lighting from
a single paper lantern, teal and orange color grading, water
splashing in volumetric light beams. Photorealistic, 4K quality.
```

### 优化后 Prompt (Runway 适配)
```
Subject: Two samurai warriors in combat stance, katanas clashing
Camera: Low-angle tracking orbit, slow motion at contact point
Lighting: Rembrandt side light from paper lantern, volumetric rain
Style: Photorealistic, cinematic, teal-orange grading
Action: Powerful sword clash, sparks and water spray at impact
Environment: Rain-soaked courtyard, reflective wet stone ground
Expression: Attacker - fierce determination; Defender - resolute defiance
```


Security scan verdicts — ClawScan: suspicious | static analysis: clean | VirusTotal: clean | SkillSpector: suspicious (CRITICAL)