BetterLibrary app icon
BetterLibrary, a clip library for the Mac

Thousands of clips. Found in a sentence.

A Mac clip library for footage that outgrew the camera roll and the folder called Final. Tag every clip your way, let AI describe and highlight it, and ask for the shot in plain words.

Free to download. macOS 14.4 or later, Apple silicon or Intel. Your footage stays in a folder you own, and the AI is optional.

The BetterLibrary window: the Library shelf as a grid of clips, with the inspector open on one.
Where footage goes to die

You know you shot it. You cannot find it.

Every take you ever made is in a camera roll with no names and no tags, or on the Mac in Untitled folder 3 next to IMG_4821.MOV and three copies of the same take. The search does not know your work, so the good take from March is gone until you scrub for it.

The camera roll

Thousands of clips in date order, a thumbnail each, and a search that has never heard of your client, your gym or your golden hour.

The messy folder

Footage lands on the Mac and stays where it landed. Names are numbers, folders are guesses, and every take exists in three places.

The library you cannot trust

Even a sorted folder does not say which take was the keeper, where the good three seconds are, or what you already used.

Pillar 1

Built for large libraries.

Thousands of clips across years of shoots, in one window that stays fast and one folder you own.

A whole card in one gesture

Drop a folder, paste from Finder, or import. Folders are scanned recursively, duplicates are caught by content fingerprint before anything is copied, and originals are filed into the library by year and month. Your source files are never touched.

  • Import the card twice. Duplicates get one Finder-style question: Skip, Keep, Cancel.
  • Any format your Mac plays. iPhone HEVC, HDR, ProRes, drone and mirrorless files preview natively.
  • One sheet per batch sets shared properties like Location or Client and whether to tag with AI on landing.

Four shelves, two layouts, every count

Library holds what you approved. In Progress is the to-do list. Archive sets things aside. All Clips is everything. Each shelf remembers its own layout, sort and columns, and the sidebar shows the count of every shelf, tag and view.

  • Grid or table, sortable by imported, created, name, duration, size, dimensions or relevance.
  • Finder-style selection, hover-to-play previews, Quick Look with Space, multiple windows over one library.
  • The In Progress count is the number of decisions left.
The All Clips shelf as a table, with status, properties and highlight columns.
Pillar 2

Tag it your way.

The schema is yours: as many properties as the work needs, as detailed as you want, and filters that find any slice of the library.

Your own properties, Notion-style

Five types: multi-select, single-select, yes/no, a 1 to 5 scale (stars, hearts, flames, bolts, dumbbells, dots or a number), and text. Every tag carries a description that says when it applies. Each property is AI-filled or manual, and the model never touches a manual one.

  • A property manager that creates, renames, re-describes, reorders and merges tags with every clip keeping the survivor.
  • Six ways to apply a tag: the inspector, a drag onto a sidebar tag, bulk edit, a batch on import, a view, the command line.
  • Your schema is a file. Export Properties writes properties.jsonc; Import previews every rename, merge and deletion first.
The Properties settings: a list of properties, one selected with its tags and their descriptions.

Filters that nest, views that remember

All-of and any-of groups, nested as deep as you like: tags, yes/no including not set, scale thresholds, text in three modes, orientation, dates, status, AI status. Each condition is a chip you can drop. A view saves the filter plus the look.

  • Drop clips onto a view and the app offers to tag them so they would match.
  • Bulk edit in words: ⌘E spells out every change to the selection before it applies.
  • Three text modes. Fuzzy forgives typos, Includes is literal, Meaning finds synonyms on-device.
Pillar 3

AI tags, highlights and finds.

The model does the tedious part in your vocabulary. You read, fix and approve with one key.

Tagging lands in your words

For each clip the model writes a short name and a one-line description, fills your AI properties from your tag descriptions, and drafts a few named highlights: the moments inside the clip worth keeping. It can only choose from tags you defined, so nothing is invented and the taxonomy never drifts.

  • The AI never marks Ready. It fills; you approve with ⌘R. Approving a row is ↓ ⌘R ↓ ⌘R.
  • A queue that survives relaunch, with Cancel and Retry per clip and a progress dial in the sidebar.
  • Every call logged with model, tokens, duration and cost, in the library folder.

Ask for the shot in a sentence

“Portrait gym clips from this summer, energetic, newest first.” Press ⌘K, type that, and it comes back as a real filter: tags, dates, orientation, status, a meaning search for the words with no tag, and a sort. You see the filter it built, change it, and save it as a view.

  • An answer you can trust, because it is a filter, not a black box.
  • Meaning search stays on the Mac: a bundled sentence model, no key, no network.
  • Ask sends your sentence and your schema, never footage.
The Ask card over the library window, with a sentence typed into it.

Highlights mark the moment

Open a clip and the drafted highlights sit under the strip, each a named in and out point that never touches the file. Rename one, drag its edges, add your own at the playhead with ⇧⌘H. S turns on skimming, like Final Cut.

  • Edges snap to the playhead, other rows and the clip's ends; ⌥ drags freely.
  • Lossless trim cuts dead air off the file itself on keyframes, after asking.
  • Split at Playhead makes two clips, each keeping its name, properties and highlights.
A clip page: the clip strip with named highlight rows under it and the inspector beside it.
Claude Code

Filters, searches and tags from a prompt.

Every library carries a CLAUDE.md and the app ships a command line that applies the same rules as the window. Open Claude Code in the folder and describe the view you want; it builds the filter, saves it, and the sidebar updates while you watch.

  • >Make a view of portrait clips rated 4 flames or more from this year, newest first.
  • >Tag everything from Tuesday's shoot and describe each clip in one line.
  • >Find the ten most cinematic drone shots from spring and export the best five seconds of each.
Claude Code with BetterLibrary
betterlibrary clips list --orientation portrait --after 2026-01-01 --sort created --json
betterlibrary views create "Portrait, this year" --filter-json "$FILTER"
betterlibrary clips tag 3f9a c21e --add "Location:Gym" --add "Vibe:Energetic"

The moment leaves as a real file.

A highlight is two timestamps and a name in the index; the file is untouched until you drag. Then BetterLibrary remuxes the range without re-encoding and hands over a file named after the moment. The BetterEdits timeline, a Final Cut event, Finder, Messages: anything that accepts a drop.

  • Lossless. Samples are copied, not re-encoded, in any codec your Mac plays.
  • Named after the moment. “Kettlebell swing, wide.mov”, not IMG_4821 again.
  • Export to a folder, the share sheet, or ⌘C to paste files into Finder.

Library and settings

A library is an ordinary folder you own; everything the app knows lives inside it.

  • A folder you own

    library.db (an SQLite index), originals/ filed by year and month, thumbnails/ and renders/ caches, settings.jsonc and a CLAUDE.md. No account, no cloud.

  • Several libraries⌘O

    One library is open at a time. Keep one per client or per year and switch with File > Open or Create Library; File > Open Recent lists the ones you have used.

  • Portable on any drive⇧⌘W

    Paths in the database are relative to the folder. Close the library, move or copy the whole folder to an external SSD, a NAS share or a synced folder, and reopen it.

  • Caches you can delete

    thumbnails/ and renders/ are caches; deleting them costs time, not data. library.db and originals/ are the library, so those are what you back up.

  • Settings travel with the footage⌘,

    Almost every setting belongs to the open library and is stored in its settings.jsonc, a JSON file with comments that is safe to edit by hand. Keys the app does not know are kept.

  • Every key documented

    geminiApiKey, geminiModel, aiGatewayApiKey, aiGatewayModel, aiConcurrency (1 to 8, default 4), autoTag, libraryDescription, modelPricing, the audio choices, each shelf's look and importDefaults.

  • macOS 14.4 and later

    Apple silicon or Intel. On macOS 26 the app takes the Liquid Glass look; earlier systems get the same features in the classic style.

Importing

Getting footage into a library, what happens to each file, and how duplicates are handled.

  • Drag, paste or import⌘I

    Drag files or folders from Finder onto the window (folders are scanned recursively), paste files copied in Finder, or use File > Import Files, which accepts files and folders.

  • One sheet per batch

    Set properties on everything in the batch (a Location, a Client, a yes/no) and choose whether to tag it with AI once it lands. The last choice is remembered per library.

  • Duplicates caught by content

    Files are fingerprinted before anything is copied. If some are already in the library you are asked once, Finder-style, whether to Skip them, keep them as duplicates, or cancel.

  • Originals copied and filed

    Each video is copied into originals/<year>/<month>/ by capture date. Your source file is untouched, and you can delete it once the import has finished and the count looks right.

  • Metadata and poster frame

    Dimensions, duration, capture date, camera make and model, lens, codec, frame rate, HDR, audio channels and tracks are read. The poster comes from the first frame, so hover playback matches the still.

  • Any format macOS plays

    Video only: MP4, MOV, M4V and every codec AVFoundation decodes, including iPhone HEVC, HDR and ProRes, previewed natively with no transcoding. Images and audio files are skipped.

  • Progress and failures

    One batch runs at a time. A progress bar at the bottom of the window shows the count and offers Cancel; files that fail are listed when the batch finishes.

  • Rebuild Metadata

    Library > Rebuild Metadata re-reads every clip's file and refreshes its technical metadata and poster frame. Names, descriptions, properties and highlights are not touched.

The library window

Sidebar, grid and table, inspector, and the things you can do to a selection.

  • Four shelves

    Library (Ready), In Progress (New and Draft), Archive and All Clips, each with a count in the sidebar. Every shelf remembers its own layout, sort and columns; Reset View restores the default.

  • Grid or table

    Sort by Imported, Created, Name, Duration, File size, Dimensions, or Relevance while a search is active. The Show menu picks which properties appear as table columns and card tags; long text can wrap.

  • Finder-style selection⌘A

    Click selects, ⌘-click toggles, ⇧-click extends, arrow keys move the selection with ⇧ to extend, Esc clears. Hovering a card plays the clip, muted and looping.

  • Quick LookSpace

    Space opens a Finder-style Quick Look window that follows the selection; ← and → step through the grid without closing it. Space or Esc closes. Double-click opens the clip in its own window.

  • The inspector

    One clip: name, status, file facts, description, every property and its highlights. Several: what they share, plus Tag All with AI, Tag Empty with AI, Reset, Share, Export to Folder and Move to Trash.

  • Bulk edit in words⌘E

    Select several clips and press ⌘E. The bulk edit sheet spells out every change it will make before you apply it.

  • Multiple windows⌘N

    ⌘N opens another window over the same library, with its own shelf, selection and filters. Menu commands act on the window in front.

  • Trash and Reset⌘⌫

    Move to Trash removes clips after a confirmation; the originals go to the macOS Trash. Reset wipes a clip's name, description, properties and highlights, takes back any AI request, and keeps the file.

Statuses and approval

New, Draft, Ready and Archived; the shelves built on them; and why the AI never changes one.

  • New, Draft, Ready, Archived

    New is imported and untouched. Draft means something changed, by hand or because an AI answer landed. Ready is approved. Archived is set aside, kept, and out of the way.

  • Approve with one key⌘R

    Select one or more clips and press ⌘R, or use the status control in the inspector or the context menu. Approving a row of drafts is ↓, ⌘R, ↓, ⌘R.

  • Any direction, nothing deleted

    The inspector's status control goes back to Draft or out to Archive. The command-line tool sets statuses too, with clips set --status.

  • The AI never changes a status

    Its only effect is that a New clip becomes a Draft when its answer lands. It never marks a clip Ready or Archived, and it never touches a manual property. Approval is a person's job.

  • A separate AI axis

    What the AI is doing to a clip (nothing, pending, in progress, failed) is its own thing. It shows in the inspector with Cancel and Retry, in the sidebar's progress dial, and as a filter condition.

  • The count of decisions left

    In Progress's sidebar count is the number of clips still waiting on you. Ready is the settled state, so it is the one status cards do not show as a tag.

Properties and tags

Describe footage the way you think about it; the same vocabulary is what the AI is allowed to use.

  • Five property types

    Multi-select and single-select (which hold tags), yes/no (yes, no or not set), a 1 to 5 scale drawn as stars, hearts, flames, bolts, dumbbells, dots or a number, and text (a line or several).

  • AI or manual

    AI properties are filled by the model in place of what was there. Manual ones (Client Approved, Location, anything only a person knows) are written only by people and the command-line tool.

  • Tag descriptions steer the model AI

    The description is what the model reads to decide when a tag applies: "Vibe: Energetic. Fast movement, loud music, high effort." It can only choose from tags you defined; it cannot invent one.

  • The loose Tags property

    Bare keywords typed without a property go into Tags, a multi-select bucket for words that have not earned their own property yet. Delete a property and its tags move here instead of disappearing.

  • The property manager⇧⌘T

    Create, rename, re-describe, reorder, or switch a select between single and multi. Add, rename, colour or move tags, and merge several into one with every clip keeping the survivor.

  • Properties as files

    Export Properties writes a properties.jsonc and an INSTRUCTIONS.md for editing by hand or by an agent. Import Properties previews every rename, new tag, merge and deletion before it applies.

  • Six ways to apply a tag

    Type in the inspector (unknown names are created on the fly), drag clips onto a sidebar tag or a view, bulk edit, set it for a whole batch on import, or clips tag --add "Property:Tag" from the terminal.

  • Counts in the sidebar

    Every property lists its tags with how many clips carry each on the current shelf. Click a tag to show those clips; click a scale row for that many and up.

Clip page and highlights

A clip in its own window: marking the moments worth keeping, and the two lossless cuts that change a file.

  • A clip in its own windowSpace

    Double-click opens the player over the highlight timeline, with the inspector beside it. Space plays and pauses; click a highlight row and playback stays inside its range.

  • SkimmingS

    Press S and moving the pointer along a strip scrubs the video, like Final Cut.

  • Highlights never touch the file

    A highlight is a named in-point and out-point that lives in the index. A clip can have as many as you like; the AI marks a few when it tags a clip, to be treated as a first draft.

  • Add at the playhead⇧⌘H

    Add Highlight puts a row at the playhead. Drag its edges to set in and out; edges snap to the playhead, other rows and the clip's ends, and ⌥ drags freely. The name becomes the render's filename.

  • One draft, one Save⌘S

    ⌘E turns the whole page into a draft: the properties in the inspector and the rows on the timeline go in one Save (⌘S) or one Cancel (Esc).

  • Lossless trim

    Pull the clip's own handles in and Save; after "Trim to this range?" the file is cut to the kept range on keyframes. Highlights inside survive, shifted; highlights outside are dropped.

  • Split at Playhead

    The scissors ask first, then make two clips, before and after the playhead, each with its name, properties and the highlights that fall inside it. The cut lands on the nearest keyframe.

Search, filters, Ask and views

Three ways to find a clip: type a few words, build a filter, or describe it in a sentence, then keep the good ones.

  • Search in three modes⌘F

    Matches names, descriptions and highlight names. Fuzzy forgives a typo or two ("coastlne" finds coastline), Includes is literal, and Meaning finds synonyms with a bundled on-device sentence model.

  • The filter builder

    All-of or any-of conditions with nested sub-groups: text in any mode, select any/all/none of, yes/no including not set, scale at least/exactly/at most, Orientation, Created, Imported, Status and AI status.

  • Chips and relevance

    Each active condition is a chip under the toolbar; click its x to drop it. While text is active the grid sorts by Relevance, and the footer offers looser or stricter matching.

  • Ask in a sentence⌘K AI

    "portrait gym clips from this summer, energetic, newest first" comes back as a real filter: tags, dates, orientation, status, a text search and a sort. Words with no tag become a meaning search.

  • An answer you can edit

    The filter bar shows exactly what was built; change any condition, add one, or drop it. An ask that says nothing about status searches the Library; "drafts with kettlebells" searches In Progress.

  • What Ask sends AI

    Your sentence and the names and descriptions of your properties, tags and views. No footage, no thumbnails.

  • Views keep filter and look

    Save View stores the filter with grid or table, sort and columns. Change an open view and the bar offers Update or Reset Filters. Recent asks are listed under the field to run again.

  • Drop clips onto a view

    Drag clips onto a view and BetterLibrary offers to tag them so they would match: the view's tags come pre-ticked and a scale minimum carries over. Nothing changes until you confirm.

AI tagging and cost

A first pass from our AI in your own vocabulary.

  • What tagging fills AI

    A short name, a one-line description, values for your AI properties chosen from your tags, and a few named highlights. All of it replaces what was there; manual properties are never touched.

  • Your key, your prompt AI

    "About this library" is the prompt's opening line; the rest is shown read-only.

  • Three ways to ask for it AI

    Tag with AI after import, on by default once a key exists. Tag All with AI or Tag Empty with AI on a selection, where Tag Empty only touches clips with nothing filled yet. Or ai request from the terminal.

  • A queue that survives relaunch

    Several calls run at once (aiConcurrency, 1 to 8). Pending and in-progress clips show Cancel, failures show their reason with Retry, and rate limits retry on their own. Editing a queued clip waits for the answer.

  • What is sent AI

    A downscaled copy of the clip is uploaded to our AI service along with the prompt. Nothing is sent for clips you do not tag.

  • Every call logged

    Settings > AI Usage lists each tag or ask with its clip, model, input and output tokens, duration and cost, with totals at the top. The log lives in the library folder and travels with it.

  • Prices you control

    Cost is computed at call time in USD per million tokens. The app ships today's list; modelPricing in settings.jsonc overrides it. Uploaded video dominates the bill; an ask costs a fraction of a cent.

  • Works without any AI

    Without keys, tagging and asking are simply off. Import, statuses, properties, highlights, search, filters, views, export and the command-line tool all work.

Export, drag and audio

Getting footage out: into Final Cut, into a folder, or to someone else, with the audio the way you need it.

  • Drag into Final Cut, or anywhere

    Drag from the grid, table, clip page or inspector onto a Final Cut event or timeline, Finder, or any app that accepts files. A clip drags its original; a highlight drags a trimmed copy named after it.

  • Passthrough remux

    Video and audio samples are copied, not re-encoded: fast, lossless, any codec your Mac plays. Cuts land on keyframes, so a range can start a fraction before the marked in-point.

  • Renders cached, disposable

    A highlight's file is made on its first drag and kept in renders/. It is dropped when the highlight moves, the clip's file changes or the export audio setting flips, and rendered again on the next drag.

  • Export to Folder

    Copies every selected clip's original to a destination. For two-mic recordings the panel offers original tracks, both mics merged to mono, left mic only, or right mic only.

  • Share sheet

    AirDrop, Messages, Mail and the rest of the macOS share sheet for the selected clips, from the inspector or the context menu.

  • Copy and paste⌘C

    ⌘C puts the selected files on the clipboard for Finder. ⌘V imports files copied from Finder, or pastes one clip's name, description, properties and highlights onto another, one checkbox per field.

  • Mono for two-mic recordings

    Play > Consolidate to mono sends every channel to both speakers while previewing, on by default, file unchanged. Export > Consolidate to mono writes one AAC mono track; video is copied sample for sample.

  • iPhone preferred audio track

    Choose the stereo mix, the spatial capture, or an external mic's mono track as the default. Applied on import and across the open library; only the QuickTime header is rewritten, never the media.

Command line and agents

A tool that works the library with the same rules as the window, and a CLAUDE.md that tells agents how.

  • Ships inside the app

    /Applications/BetterLibrary.app/Contents/Helpers/betterlibrary, nothing to install. Pass --library, set $BETTERLIBRARY_LIBRARY, or run from inside a library folder and it finds the library itself.

  • --json everywhere

    Add --json to any command for machine-readable output. Ids are UUIDs and any unique prefix works; --help on any command lists its options.

  • Read everything

    info, clips list filtered by shelf, status, tag, view, search mode, AI state, orientation, dates, filter JSON and sort, clips show and path, highlights, properties, tags, views, settings and ai status.

  • Write everything

    clips set, tag, value, reset and delete; highlights add, set, delete and export; import and export; properties, tags and views create, set, rename and delete; ai request, cancel and retry-failed; settings set.

  • Same rules as the window

    Writes go through the same service layer, so statuses, single-select rules and tag re-filing behave identically. After every write an open app reloads at once and picks up clips queued for AI.

  • CLAUDE.md in every library

    Written on creation and refreshed on open: what each file is, the tool's path, how the library thinks, every command, and working rules such as prefer existing tags and never mark clips Ready unless asked.

  • Your notes stay

    Below the app's section, "Notes about this library" is never rewritten. Put the house rules there: what the footage is for, who approves clips, how to name highlights, which tags are off limits.

  • Safe by design

    clips reset and clips delete are the only destructive commands, and the guide says so. The tool can queue clips for AI but not run it. Keys stay in settings.jsonc, and settings get masks them.

Your footage, your folder

A library is a folder. Everything else is a choice.

No cloud, ever

The library is a folder you pick: your originals, an SQLite index, thumbnails, and a settings file you can read. Move it to an SSD, back it up, open it on another Mac.

AI only when you ask

Tagging sends a downscaled copy of a clip to our AI service. Asking sends your sentence and your property names. Turn either off and nothing leaves your Mac.

Search stays local

Fuzzy and literal search, and the meaning index, run on your Mac with a bundled model. No key, no network, no upload.

Pricing

BetterLibrary, on its own.

AI calls spend the credits your plan includes; the app shows you the cost of every call.

Launch price: 33% off every plan.
Every app starts with a 7-day free trial and 100 AI credits. Cancel any time.
BetterLibrary app icon
BetterLibrary

The clip library. Find the shot you mean.

Launch price · 33% off
$6$9/ month
Billed monthly. Cancel any time.
800 AI credits a month
Start 7-day trial
  • Unlimited libraries and clips
  • AI tagging and Ask for clips
  • 800 AI credits a month, about 200 tagged clips
  • Top up any time with credit packs
  • Highlights, lossless trims, drag to any NLE
  • The betterlibrary command line for Claude Code

Already subscribed to one app? The other is 30% off for as long as the first stays live: BetterLibrary $4.20 or BetterEdits $7 a month, with its own 7-day trial started from inside the app.

FAQ

Questions people ask first

How many clips can it hold?
The index is a single SQLite file and thumbnails are cached, so a library grows to the size of the drive it sits on. Keep one library per client or per year if you like; the app opens one at a time and each remembers its own layout.
Can I bring in footage from the camera roll?
Bring in anything your Mac plays, from anywhere: a phone, a card, a drone, a mirrorless, an old drive. Drag the files or the folder onto the window and they are copied into the library, duplicates skipped.
Does BetterLibrary change my video files?
Imports are copies and stay untouched. Highlights are timestamps in the index. The two exceptions are deliberate and ask first: pulling a clip's trim handles in cuts the file, and Split at Playhead makes two files out of one. Both are lossless remuxes on keyframes.
What does the AI actually see?
Tagging uploads a downscaled, silent copy of the clip to our AI service, along with your property and tag descriptions. Asking sends your sentence and the names of your properties, tags and views. The exact prompt is in Settings.
Does it work with Final Cut, Premiere or Resolve?
Yes. What leaves BetterLibrary is an ordinary file, so anything that accepts a file from Finder accepts one from BetterLibrary. BetterEdits accepts the drag directly onto its timeline or a placeholder.
Can I use it without any AI?
Yes. Without a subscription, tagging and asking are simply off. Import, statuses, properties, highlights, search, filters, views, export and the command-line tool all work.
Which Macs?
macOS 14.4 or later, Apple silicon or Intel. On macOS 26 the app takes the Liquid Glass look; earlier systems get the same features in the classic style.
BetterLibrary app icon
Version 0.1 · macOS 14.4 or later, Apple silicon or Intel
Free download. Free 7-day trial, then a subscription; cancel any time.
A disk image; drag the app to Applications.