Archive B-roll
The Internet Archive holds millions of films: Prelinger Archives (industrial, educational, advertising), NASA, newsreels, home movies and Creative Commons uploads. No API key is needed. scripts/archive-broll.mjs (Node 18+, ffmpeg for clip) wraps three endpoints:
| Command | Endpoint | Does |
|---|
search | advancedsearch.php | Lists movie items with reusable rights |
inspect | metadata/<id> | Picks the best MP4, saves thumbnails named by second offset |
clip | download/<id>/<file> | Cuts only the seconds you need over HTTP, writes credits |
1. Search
node <this-skill>/scripts/archive-broll.mjs search "factory assembly line" --rows 12
node <this-skill>/scripts/archive-broll.mjs search "city traffic" --collection prelinger --years 1945-1965
node <this-skill>/scripts/archive-broll.mjs search 'title:(rocket launch)' --collection nasa --json
Terms use Archive search syntax (title:(...), subject:(...), AND, OR); results are ranked by relevance (--sort downloads for popularity). Every result carries a rights label:
| Label | Meaning |
|---|
public-domain | Public-domain mark or CC0. Credit anyway. |
cc-by | Credit required. |
cc-by-sa | Credit required, and the finished video must use the same license. Tell the user before using it in a commercial video. |
collection-policy | No item license; the collection publishes a rights statement (Prelinger Archives). Credit the collection and link the statement. |
Non-commercial, no-derivatives and unknown-rights items are left out. --include-unknown shows unknown items; use one only after the user confirms they hold the rights. Labels come from uploader metadata: they're a filter, not legal advice. Flag anything that looks like a commercial film, TV show or trademark-heavy footage even when it's labelled public domain.
2. Preview
node <this-skill>/scripts/archive-broll.mjs inspect <identifier> --out videos/<slug>/broll --thumbs 16
Writes item.json and thumbnails named by offset (00450s.jpg = 7:30 in). Open them with your image tool and pick start times. --large grabs sharper 640 px frames with ffmpeg when the archive's 160 px thumbnails aren't enough.
3. Cut
node <this-skill>/scripts/archive-broll.mjs clip <identifier> --start 450 --duration 3 \
--out videos/<slug>/broll --name traffic-01.mp4
Output is H.264, no audio (--audio keeps it), short keyframe interval so per-frame seeking stays cheap; --width 1920 upscales. Cut about 0.5 s extra on each side for transitions. Each clip appends to CREDITS.md and credits.json in the output folder.
4. Use in the page
The renderer seeks every <video> to (t - data-helios-offset) + data-helios-seek before each frame and waits for it.
DOM page: place it and style it.
<video id="plate" src="broll/traffic-01.mp4" muted playsinline preload="auto"
data-helios-offset="4.0" data-helios-seek="0.5"></video>
Canvas page: keep the same hidden <video> (style="display:none"), and wait for its seek inside renderAt before drawing:
const plate = document.getElementById('plate');
const settled = (v) => (v.seeking || v.readyState < 2)
? new Promise((r) => { v.addEventListener('seeked', r, { once: true }); v.addEventListener('canplay', r, { once: true }); })
: null;
window.renderAt = async (t) => {
await ready;
if (t >= 4.0) { await settled(plate); ctx.drawImage(plate, 0, 0, W, H); }
// ...
};
Make the footage belong to the look: grade it with an SVG colour matrix, mix-blend-mode, or by drawing it into the style's plates (duotone, halftone, ink density). Most archive film is 4:3 SD from the 1940s–70s: masks, frames and collage suit it better than full-bleed. Check a sheet to confirm the clip moves between frames.
5. Credit
Keep CREDITS.md with the video, and put credits in the end card, description or project docs as the license requires (always for CC BY and CC BY-SA). List the clips and their rights when you hand over.