Asset library
One register per channel in channels/<slug>/assets/library.json (files in assets/files/),
plus channels/_shared/ for things every channel can use. Channel folders are git-ignored
by default, so the library stays private. Everything goes through scripts/assets.mjs:
node scripts/assets.mjs seed <slug> # after onboarding: imports face anchor, sheet, location stills
node scripts/assets.mjs add <slug> <file|url> --kind broll --tags kitchen,morning --licence pexels --source <page URL>
node scripts/assets.mjs find <slug> --kind broll --tags kitchen --min-dur 3 --unused-days 30
node scripts/assets.mjs use <slug> a-007 --post p-012
node scripts/assets.mjs check <slug>
Kinds and tags
clip (AI character clips we generated), broll, still (character/location images), photo,
music, sfx, voice (approved voice takes), font, logo-free-graphic.
Tags: lowercase, concrete, searchable — the place (kitchen), the mood (calm), the subject
(coffee), the pillar key from settings. 2–5 per asset.
Licences — the only rule that matters
--licence | use it? | credit |
|---|---|---|
own | yes — we generated it (Higgsfield, ElevenLabs) or the owner made it | no |
cc0, pexels, pixabay | yes | no (still record --source) |
unsplash | stills only | no |
cc-by | yes | required: --credit "Photo: Name, CC BY 4.0" → put it in the shot's credit |
licensed | yes — paid; put the order/licence ref in --note | as the licence says |
unknown | never published — find hides it, use refuses it | — |
Never add: anything with a brand logo or a real person's face, screenshots of real chats or posts,
music ripped from TikTok/YouTube/Spotify, "free" sites that don't state a licence. When the owner
gives a file without a source, add it as unknown and ask where it came from.
Where assets come from
- Ours first: every Higgsfield clip and still the producer makes is
own; good unused takes are free b-roll later (--kind clip --job-id …). - Free stock with a clear licence: Pexels / Pixabay video & photos, CC0 libraries. Save the page URL as
--source. - Music: the app's own sound library when posting is safest (trending sounds are added in-app, not baked in). Baked-in beds only with
own/cc0/licensed; keep them atmusic_volume0.06–0.12. - Generate what's missing (Higgsfield
generate_image/generate_video, announce credits first) and add it asown.
How the pipeline uses it
- Writer / video-script:
find --unused-days 30for b-roll so the feed doesn't repeat itself; least-used comes first. - Producer: after a post is produced,
addits clips (--kind clip --licence own --job-id) anduseevery asset that appeared in it. - Before delivering any video that used non-
ownassets:checkmust printCHECK OK, and everycc-byasset's credit is on its shot. - In the cloud sandbox the library isn't checked out: pass assets as their
url(or upload the file withmedia_uploadand use that URL).