Install any skill in seconds. Free to start, no credit card required.
Get Started Free →gooseworks-ai/media-proxy
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.
Passed 22 of 23 test cases with the skill, and 4 of 23 without it.
and 18 more in the full report
18 fixed4 passed either way1 still failing0 broke
Tokens, turns and time describe resource use, not a dollar price.
This benchmark measured an earlier version of the skill.
One of 18 test cases the skill fixed. Same model, same prompt, with and without the skill.
Specify the local disk directory path where submitted request IDs and poll URLs are persisted to enable crash recovery.
| Checked | Without skill | With skill |
|---|---|---|
| Specifies the directory path ~/.gooseworks/pending-fal-jobs/ | Missed | Passed |
The instructions your model reads when the skill loads.
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):
Poll-through-outage — _fal_run's poll loop re-attaches to the same status/result
URL through connection refused / timeout blips instead of crashing.
Persist + resume — each submit's 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:
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.
Poll timeout never resubmits (GOOSE-3729) — polling gives up after
default_poll_timeout(model): 1800s for video / lipsync / audio-driven models,
600s for images (GW_FAL_POLL_TIMEOUT_S overrides; timeout_s= per call). A timeout
raises FalPollTimeout carrying .request_id + .model_path — the job is still
running and already paid for. Re-attach with resume_fal(e.request_id); never call
fal_generate* again for it (a veed/fabric lipsync once finished 26s after a 600s
poller quit, and the retry paid for a second identical job).
Proxy dedupe back-stop — the fal proxy returns the already-running job for an
identical submit (same agent + model + body) within 30 min, so an accidental
resubmit re-attaches instead of paying twice (response header x-gw-deduped: 1).
For a deliberate re-roll of the same input (want a new take), pass
new_take=True (fal_generate(..., new_take=True) / fal_generate_video(...)),
which sends x-gw-no-dedupe: 1 (raw HTTP callers: that header or ?dedupe=0).
Pass input_digest= for any piece you save as an ingredient, so a resumed run
never pays twice. The body-match dedupe above breaks after a sandbox restart: the
resumed run re-uploads its inputs (voiceover, stills) and gets NEW urls, so the body
differs. fal_generate*(..., input_digest=d) sends x-gw-input-digest: d; the proxy
test cases passed, vs 4 / 23 without
More skills from the same source and nearby in the registry, with their headline benchmark lift.