
Video
Generate short-form video clips via fal.ai through Starchild’s billing proxy without wiring submit, poll, and download yourself.
Install
npx skills add https://github.com/starchild-ai-agent/official-skills --skill videoWhat is this skill?
- Text-to-video, image-to-video, and video-to-video through one `generate_video` helper
- Model tiers: budget, balanced, and premium with automatic submit → poll → local mp4 download
- Requires FAL_KEY and uses Starchild paid proxy—do not re-implement billing or upload plumbing
- Serves reference assets via public preview when local files are inputs
- Never deliver raw fal.media URLs—CSP blocks inline playback; use local paths or Starchild-served delivery
Adoption & trust: 970 installs on skills.sh; 13 GitHub stars; 1/3 security scanners passed (skills.sh audits).
Recommended Skills
Video Editagentspace-so/runcomfy-agent-skills
Image To Videoagentspace-so/runcomfy-agent-skills
Image Editagentspace-so/runcomfy-agent-skills
Flux Kontextagentspace-so/runcomfy-agent-skills
Nano Banana 2agentspace-so/runcomfy-agent-skills
Nano Banana Editagentspace-so/runcomfy-agent-skills
Journey fit
Primary fit
Video generation is an external API integration step while you are building marketing assets, demos, or agent-driven media pipelines. The skill is script-driven proxy and fal.ai plumbing—classic third-party integration work, not frontend layout or PM planning.
Common Questions / FAQ
Is Video safe to install?
skills.sh reports 1 of 3 security scanners passed. Review the Security Audits panel on this page before installing in production.
SKILL.md
READMESKILL.md - Video
# video Use this skill for **all video-generation requests** on Starchild. **Core principle:** call the provided scripts. Do not re-implement proxy/billing/upload plumbing. --- ## 1. Text-to-video (most common) ```python exec(open('skills/video/generate_video.py').read()) result = generate_video( prompt="A cinematic drone shot over snowy mountains at sunrise", model="balanced", # "budget" | "balanced" | "premium" duration=5, ) # result -> {"success": True, "cost": 0.70, "video_url": "...", "local_path": "output/videos/..."} ``` `generate_video` automatically: submits → polls → fetches result → downloads mp4 to `output/videos/`. ### Delivering the result to the user — IMPORTANT **Never hand the user the raw `video_url` (e.g. `https://*.fal.media/.../*.mp4`).** fal serves these files with `Content-Security-Policy: sandbox; default-src 'none'`, which means: - Opening the link in a browser shows a **blank page** (no inline player triggered). - Embedding via `<video>` / `<iframe>` is blocked by CSP. - There is no `Content-Disposition: attachment` header, so the browser does not auto-download either. - URL-side tweaks (query params, `?download=1`, etc.) **cannot fix this** — only a server-side header change would, and we don't control fal's CDN. The only reliable user-facing delivery path is the **already-downloaded local file**: 1. Use `result["local_path"]` (e.g. `output/videos/xxx.mp4`) — `generate_video` always downloads on success. 2. Tell the user the file is saved to `output/videos/<filename>` and is viewable in the workspace file panel / file browser. 3. On Web channel, also embed it inline so the user can preview it in chat: ```markdown  ``` (or link as `[video](output/videos/<filename>.mp4)` — the workspace serves these directly with the right headers). 4. On Telegram / WeChat: send the file via `send_to_telegram(file_path="output/videos/...", message_type="video")` or `send_to_wechat(file_path="output/videos/...", message_type="video")`. If the download somehow failed (`local_path` missing) — re-fetch with: ```bash curl -L -o output/videos/<filename>.mp4 "<video_url>" ``` Then deliver the local path. Still **do not** give the user the raw fal URL as the primary deliverable. --- ## 2. Image-to-video / video-to-video (reference assets) fal.ai needs the reference asset as a **public https URL**. fal storage upload requires a Serverless permission your key currently does not have. The reliable path is to expose the asset via **a published Starchild preview**. ### Standard procedure 1. **Drop or copy the asset** into `output/fal_assets/` using `publish_asset.py`. 2. **Make sure a preview named `fal-assets` is running and published** (one-time setup, see §3). 3. **Build the public URL** as `<preview_base>/<filename>`. 4. **Call `generate_video(... image_url=public_url)`**. ```python # Step 1: publish a local image into the asset folder exec(open('skills/video/publish_asset.py').read()) asset = publish_local('/path/to/your/photo.jpg') # or: publish_from_url('https://example.com/photo.jpg') filename = asset['filename'] # Step 2: combine with the preview's public base URL (see §3) public_url = f"https://community.iamstarchild.com/<user_slug>-fal-assets/{filename}" # Step 3: image-to-video exec(open('skills/video/generate_video.py').read()) result = generate_video( prompt="gentle cinematic camera push-in", model="balanced", duration=5, image_url=public_url, ) ``` `generate_video` auto-rewrites the model path from `*/text-to-vi