@acedatacloud/skills 2026.613.1 → 2026.614.1

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.
package/AGENTS.md CHANGED
@@ -26,6 +26,9 @@ Skills are located in the `skills/` directory (also mirrored to `.agents/skills/
26
26
  - **seedance-video** — Generate dance/motion videos with ByteDance Seedance
27
27
  - **wan-video** — Generate videos with Alibaba Wan
28
28
 
29
+ ### Video Production (workflow)
30
+ - **marketing-video-factory** — Produce a short-form marketing/feature video end-to-end (orchestrates the media skills: generate assets → capture UI → assemble with FFmpeg → distribute)
31
+
29
32
  ### AI Chat & Tools
30
33
  - **ai-chat** — Unified LLM gateway — GPT, Claude, Gemini, Kimi, Grok (50+ models)
31
34
  - **google-search** — Search the web, images, news, maps, places, and videos via Google
package/README.md CHANGED
@@ -42,6 +42,12 @@ Compatible with **30+ AI coding agents** via the [agentskills.io](https://agents
42
42
  | [hailuo-video](skills/hailuo-video/) | Generate videos with Hailuo / MiniMax |
43
43
  | [seedance-video](skills/seedance-video/) | Generate dance/motion videos with ByteDance Seedance |
44
44
 
45
+ ### Video Production (workflow)
46
+
47
+ | Skill | Description |
48
+ |-------|-------------|
49
+ | [marketing-video-factory](skills/marketing-video-factory/) | Produce a short-form marketing/feature video end-to-end — generate assets + capture UI + assemble (FFmpeg) + distribute |
50
+
45
51
  ### AI Chat & Tools
46
52
 
47
53
  | Skill | Description |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@acedatacloud/skills",
3
- "version": "2026.613.1",
3
+ "version": "2026.614.1",
4
4
  "description": "Agent Skills for AceDataCloud AI services — music, image, video generation, LLM chat, web search. Compatible with Claude Code, GitHub Copilot, Gemini CLI, OpenAI Codex, and 30+ AI coding agents.",
5
5
  "keywords": [
6
6
  "agent-skills",
@@ -0,0 +1,186 @@
1
+ ---
2
+ name: marketing-video-factory
3
+ description: Produce a short-form (9:16, ~30-60s) marketing / feature-explainer video end-to-end using AceDataCloud's own AI APIs — generate B-roll + hero images (Flux/Seedream/NanoBanana/Seedance), a music bed (Suno) and voiceover (TTS), capture real product UI with Playwright, assemble with FFmpeg (burned-in captions), upload to CDN, then distribute. Use when the user wants to make a promo/feature/explainer video, a TikTok/Reels/Shorts/Bilibili/Douyin short, "automated video marketing", or to turn a product feature into a vertical video.
4
+ when_to_use: |
5
+ Trigger when the user wants to PRODUCE a finished short-form video
6
+ (not just call one model): a marketing/feature/promo/explainer short,
7
+ a vertical video for TikTok / YouTube Shorts / Reels / Bilibili /
8
+ Douyin / X / LinkedIn, or an "automated video factory". This skill is
9
+ the playbook that orchestrates the single-service skills
10
+ (flux-image, seedream-image, nano-banana-image, seedance-video,
11
+ veo-video, suno-music, fish-audio, short-url) into one pipeline.
12
+ allowed_tools: [Bash]
13
+ license: Apache-2.0
14
+ metadata:
15
+ author: acedatacloud
16
+ version: "1.0"
17
+ compatibility: Requires ACEDATACLOUD_API_TOKEN (model calls) and ACEDATACLOUD_PLATFORM_TOKEN (CDN upload) in .env (see _shared/authentication.md). Needs ffmpeg, python3 + pillow, and (for screenshots) playwright. Optionally pair with the per-service MCP servers (_shared/mcp-servers.md).
18
+ ---
19
+
20
+ # Marketing Video Factory
21
+
22
+ Turn a product feature into a platform-ready vertical short, made **with the same
23
+ AI APIs you're advertising** (so the video is also a live demo of itself).
24
+
25
+ > **Setup:** [authentication](../_shared/authentication.md) · async behavior:
26
+ > [async task polling](../_shared/async-tasks.md) · tool-use: [MCP servers](../_shared/mcp-servers.md).
27
+
28
+ ## Strategy (read first)
29
+
30
+ 1. **Dogfood.** Generate every asset through `api.acedata.cloud` (Flux, Seedream,
31
+ NanoBanana, Seedance/Veo, Suno, TTS). The output *is* the proof.
32
+ 2. **Real UI is the spine; AI footage is the spice.** For a software/dev product,
33
+ show real screen-captures/screenshots of the product for the demo beats;
34
+ reserve AI-generated clips for intro / atmosphere / transitions. AI models
35
+ hallucinate fake buttons/code → never use them to depict the actual product.
36
+ 3. **Structure every video:** `Hook (0-3s) → Value (4-15s) → Demo (16-50s) →
37
+ CTA (last ~5s)`. One cut every 2-4s. Captions always on (≈85% watch muted).
38
+
39
+ ## Workflow
40
+
41
+ 1. **Brief** the feature: pull real value-prop copy from your docs (verbatim
42
+ on-screen text beats invented copy).
43
+ 2. **Script** a Scene-JSON: per scene = `{visual, duration, caption}`, following
44
+ the hook→value→demo→CTA skeleton.
45
+ 3. **Generate assets** (async — submit then poll): hero/B-roll images, B-roll
46
+ clips, a music bed, voiceover. Use `watermark=false`. Pin aspect to 9:16.
47
+ 4. **Capture UI** screenshots with Playwright (mobile 9:16 viewport).
48
+ 5. **Assemble** with FFmpeg: per-scene render → concat → mix music. Burn captions.
49
+ 6. **Upload** the final MP4 to the CDN; **distribute** per platform.
50
+
51
+ ## Recipe — generate an asset (submit + poll)
52
+
53
+ ```bash
54
+ # Hero / B-roll image. Flux & NanoBanana honor true 9:16; Seedream size is an
55
+ # ENUM (1K/2K/...) and tends to return 16:9 — use Flux for vertical heroes.
56
+ curl -sS -X POST https://api.acedata.cloud/flux/images \
57
+ -H "Authorization: Bearer $ACEDATACLOUD_API_TOKEN" -H "Content-Type: application/json" \
58
+ -d '{"model":"flux-2-pro","prompt":"<scene visual>, deep violet/indigo, cinematic, no text","size":"9:16"}'
59
+
60
+ # B-roll clip (Seedance is fast/cheap; Veo for hero quality). watermark off.
61
+ curl -sS -X POST https://api.acedata.cloud/seedance/videos \
62
+ -H "Authorization: Bearer $ACEDATACLOUD_API_TOKEN" -H "Content-Type: application/json" \
63
+ -d '{"model":"doubao-seedance-2-0-fast-260128","content":[{"type":"text","text":"<motion>, 9:16, no text"}],"resolution":"720p","ratio":"9:16","duration":5,"watermark":false}'
64
+
65
+ # Music bed — instrumental (see suno-music). Then poll /suno/tasks.
66
+ curl -sS -X POST https://api.acedata.cloud/suno/audios \
67
+ -H "Authorization: Bearer $ACEDATACLOUD_API_TOKEN" -H "Content-Type: application/json" \
68
+ -d '{"action":"generate","prompt":"uplifting minimal electronic, premium tech","instrumental":true,"model":"chirp-v5-5"}'
69
+
70
+ # Voiceover — OpenAI-compatible TTS, SYNCHRONOUS (returns audio bytes, no polling).
71
+ # Generate ONE file per scene so the audio aligns to scene boundaries.
72
+ curl -sS -X POST https://api.acedata.cloud/v1/audio/speech \
73
+ -H "Authorization: Bearer $ACEDATACLOUD_API_TOKEN" -H "Content-Type: application/json" \
74
+ -o scene1.mp3 \
75
+ -d '{"model":"tts-1-hd","input":"<scene narration>","voice":"nova"}'
76
+ ```
77
+
78
+ All of the above return a `task_id` — **poll the matching `/<service>/tasks`** until
79
+ `state`/`status` is terminal, then read the media URL (see _shared/async-tasks.md).
80
+ The media is served from `*.cdn.acedata.cloud`. Per-model details: `flux-image`,
81
+ `seedream-image`, `nano-banana-image`, `seedance-video`, `veo-video`, `suno-music`,
82
+ `fish-audio` skills.
83
+
84
+ **Voiceover (TTS):** `POST /v1/audio/speech` is the OpenAI-compatible route — it is
85
+ **synchronous** (returns the audio bytes directly, no `task_id`/polling), models
86
+ `tts-1-hd` (default) / `tts-1`, voices `alloy|echo|fable|onyx|nova|shimmer`, and it
87
+ speaks both English and Chinese. (`/fish/tts` is an alternate voice-cloning route.)
88
+ The endpoint does **not** return word timings — run WhisperX on the returned audio
89
+ for karaoke, or distribute words across the scene duration proportionally.
90
+
91
+ ## Recipe — capture product UI (Playwright)
92
+
93
+ ```python
94
+ # pip install playwright && python -m playwright install chromium
95
+ from playwright.sync_api import sync_playwright
96
+ with sync_playwright() as p:
97
+ b = p.chromium.launch(headless=True)
98
+ # 9:16 viewport so a vertical video doesn't center-crop a desktop layout.
99
+ ctx = b.new_context(viewport={"width":1080,"height":1920}, device_scale_factor=2,
100
+ storage_state="auth.json") # omit for public pages
101
+ pg = ctx.new_page(); pg.goto(URL, wait_until="networkidle"); pg.wait_for_timeout(3500)
102
+ pg.screenshot(path="shot.png")
103
+ ```
104
+
105
+ **Public marketing pages capture anonymously; logged-in console/app pages need a
106
+ saved `storage_state`** (a throwaway demo account) — without it they redirect to
107
+ the login wall.
108
+
109
+ ## Recipe — assemble (per-scene render → concat → music)
110
+
111
+ Do **NOT** build one giant filtergraph with all inputs — with several hi-res
112
+ images + caption PNGs it OOMs ("Cannot allocate memory"). Render each scene
113
+ to an intermediate, then concat (stream-copy), then mux music:
114
+
115
+ ```bash
116
+ W=1080; H=1920; FPS=30
117
+ SCALE="scale=$W:$H:force_original_aspect_ratio=increase,crop=$W:$H,setsar=1,fps=$FPS"
118
+
119
+ # Per scene: a still (loop to DUR) or a clip (trim to DUR) + a transparent
120
+ # caption PNG overlaid. Produce identical-codec segNN.mp4 (no audio).
121
+ ffmpeg -y -loop 1 -t $DUR -i still.png -loop 1 -i capNN.png \
122
+ -filter_complex "[0:v]$SCALE[bg];[bg][1:v]overlay=0:0:shortest=1[v]" \
123
+ -map "[v]" -an -t $DUR -c:v libx264 -pix_fmt yuv420p -r $FPS \
124
+ -video_track_timescale 15360 segNN.mp4
125
+ # (for a clip scene: replace "-loop 1 -t $DUR -i still.png" with "-i clip.mp4")
126
+
127
+ # Concat (all segments share codec/params) + mix music under, with a fade-out.
128
+ printf "file 'seg00.mp4'\nfile 'seg01.mp4'\n..." > segs.txt
129
+ ffmpeg -y -f concat -safe 0 -i segs.txt -c copy video_silent.mp4
130
+ ffmpeg -y -i video_silent.mp4 -i music.mp3 \
131
+ -filter_complex "[1:a]volume=-3dB,afade=t=out:st=$(($TOTAL-1)):d=1[a]" \
132
+ -map 0:v -map "[a]" -c:v copy -c:a aac -shortest one-api-key.mp4
133
+ ```
134
+
135
+ Captions: render each as a **transparent PNG** (Pillow) and overlay — portable
136
+ across all ffmpeg builds (avoids the libfreetype `drawtext` dependency). Use a
137
+ real bold sans (`C:/Windows/Fonts/arialbd.ttf`, `DejaVuSans-Bold.ttf`, etc.),
138
+ 3-7 words/line, white + black stroke; push to the **upper third during UI demos**
139
+ so the product stays visible.
140
+
141
+ > Reference implementation (Scene-JSON contract, caption-burn, render driver,
142
+ > material-library convention): **AceDataCloud/PlatformStudio** — `app/contract.py`,
143
+ > `app/pipeline/`, `scripts/render_veo_rough_cut.py`, `scripts/build_material_catalog.py`,
144
+ > and the curated material index `materials/catalog.json` + `materials/curated.json`.
145
+
146
+ ## Recipe — upload to CDN + distribute
147
+
148
+ ```bash
149
+ curl -sS -X POST https://platform.acedata.cloud/api/v1/files/ \
150
+ -H "Authorization: Bearer $ACEDATACLOUD_PLATFORM_TOKEN" \
151
+ -F "file=@one-api-key.mp4" # -> {"file_url":"https://cdn.acedata.cloud/....mp4"}
152
+ ```
153
+
154
+ Distribute with a short link (`short-url` skill) + per-platform metadata. Author
155
+ once at 1080×1920 inside a centered 900×1400 safe box, then atomize to 16:9 / 1:1.
156
+
157
+ ## Creative cheat-sheet
158
+
159
+ - **Length:** TikTok 15-34s · Shorts/Reels 30-60s · X <60s · LinkedIn 30-90s.
160
+ - **Captions:** always on, karaoke word-highlight, avoid bottom ~20-25% & right edge.
161
+ - **Audio:** final mix ≈ **−14 LUFS**, music **15-20 dB under** voice; sidechain-duck
162
+ (`sidechaincompress`) the music off the narration; `loudnorm=I=-14:TP=-1:LRA=11`.
163
+ - **CTA:** one clear visual CTA in the last ~5s (assume muted).
164
+
165
+ ## Gotchas
166
+
167
+ - **Generation is async** — every model call returns a `task_id`; poll the
168
+ service's `/tasks` endpoint. Don't treat the first response as the result.
169
+ - **Aspect:** pin 9:16 explicitly. `seedream` `size` is an enum (1K/2K/3K/4K) and
170
+ skews 16:9 → use **Flux** (`size:"9:16"`) or **NanoBanana** (`aspect_ratio`) for
171
+ true vertical heroes.
172
+ - **`watermark:false`** on marketing assets (Seedance/Seedream default to true).
173
+ - **Single mega-filtergraph OOMs** on multi-input hi-res jobs → render per-scene
174
+ then `concat -c copy` (above).
175
+ - **Screenshots:** use a **9:16 viewport** (not a desktop one center-cropped);
176
+ logged-in pages need a saved Playwright `storage_state`.
177
+ - **CDN download SSL:** some hosts (e.g. `cdn1.suno.ai`) fail Python `urllib`
178
+ cert verification → fetch with `curl -L` instead.
179
+ - **Music licensing:** Suno free tier is **non-commercial**; paid plans give no
180
+ indemnification → for **paid ads** use a fully-licensed library; keep Suno for
181
+ organic. Master to −14 LUFS regardless.
182
+ - **Don't hard-couple the video model** — keep it swappable (Veo/Seedance/Luma);
183
+ abstract the provider so a deprecation (e.g. a Sora API sunset) is a 1-line change.
184
+ - **Cross-posting:** strip watermarks before re-uploading; rewrite title/hashtags
185
+ per platform; keep Instagram reposts <10 / 30 days; use a humane cadence (bursts
186
+ read as spam).