SkillsSkill for Claude

Showreel selects from archived projects

Hand Claude a few finished projects (camera files named only by a counter) and four to six lines describing shots you remember, such as people as silhouettes against the setting sun or a close-up of someone laughing. Claude uses your shot logs to pick the days worth searching, exports 720p proxies of just those days, prices the job against your Vivu plan, indexes them in a private project, runs one search per description, checks every result in frames from your own file, and writes selects.csv with the project, file, start and end, a frame, and an empty column for whether the client allows the shot in a portfolio. Whether a dark shape is a person or a mountain ridge, or whether a plate is sharp, is only in the picture; camera names and shot logs cannot tell you.

Maintained by Vivu. Updated 2026-10-07.

Download

showreel-selects-sheet.zip

9 KB. Unzips to showreel-selects-sheet/SKILL.md. Upload the zip as it is in the Claude app, or unzip it into your skills folder for Claude Code.

SHA-256 5f44d9b5da8b6efffc077f7de98bb6a529047c89a3bea9df72ea90114ad3281a

At a glance

What the Showreel selects from archived projects skill does, where it runs, what it needs, and when it asks
Looks forShots you describe by subject, light and what fills the frame: silhouettes against a sunset, close-ups with a real expression, clean wall or glass plates. Every search result is checked against frames from your own file before it goes on the sheet, and start and end times come from a half second frame sheet, not the search window.
Runs onClaude Code on the computer that holds or mounts your archive (a terminal or the Code tab of Claude Desktop), because it reads local files and runs ffmpeg. Nothing is downloaded from the internet, so no residential IP is needed. It runs once per reel, with no scheduler, and posts nothing anywhere.
Needs
  • The Vivu connector with write access, to create a private project, open its upload page and search
  • ffmpeg and ffprobe, to export 720p proxies, measure them and extract frames for checks
  • Read access to the archive folders of the projects you want searched
  • A folder with free space for the proxies, outside the archive
  • Your shot logs or project notes as text, to pick the days worth exporting
  • A way to upload local files: your own browser, or a browser tool that can attach them (Claude in Chrome takes up to 10 MB per upload call)
  • Permission under each client contract or NDA to process the footage in a cloud service
Your Vivu planIndex minutes equal the length of the proxies you upload, so the skill narrows the archive to the shooting days your shot logs point to before exporting anything. Each description is one precise search, plus one more for a description that needs rewording. In our test run 4 precise searches were used, an estimate of 20 credits. Step 3 shows minutes and credits against your plan before anything is uploaded.
Asks you firstBefore exporting (which projects the contracts allow and which shooting days go in), before uploading (the proxy list and the cost), before searching (the descriptions and their search wording), and before writing the full selects sheet (one sample row and the field mapping).

The skill does its video work through the Vivu connector. If the connector is not in your Claude yet, add it first; the skill checks that it is connected before it does anything else.

Before you run it

  • Client footage goes to a cloud service only when the contract or NDA allows it; the portfolio_ok column stays empty for you to fill.
  • No face recognition: the skill never identifies actors or anyone else. Releases for people on screen, and guardian consent for minors, are your call.
  • The proxies stay in your Vivu project until you delete them. The skill creates the project as private, because the default is visible to your whole workspace.
  • Vivu's search by light and composition is rated weak: it can return look alikes such as a sunset without a person or a soft focus wall. Every result is a candidate until Claude checks it in frames.
  • Asking for unposed or candid shots returned a posed portrait in our test run, because the search sees where the eyes point, not whether someone posed.
  • Search windows run past the shot into the neighboring shot of the same camera file, so start and end times come from frames.
  • Tested on one small corpus of clean public B-roll; recall on a real archive, sharp brick or concrete plates and shot size or camera moves are untested.
  • Claude in Chrome takes up to 10 MB per upload call. Larger proxies go through your own browser or the Vivu web app, and are never split or recompressed.

Start it

Once the skill is installed, ask for the task in your own words. Naming the skill is the most reliable way to have Claude use it. For example:

My last three projects are in /Volumes/Archive/2025 with shot logs in each folder. Find people as silhouettes against a sunset, close-ups with a real laugh, and clean glass building plates, and give me a selects sheet for my reel.

In Claude Code you can also type /showreel-selects-sheet. Claude asks for anything the request leaves out, most important first.

What is inside

  1. When to use
  2. Working principles
  3. What you need before starting
  4. Inputs to collect
  5. Files and state
  6. Step 1: Check the Vivu connector and the setup
  7. Step 2: Pick the shooting days from the shot logs
  8. Step 3: Export proxies and size the job
  9. Step 4: Upload and index
  10. Step 5: Turn the descriptions into search wording
  11. Step 6: Search each description and check frames
  12. Step 7: Build the selects sheet
  13. Compliance
  14. Known failure modes

The full skill

This is showreel-selects-sheet/SKILL.md from the download, as Claude reads it: the frontmatter first, then the instructions.

---
name: showreel-selects-sheet
description: "Find the shots you remember (a sunset silhouette, a laughing close-up, a glass wall plate) across finished projects' camera files with Vivu, and get a checked selects sheet for a reel or treatment."
---

Showreel selects from archived project footage with Vivu

This skill takes a director's or DP's archive of finished projects (camera files named only by a counter, such as A001_C003.MP4 or C0012.MP4) and four to six one line descriptions of shots they remember ("people as silhouettes against the setting sun", "a close-up of someone laughing", "a clean glass facade filling the frame"). Claude helps pick the shooting days worth searching from the user's own shot logs, exports small 720p proxies of just those days, prices the job against the user's Vivu plan, indexes the proxies in a private Vivu project, runs one search per description, checks every result in frames from the user's own file, and writes selects.csv: description, project, source file, start and end time, a frame, and an empty column for whether the client allows the shot in a portfolio. The user cuts the reel from the originals in their own editor.

The value is in what only the picture shows. Camera counters and folder names say which day and which card, and shot logs say "sunset exterior" at best. Whether the dark shape against the sky is a person or a mountain ridge, whether a close-up face has a real expression, whether a wall plate is sharp or soft is only visible in the footage, and this kind of footage usually has no dialogue for a transcript tool to read. Vivu looks at the picture; Claude then looks at frames, because searches by composition and light are the weakest kind of Vivu search, and nothing goes on the sheet as confirmed until a frame shows it.

When to use

Use when someone says "find the sunset silhouette shots from my last three projects", "I need a few close-ups with real emotion for my reel", "pull selects for my director's treatment from old footage", or "which of my archived clips have a glass building plate". It fits a few projects' worth of proxies (tens of clips, 10 seconds to 2 minutes each) that the user may process.

Not for:

  • One quick question about one clip. Open it, or search the Vivu project directly.
  • A whole archive drive. Index only the shooting days the shot logs point to (Step 3); the rest stays on the drive.
  • Recognizing actors or other people. The skill never identifies anyone; the user decides who is in a shot and whether they cleared it.
  • Shot size or camera movement on its own ("all my dolly shots"). This was not exercised in our test run; describe what is in the picture instead.
  • Editing the reel. The skill finds and checks shots; the editor cuts.

Working principles

  1. Report measured numbers, not estimates. When a number is an estimate, say so.
  2. A search result is a candidate until Claude has looked at frames from the user's own file inside the result window. Only rows checked in frames are marked confirmed.
  3. Stop and tell the user when a required capability or tool is missing. Do not guess around it.
  4. Ask the user before anything that is expensive to redo: which days to export and the cost (before upload), and the descriptions with their search wording (before searching).
  5. Write descriptions as things a frame shows: who or what, where the light comes from, what fills the frame. Search results by light and composition can return look alikes (a mountain ridge for a person, a defocused wall for a plate), and the reason text repeats the query's words, so the frame decides.
  6. The Vivu result page link expires after four hours, so it only appears in the live reply. selects.csv refers to clips by the user's own file names and times.

What you need before starting

The skill runs in Claude Code on the computer that holds or mounts the archive (a terminal or the Code tab of Claude Desktop), because it reads local files and runs ffmpeg. Nothing is downloaded from the internet, so no residential IP is needed. It runs once per reel; nothing is scheduled and nothing is posted anywhere. Check each item at the start and tell the user plainly what is missing before doing anything else.

Requirement Why How to check
Vivu connector with write access create a project, open its upload page, search vivu_get_account shows can_create_projects: true (tool names may carry a server prefix). "has not granted vivu.write" means the connection is read only: reconnect Vivu and allow write access. No Vivu tools at all: add the Vivu connector (https://mcp.vivu.ai/mcp) and stop
A shell with ffmpeg and ffprobe export proxies, measure them, extract frames ffmpeg -version and ffprobe -version
Read access to the archive folders find the shooting days and export proxies list one project folder
A folder with free space for proxies 720p proxies are written next to the archive, not over it ask for the folder; check it is writable with mkdir -p
The shot logs or project notes (text) pick the days that may hold the shots ask for the files or pasted text; without them, ask the user which days
A way to upload local files move the proxies into Vivu the user's own browser, or a browser tool that can attach local files (Claude in Chrome takes up to 10 MB per upload call)
Permission to process client footage contracts or NDAs may forbid cloud processing or portfolio use ask the user per project (Compliance)

Inputs to collect

Ask for anything missing, most important first.

  1. The shot descriptions (required). Four to six lines, one shot idea each.
  2. The project folders to look in (required).
  3. Per project, whether the contract allows uploading the footage to a cloud service (required). Projects that do not are left out.
  4. The shooting days to export. Default: the days whose shot log mentions the light, place or subject of a description (Step 2).
  5. Picks per description. Default: up to 3, the best first.
  6. The Vivu project name. Default: "Reel selects YEAR", private.

Files and state

Keep the working files in one folder outside the archive:

reel-selects/
  config.json       project folders, days chosen, project_id, descriptions and their search wording
  proxies/          720p proxies, named PROJECT_ORIGINALNAME.mp4
  proxies.csv       proxy, project, original_path, duration_s, uploaded_name, video_id
  results/          raw result of each description search without its result page link
  frames/           strips and picked frames Claude checked
  candidates.csv    every returned window with its judgment and reason
  selects.csv       confirmed and uncertain picks (Step 7)
  state.json        proxies exported and uploaded with video_id, searches run with job_id, windows judged

A rerun reads state.json first and skips what is done: proxies already exported, already in the project, searches already run, windows already judged. Adding another project later exports and uploads only its new proxies; searches run again because a search covers the whole Vivu project, and judged windows keep their judgment.

Step 1: Check the Vivu connector and the setup

Goal: every row of What you need is present, or the user knows exactly what is missing.

  1. Call vivu_get_account. If the Vivu tools are missing, tell the user to add the Vivu connector in Claude (https://mcp.vivu.ai/mcp) and stop. The account must show can_create_projects: true. If a later write call fails with "has not granted vivu.write", ask the user to reconnect Vivu and allow write access, then retry.
  2. Run ffmpeg -version and ffprobe -version. Without them nothing can be exported or checked; stop and say so.
  3. List one project folder and read the shot logs. Ask the Compliance questions for each project now, before anything is exported.

Done when vivu_get_account shows can_create_projects: true, ffmpeg and ffprobe answer, and the user has said which projects may be uploaded.

Step 2: Pick the shooting days from the shot logs

Goal: a short list of days per project that may hold each described shot.

  1. Read the shot logs or notes for each allowed project. For each description, list the days whose entries mention its light, place or subject ("golden hour", "beach exterior", "interview close-ups", "downtown plates").
  2. Show the user the list per project with the reason for each day, and ask them to add days they remember and drop days they know are wrong. Shot logs miss things; the user's memory is the second source.
  3. Where there are no logs, ask the user which days to include rather than exporting everything.

This step was not exercised in our test run (the test footage came without shot logs; Step 6 describes what was tested).

Done when the user has approved a list of days per project.

Step 3: Export proxies and size the job

Goal: 720p proxies of the chosen days, measured and priced, with the user's approval.

  1. Export each camera file of the chosen days to a 720p H.264 proxy without sound (FILE is the original, PROJECT the project's short name, NAME the original file name without extension). Proxies are small enough to upload and keep the picture Vivu needs; sound is dropped because these searches look at the picture and it makes files smaller:
ffmpeg -v error -i "FILE" -vf "scale=-2:720" -c:v libx264 -crf 23 -preset veryfast -pix_fmt yuv420p -an "reel-selects/proxies/PROJECT_NAME.mp4"

Keep the original path in proxies.csv; selects.csv points back to it. 2. Measure each proxy (PROXY is its path):

ffprobe -v error -show_entries format=duration -of csv=p=0 "PROXY"
  1. Sum to minutes. Searches: one precise search per description, plus one rewording for a description whose first results include a look alike. A precise search uses 5 credits in total, so as an estimate six descriptions are 30 credits before rewordings; label the credit figure as an estimate.
  2. Call vivu_get_usage for the plan and what remains. The plans: Free is $0 a month with 20 indexing minutes a month and 50 search credits a month; Premium is $30 a month with 180 indexing minutes a month and 500 search credits a month.
  3. Show one table:
This job Remaining this month Fits
Index minutes measured sum of proxies from vivu_get_usage yes or no
Search credits (estimate) descriptions x 5, plus rewordings from vivu_get_usage yes or no
  1. If it does not fit, offer these levers in order: drop days that only one weak shot log entry pointed to; drop clips the user knows are unusable (slates only, tests); split the projects into two sessions; move to a larger plan. Name every clip left out.

If vivu_get_usage returns no remaining figures (some admin or team accounts return null), show the needed minutes and credits anyway and ask the user to confirm the allowance.

Exporting proxies from camera originals was not exercised in our test run (the test files were already 720p web copies); measuring and pricing were.

Done when the user approves the proxy list and the cost table.

Step 4: Upload and index

Goal: every approved proxy is ready in one private Vivu project and matched to its row in proxies.csv.

  1. Call vivu_list_projects. Reuse this reel's project if one exists. Otherwise call vivu_create_project with the project name from the inputs and visibility "private"; the default is "organization", which every member of the Vivu workspace can see, and client footage should not be.
  2. Call vivu_open_upload_page with the project_id right before the upload. The link expires in 180 seconds, so request it only when the user or the browser tool is ready, and never paste it into a file.
  3. Give the link to the user to open in their own browser and select the proxies (the page takes many files at once), or open it with a browser tool that can attach local files. Claude in Chrome accepts at most 10 MB per upload call; larger proxies go through the user's browser or the Vivu web app. Never split, trim or recompress a file further to fit.
  4. Poll vivu_list_videos about every 30 seconds until every proxy shows status ready. Vivu replaces spaces and brackets in file names with underscores; match each video back to proxies.csv by the normalized name and by duration_ms against duration_s, and write video_id into proxies.csv and state.json.

The upload through the user's own browser was not exercised in our test run; the test files reached Vivu through a different upload path.

Done when vivu_list_videos shows every proxy as ready and every row of proxies.csv has a video_id.

Step 5: Turn the descriptions into search wording

Goal: one search per description, in words that describe what a frame shows.

  1. For each description, write a query that names the subject, the light and what fills the frame, and says what does not count when a look alike is likely. The first three rows of the table below are the wordings we tested.
  2. Show the user the descriptions with their wording and wait for approval.
Field Query Mode maximum_results
silhouette a person or people seen only as a dark silhouette against a setting or rising sun, with an orange or red sky behind them precise 10
closeup_expression a close-up of one person's face filling much of the frame, showing a visible feeling such as laughing, smiling, sad or surprised precise 10
texture_plate an empty plate shot of a city wall or a glass building facade filling the frame, in sharp focus, with no people precise 10
your own description (a template, not a tested query) subject + where the light comes from + what fills the frame, and what does not count precise 10

Avoid asking for "unposed" or "candid" on its own: the search judges where the eyes point, not whether the person was posing (see the worked example).

All searches are precise: only precise returns a time range and a reason Claude can check; fast returns the whole file with an empty reason, so it is no use for picking a moment. maximum_results 10 leaves room for several takes per description; it is also the ceiling on how many candidates a description can get, so raise it when a search returns exactly 10. There is no speech search in this chain: archived B-roll rarely has dialogue that names a shot.

The chain: the shot logs narrow the archive to a few days; the description search finds windows across those days; frames from the user's own file decide what goes on the sheet.

Done when the user has approved the descriptions and their wording.

Step 6: Search each description and check frames

Goal: for every description, windows that Claude has judged from frames.

  1. Run each description with vivu_search_videos (project_id, query, mode "precise", maximum_results 10). It returns a job_id. Call vivu_get_search_results until complete is true; each status call can wait up to 45 seconds, so a pending search is not a stalled one. Save the completed result as results/FIELD.json with its result_page_url field removed. Show the result page link in the live reply only; it expires after four hours.
  2. For every result, extract a strip of three frames at the start, middle and end of the window (FILE is the proxy, START, MID and END are seconds inside the window, FIELD and NAME name the output):
ffmpeg -v error -ss START -i "FILE" -ss MID -i "FILE" -ss END -i "FILE" -filter_complex "[0:v][1:v][2:v]hstack=inputs=3,scale=1500:-1" -frames:v 1 reel-selects/frames/FIELD_NAME_START.png
  1. Judge the strip against the description: a person (not a ridge, a tree or a shadow on a floor) against a sunset sky; one face large in the frame with a visible expression (not a crowd, not a soft focus street); a wall or glass surface in focus filling the frame. Do not trust the reason text for light, focus or who is in the shot. Write every window into candidates.csv with confirmed, rejected or UNCERTAIN and a few words on what the frames show.
  2. Windows often cover a whole clip or run across two shots of the same camera file. For each confirmed window, make a half second strip to find where the shot starts and stops and to pick the best frame:
ffmpeg -v error -ss START -t LENGTH -i "FILE" -vf "fps=2,scale=320:-2,tile=6x4" -frames:v 1 reel-selects/frames/FIELD_NAME_sheet.png

LENGTH is the window length in seconds (at most 12, so 24 frames fit one sheet; make a second sheet for longer windows). Then save the picked frame at full size with ffmpeg -v error -ss PICK -i "FILE" -frames:v 1 -q:v 3 reel-selects/frames/FIELD_NAME_PICK.png. PICK is the time in seconds of the frame Claude picked on the half second sheet (START plus half a second times the cell index, counting from 0, left to right and top to bottom). 5. If a description's results include a look alike, reword it once (Step 5) and run it again. An empty search does not prove the footage has no such shot; tell the user and ask whether to add days. 6. Report to the user per description: results returned, confirmed, rejected, uncertain.

Worked example from our test run

The test corpus was 6 camera-roll style files (5.01 minutes, no sound, named like A001_C001) joined from public Creative Commons B-roll clips by many different shooters, so each file held several different shots, as a real card does. Truth was written from per second contact sheets before any Vivu call, with look alikes placed next to the targets: a man filmed from behind against a flat daylight sky, a sun setting behind mountains with nobody in the picture, shadows of dancers on a wooden floor, a street crowd, a soft focus market and a soft focus graffiti wall.

In our test run, with 0 rewordings:

  • silhouette returned 3 results, 3 real, 0 false, 0 missed. None of the look alikes came back.
  • closeup_expression returned 3 results, 3 real, 0 false, 0 missed.
  • texture_plate returned 2 results, 2 real, 0 false, 0 missed; the soft focus wall right before the glass tower in the same file was not returned. Both plates in the test corpus were glass; a sharp brick or concrete plate was not tested.
  • A probe for "unposed" close-ups returned 3 results, 2 real and 1 false: a posed portrait whose subject looks into the lens and turns his head away in the last seconds of the take.
  • The run used 4 precise searches, an estimate of 20 credits.

Almost every window ran past the shot into the neighboring shot of the same file, at the start or the end. We made a half second sheet for every confirmed window; it showed the real cut every time, so the start and end in selects.csv come from frames, not from the window. Reading the cut to the half second matters: a per second look put some in points on the last frame of the previous shot or a black card between shots. The six files were ready about 5 minutes after the upload began.

This is one small, clean corpus where each look sits in its own shot, so it says little about recall on a real archive. Searches by light and composition are rated weak in general and have failed on other footage (audience shots, look alike products), so keep the frame check even when a first run looks clean.

Done when every description has a results file, every window has a judgment in candidates.csv, and the user has seen the counts.

Step 7: Build the selects sheet

Goal: selects.csv the user can work through in their editor.

  1. Write one row per confirmed or UNCERTAIN pick, descriptions in the user's order, best first:
description,project,source_file,original_path,start,end,frame_path,status,portfolio_ok
silhouette at sunset,PROJECT,PROXY_NAME.mp4,ORIGINAL_PATH,00:44,00:58,frames/silhouette_PROXY_NAME_0044.png,confirmed,

start and end come from the half second sheet, not the raw window. status is confirmed when frames show the shot, UNCERTAIN when Claude could not tell (say why in candidates.csv). portfolio_ok is always left empty: only the user knows what the contract and the people on screen allow. 2. Show the user the first rows and the field mapping, and wait for a yes before writing the rest:

Field Source If unavailable
source_file, original_path proxies.csv the row is not written
start, end half second sheet inside the search window the raw window, marked UNCERTAIN
frame_path the picked frame empty, status UNCERTAIN
status Claude's frame check UNCERTAIN
portfolio_ok the user empty
  1. Tell the user how to open a pick: the original path and time are enough in any editor; the Vivu result page link from Step 6 works for four hours and is not stored.

In our test run selects.csv and candidates.csv were written from the checked windows; nothing was sent anywhere.

Done when selects.csv and candidates.csv exist and the user has seen the counts of confirmed, rejected and uncertain windows.

Compliance

  1. Client footage. Before Step 3, ask per project whether the contract or NDA allows uploading the footage to a cloud service and showing it in a portfolio. Projects that do not allow upload are left out entirely; portfolio_ok stays empty for the user to fill.
  2. People on camera. The skill does no face recognition and names nobody. Actors, crew and passers by need a release before their shot goes into a reel; that is the user's call, recorded in portfolio_ok. Shots of minors need a parent's or guardian's consent for portfolio use; the skill cannot tell ages and says so.
  3. Where the videos go. Proxies are stored in the user's Vivu project until the user deletes them. Create the project as private; the default "organization" visibility shows it to every member of the workspace. The skill never calls vivu_delete_project or vivu_delete_video unless the user asks, and confirms first.
  4. Nothing leaves the computer except the upload. The skill posts nothing and never writes into the archive; proxies and sheets go into reel-selects/.

Known failure modes

Symptom Cause Fix
(observed) a window starts on the previous shot of the same file (a daylight figure, a mountain sunset) before the silhouette appears windows are wider than the shot and do not stop at a hard cut find the cut on the half second sheet and write that time into selects.csv
(observed) a close-up window ends on the next shot, a street crowd or a wide station view the same trim end from the half second sheet; never use the raw window as an in point
(observed) an "unposed" search returns a posed portrait, with a reason saying "turns his gaze and head away from the camera in an unposed moment" the search sees where the eyes point, not whether the person was posing describe what the frame shows (eyes down, laughing at something off screen) and judge posing from frames
(observed) vivu_get_usage shows "remaining_index_minutes":null admin or team accounts may not report a remaining allowance show the needed minutes and credits and ask the user to confirm the allowance
a sunset with no person, or shadows on a floor, comes back as a silhouette searches by light and composition are weak and can return look alikes reject from frames; add "a person" and what does not count to the wording
a soft focus wall comes back as a plate the same judge focus from the full size frame, not the reason
a description returns nothing although the user remembers the shot an empty result does not prove the footage has no such shot ask which other days might hold it, export them, and search again
"has not granted vivu.write" Vivu connected read only the user reconnects Vivu and allows write access
upload page asks to sign in or shows an error the one time upload link expires after 180 seconds request a new link right before opening it
a proxy is rejected by the browser upload tool the file is above the tool's limit (Claude in Chrome takes up to 10 MB per call) the user opens the upload link in their own browser or adds the file in the Vivu web app; never split or recompress it
two proxies point at the same Vivu video camera counters restart, so two cards share a file name prefix proxies with the project name; match on name and length
a search returns exactly maximum_results windows the search reached its ceiling raise maximum_results for that description

Connect Vivu, then add the skill.

The skill runs through the Vivu connector. Add it to Claude from the connector directory, then install the skill.