AI Director - AI Short Drama Generation
Complete AI short drama solution — from concept to finished film, with integrated X2C platform account management and billing.
Multi-User Support
Each user has independent X2C credentials stored in credentials/{USER_ID}.json.
Set USER_ID or TELEGRAM_USER_ID env var when calling scripts:
USER_ID=12345 node {baseDir}/scripts/ad-account-manager.js check-binding
OpenClaw passes the user ID automatically from chat context.
Modules
1. Ad Account Manager
X2C platform account binding and verification.
# Send verification code
node {baseDir}/scripts/ad-account-manager.js send-code user@example.com
# Verify and get API Key
node {baseDir}/scripts/ad-account-manager.js verify user@example.com 123456
# Check binding status
node {baseDir}/scripts/ad-account-manager.js check-binding
# View config options
node {baseDir}/scripts/ad-account-manager.js config
# Unbind account
node {baseDir}/scripts/ad-account-manager.js unbind
# Direct bind with existing key
node {baseDir}/scripts/ad-account-manager.js bind --key "x2c_sk_xxx"
2. Ad Character Manager
Manage custom characters for video production. Max 5 per user.
node {baseDir}/scripts/ad-character-manager.js list
node {baseDir}/scripts/ad-character-manager.js create <name> <gender> <image_url>
node {baseDir}/scripts/ad-character-manager.js delete <character_id>
| Param | Required | Options |
|---|---|---|
| name | Yes | Display name |
| gender | Yes | male, female, other |
| image_url | Yes | Public URL (max 10MB) |
3. Ad Writer (Prompt Engineering)
Agent reads references/AD-WRITER-GUIDE.md and generates a complete script based on user's creative concept. Outputs: title, synopsis, character bios, outline, episode breakdowns, full screenplay.
4. Ad Producer (Video Production)
# View pricing and config
node {baseDir}/scripts/ad-producer.js config
# Generate script
node {baseDir}/scripts/ad-producer.js generate-script "your concept" --wait
# Check script status
node {baseDir}/scripts/ad-producer.js script-status <project_id>
# Produce video
node {baseDir}/scripts/ad-producer.js produce-video <project_id> 1 --wait
# Check video progress
node {baseDir}/scripts/ad-producer.js video-status <project_id> 1
# Full workflow (recommended)
node {baseDir}/scripts/ad-producer.js full-workflow "your concept" --duration 120
Generation Options
| Param | Description | Default |
|---|---|---|
| --mode | short_video / short_drama | short_video |
| --duration | 60 / 120 / 180 / 300 | 120 |
| --ratio | 9:16 / 16:9 | 9:16 |
| --style | Style name | - |
| --episodes | Fixed: short_video=1, short_drama=10 | - |
| --language | zh / en | zh |
| --character-ids | Character UUIDs (comma-separated) | - |
| --wait | Wait for completion | false |
Cost
| Item | Credits | USD |
|---|---|---|
| Script (short_video) | 6 | $0.06 |
| Script (short_drama) | 60 | $0.60 |
| Video 60s | 299 | $2.99 |
| Video 120s | 599 | $5.99 |
| Video 180s | 799 | $7.99 |
| Video 300s | 999 | $9.99 |
Quality Evaluator
Uses Gemini to score video quality against defined criteria.
node {baseDir}/scripts/quality-evaluator.js <video_url> --prompt "original prompt"
node {baseDir}/scripts/quality-evaluator.js <video_url> --json
Requires GEMINI_API_KEY env var or geminiApiKey in config.
Auto-Iterate
Automatically evaluate + improve prompt + regenerate until quality threshold met.
node {baseDir}/scripts/auto-iterate.js "your concept" \
--duration 60 --style "style" --threshold 80 --max-iterations 5
Critical Rules
- Confirm all parameters with user before generating video
- Only use values from config options (styles, categories) — never custom values
- Episodes are fixed: short_video=1, short_drama=10
- Each episode can only be submitted once for production
- Never auto-retry failed generations (costs credits)
- Use async task handling — do not block with --wait in production
- Output video URLs completely, never truncate
- Remove
&response-content-disposition=attachmentfrom video URLs for browser playback
API Reference
See references/X2C-OPEN-API.md for complete API documentation.
Credentials
Store in credentials/{USER_ID}.json:
{
"x2cApiKey": "x2c_sk_xxx",
"x2cEmail": "your@email.com",
"x2cUserId": "user-uuid"
}
Or set X2C_API_KEY env var, or configure via skills."ai-director".env.X2C_API_KEY in ~/.openclaw/openclaw.json.