Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Shared helper that routes ALL paid media generation (FAL image/video, ElevenLabs music) through the GooseWorks proxies so every call bills the Ads agent — never a provider SDK's default host. Host-swaps the FAL queue URLs, loads the agent token from ~/.gooseworks/credentials.json, and returns the result CDN URL. Every video-ad media capability imports this; templates never call a provider directly.
.claude/skills/gooseworks-ai-media-proxy/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-02 | ✗→✓ | ▲ Improved | -38% | 0% |
| case-03 | ✗→✓ | ▲ Improved | -9% | 0% |
| case-04 | ✗→✓ | ▲ Improved | -29% | 0% |
| case-05 | ✗→✓ | ▲ Improved | -49% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 13% | 0% |
The foundation capability for paid media in the video-ad pipeline. It fixes the auth-path conflict where engine scripts called FAL/ElevenLabs directly (billing the wrong account): all paid calls now go through <api_base>/api/internal/{fal-proxy,elevenlabs-proxy} with ?token=&agent_id=, which bills the Ads agent.
A FAL submit BILLS immediately, but the local backend can blip during a multi-minute render. Two built-in protections (automatic for every capability that imports this):
_fal_run's poll loop re-attaches to the same status/resultURL through connection refused / timeout blips instead of crashing.
request_id + poll URLs are written to~/.gooseworks/pending-fal-jobs/. If the poller still dies, re-attach instead of re-firing (re-firing double-bills): resume_fal(request_id) in Python, or the CLI:
bash resume.py --list # resumable (submitted, unfinished) jobs resume.py --request-id <id> --out final.mp4 # poll to completion + download resume_fal NEVER re-submits, so it can't double-charge.
pythonfrom media_proxy import fal_generate, fal_generate_video, eleven_music, download # image (nano-banana / gpt-image / etc.) — inputs must be PUBLIC urls img = fal_generate("fal-ai/nano-banana/edit", {"prompt": p, "image_urls": [product_url], "aspect_ratio": "9:16"}) # video i2v (kling / seedance / veo) vid = fal_generate_video("fal-ai/kling-video/v2.1/standard/image-to-video", {"prompt": p, "image_url": keyframe_url, "duration": "10"}) # music bed eleven_music(prompt, 10500, "music.mp3", force_instrumental=True)
?token=&agent_id= from ~/.gooseworks/credentials.json(the CLI writes it; run gooseworks login if missing).
status_url/response_url onqueue.fal.run; the helper rewrites them to the proxy base (keeps the path). Never poll queue.fal.run directly (401 + burns credits).
local image/audio via the MCP get_upload_url → get_download_url presigned URL and passes THAT url in. This module does not do MCP uploads (prefer the presigned url; fal-storage-proxy may 404).
*.fal.media url is a real public URL — everything else is behindthe proxy.
create-image-fal, create-video-fal, create-music-elevenlabs.goose-video orchestrator hosts local inputs (MCP upload → presign) before calling these.Other measured skills in the registry, with their headline benchmark lift.