Blog
Keeping a 10,000-file media library searchable on a desktop
Tags, ingest dates, codec filters, and shared catalogs without committing to a heavyweight MAM. Field-tested folder layouts and naming conventions.
· library, organization, operators, workflow
Article hero (SVG, 1200×630)
A new operator joins on a Monday and asks where last September’s “campaign-launch reels v3” is. The honest answer is usually “in someone’s downloads folder.” The polite answer is “let me check Slack.” The professional answer is “tag:campaign-launch year:2025 status:final” and you scroll until it appears.
Getting from honest to professional is mostly hygiene. You do not need a MAM to do this. You need three columns in your head and discipline about where things land.
Here is what trips most people up
Teams add tags after the file is already four folder-deep on a NAS. By then nobody can remember which name the file was checked in under. Most library failures are timing failures: the tag has to be applied at ingest, not at archive. If your importer cannot ask “what is this for” before saving the file, your library will rot.
The three columns to think in
Forget filename schemes for a second. Every file in a working library has three orthogonal axes:
- What is it? (codec, resolution, runtime, source platform)
- Why do you have it? (campaign, channel, client, internal R&D)
- What state is it in? (raw / proxy / final / sidecar / archived)
If you can answer those three questions about a file in under five seconds, your library works. If you cannot, your library is a directory listing dressed up as a system.
The Clipr library uses tags for the second column (“why”), automatic metadata for the first (“what”), and lifecycle states for the third (“state”). You only have to type the second one — everything else gets read from the file or set by the import flow.
Folder layout that survives
Disagreements happen, but the layout below has worked for three video shops over the last eighteen months:
/library
/raw # untouched downloads, write-once
/2026-04
/2026-03
/working # in-progress edits, rewriteable
/campaign-launch
/tutorials
/final # signed-off masters + sidecars
/campaign-launch
/tutorials
/archive # cold storage, hashed, indexed
Two rules: nothing in /raw ever gets renamed, and nothing in /final ever gets edited in place. If you need to fix a final, copy it back to /working, fix it there, then promote — the audit trail follows naturally.
Tag well, search later
Tags only matter when you can search them. The shortlist for most ops:
- Source tag:
youtube,tiktok,bilibili,internal-cam. Useful for “which platform should I delete from when this license expires.” - Owner tag: who is responsible for it, not who downloaded it. People come and go; channels stay.
- Campaign / project tag: aligns with how finance reports.
- Risk tag:
licensed,editorial-only,do-not-mirror. Pays for itself the first time legal calls. - Status tag:
raw,working,final,archive. Redundant with the folder, intentionally — folders move, tags do not.
You do not need more than that. Adding a sixth tag column means you are about to invent a CMS, which is a different kind of project.
Search recipes that actually get used
Three searches handle 80% of the queries that hit a working library:
tag:campaign-launch status:final→ “what shipped for that thing?”codec:h265 resolution:>=3840→ “what 4K assets do we have to repurpose?”ingested:>2026-04-01 source:tiktok→ “what did we pull from TikTok this month?”
Build those three as saved filters on day one. Anyone new to the team should be able to run them without asking how.
Sharing without inviting chaos
The Team tier adds a shared library that maps onto seat-aware permissions — see features for the audience-by-audience breakdown. The single rule that keeps it useful: the shared library is read-mostly. Editors check files in/out from the shared library to a local working folder. They do not edit in place. This is the same discipline a translation memory system uses, for the same reason: simultaneous writes destroy provenance.
What if it does not work?
- The library has 10,000 files but search returns nothing relevant: tags are not consistent. Pick a normalized tag list (10–15 max), back-fill the existing library in batches of 200, then enforce on import.
- Two operators argue about a file’s owner: ownership is a tag, not a folder. Add an
owner-handoverworkflow that re-tags atomically and announces it in #ops. - Disk fills up because nobody archives: schedule a monthly review of
status:finalfiles older than 90 days. Promote toarchive, hash, drop the working copy. The folder layout makes this scriptable. - A file lost its sidecar SRT: this is what the
finalfolder is for — it should always contain the master plus every sidecar (.srt, .vtt, .json metadata, thumbnail). If sidecars walk away, your save flow is wrong, not your library.
Closing
A 10,000-file library is not a hard problem. It is a boring problem, and that is what makes it stay broken — nobody wants to spend an afternoon arguing about tag taxonomy. Spend the afternoon. Pick the boring layout. The day someone joins and finds a file in five seconds is the day the library starts to feel like infrastructure instead of a closet.
For tier limits and shared library specifics, see pricing. For the ingest-time tagging UX, download the beta and try the Send to library flow on the next thing you grab.