Inputs:
EPISODE_NUMBER: Episode folder number (directory:episodes/<EPISODE_NUMBER>)
Output files:
episodes/<N>/cover_art.pngepisodes/<N>/cover_art_prompt.txtepisodes/<N>/cover_art_debug/<RUN_ID>/...(request/response/debug artifacts)
- Ensure
EPISODE_NUMBERis provided. - Ensure
episodes/${EPISODE_NUMBER}/metadata.jsonexists. - Ensure ElevenLabs API key is present in env:
ELEVEN_LABS_API_KEY, orELEVENLABS_API_KEY
- Run:
./.agents/skills/episode-generate-cover-art/scripts/generate_cover_art_elevenlabs.sh --episode-dir "episodes/${EPISODE_NUMBER}"
Behavior guarantees:
- Uses ElevenLabs API endpoints only.
- Prompt format is exact:
Create cover art for the following podcast episode based on this metadata:- followed by raw
metadata.jsoncontent.
- Input source is
episodes/<N>/metadata.json. - Discovers/ranks nano-banana model candidates (from
/v1/modelswhen available), then falls back through nano-banana aliases. - Tries multiple endpoint and payload-schema variants for API compatibility.
- Parses image response from:
- binary image body,
- JSON URL payload,
- JSON/base64 payload.
- Rejects invalid outputs and retries fallbacks:
- non-image content,
- tiny files,
- too-small dimensions,
- low-variance placeholder-like outputs.
Debug artifacts:
- Every request/response attempt is written into
episodes/<N>/cover_art_debug/<RUN_ID>/. - Final selected endpoint/model/output metadata is written to:
episodes/<N>/cover_art_debug/<RUN_ID>/final_selection.txt
Validation:
cover_art.pngmust be non-empty and image-readable.- Final output dimensions and file size are printed by the script.
- For batch verification across episodes:
bash1for n in 3 4 5; do 2 ./.agents/skills/episode-generate-cover-art/scripts/generate_cover_art_elevenlabs.sh --episode-dir "episodes/$n" 3done
- Fail the run if any episode fails to produce valid cover art.