Agent skill · Content & Marketing

extract-source-sample

Given the path to a finished content-goose ad-run folder, extract everything that defines that ad — recipe shot list, VO script, characters, voices, world, atom-skills, master mp4 — and emit a `source-sample.json` in the exact shape the `upload-ad-sample` skill writes to the Goose Ads library. Also links every character and voice to the central character library at `<repo-root>/assets/character-library/` (repo-root derived from the run-dir, not a hardcoded path), and if a character isn't in the library yet, adds it first then links. Use when the user wants to remix one of their existing ads —

gooseworks-aigithub.com/gooseworks-aiGitHub ↗
claude-codecodexcursorMIT
Install
npx skills add gooseworks-ai/goose-skills --skill extract-source-sample --agent claude-code

Same command for any agent — swap --agent for codex, cursor, copilot.

Facts
Files in the skill folder: 5
SKILL.md size: 23 KB
Bundled scripts: none
Path: skills/ads/composites/extract-source-sample/SKILL.md
Open the folder on GitHub →
Where it comes from
Stars: 1,091
Language: Python

Weekly change comes from our own snapshots, not the repository page — it measures attention, not adoption.

Review
written from the skill's own SKILL.md · Aug 5, 2026

What it does

Extracts the defining components of a completed content-goose ad-run (recipe shots, VO script, characters, voices, world, atom-skills, master mp4) and emits a source-sample.json that matches the shape produced by upload-ad-sample. It links every character and voice to the central character library at <repo-root>/assets/character-library/ based on the run-dir, adding new characters to the library if needed. It prepares data for remixing an existing ad run and is intended for remix workflows, not for rewriting scripts or uploading to the library.

How it works

  • Reads the ad-run folder, tolerating missing or empty files in older runs. Uses production/asset-manifest.json and working/script.json as primary sources, with fallbacks to finals/*.mp4 and other files as needed.
  • Builds source-sample.json with fields: title, format, ratio, formatProfile, media_url, thumbnail_url, brand, tags, recipe, extracted_script, skills_used, skills_source, how_to, production_scripts, remix_spec (worlds, characters, voices, etc.), and production_scripts with paths and roles.
  • Derives remix_spec.worlds[0] from script.json.set_description and remixes remixed structures for characters and voices according to the inputs.
  • Creates remix_spec.characters[] entries for each voice role in script.json.voices, including key, name, gender, anchor_asset_id, anchor_image_url, method, description, catalog_id, and variant_assets[] when per-character pose stills exist in working/characters/.
  • Creates remix_spec.voices[] entries for each voice in script.json.voices, mapping voice_id, voice_name, provider, settings (camelCased), selected flag for the first voice, and catalog_id.
  • Generates remix_spec.skills[] by deriving atom rows from production/asset-manifest.json.assets[] when available; falls back to a canonical recipe for podcast-skit-fabricated if formatProfile matches and production_scripts is empty; otherwise leaves skills_source as guessed/null and lists the derived atoms from production_scripts when possible. Mirrors production_scripts[] as production_scripts in the output.
  • Notes: The agent executes without Python scripts; it reads run folders, builds JSON, and stamps links manually. It instructs handling LFS pointers for large assets and avoids fabricating data.

When to use

  • When you want to extract the source-sample.json for a run to remix it.
  • When you need the upload-sample JSON equivalent to remix this ad.
  • When preparing a run for remix.

What it can touch

  • The run-dir contents to read: working/script.json, production/asset-manifest.json, HOW_TO_MAKE_THIS_VIDEO.md, video-project.json, finals/.mp4, working/characters/.png, working/*.py.
  • The output file: source-sample.json written to <run-dir>/remix/source-sample.json by default.

Caveats

  • The skill adapts to non-clean run folders; the agent tolerates missing files and uses fallbacks.
  • It links characters to the central library at <repo-root>/assets/character-library/ derived from the run-dir; if a character is not present, it is added first then linked. This requires that the repository structure exists at runtime.
  • It does not rewrite scripts, nor perform the remix rendering or uploading; outputs are intended for downstream remix and script steps.
From the SKILL.md

# extract-source-sample This is an **agent-executed** skill. There are no Python scripts. The agent reads the run folder, builds the JSON, and stamps catalog links by hand. The content-goose run folders aren't always cleanly structured (some have empty production/ JSON, some carry everything in working/) — an agent adapts, a script would brittle out. ## When to use - "Extract the source-sample.json for `<run>`." - "Get the upload-sample JSON for this ad so I can remix it." - "Prep `<run>` for remix." Do NOT use to: - Rewrite the script for a new brand (that's a separate agent step that consumes this skill's output). - Render the remix (that's the existing `remix-ad` skill). - Upload an ad to the library (that's `upload-ad-sample`). ## Inputs | Input | Required | Notes | |---|---|---| | `run-dir` | yes | Absolute path to a content-goose ad-run folder (e.g. `clients/ladder/ad-runs/run-02-podcast-skit`). | | `out` | no | Where to write the JSON. Default: `<run-dir>/remix/source-sample.json`. | That's the entire interface. ## What the agent must do ### 1. Read the run Open each file if it exists; tolerate missing files (most production/*.json in older runs are empty stubs — fall back t

What's inside
Steps it walks through
  1. When to use
  2. Inputs
  3. What the agent must do
  4. 1. Read the run
  5. 2. Build source-sample.json
  6. 4. Write the output + summary
  7. Decision rules
  8. Failure modes
  9. Output
Ships with 4 files
  • README.md
  • examples/extract-ladder-run.md
  • references/source-sample-schema.md
  • skill.meta.json
Commands it runs
cd <run-dir-or-repo-root>
git lfs fetch --include=<relative path>
git lfs checkout <relative path>
More from goose-skills
All skills →
About this skill
What does the extract-source-sample skill do?

Given the path to a finished content-goose ad-run folder, extract everything that defines that ad — recipe shot list, VO script, characters, voices, world, atom-skills, master mp4 — and emit a `source-sample.json` in the exact shape the `upload-ad-sample` skill writes to the Goose Ads library. Also links every character and voice to the central character library at `<repo-root>/assets/character-library/` (repo-root derived from the run-dir, not a hardcoded path), and if a character isn't in the library yet, adds it first then links. Use when the user wants to remix one of their existing ads —

How do I install it?

Run `npx skills add gooseworks-ai/goose-skills --skill extract-source-sample --agent claude-code` — it drops the skill into your project so the agent can pick it up. Swap the --agent value for codex, cursor or copilot if you use one of those.

Where does this skill come from?

From gooseworks-ai/goose-skills, a repository with 1,091 stars. We read it straight from the repository tree rather than a submitted listing, so what you see here is what is actually published.

Is a popular skill a good skill?

Not necessarily. Stars measure attention, not adoption — a repository can trend for a week and be abandoned. That is why we show the weekly change from our own snapshots next to the total, instead of a single flattering number.

Keep going