How it works

Every question, answered from the app itself.

What follows describes what the shipping build actually does, defaults stated and switches named. If an answer here disagrees with the app, the app wins and this page gets fixed.

1Getting started

What is ClipLogger?

ClipLogger is a native macOS app that does three jobs in one place. It offloads camera cards with cryptographic proof. It helps you (and its AI) describe what is inside every clip. And it writes that understanding into open sidecar files that Premiere Pro, DaVinci Resolve, Final Cut Pro, and Avid already read. It lives at the storage layer, meaning your footage stays in ordinary folders on your disk or NAS, and it deliberately stops short of editing: sequences end at an FCPXML/EDL handoff to your NLE. The format is open; your metadata is readable JSON sitting next to your files, never trapped in a private catalog.

What do I need to run it?

macOS 15 (Sequoia) or later on an Apple silicon Mac. The app ships as an Apple-silicon (arm64) build only and does not run on Intel Macs. For hardware-accelerated playback of MXF camera formats you can optionally install Apple's free Pro Video Formats package; ClipLogger detects whether you have it and falls back to its bundled ffmpeg decoder either way. Help ▸ Setup Check shows you at any time whether this Mac has everything installed.

What's free and what costs money?

Everything that runs on your Mac is free, forever, with no account: verified offload with MHL manifests, browsing, playback, search, projects, subjects, the full logging workflow, on-device AI, renaming, and every export. Money only enters when you use Rush, ClipLogger's own cloud batch-analysis service, which is metered in credits: one credit analyses one clip, flat, with a 15-minute per-clip cap. New accounts get a one-time 25-credit trial; paid plans include a monthly credit allotment and you can buy top-up packs.

Do I need an account?

No. The app works fully offline, with no sign-in, indefinitely. You only sign in for the two things that need a server: Rush cloud analysis and metadata sync between machines. Everything else, including bringing your own API key for cloud AI, works without an account.

What happens on first launch?

You get a working browser immediately. There is no forced import, no library to create, and no wizard you must finish. A Welcome Tour is available (Help ▸ Welcome Tour). If you want local clip reasoning, the optional Built-in AI setup wizard walks you through a hardware check, model choice, download, and first load; it is reachable from Settings ▸ AI and the Help menu, and it never opens on its own. Plug in a card and the Ingest tab detects it; open a folder and you are browsing.

Can I point ClipLogger at footage I already have, without copying anything?

Yes. File ▸ Open Folder… (⌘O) loads any folder for the session, and you can pin folders as remembered locations that reopen on the next launch. ClipLogger indexes in place: nothing is moved, nothing is imported, and the index it builds is a rebuildable cache, not a container your files live inside. Offload is only for card copying; it is never a prerequisite for browsing or logging.

Does ClipLogger ever modify my original files?

No. Camera originals are never rewritten: metadata goes into sidecar files beside the media, playback proxies are cached in your Library folder, and rename-on-copy renames only the copies. The only thing that touches a file's name on disk is the Rename workspace, which you invoke explicitly, with a preview and an undo. Even then it is a filesystem rename, never a rewrite of the file's bytes.

2Vocabulary

Subject

One durable identity in a project: a person, an item, or a place. The important part is that a subject is one identity carrying several kinds of evidence at the same time, not a thing with a single detection mode. A person-subject can hold face examples (ClipLogger groups the same face across your footage), appearance examples (a kit, a torso crop, a product's look), and a roster-bound jersey number, all at once, under one ID. Which signals a subject carries is derived from the evidence it actually has, so the same athlete found by face in one clip and by uniform in another can never split into two entries. The app's People features and its Subjects features are the same system; a person is one kind of subject.

Cast

The set of subjects a project owns. Your roster seeds it, you add to it by marking examples, and the AI links clips against it. The cast lives inside the project document, so it travels wherever the project does.

Project

The organizing unit. A project owns three things: a palette snapshot (its own copy of your field schema), a subject cast, and a brief (what the deliverable is, plus an optional AI digest). Membership is a list of references; adding a clip to a project never moves or copies the file. Structured fields and AI logging require an active project because they need a schema and a cast to mean anything.

Palette (Log Selector profile)

Your metadata schema: the fields you log, their types and options, plain-language definitions, keyboard bindings, lookup tables, and the project's two naming templates (display name and written file name). One palette is live in both Logging and Browse. Your library keeps reusable palette templates; attaching one to a project copies it, so project edits never change the template.

Field

One entry in a palette: a key, a label, and a kind (flag, rating, color, text, keywords, single-select, multi-select, toggle, number, date, players, subject, or AI Description). The kind decides where the value is stored: native kinds land on standard metadata every app reads, structured kinds land in your custom log record. A field can carry a one-line steer for the AI, and a per-field switch controls whether the model may propose values outside its vocabulary.

Facet

A dimension you can filter the grid by. Every confirmed value becomes a facet: your log fields, ratings, flags, tech metadata, AI evidence like has-transcript or people-in-frame, ingest state, and review state. Pending suggestions are deliberately not facets until confirmed.

Sidecar (.logger.json)

The complete on-disk record for one clip, written beside it as <full filename>.logger.json. It carries the media facts, the AI evidence, and your decisions, and it is what lets another machine pick up a folder without reprocessing anything. Writing it is on by default; the four NLE sidecar formats are off until you enable them.

content_key

The portable identity of a clip's content: a hash of the file's beginning, middle, and end plus its size. There is no hidden clip ID anywhere; the content key is how metadata re-attaches after a rename or a move, and how two machines agree they are looking at the same clip.

Reel

The watch mode. Strips layout gives each clip a filmstrip row you can hover-peek; String-Out lays the whole filtered set end to end. Use it to watch a day in order and cull as you go.

String-out

The entire filtered set laid out as one continuous strip you scrub like a single timeline, with a playhead and bulk-action rails. When the order tells the story, export it as an FCPXML sequence for your NLE.

Code Replace layer

A whole modifier layer of your keyboard turned into a code-entry surface: hold the modifier, type a code, and the bound lookup table resolves it into the field with an autocomplete HUD as you type. Holding shift and typing "72" to log an athlete by jersey number is this feature.

Lookup table

Any imported code-to-value sheet: a roster, location codes, shot codes, crew, SKUs. Parsed from CSV or TSV, bound to fields or code layers, searchable by code, name, or detail column. You can join several columns into the stored value and replace a table's contents in place later without breaking the bindings that point at it.

Roster

The canonical lookup table: jersey number, name, position. Importing one does two jobs at once: it becomes the code-replace source for typing numbers, and it seeds the project's cast with one person-subject per row, number bound, before any footage is analysed.

Anchor

One example a subject is recognized by: a specific frame, a box on that frame, and a polarity (positive means "this is them", negative means "this looks like them but is not"). Each anchor belongs to the face space or the visual space depending on which embedder produced it, which is how one subject holds face and appearance evidence together. The frame reference is the truth; the stored vector is a cache that re-derives if you change embedding engines.

Marquee

The drag gesture that creates an anchor: pause on a frame, drag a box around the person or thing, name it or pick an existing subject. A marquee is authoritative; unlike a scan hit it is never gated or second-guessed.

Rush

ClipLogger's own cloud batch service: submit a set of clips, they are analysed in parallel on hosted models, and results come back into the same suggestion-and-review flow as any local run, marked with Rush provenance. It requires sign-in and credits; nothing else in the app does.

Credit

The Rush unit: one credit analyses one clip, flat, with a 15-minute per-clip cap and up to 500 clips per job. The app shows "N clips → N credits · you have M" before anything is submitted, and failed or cancelled clips refund automatically.

Engine

Whatever runs an AI job. At the top level there are three families: Local (the built-in engine or your own LM Studio/Ollama endpoint; frames stay on your machines), Your API (your own OpenAI or OpenRouter key), and Rush. Within the local-and-cloud family, clip reasoning resolves down an ordered chain of rungs, and Settings shows you exactly which rung is active and why every other one is not.

Provenance

The stored record of which engine produced a value: local, your own server, your API key, or Rush, recorded at the moment it ran. The clip's provenance badge displays it, and a value from before provenance tracking says "provenance unrecorded" rather than guessing.

Pending vs Confirmed

Pending means proposed and not yet yours: AI suggestions, proposed subject links, proposed anchors. Pending values live only in the local index; they never enter sidecars, exports, search facets, or filenames, and they never travel to another machine. Confirmed values are decisions you made; they ride the sidecar and are what every export and search sees. A rejection is also a recorded decision, and it survives later re-runs.

Grounding (bounding box)

A region attached to evidence: face groups store per-frame boxes, and clip reasoning can return per-region boxes that tie what the model said to where it saw it. Paused playback shows the overlay. Boxes are evidence for your confirm decision, never autonomous tags.

Bin and smart bin

Query views inside a project, not folders that hold files. A manual bin is a curated list you drag clips into; a smart bin is a saved search (the exact search-box grammar) that evaluates live on each machine, plus any clips you pin in or exclude. Bins nest, and deleting one never touches a file.

Vault

A storage location ClipLogger manages: the volume or folder tree you browse, plus the .cliplogger folder beside it holding the index, the manifest, project documents, and caches. Settings rows marked "This vault" pin a choice (for example an embedding engine) into the open vault's manifest so every machine that opens it routes the same way.

Brief and digest

The brief is a project's statement of intent: deliverable type, target duration, aspect, tone notes, must-includes, exclusions. The AI digest is an optional model-written overview of the whole project stored on the brief; once it exists it primes later AI runs so clip forty benefits from what the project already established.

Prepare

The batch verb for AI logging: run the configured engine over the selected or browsed set and stage suggestions for review. You can stop a run (finished clips keep their results) and retry just the failures.

Re-reason

The per-clip do-over: clear that clip's cached AI result and run the model again, after you have improved field definitions, fixed a transcript, or switched engines. Your confirmed values and rejections are untouched.

Virtual clip (sub-clip)

A segment promoted to a first-class clip: its own browse row, its own analysis lane, its own name. Nothing is copied or transcoded; the range lives in the parent's sidecar as an ordinary segment, so any build can round-trip it. Promote the sections of a long clip that matter and treat them like clips everywhere, including Rush.

Marker and segment

A marker is a timestamped note on a clip; a segment is an in-and-out range. Both carry an author stamp, both merge safely across machines, and both travel: markers ride into Premiere via XMP, into Final Cut via the metadata FCPXML, and into Resolve via a marker EDL.

Evidence

The material the model reads alongside your palette: sampled frames (sharpness-aware), the transcript, on-screen text from OCR, detected framing and motion, and the clip's filename and folder names. Each text leg has a switch in AI settings, and a leg that is off is omitted from the prompt entirely.

3The order of operations

The workflow, in order

The app does not force this order, but each step exists to make the next one work better. This is the shape of a working day:

1. Offload the cards (or skip to step 2 for footage you already have). Verified copy comes first because everything after it assumes the bytes are safe; a card is never called wipeable until your destination policy is provably met.

2. Open the folder you will work in. Browsing is what builds the index, and the index is a cache, so there is no import step to wait on; pin the folder as a remembered location if you will come back to it.

3. Create or pick a project. Structured fields and subjects require one, because a field needs a schema and a name needs a cast before either can mean anything; the app prompts you the first time you touch a gated feature.

4. Set up the palette, and import your roster or lookup tables. The palette is both your keyboard and the AI's entire output space, so it has to exist before suggestions have anywhere to land, and the roster has to be in before typed or detected numbers can resolve to people.

5. Run the AI pass (Prepare), or just start logging by hand. Light on-device passes (OCR, transcription) already ran when you opened clips, so search works early; Prepare adds full clip reasoning against your fields once the schema and cast are in place.

6. Review and confirm. Nothing pending travels, exports, or renames, so the review pass is what converts proposals into metadata; Return accepts, Delete rejects, and a rejection is remembered.

7. Rename on disk. Renaming composes names from confirmed fields only, which is why it sits after review; sidecars move with the files and the content key reconnects anything renamed outside the app.

8. Export and hand off. Exports read confirmed values, so they come last; the enabled sidecar formats have been keeping themselves current the whole time, and the reel or sequence leaves as FCPXML/EDL for your NLE.

The subject lifecycle, step by step

This is the exact order the code runs, from a name on a roster to that person found across a season.

1. Subjects get seeded three ways. You mark one with the marquee (pause, drag a box, name it). A roster import seeds one person-subject per row with the jersey number bound, before any detection runs; re-importing the same roster updates in place, it never duplicates. Or the AI proposes: clip reasoning can return grounded regions that attach to existing cast members as pending anchors, and names it read that are not in the cast surface as "new subject" proposals. The AI cannot invent a person on its own; new-subject proposals are locked to your roster and lookup vocabulary.

2. Every creation path goes through one resolver. Any code that binds a name or number to an identity calls the same match rule: first the jersey number (it resolves only when exactly one live person wears it; two wearers resolve to nobody rather than a guess), then a case-insensitive name match. A match reuses the existing subject's ID; only a genuine miss mints a new one. This single funnel is why the same athlete detected by two different models on two different days cannot fork into two entries.

3. Anchors accumulate as you confirm. Each confirmed example crop is an anchor, classified into the face space or the visual space by the embedder that produced it, positive or negative. A subject's live anchors plus its jersey binding are its recognition signals; there is no mode switch to set.

4. A scan finds the subject across the project. "Find in project" needs an active project and scans its members. Stage A shortlists candidates: a scoped scan (a selection, folder, or bin) takes the scope itself as the candidate set, while an unscoped scan prefilters the vault by comparing the subject's anchors against existing whole-clip embeddings. Stage B samples frames from each candidate on a deterministic grid (roughly one frame every two seconds, up to sixteen), embeds each frame once and memoizes the vector, then scores every frame against the subject's positive anchors, with negative anchors able to veto a frame and a background cohort normalizing the score. The clip's verdict pools its best three surviving frames.

5. Scan results land pending, never confirmed. An accept-or-review verdict writes an unconfirmed subject link with the frame that carried it; clips you already confirmed or rejected sit out. For a uniformed athlete recognized by appearance, a clean close-up face on the best frame is auto-rejected as background (a spectator, a ref), and the status line tells you how many were dropped so the filtering is never silent.

6. Review is grouped by subject. The review surfaces gather every pending item for a subject (field mentions, proposed anchors, scan hits) into one place, and group new-subject proposals by normalized name across clips so five sightings of one person are one card, not five. You confirm one instance, confirm all, or reject; rejects are recorded decisions that later re-analysis will not resurrect. If a proposed new name matches a subject the project already knows, the card says so before you click, and confirming resolves through the same match rule so no duplicate is minted. On a clip, the subject chip's ✕ unlinks that subject there (both the link and the tag).

7. Confirming writes the durable record. A confirmed link is stamped with the project scope, updates the subject's presence lanes and spans, rides the clip's per-project block in the sidecar, and becomes a facet you can filter, export, and rename by. Confirmed anchors also teach the next scan: every confirm sharpens what the matcher looks for, and every reject sharpens what it refuses.

8. Across projects, identity is copied but never forked. Reusing a subject in another project copies its definition and keeps the same ID, so cross-project queries know it is one person; a same-named subject created fresh is deliberately a different identity until you merge them.

9. When signals disagree, the conflict is surfaced, not settled. If face evidence in a clip binds to one identity and jersey evidence on that same person's torso resolves to another, ClipLogger records one conflict per pair (keeping the spatially tightest instance) and shows it for a one-click ruling: it is the face identity, it is the jersey identity (which rebinds the face group), or they are genuinely different people. A resolved conflict is sticky; a later scan cannot reopen it, and nothing is ever auto-resolved.

4Ingest & offload

How does verified copy work?

Every file is streamed from the card with a running checksum (xxHash64 by default, the same family the ASC MHL standard uses; SHA-256 is also in the engine). It is written to a temporary file, flushed to the physical disk (F_FULLFSYNC), atomically renamed into place, then read back uncached from the destination and re-hashed. In the default "source and destination" mode ClipLogger also re-reads the source a second time, uncached, as an independent card-stability check, so a flaky card that returns different bytes on two reads is caught, not archived. Any mismatch fails that file closed: it is retried in full on transient errors, and if it cannot verify, the card is marked failed and is never called safe.

Do I get an MHL manifest?

Yes. Each destination gets an ASC-MHL-v2-shaped hash list (per-file path, size, and xxh64, with a creator block) written into an ascmhl/ folder at the destination root, one per card, per destination. There is also a legacy MHL 1.1 writer on the transfer-queue path. You can later re-checksum any destination against its ascmhl/ manifest from inside the app ("verify-only," no source card needed) or from the command line with loupe-cli mhl-verify.

Can I copy one card to multiple destinations at once?

Yes. A run can target several destinations, and copies are planned in tiers (for example a fast local SSD first, then a NAS). An optional staging mode designates a fast SSD as the buffer the card is freed against first, with the remaining tiers trickling in the background; per-file byte verification remains the only thing that ever frees a card. Multiple cards also offload in parallel: cards on different USB controllers copy simultaneously, cards sharing one controller are serialized, and total read speed is capped at what the destination can absorb. The card's source folder tree is mirrored at each destination by default (you can flatten into the per-card folder instead, leaf names collision-uniquified), and two same-named cards in one run get distinct destination folders automatically.

When does it say a card is safe to wipe?

When every file on the card has a verified copy on the number of distinct destinations your policy requires. The default policy is "2+ verified destinations", the classic never-on-fewer-than-two-media rule. You can set 1, 3+, or a strict mode that also requires you to acknowledge an offsite/second-media-type copy. A card shows "verified" (green) once everything is confirmed on at least one destination, and "secured" once the wipe policy is met; an unreadable file anywhere on the card blocks the verdict. An empty card is never called safe — there is nothing to certify.

Can it rename files while copying?

Yes. Rename-on-copy rebuilds the copied file's name from a token template (default {date:YYMMDD}_{reel}_{scene}_{shot}_{take}_{original}). It applies to the copies only; the card originals and their sidecars are untouched, and verification is content-based so renaming never weakens it. It is off unless you turn it on for the run or preset.

What happens if I plug in a card I already offloaded?

ClipLogger fingerprints the card's files and looks them up in its manifest, then tells you it recognises the card and which destinations already hold verified copies; the tile reads "Already ingested" rather than silently re-copying. If you run it again anyway, files whose identical content already exists at the destination are skipped (the existing verified copy still counts). A *different* file that happens to occupy the same name is never overwritten: the new copy is written alongside under a content-suffixed name and flagged as a conflict. History alone never gates a wipe: the wipe verdict always re-checks that the copies exist now.

What happens on a failed verify?

The file is retried with a fresh copy-and-verify attempt for transient faults (flaky readers, network blips); genuine corruption fails every attempt and the card goes to a failed state with the file named. Nothing partial is ever committed: the temp-then-atomic-rename design means an interrupted copy can't masquerade as a finished one, and a failed card can never show "safe to wipe." A per-run audit log (JSONL, plus a shareable HTML report) records exactly what happened to every file.

Can I eject a card while things are running?

The card is freed as soon as every file's first-tier copy is source-verified, so you can pull it while later tiers (say, buffer to NAS) finish in the background. The eject buttons in the Ingest tab warn you if a volume is actually in flight, distinguishing "this card is still being read" from "this drive is being written to"; a forced eject mid-copy fails that card honestly rather than ever producing a false verdict. When a run finishes, ClipLogger plays a sound and posts a notification so you hear it from across the room.

How fast is it?

As fast as the slower of your card reader and your destination, minus the cost of honesty: the default mode reads the card twice (copy plus stability re-read) and reads the destination back once. ClipLogger measures the card's read speed with a probe, then picks a parallelism plan from the file-size mix and shows the plan on the tile before the run. Thousands of small files copy many-at-once (they are latency-bound); large camera files use a narrow pool (they are bandwidth-bound). Live throughput is displayed per card while it copies.

5Projects

Do I have to use projects?

Not for the basics. Ratings, flags, color labels, titles, notes, keywords/tags, markers, and segments are "native" metadata that work on any clip anywhere on disk, project or not. A project becomes required the moment you want structured fields: your custom palette fields and the AI logging built on them. That gate exists because those fields need a schema and a cast to be meaningful; the app prompts you to pick or create a project when you first touch one.

What does a project own?

Three things: a palette snapshot (its own copy of a Log Selector profile, covering your field schema, key bindings, lookup tables, and naming templates), a subject cast (the people, items, and places it knows), and a brief (deliverable intent plus an optional AI digest, a model-written overview of the whole project used to prime later runs). The palette is copied on attach, so editing it inside the project never mutates your library template.

Where does a project live on disk?

You choose at creation. A volume-homed project is a JSON document at <volume>/.cliplogger/projects/ right beside the footage. It travels with the drive and appears wherever that drive mounts. An app-folder project lives in ~/Library/Application Support/ClipLogger/projects/. It survives the drive being disconnected and opens with zero volumes mounted. Both are the same file format read by the same store; a local mirror keeps every project listable and openable even when its volume is offline.

Does adding clips to a project move or copy them?

No. Membership is a reference: the project document records each member, and the clip's own sidecar carries a per-project block (which fields and subjects apply in that project). That backlink means a second machine that mounts the same storage can rebuild the project view from the clips themselves. Files never move for a project.

What happens when I open a project?

The members list comes from the project document joined against the index, never from scanning your drives. A member whose file can't currently be reached (drive unplugged, file moved, or a synced project whose media was never on this Mac) shows as an explicit offline placeholder with an orange badge, still carrying whatever metadata is known. An unmounted drive is never treated as a deletion. Directory scans only happen when you explicitly browse a folder.

What happens to my metadata if I delete a project?

The project record is tombstoned (marked deleted so it can't resurrect via sync), its child bins move to the top level, and the machine-local membership cache is dropped. Your clips, their sidecars, and all native metadata are untouched: deleting a project deletes the organizing unit, not the understanding. Nothing on disk is removed.

What are bins and smart bins?

Both are query views inside a project, not folders that hold files. A manual bin is a curated list you drag clips into; a smart bin is a saved search: a stored query that evaluates live against the index on each machine, plus any clips you've pinned into it explicitly. Bins can nest, and a child bin without its own palette inherits the nearest ancestor's.

6The three working views

What views does ClipLogger have?

Five modes on the main toolbar: Browse (the grid/list), Reel, Log & Rename, Ingest, and Duplicates. Browse, Reel, and the Logging workspace are where you'll spend the day; Ingest is the card-offload surface; Duplicates groups near-duplicates and safety takes for review.

What is the Grid for?

Scanning and triage. Cells show thumbnails you can hover-scrub, with badges for ratings, flags, color labels, offline status, and analysis state; audio files render as waveform cells you can audition by hovering. The filter panel and search bar drive what the grid shows, and everything you confirm becomes filterable there.

What is Reel mode for?

Watching a day as one strip. Strips layout gives each clip a filmstrip row with hover-peek; String-Out lays the entire filtered set end-to-end as one continuous snake you can scrub like a timeline, with a playhead, bulk-action rails, and jump-to-active. When the order tells the story, export the reel as an FCPXML sequence for your NLE.

What is the Logging workspace for?

Clip-by-clip capture. The Logging tab pairs the player with the Log Card (every field of your palette rendered as rows you fill by keyboard), plus the AI suggestion bar when suggestions are pending. Its sibling tab, Rename Files on Disk, is the batch-rename bench. Use Browse to find and triage, Reel to watch and cull in order, Logging to put words on clips fast.

How does keyboard-first logging work?

Your palette maps physical keys to actions on layers (base, ⇧, ⌘, ⌥, ⌃): a key can stamp a value, pick a select option, add a keyword, or fire several fields at once. A whole modifier layer can be a code-entry surface: hold ⇧, type "72", and the roster resolves it to the athlete's name with an autocomplete HUD as you type. Return accepts the focused AI suggestion, Delete rejects it, ⌘Return confirms everything on the clip.

7The metadata schema (your logging palette)

What is a palette?

A palette (a "Log Selector profile") is your own metadata schema: the fields you log, each with a type, options, a plain-language definition, and optional key bindings, plus lookup tables and naming templates. One palette is live in both Logging and Browse, so a logged value is the same value you filter and rename by. Projects carry their own snapshot of a palette; your library keeps reusable templates.

What field types are available?

Native kinds that land on standard metadata: flag (good/bad), rating (0–5), color label, text note, and keywords. Structured kinds that land in your custom log record: single-select and multi-select with a controlled vocabulary, toggle, number, date, players/people (roster-bound), subject (linked to the project's cast of people/items/places), and AI Description (the model's narrative about the clip as an acceptable field). The type decides where the value is stored, so exports and search see it natively.

Why is a palette worth setting up?

Three compounding reasons. It keeps your vocabulary consistent: a controlled list means "TD" and "touchdown" can't fork (you can even declare synonyms per option). It is the AI's output space: the model is handed your fields, options, and definitions and must answer in them, so better definitions produce better suggestions. And it drives naming. The palette carries both a display-name template and a written-file-name template, so your naming scheme is configured once and follows the project everywhere.

How do I set up a good palette?

Start with three or four fields you actually decide on every clip, not twenty you might want someday. Use single-select for one-answer questions and multi-select only when several values are truly simultaneous. Write each field's definition as an instruction the model can act on. A one-line steer like "Action = the football play type, never camera movement" is wired directly into the AI prompt. You can add options on the fly while logging, so the vocabulary grows from real footage.

Can the AI invent values my palette doesn't have?

By default, no for closed fields and yes for open ones. Select, multi-select, players, and subject fields constrain the model to the existing vocabulary; an out-of-vocabulary value is dropped. Keywords, text, ratings, and the AI Description are open by design: a fresh keyword is exactly what they're for, and it still only surfaces as a suggestion for you to accept. Each field carries a switch to override its default.

What are lookup tables and code-replace?

A lookup table is any imported code→value sheet parsed from CSV/TSV (paste or file): a jersey roster, location codes, shot codes, crew, SKUs. Bind it to a modifier layer and logging becomes type-the-code, read-the-name: hold the layer, type "7", and the HUD offers every match by code, name, or detail column. You can join multiple CSV columns into the stored value (first + last name), keep display-only columns out of it, and replace a table's contents in place later without breaking the bindings that point at it.

Can I share or move a palette between projects and machines?

Yes. Palettes export and import as .loupeprofile JSON files, and attaching one to a project copies it in (so project edits stay local). A project's palette snapshot travels inside the project document, over a synced relay or on the volume itself, so the schema and naming scheme arrive wherever the project does. Profile files are tolerant across versions: an older build reading a newer palette degrades unknown field kinds to text rather than failing.

How does the palette map to real metadata on export?

Native fields write to the standard slots every app reads: flag and rating and color to their XMP/Resolve/ALE equivalents, notes to dc:description, keywords to dc:subject. Structured fields live in the .logger.json log record under your own keys, with per-field provenance; a players field can also mirror into keywords so names stay searchable in tools that only read tags. Nothing you log is display-only; every value lands somewhere a pipeline can read.

8Subjects: people, items, places

What is a subject?

A subject is a durable identity in your project (a person, an item, or a place) that clips can be linked to. One subject carries several recognition signals at once: face examples, visual/appearance examples (a kit, a torso, a product), and an optional jersey-number binding. That means "Gibson" is one thing whether the evidence in a given clip was his face, his uniform, or his number.

How does ClipLogger know who's in a clip?

It groups the same face across your footage, on your Mac: similar faces cluster together so you can name a group once and find that person everywhere. It ships no celebrity database and identifies nobody on its own; a group has a name only because you (or your roster) gave it one. All face grouping runs on-device.

How do subjects get created?

Two ways: you create them, or a roster seeds them. Importing a roster CSV (jersey number, name, position…) mints a person-subject per row with the number bound. New-subject creation is deliberately roster/lookup-locked for AI flows: the model can propose linking an existing subject but can't invent a brand-new person, which is what keeps hallucinated names out of your cast.

How does the jersey→athlete join work?

A subject's jersey binding makes the number a deterministic key: an OCR'd or typed "72" resolves through the project's cast to the one live person wearing 72. Resolution refuses to guess: if two people share the number, it resolves to nobody rather than picking one. The same resolver is the only code path anywhere that binds a name or number to an identity, so the same athlete detected by two different models on two days can never fork into two entries. And when signals disagree (the face evidence says player A, the jersey says player B), the conflict is recorded and shown for a human call, never silently auto-resolved.

What does "pending" mean on a subject or suggestion?

Pending means proposed and not yet yours. AI-proposed links, spans, and anchors are stored unconfirmed, live only in the local index, never travel to another machine, and are excluded from exports, search facets, and renames until a human confirms them. Confirmed values are the ones that ride the sidecar. Pending and confirmed both show during review so you can see what's waiting.

How do I review subjects efficiently?

The review surfaces group proposals by subject so you can confirm or reject in bulk: confirm-all for a group, reject-all, and per-clip accept or unlink. Rejecting is a recorded decision, not a deletion: a later re-analysis will not resurrect something you rejected. On a clip, a subject chip's ✕ unlinks that subject for real (link and tag both), and multi-name suggestions accept one name at a time via per-chip ✓/✗ if you don't want the whole list.

Can the same person exist in two projects?

Yes, as provably the same identity. Reusing a subject in another project copies its definition but keeps the same UID, so cross-project queries and merges know it is one person. A same-named subject created fresh in another project is deliberately a different identity until you say otherwise.

Do I get bounding boxes?

Yes, where recognition produced them: face groups store per-frame boxes, and AI clip reasoning can return per-region grounding boxes that attach evidence to the person or thing it describes. Paused playback shows the box overlay, and jersey-based proposals crop the torso region deterministically for review. Boxes are evidence for your confirm decision, not autonomous tags.

9AI logging

What are the three engines?

Local runs models on your own hardware, either the built-in engine (a bundled llama.cpp server running a vetted model such as Qwen2.5-VL 7B that you download once) or your own LM Studio/Ollama endpoint; frames never leave your machines. Your API uses your own OpenAI or OpenRouter key, stored in the macOS Keychain; sampled frames go from your Mac straight to your chosen provider on your own account, one clip at a time, and ClipLogger takes no cut and never proxies the traffic. Rush is ClipLogger's own paid cloud service: no keys, no setup, whole batches processed in parallel, priced in credits and disclosed before every run. All three produce the same metadata shape into the same review flow.

Which engine runs by default?

On-device. With nothing configured, analysis uses Apple's frameworks (OCR, transcription, face grouping, embeddings, aesthetics) plus deterministic evidence; add the built-in model and local clip reasoning joins them. Cloud engines only exist once you paste a key or sign in for Rush; there is no silent cloud fallback.

I have more than one engine set up. Which one is used?

If two or more engine families are genuinely ready (local model installed or endpoint configured; a working key; signed in with a positive Rush balance), a chooser appears before the run with a card per engine and the palette it will log against. You can tick "Remember for this project" to skip the ask next time. The remembered pick is honored only while it is still actually usable (Rush out of credits falls back to asking). With one engine ready there is no ask; it just runs.

Does the AI write metadata by itself?

No. Every model output lands as a suggestion, visibly pending on the field row, and nothing touches your record, sidecars, exports, or filenames until you accept it. Return accepts the focused suggestion, Delete rejects, ⌘Return confirms the clip, and list suggestions support per-chip partial accepts. Your rejections are permanent decisions that survive later re-runs and resets.

What does the AI actually look at?

Sampled frames (selection is sharpness-aware, so it reads the crisp frames, not motion blur), the clip's transcript, on-screen text from OCR (scoreboards, slates, lower thirds), detected numbers, framing and motion classification, and your palette (field definitions, options, your per-field guidance, and the project's AI context blurb). In a project it can also be primed with the project digest and what the batch has already established, so clip 40 benefits from clips 1–39.

What is Prepare?

Prepare Suggestions is the batch verb: it runs the configured engine over the selected or browsed set and stages suggestions for review. You can stop a run (completed clips keep their results) and retry just the failed clips. Opening a clip also auto-runs light on-device passes (OCR and transcription) by default, so search and fields have something to work with before you ever hit Prepare. Turn that off in Settings ▸ AI if you don't want it.

What is Re-reason?

A per-clip do-over: it clears that clip's cached AI result and runs the model again, useful after you've refined field definitions, updated the transcript, or switched engines. Re-reason re-extracts a missing transcript first, so speech evidence is present before the model runs. Your confirmed values and rejections are untouched.

Does ClipLogger learn from my corrections?

Within a project, yes, in an explicit, inspectable way: your accepted and corrected values feed field-level examples and vocabulary that shape later prompts, and the project digest gives every new run the project's accumulated context. There is no hidden model training on your footage, just prompt-side learning you can read.

Do I need a GPU or a beefy Mac for local AI?

The built-in engine runs on any Apple silicon Mac, and the setup wizard checks your hardware and recommends a model size for your RAM. More memory means bigger models and faster batches; a modest machine still runs the full pipeline, just slower. Re-running analysis you've already confirmed is free: results are cached and reused, so zero-GPU sessions stay snappy.

10Privacy & data routing

What leaves my Mac, and when?

Three routes exist, all visible. (1) Rush runs you submit: sampled frames from the clips in that batch go to ClipLogger's cloud. (2) Your-API runs: sampled frames go directly to the provider whose key you pasted. (3) JuiceMount sharing: if (and only if) a volume you browse is backed by a JuiceMount storage server, ClipLogger can publish computed AI and your assertions (names, tags, log picks) to that server so teammates don't recompute it. Route 3 is on by default and lives in Settings ▸ Sharing & Privacy, where a master switch turns all of it off. Local engine runs, browsing, offload, and search send nothing anywhere.

Is the JuiceMount sharing really on by default?

Yes. Both switches (share metadata; contribute computed AI back to the volume) default on, because the destination is normally your own storage server backing your own volume. If no JuiceMount server backs a volume, the switches are inert. Settings ▸ Sharing & Privacy states this in plain language and is the one place to turn it off; the subordinate AI-contribution switch is disabled whenever the master is off.

If I use a local model, can frames still leak to the cloud?

The routing is built so they can't. "Local is configured" is derived from the raw endpoint text, so a mistyped URL fails safe to on-device, never through to cloud. The decision is re-checked against your current settings immediately before every send. And a configured-but-unreachable local endpoint with "keep frames local" set degrades to deterministic evidence, never to a cloud fallback. A server URL that is not on your own network is allowed but is never labeled local.

What exactly does Rush upload?

Sampled frames and evidence for the clips in the batch you confirmed, never your source media files. Frames are uploaded for processing and deleted after a retention window on the server; per the published privacy policy they are never used to train, fine-tune, or evaluate any model, ClipLogger's or a vendor's.

How do I know which engine produced a value?

Every reasoning result stores its provenance (local, remote server, cloud with your key, or ClipLogger Rush), recorded at the moment it ran, not inferred later. The clip's provenance badge shows it, with an honest tooltip ("frames stayed on this Mac or your own network" vs "frames were sent to your API provider" vs Rush). A value from before provenance tracking says "provenance unrecorded" rather than guessing.

Where are my API keys kept?

In the macOS Keychain, on your Mac. ClipLogger never proxies your-API traffic through its own servers, never sees your key, and adds no markup; you pay your provider directly. Signing in for Rush or sync changes none of the routing above: an account meters credits and identifies your sync peer, it never enables any background upload of footage or metadata.

11Settings, tab by tab

General

How the app behaves while you look at footage. Playback: the seek amount for arrow-key jumps (default 10 seconds, 1 to 60); Autoplay next clip (default off) advances to the next clip when one finishes; Autoplay on click (default on) starts playback the moment a clip opens, and turning it off opens clips paused. Proxy playback (NAS) applies on JuiceMount volumes: Prefer proxy (the default) plays the smaller server proxy when one exists, Disable proxies always plays the full original; the same control sits in the toolbar whenever you are on such a volume. Browser: where a clicked clip opens (default Hovered point, so it opens on the frame you were scrubbing; also Start of clip or a fixed position), thumbnail size (default 180 px, 120 to 360), filmstrip frame density (default 40 frames, 24 to 120; more frames means a denser timeline strip but slower generation), Drill down into subfolders (default on), and Exclude proxy media from the grid (default off). Viewing: Correct LOG → Rec.709 by default (default on) displays log footage through a viewing transform instead of flat. Markers: the author handle (defaults to @ plus your macOS username) stamped on every marker and segment you create, so multi-editor work knows whose note is whose. Drag & drop: whether dragging clips onto a folder moves or copies (default Move; hold ⌥ while dragging for the opposite). An Advanced disclosure holds read-only playback diagnostics: whether Apple Pro Video Formats is installed, and a list of recent playback decisions (native, transcode, proxy, failed, and why) you can paste into a report.

Offload

What ClipLogger must prove before calling a card safe, and how copies run. Safety: the "Safe to wipe" requirement (default 2 verified destinations; also 1, 3+, or a strict mode that adds an acknowledged offsite copy) and the copy verification mode (default Source + destination, which re-reads the card as a stability check; Destination only is faster; Size only is fast and unsafe before formatting, and is labeled that way). Change these only when you understand the trade you are making with irreplaceable footage. Naming: Rename files on copy (default off); the template itself lives on the Ingest screen next to the cards it applies to. Staging: route card copies through a fast local drive before the real destinations (default off, and the toggle does nothing until you choose a staging folder); the card frees the moment the staged copy verifies, and the copies to your destinations continue in the background, surviving a relaunch. When a run finishes: play a sound (default on) and show a notification (default on), for the operator loading the next card from across the room. The Ingest mode itself is ⇧⌘I.

AI

Everything the app does with a model, in four groups. Analysis: Read text and speech automatically (default on) runs on-device OCR and transcription when a clip opens, so search and fields have material before you ever run Prepare; turning it off cancels passes in flight. Let AI suggest what's in a clip (default off) is the master opt-in for clip reasoning suggestions; a note appears if reasoning is already active through a local engine, because this switch only gates the cloud fallback. A confidence slider (default 0, meaning show all) hides suggestions below a floor. Engine: the clip-reasoning fallback chain rendered as an ordered list, with the active rung marked and every other rung stating why it is not the one (Apple's on-device model when enabled and available, then the built-in engine, then your LM Studio/Ollama endpoint, then your cloud key, then the on-device deterministic pass); a line underneath states plainly whether frames leave the Mac right now, and Refresh live-probes your endpoint. Below it, Routing by task: one row per AI job (on-screen text, transcription, clip reasoning, the embedding jobs; a couple of slots are visible but marked as coming), each with an engine picker where a real choice exists, a "This vault" checkbox that pins the engine into the open vault's manifest so it travels, and a disclosure opening that engine's own setup. Clip reasoning cannot be pinned per vault; its routing is your endpoint and privacy settings. The transcription row's disclosure is where whisper setup lives: install status, a base English model download (~150 MB), and the recommended Whisper Large v3 Turbo download (~1.6 GB, higher accuracy, only used when you pick it). The clip-reasoning row's disclosure holds the built-in engine toggle (default off), the Apple Foundation Model toggle (default off, usable only on a Mac that has it), the local endpoint fields (Server URL and model, with one-click LM Studio and Ollama presets, a live label saying where the address actually points, Test connection, and Load model now), the cloud provider picker (OpenAI or OpenRouter, with the OpenRouter model field), and a checkbox to fall back to your cloud key when the local server is unreachable (default off: with it off, an unreachable local server degrades to on-device evidence, never to cloud). Models: the built-in engine's live status (running, loading, stopped, port, active model) with Start and Stop, per-model rows showing download size, RAM guidance, and a fit note against this Mac's memory, plus the guided setup wizard; and the Vision models section, where optional embedder downloads (SigLIP2, DINOv2) read "Planned" until a hosted release exists and flip to a live download button the moment one does. Advanced tuning, collapsed by default: frames per clip (default 6, 2 to 60; long clips scale up automatically and blurred frames are skipped), frame size (default 768 px longest edge), Calibrate (measures how many images your local model actually attends to and stores it per model; Prepare then sends the smaller of that and the app's own cap), max reply tokens (default 4,000, 200 to 32,000; reasoning models think against this same budget, so keep it generous), request timeout (default 240 seconds; the first request against an unloaded local model is also the load), the evidence legs (on-screen text, transcript, filename and folders, all default on; a leg you turn off is omitted from the prompt entirely), Transcribe on this Mac before sending (default on: before a Rush batch uploads, clips without a transcript are transcribed locally first, and clips that genuinely cannot be are disclosed and sent), the experimental agentic tool loop (default off: when the first pass looks uncertain, the model may re-examine the clip through a bounded tool-calling loop), and per-channel transcription (default off; turn it on for multichannel audio where people talk over each other). Tuning changes apply to clips reasoned after the change; already-reasoned clips keep their stored results until you Re-reason them.

Sharing & Privacy

The one tab about where data goes. Sharing with a JuiceMount server: the master switch (default on) lets ClipLogger publish the AI and metadata it computes (captions, transcripts, on-screen text, embeddings, face groupings and the names you gave them, your log picks and tags) to the JuiceMount server backing a volume, so teammates reuse it instead of recomputing; the subordinate switch (default on, disabled whenever the master is off) contributes this Mac's computed AI back to the volume. Both default on because the destination is normally your own storage server; if no JuiceMount server backs a volume, the switches do nothing. A caution line states plainly that faces, names, and transcripts are personal data. Turn the master off and nothing ClipLogger derives on this Mac leaves it. Sidecar files beside your media: the five writers. The .logger.json sidecar is on by default and is the only on-disk carrier of the full record; the per-file XMP (Premiere and Bridge), the Resolve CSV, the FCPXML manifest (Final Cut), and the ALE (Avid) all default off, and every tag, rating, or color change refreshes whichever formats are enabled. Turn on exactly the formats your pipeline reads. Maintenance: Forget cached project registries clears what this Mac remembers about project libraries between launches (offline sidebar listings, member snapshots); the project files on your volumes are untouched, and reopening a volume relearns everything.

Cloud Keys

Bring-your-own API keys, one row per provider (OpenAI, Anthropic, Gemini, Replicate, OpenRouter), stored in your macOS Keychain. Keys are used only when you opt into the matching cloud feature, ClipLogger never proxies or adds a markup, and you pay the provider directly. Clip reasoning today uses the OpenAI or OpenRouter key, chosen in the AI tab's cloud provider picker.

Account (when sign-in is available)

Sign-in for the two features that need a server: Rush and cross-device sync. Signed out, everything local keeps working. Signed in, the tab shows your email, plan tier, and credit balance (a Studio member also sees the team pool line, which is what Rush actually spends), plus Refresh, Manage Billing, and Sign Out. Below it, Sync projects across devices (default off) keeps your projects, palettes, casts, and briefs current on every Mac you sign in on; local logging never depends on it.

12File naming & renaming on disk

Can ClipLogger name files from my logged metadata?

Yes, that's the point of the token templates. A template like {f:team}_{action}_{players}_{original} composes an output name from your confirmed fields (only confirmed values; pending suggestions never reach a filename), plus built-ins like {date}, {reel}, {scene}, {shot}, {take}, {rating}, and a {seq} counter with padding, start, and step. Any palette field is addressable as {f:key} or plain {key}.

What's the difference between rename-on-copy and the Rename bench?

Rename-on-copy names the copies during offload and never touches originals. The Rename Files on Disk tab is the in-place bench for files already on disk: point it at a folder or at your current browsed/filtered set, stack rules (find/replace with regex, token template, case transform, sequence), and watch a live before→after preview per file. Nothing happens until you apply.

What happens when I apply a batch rename?

The engine detects collisions up front (per-directory, so a name taken in folder A doesn't block folder B) and applies in a cycle-safe two-phase order so swaps can't collide mid-flight. It never overwrites a file outside the set, and it rolls back on any conflict. Afterwards a one-click Undo restores the previous names of the entire batch. Files you uncheck are excluded but stay visible in the preview.

Do my sidecars and metadata survive a rename?

Yes, twice over. Every sidecar belonging to the clip (.logger.json, .xmp, .cdl) is moved to follow the media in the same operation, keyed to where the file actually landed. Independently, the index re-homes metadata by content key (a begin/middle/end content hash plus size), so even a rename done outside ClipLogger reconnects to its metadata the next time the file is seen. Renaming on disk is exactly why names survive into every other app.

Why rename on disk at all if ClipLogger has display names?

Because the filename is the one field every application reads. A display-name template can title clips inside ClipLogger without touching disk; the written-file-name template bakes your scheme into the files themselves, so Premiere, Resolve, Finder, and a stranger's machine all see 72_TD_Johnson_A001C012.MOV. Each project's palette carries both templates, and the Rename tab defaults to the active project's scheme.

Can I go the other way and turn filenames back into metadata?

Yes. "Parse Names → Metadata" reads your template against existing filenames and writes the recovered field values back through the normal logging resolver. A confirmation shows exactly what will be written before it happens. It's the recovery path for footage that was named by convention before it was ever logged.

13The open format

What is the .logger.json sidecar?

The complete, self-describing ClipLogger record for one clip, written beside it as <full filename>.logger.json (e.g. A001C012.MOV.logger.json). Writing it is on by default: it is the on-disk carrier of everything the app knows, and with it beside the file, another machine (or a future install) picks the folder up without reprocessing.

What's inside it?

Three blocks. media covers filename, codec, duration, dimensions, frame rate, color space, log format, size, and the portable content key. ai is the evidence: transcript, OCR and on-screen text, face groups with per-frame boxes, embeddings, framing/motion, detected numbers, aesthetics, and every model reasoning attempt with its schema, model id, provider, timestamp, and status. user is your decisions: tags, rating, color, flag, title, notes, your custom log fields with per-field provenance and timestamps, markers, segments, and the per-project blocks. It is pretty-printed JSON you can open in any editor.

Which NLE exports exist, and are they on?

Four writers, all implemented, all off by default. Flip on the ones your pipeline uses in Settings ▸ Sharing & Privacy (Metadata Export): XMP sidecars per file for Premiere Pro and Bridge (title, description, keywords, rating, color label, scene/shot/take, good-take, and markers on a Premiere-readable comment track); cliplogger_metadata.csv at the folder root for Resolve's "Import Metadata To → Media Pool"; cliplogger_metadata.fcpxml at the root for Final Cut's metadata import (notes, keywords, ratings, markers; an event manifest, not a timeline); and an .ale for Avid Media Composer's bin import, because ALE is the only metadata channel Avid actually reads. Only .logger.json ships enabled, to keep footage folders tidy by default.

When are sidecars written?

On every confirmed change (tag, rating, field, marker) for the formats you have enabled. There is also an explicit re-export (loupe-cli export-sidecars) to rewrite them for a whole tree.

Can other tools read the format without ClipLogger?

Yes, that is the design goal. .logger.json is plain JSON with snake_case keys and documented structure; the XMP uses standard Dublin Core and xmpDM properties plus a namespaced logger: block for ClipLogger-specific values; the CSV and ALE are the exact shapes Resolve and Avid document. A ten-line script can pull every action tag out of a season's sidecars with no ClipLogger installed.

What happens if I stop using ClipLogger?

Nothing happens — which is the point. Your files sit where they always sat, every confirmed decision is in open sidecars beside them, and the exports you enabled are already in your NLE's own formats. The SQLite index is explicitly a per-machine cache, deletable and rebuildable from media plus sidecars; nothing important lives only in it. There is no export step because you were never locked in.

What survives moving footage to another drive or machine?

Everything that was confirmed. Sidecars move with the files (ClipLogger moves them for you; if you move files yourself, keep the sidecars beside them), and the content key (a hash of the file's beginning, middle, end, and size) re-identifies each clip regardless of its new path or name. Volume-homed projects ride along in the drive's .cliplogger/ folder.

14Search & filtering

What can I filter by?

Every confirmed value is a facet. The filter panel covers native metadata (rating, flag, color, keywords, notes), tech (codec, resolution, frame rate, duration, drop-frame), AI evidence (has transcript, has on-screen text, has faces, has numbers, framing, people-in-frame count, in-motion, quality score, cull candidates), ingest state (ingested, verified copies ≥ N, safe to wipe, has MHL, online/offline), review state, and your own log fields with live value lists. Filters combine, and each shows as a removable chip.

Can I separate what the AI found from what I decided?

Yes, two ways. The Log status facet is a tri-state (Unlogged, AI-suggested, Confirmed), so "show me everything still waiting on review" is one click. And every reasoning result carries provenance (local / your API / Rush), so cloud-derived values are identifiable per clip via the provenance badge.

Is there a search box grammar?

Yes. The box takes free text plus typed predicates: key:value equality, numeric and range comparisons on any recognised facet, and has: presence checks, all lowered into safe SQL. Free text matches names, titles, notes, transcripts (full-text), and on-screen text. Alongside it there is image-similarity search: pick a clip and find visually similar ones from on-device embeddings.

How do I find the best takes fast?

Sort the grid by Quality (best shot), which is the on-device aesthetics score, or filter on the quality-score range and the cull-candidates flag to sweep the junk the other way. Combine with your own flags and ratings; the AI score is a lens, your flag is the decision.

Are searches saveable?

Yes, as smart bins. A smart bin is a project-hosted saved query that evaluates live on each machine; pin clips into it to keep them regardless of the query, or exclude ones that match but don't belong. Because bins are query views, a saved search never moves or copies a file.

15Export & handoff

How do I hand a cut order to my editor?

Build it as a string-out (the Reel's ordered layout or a project sequence) and export. A sequence exports as a trimmed FCPXML timeline (.fcpxmld bundle) with an EDL cut list written beside it; the Reel exports as FCPXML. Timecode is emitted correctly for drop-frame material: tcFormat, source-TC anchors, and the one-hour timeline base all follow the clip's real timecode dialect.

Can ClipLogger edit the sequence after export?

No, deliberately. ClipLogger is an organization and handoff tool, not an editor. Sequences are frozen at the FCPXML/EDL boundary and finishing happens in your NLE. That boundary is what keeps the app honest about its job: everything before the cut, nothing after it.

How do markers travel?

Three roads. Into Premiere via XMP (markers ride a Comment track its Markers panel lists), into Final Cut inside the metadata FCPXML, and into Resolve via a dedicated marker EDL, the zero-scripting "Timelines → Import → Timeline Markers From EDL" path, with colors mapped to Resolve's own set.

What's the Resolve round-trip?

Enable the Resolve CSV export and you get cliplogger_metadata.csv at the folder root with Resolve's documented column headers (Description, Comments, Keywords, Scene, Shot, Take, Angle, Good Take, Flags, Rating…). In Resolve: right-click the Media Pool → Import Metadata To → Media Pool. Filenames match on the clip name, so run it after your renames are final.

Can I import spreadsheets into the logging system?

Yes. Any code→value CSV/TSV becomes a lookup table (rosters are the canonical case: jersey → athlete, seeded straight into the project cast). Columns can be joined to form the stored value, extra columns show as autocomplete detail, and a table's contents can be replaced in place from a fresh CSV without re-wiring the key bindings that use it.

16Rush & accounts

What is Rush?

Rush is ClipLogger's own cloud batch lane: submit a set of clips and they are analysed in parallel on hosted frontier models, with zero configuration. No API keys, no model shopping, no GPU. Results flow back into the exact same suggestion-and-confirm review as a local run, marked with Rush provenance so you always know where a value came from. It exists for the moments deadlines beat hardware: a card comes in at lunch, and the whole thing is logged, described, and searchable before you finish eating.

Why use Rush when the local engine is free?

Two reasons: speed and depth. Your Mac analyses one clip at a time on a model sized to fit in laptop memory. Rush fans the batch out across many workers running far larger models, so a few hundred clips finish in roughly the time a handful would, and your Mac stays free for editing instead of pinned at full fan. The bigger models also read harder frames better: small on-screen text, jersey numbers at distance, busy multi-subject scenes, and denser, more specific descriptions. The trade is simple and honest. Local is free and private by construction; Rush is metered and fast. Both land in the same review, and you confirm either before a word is written.

How fast is it, really?

The batch runs in parallel, so total time is set by your upload and the longest clips, not by the count. A batch that would occupy your Mac for an afternoon typically comes back in minutes. The app shows per-clip progress as results stream in, you can start reviewing the first clips while the rest are still processing, and if you relaunch mid-job the app picks the results back up from the server.

What does it cost?

One credit analyses one clip. Flat: no per-minute or per-token math, no quality tiers. A 300-clip batch costs 300 credits, and the app shows you the line "N clips → N credits · you have M" before anything is submitted; nothing runs until you confirm the spend.

What are the limits?

Up to 500 clips per job, and up to 15 minutes per clip (a clip at exactly 15:00 is eligible). Anything over the cap is excluded by name, with the reason, in the pre-submit disclosure rather than silently dropped. A duplicate selection of the same clip is de-duplicated so it can't burn two credits. Long files aren't stranded: promote the sections that matter into sub-clips and submit those; each range is its own clip and its own credit. There is also a small per-account concurrent-job limit, and the server tells you plainly if you hit it.

What happens if clips fail, or I cancel?

You are never charged for work that didn't happen. Credits are reserved at submission and settled when the job finishes: processed clips burn their credit, failed clips burn nothing, and the difference is refunded automatically. Cancelling stops undispatched clips (their credits refund) while clips already mid-analysis finish and settle normally. Settlement can never charge more than the reservation you confirmed.

What plans and packs exist?

Free includes the full local app forever plus a one-time 25-credit Rush trial, enough to feel what a cloud pass does to a real card. It is deliberately a trial, not a recurring free tier. Pro is $20/month with 150 credits included monthly; Studio is $49 per seat/month with 500 credits per seat pooled across the team. Top-up packs: 100 credits for $12, 500 for $50, 1,000 for $90; purchased packs don't expire. (Current pricing lives at cliplogger.com/pricing.)

When do I actually need to sign in?

Only for Rush and for cross-machine sync. Sign-in lives in Settings ▸ Account; offload, browsing, logging, local AI, your-own-key cloud AI, and every export work with no account at all.

Can everyone on a team spend the credit pool?

Studio seats share a pooled balance, and viewer seats can see work but cannot spend. The server refuses viewer submissions, and the app hides the Rush option for viewers rather than offering a button that would fail.

17More questions people ask

Where does ClipLogger keep its own data, and what can I safely delete?

Two places. Beside your footage, each managed volume gets a .cliplogger folder holding the on-volume index, project documents, a lock file, and derivative caches; that folder is what makes a drive self-describing when it mounts elsewhere. On your Mac, ~/Library/Application Support/ClipLogger holds app-folder projects, the project mirror (offline listings), downloaded AI models, whisper models, and playback proxy caches. The SQLite index is a rebuildable cache by design: deleting it costs a re-scan, never data, because every confirmed decision lives in the sidecars. The big disk items are downloaded models (gigabytes each, removable from Settings ▸ AI) and cached proxies.

What exactly should I back up?

Your media, the sidecar files beside it, and the .cliplogger/projects folders (plus ~/Library/Application Support/ClipLogger/projects if you keep app-folder projects). That set reconstructs everything: the index rebuilds from media plus sidecars, proxies regenerate, and palettes travel inside project documents. If you back up footage folders whole, the sidecars and on-volume projects come along automatically.

Can two editors point at the same NAS folder at the same time?

Yes, with one honest constraint: the on-volume index accepts one writer at a time. A lock file beside the index carries the holder's identity and heartbeat; a second machine that cannot get the lease works against its own local cache instead of risking corruption, and every ambiguous case resolves to denial rather than a dual write. Project documents are built to merge: two machines curating the same project union their changes, newest edit wins per entry, and deletions cannot resurrect. Confirmed metadata meets in the sidecars, and on a JuiceMount volume the computed AI is shared through the server so the second machine does not recompute it.

What happens when I delete clips inside ClipLogger?

Deletion goes through a recycle bin with a deliberate order: every item is preflighted first (so the count on the button is the count that will move), the file operations run, and the index is then updated from what actually happened, never from what was requested. The result reports both numbers when they differ. Nothing is ever auto-purged: there is no retention timer, no size trigger, and no deletion as a side effect of offload, reject, or project delete, and a file is never removed unless its identity still matches what was binned.

Can I log one section of a long clip as its own clip?

Yes. Mark the range as a segment, then promote it to a virtual clip: it gets its own browse row, its own name, and its own analysis lane, while the range itself is stored in the parent's sidecar as an ordinary segment, so nothing is copied or transcoded and any build round-trips it. This is the intended path for a six-minute interview with three usable sections, or a 25 GB slow-mo clip where a few seconds matter. Each virtual clip counts as its own clip for Rush.

Is there a command-line tool?

Yes, loupe-cli, the headless counterpart for pipeline work. It scans and indexes folders, verifies destinations against their ascmhl manifests (mhl-verify), re-exports sidecars for a whole tree (export-sidecars), and runs AI indexing without the app open. It reads and writes the same index and sidecars as the app, so the two never disagree about state.

Do I need to keep the app open while a Rush job runs?

Keep it open through submission and the evidence upload; after that the batch runs server-side. Jobs still in flight when you quit are persisted, and on relaunch the app resumes polling them and ingests the finished results into the normal review flow. Cancelling from the Rush panel stops undispatched clips and refunds their credits.

What languages can transcription handle?

The default whisper model the app offers is English-only (the base English model, about 150 MB). The recommended upgrade, Whisper Large v3 Turbo (about 1.6 GB, downloaded with the same verified downloader as the AI models), is multilingual and noticeably more accurate; your current model stays the default until you explicitly pick the new one. For multichannel audio where people talk over each other, turn on per-channel transcription in AI ▸ Advanced tuning.

Can I run ClipLogger with AI switched off entirely?

Yes. Turn off "Read text and speech automatically" in Settings ▸ AI and leave "Let AI suggest what's in a clip" off, and no analysis runs at all; with no engine configured there is no cloud to fall back to by construction. Offload, browsing, playback, projects, manual logging with the full palette and keyboard, renaming, search over your own metadata, and every export work without any model.

How do I audit what the AI actually did on a clip?

Every reasoning attempt is stored with its request shape, model ID, provider, timestamp, and status, and the AI log shows the full exchange per attempt, including the tool-loop transcript when the agentic loop ran. Token and cost telemetry is recorded per run, provenance is stamped per result, and all of it rides the .logger.json sidecar, so the audit trail travels with the footage. If an attempt looks wrong, Re-reason reruns just that clip without touching your confirmed values.

What does the Duplicates mode actually compare?

You choose the scope (the current view, a folder, or the whole volume) and the criteria: file size, name (optionally ignoring the extension), tech metadata (codec, resolution, frame rate, bitrate), duration, timecode, transcript similarity, and content hash, which is definitive when it matches. Groups are presented for review with a keeper rule (newest by default) suggesting which copy to keep; nothing is deleted without going through the same recycle-bin flow as any other deletion.

Where do I see the app's background work?

The Jobs popover in the toolbar. Every long-running task is a job with progress and a stop control: subject scans, Prepare batches, duplicate scans, pre-caching, and Rush submissions each show there, and the Artifacts section controls background derivative work like deep pre-caching. Job status lines also surface inline near the feature that started them.

Where is the full keyboard shortcut reference?

Help ▸ Keyboard Shortcuts opens a window listing the app-wide keys (seek, cull, ratings, markers, mode switching). Your logging keys are separate by design: they belong to the palette, so the palette editor is where you see and change what each key stamps, layer by layer. Typing in any text field always wins over shortcut keys.

What does the app connect to on the network if I never sign in?

Three things, each visible and each optional. The updater checks the release feed for new versions. If a volume you browse is backed by a JuiceMount server, the two sharing switches (on by default, in Settings ▸ Sharing & Privacy) exchange computed metadata with that server, and turning the master off stops it. And any cloud engine you configured yourself sends frames only when you run it. With no JuiceMount volume, no keys, and no sign-in, footage and metadata do not leave the Mac; only the update check remains.

How do app updates work?

ClipLogger updates itself with the standard Sparkle mechanism: it checks the feed, offers the new version, and installs on relaunch. Updates are code-signed and notarized, and the app verifies the update's signature before installing. Nothing about an update touches your index, sidecars, or projects; format changes are additive, and an older build reading newer metadata degrades politely rather than failing.

Can I import metadata from an existing Premiere or Resolve project?

There is no NLE-project importer. The two import paths that exist are spreadsheets and filenames: any code-to-value CSV becomes a lookup table (and a roster CSV seeds the cast), and "Parse Names → Metadata" reads your naming template against existing filenames and writes the recovered field values back as real metadata, with a confirmation first. Round-tripping an NLE's own metadata back into ClipLogger would need a founder-decided mapping per NLE.

18Troubleshooting

An MXF clip won't play (or plays without hardware acceleration).

AVFoundation can't open several broadcast MXF flavors (Canon XF-AVC, XAVC-class H.264 4:2:2 10-bit intra, DNxHR in MXF). ClipLogger routes those to its bundled ffmpeg, which builds a one-time H.264 proxy: proxy-grade by design, cached, source untouched. For native-quality hardware playback of MXF camera formats, install Apple's free Pro Video Formats package; Help ▸ Setup Check shows whether it, the bundled ffmpeg, and the local AI model are present on this Mac.

The AI section says a model isn't installed.

Local clip reasoning needs a one-time model download (the default is Qwen2.5-VL 7B, fetched with a resumable, hash-verified downloader). Run the Built-in AI setup wizard from Settings ▸ AI: hardware check, model choice, download, verify, first load. Until a local engine (or a key, or Rush) exists, analysis still runs; OCR, transcription, faces, embeddings, and aesthetics are all Apple-framework on-device. You just don't get full clip reasoning.

A field or subject shows a dot/chip but nothing is in my exports.

That's a pending suggestion: proposed, not confirmed. Pending values are local-only by design: they never enter sidecars, exports, search facets, or filenames until you accept them. Open the clip in the Logging tab (or the review surfaces) and accept or reject; ⌘Return confirms the whole clip.

A card sits at "Checking…" forever, or the whole Ingest tab froze on one card.

It shouldn't anymore. Detection reads are deadline-bounded, so a stalled or yanked card fails fast with a "stopped responding, reconnect to check again" message instead of hanging the queue. If a physically failing card wedges the OS itself (bad exFAT media can put the reader into uninterruptible kernel I/O, which stalls Finder system-wide on modern macOS), that is below any app's reach: unplug the reader, and treat the card as suspect. ClipLogger's own checks are built to end fast and never emit a verdict from a half-read card.

A clip shows an orange drive badge and won't play.

That's the offline badge: the clip's file isn't reachable right now because its volume is unmounted, the file moved, or the project arrived via sync onto a machine that never had the media. Its metadata still displays from the index, and nothing is deleted; reconnect the volume (or restore the file) and it comes back live. An unmounted drive is never treated as a deletion.

A clip's provenance badge says "provenance unrecorded."

The clip was analysed before per-clip provenance existed, so whether its frames stayed local wasn't recorded, and the badge refuses to guess rather than claim "local" without a stored fact. Re-reason the clip and the new result records its provenance.

Sidecar files are cluttering a delivery folder.

Only .logger.json is on by default; XMP, Resolve CSV, FCPXML, and ALE are opt-in per format in Settings ▸ Sharing & Privacy. You can turn .logger.json off too, but with it off your AI evidence no longer travels with the files, and another machine would have to recompute everything. For deliveries, prefer copying media without sidecars over disabling the format.

Rush says "insufficient credits" or "too many active jobs."

Both are exact server answers, not generic errors: the first tells you exactly how many credits you have and need (top up, or trim the batch), the second means your account's concurrent-job limit is reached; wait for a running job to finish. The pre-submit disclosure shows your balance before you confirm, so the first case normally surfaces before a submit, not after.

I renamed files in the Finder and ClipLogger "lost" my metadata.

It reconnects on its own: metadata is keyed to the file's content (begin/middle/end hash + size), so the next time the renamed file is scanned it re-homes to its existing record. Keep sidecars beside files when you move them by hand, or do renames in ClipLogger's Rename tab, which moves every sidecar with the file and offers a one-click undo.

Nothing matches that. Try a shorter word.