Skip to content
Content
Skill

/create-library

Create a new ButterCut library. Gather library info (name, footage location, language, transcript proofreading) and scaffold the library. Use when the user wants to start a **new** library. Libraries are containers of footage and footage analysis (transcripts, contact sheets,

BOOST
From plugin
buttercut
60316 skills
Install
$ npx -y skills add barefootford/buttercut --skill create-library --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/create-library

Context preview

The summary Claude sees to decide when to auto-load this skill.

Create a new ButterCut library. Gather library info (name, footage location, language, transcript proofreading) and scaffold the library. Use when the user wants to start a **new** library. Libraries are containers of footage and footage analysis (transcripts, contact sheets,

SKILL.md

create-library.SKILL.md
name: create-library
description: Create a new ButterCut library. Gather library info (name, footage location, language, transcript proofreading) and scaffold the library. Use when the user wants to start a **new** library. Libraries are containers of footage and footage analysis (transcripts, contact sheets, etc). User's may also refer to Libraries as "projects" or similiar. Ask them to confirm if they want a new Library (footage container) or just a new cut (roughcut, select, etc) if unsure.

Skill: Create Library (parent brief)

This skill is performed in the main thread.

Step 1 — Initialize settings (one-time)

Before any library setup, check if `libraries/settings.yaml` exists. If not, copy from template:

cp templates/settings_template.yaml libraries/settings.yaml

If no previous `settings.yaml` was present, use `AskUserQuestion` to ask the user to confirm or change their defaults (editor and `whisper_model`).

Editor options (label shown to user → value to save):

  • Final Cut Pro X → `fcpx` (macOS only — don't offer this option on Windows)
  • Adobe Premiere Pro → `premiere`
  • DaVinci Resolve → `resolve`

`whisper_model` options:

  • Small (recommended — pairs well with per-library `transcript_refinement`)
  • Medium
  • Turbo (Large)

Save the shortcode (`fcpx` / `premiere` / `resolve`) to `libraries/settings.yaml`.

Step 2 — Gather project information

First, guard against clobbering an existing library. Once you have a candidate name (after question 1 below), check:

ruby lib/buttercut/library.rb <name> exists   # exits 0 if it does, 1 if not

If it already exists, stop creating — the user is really resuming or adding footage. Switch to the `process-library` skill instead.

Ask the user these questions one at a time — never all at once.

1. **What do you want to call this project library?**

  • Examples: "bike-locking-video-series", "raiders-2025-highlights", "yo-yo-techniques"
  • Normalize the name: replace spaces with dashes, lowercase, drop special characters (keep alphanumeric and dashes).

2. **Where are the footage files located?**

  • Ask: "Where are your videos and photos? You can drag folders or individual files directly into the chat."
  • A library can hold videos *and* still images (photos, screenshots, title cards). Supported: video — `mov`, `mp4`, `mts`, `m2ts`, `mxf`, `avi`; image — `jpg`, `jpeg`, `png`. Anything else is rejected with a message naming the supported sets (it can be converted with ffmpeg first).
  • Verify all files exist before proceeding.
  • Inform the user of what was found: "Found 5 videos and 3 photos totaling 2.3GB."

3. **What language is spoken in these videos?**

  • `AskUserQuestion` with options: "English", "Spanish", and a free-text fallback for other languages.
  • Save the language name (e.g. "English") to library.yaml.
  • Map to a language code (e.g. `en`, `es`, `fr`) behind the scenes when needed for transcription.

4. **Can I proofread the transcripts after they're generated?**

  • `AskUserQuestion` with this exact question: "Can I proofread the transcripts after they're generated? I'll use the video's context to fix mistakes."
  • Options: "Yes — Recommended (Use Claude to refine video understanding)" and "No".
  • Save the boolean to `transcript_refinement` in library.yaml (true for Yes, false for No). Default to `true` if the user skips.

Read the `editor` from `libraries/settings.yaml` — you'll pass it into the create call next.

Step 3 — Create the library

`Library.create` is the one operation that doesn't have a plain CLI form (kwarg-heavy). Run it via `ruby -e`. It creates the directory tree (transcripts/, contact_sheets/, summaries/, cuts/, plans/, misc/), ffprobes each video for duration, and writes library.yaml in one call. `media_paths` takes videos and images together — the type is inferred from each file's extension:

ruby -e "require_relative 'lib/buttercut/library'; \
  Library.create('my-library', \
    language: 'en', \
    editor: 'fcpx', \
    transcript_refinement: true, \
    media_paths: ['/abs/foo.mov', '/abs/title-card.png'])"

Each video entry starts with empty `transcript`, `contact_sheet`, and `summary` — empty means "todo", filename presence means "done." Image entries get only an empty `summary` (no transcript, contact sheet, or duration — stills are timeless).

Step 4 — Hand off to process-library

The library now exists but no footage has been analyzed. Continue straight into the `process-library` skill to analyze the footage end-to-end. Read that skill and continue processing the library.

Tell the user: "Library setup complete. Found [N] videos ([55 minutes of footage]). Starting footage analysis..." then proceed with `process-library` against the library you just created.

Notes

  • Migrations: creating a fresh library always writes the current schema, so no migration is needed for the new one. But if you touched any pre-existing library here, check its schema against `templates/library_template.yaml` and run `ruby lib/buttercut/library.rb migrate` if anything's missing or renamed. See AGENTS.md → Critical Principles.
  • Terminology: user-facing, this is "setting up a project" or "creating a library."
Read more
Ships withbuttercut

This is the source code for the core ButterCut XML generator and video editing agent. If you love or hate Docker, have opinions on types, and have a favorite text editor, this is the spot for you.

Get the whole plugin
Stats
604
Stars
98
Forks
Active
Maintenance
Ruby
Language
23d ago
Last commit
11mo ago
Created
2h ago
Added

Repo: barefootford/buttercut

Other skills on buttercut.

bc
Skill

bc

The ButterCut home menu — welcome the user back, then ask what they'd like to do (start a new cut, add footage to a library, a…

cut
Skill

cut

Build a cut from a library — scene, selects, roughcut, custom task, or an edit from a written script. Starts by asking what kind…