All notable user-facing changes to FrameFlow ship as a tagged release here. Format follows Keep a Changelog; the project uses Semantic Versioning.
Every release is signed and notarized for macOS.
[2.2.0] — 2026-08-11
Added
- Byline title applies across a same-shooter selection. Select several frames and change BYLINE TITLE: when every selected frame carries the same byline, the title applies to all of them — safe by definition. A mixed-byline selection is refused out loud — nothing is written, and the log says how many bylines clashed and points at Apply to N… — instead of silently changing only the open frame.
Fixed
- RANK and COLOR menus on the caption panel apply to the whole selection. With several frames selected, the panel's rank and colour dropdowns silently changed only the focused frame while everything else implied the selection. They now follow the same rule as every other panel field: the whole selection when the open frame is part of it, single-target otherwise.
[2.1.0] — 2026-08-10
Added
- Bulk-edit the whole metadata panel. Select two or more frames and the panel's top row grows an Apply to N… button. It opens a picker that reads the current frame's saved metadata and copies exactly the fields you tick to every selected frame — headline, caption, category, special instructions, venue, IDs, keywords, personalities and more, each with a preview of what will copy. Byline name and title, credit line and copyright sit behind their own explicit toggle, so a photographer's credit is never overwritten by accident. Only ticked fields move; everything else on every frame stays exactly as it was.
Fixed
- Byline and credit edits stick on frames that arrived with metadata. On frames ingested with Keep existing image metadata on, editing BYLINE NAME, BYLINE TITLE, CREDIT LINE — or any field — could silently snap back to what was embedded in the file, with no error. The library's ingest bookkeeping preferred the file's original tags over your hand edits when it revisited a frame. A hand-edited caption now always survives, and a hand-edited frame is never the one dropped when duplicates collapse.
[2.0.1] — 2026-08-10
Added
- Smarter sending under pressure. Uploads now back off automatically when a destination is busy and speed back up as it recovers. This applies to ScorePlay sends and the photographer relay.
- End of shoot cleanup. A trash button on each ingest source moves already ingested files to the Trash, so cards and watch folders end the day clean.
- Relay controls. A Stop Relay button cancels queued relay work, Relay Existing skips frames that were already forwarded, and the relay badge on a source is much clearer.
Fixed
- Cancel Transmissions now cancels everything. Pressing it mid batch also stops queued ScorePlay uploads, not just FTP. Only the few files already mid flight finish.
- No more freeze at the start of a big send. Sending hundreds of frames no longer locks the app while the batch spools up.
- Editing a source's event or photographer while it is still ingesting now sticks.
- Turning relay on only affects future ingests, never files already sitting in the folder.
Changed
- Reveal Log Files moved to Preferences, About. It shows both the log and a sealed diagnostics file that only support can read. Send both when reporting an issue.
- The caption panel stays fully laid out when no image is selected, like a wire desk tool should.
- Shorter, plainer descriptions across Preferences and the setup panels.
- The working cache is cleared automatically when you quit.
- Hiding several images at once no longer asks for confirmation.
[2.0.0] — 2026-08-09
Update both the host and the clients.
FrameFlow 2.0 — the all-in-one release. Caption rewriting and hot-folder FTP relay move INTO FrameFlow, with a live operational log to watch every frame's journey. One app, one download: the new capabilities below unlock with an editor or admin license — standard licenses keep exactly the FrameFlow they know.
Added — editor & admin licenses
- Caption Rewrite (AP → wire style). The CaptionFlow engine now lives inside FrameFlow — every grammar rule, venue table, and edge case, verified identical to the reference implementation by an automated parity harness. Right-click Rewrite Captions on N Selected rewrites instantly — a mixed pile from several photographers goes in one shot, each frame resolving its own photographer's MEID, headline, and its event's caption style. Rewritten frames wear a wand pill; right-click reverts to the pre-rewrite caption (with a warning if it was hand-edited after); a "Rewritten" filter joins the saved-filter dimensions for tabs like "sent + rewritten" or "rewritten, pending delivery".
- Rewrite setup — set it once and close it. The Rewrite Captions sheet holds the standing configuration: tick photographers into the roster (permanent — every frame of theirs qualifies, any event), assign the MEID and an optional headline per photographer × event (they stick as you type), pick a caption style per event ("an NFL wild card playoff game", preseason, championship, or your own wording), and load an optional Event IDs CSV.
- Auto-rewrite. Ticked photographers rewrite automatically — after a frame is SENT, or once it's rated at your threshold AND captioned (either order; it waits for the caption to sit untouched a few seconds, never mid-typing).
- Per-source FTP relay. Every new ingest from a source can be forwarded automatically to FTP/FTPS destinations — the raw original, final filename, straight upload (no temp names — auto-ingest servers sweep them). Failures retry on a ladder; an unreachable destination pauses and catches up when it returns; a bad login stops honestly. A ledger survives restarts so nothing re-sends or drops. Configure per source from the branch button on each Ingest From card; frames show a branch pill (amber queued · cyan relayed · red failed); right-click Relay to… force-relays any selection. Relays never touch library originals and always yield to editorial sends.
- Live Log. The operational feed — every ingest, relay, rewrite, and send, per photographer, newest first. Filter to one photographer or all, by category, or failures-only; failures stay listed until retried or cleared, and failed relays retry straight from the row. Open it from the hamburger or pop it out to a second display; joined Macs see the host's log live in the panel; clicking a row reveals that frame in the grid.
- Speed to market. The caption panel gains an optional SPEED TO MARKET field: capture / imported / upload started / upload completed with zone labels, plus every delta — copyable in one click. Event Stats gains a Speed to Market tab: average and fastest import-to-delivered, average capture-to-delivered, and a SHOW THIS FRAME jump to the fastest image.
Added — everyone
- Photographer-locked FTP destinations. Lock a destination to a photographer (type just the name — the field goes green showing which full bylines it matches). Sending another photographer's frames there warns first with a per-clash summary — Send Anyway is one click. Built for per-photographer AP FTPs while editing several shooters at once.
- Copy-ready resend requests. The stuck-file banner and a new right-click Copy "Send In-Focus Frame" Request both put a greeted, paste-ready message on the clipboard — "Hi Kathryn Riley," plus file name, capture time, camera model, body serial, and lens — grouped per photographer for mixed selections.
- Event Stats by date. Next to the event picker, a day picker cuts a multi-day event sharing one MEID down to a single date.
- Caption panel: hide fields. Arrange mode gains an eye toggle per field — hide what you never use; Reset restores everything.
- Zone-true capture times. Capture stamps now honor the camera's recorded EXIF zone offset, so a camera set to another time zone compares truthfully against import/upload times.
Fixed
- Turning on audit mode no longer re-reads every delivered frame — only unresolved ones (never-checked or still-untagged, skipping approved and no-players). Manual "Check tags" keeps the full sweep.
- Connected Macs stay in a Windows host's session when its "allow mismatched clients" switch is on — no more two-second join/leave loop. Mac-hosted sessions still require exact version matches.
- Joined sessions absorb bulk changes far faster — a large batch arriving from another Mac applies in one pass instead of item-by-item.
[1.32.1] — 2026-08-09
Update both the host and the clients.
Fixed
- Connected Macs stay in a Windows host's session when its "allow mismatched clients" switch is on. Previously the Mac was admitted and then walked itself back out over the version difference every two seconds — an endless join/leave loop that re-served the whole library each time. Mac-hosted sessions still require exact version matches.
- Turning on audit mode no longer re-reads every delivered frame. The switch-on sweep now reads ONLY unresolved frames — never-checked or still-untagged ones that aren't approved and aren't flagged no-players. Frames you've already signed off are never touched again, which also removes the wall of sync traffic that slowed the Sent tab every time audit mode came on. The manual "Check tags" button still performs the deliberate full re-read when you want one, and a connected Mac's toggle behaves identically.
[1.32.0] — 2026-08-08
Update both the host and the clients.
Added
- Bulk Add/Fix Keywords. A new button under the KEYWORDS field — Add/Fix keywords on N selected… — opens a dialog like the batch athlete fix: type keywords once, hit APPLY, and every selected frame's caption gains them. Frames already delivered to ScorePlay get the keywords pushed onto their media as real tags — retroactive keywording without leaving FrameFlow. Keywords that don't exist on the account yet are created automatically, connected Macs run the whole push through the host (same as every other tag operation), and the dialog shows a progress bar with any per-frame failures.
- Full names in Image Properties. Editor Info now shows the Caption writer, Photoshopper, and Tagger (colour) as full names resolved from their licenses instead of raw initials.
- Public IPs in the client roster. Connected clients show the public IP they're actually connecting over, with the local address as fallback.
Changed
- Editor initials are uncapped. Machine-style names (AWNUC, MACMINI1) fit — set the field as long as you like; the thumbnail pills render whatever you set.
Fixed
- Plain ingest no longer stamps initials. The bottom-right pill and the captioned-by credit only move on real human work — colouring, captioning, keywording — so host-ingested frames stop wearing the ingester's badge.
[1.31.0] — 2026-08-07
Update both the host and the clients.
Added
- Upload threads are yours to tune. Preferences › Sending gains an UPLOAD THREADS section — how many images upload in parallel to FTP and to ScorePlay (1–10 each, default 3). Raise them on a fast line to move a burst quicker; the help text carries the field caveats (per-login FTP connection caps, congested venue Wi-Fi). ScorePlay applies live mid-burst; FTP from the next send.
Fixed
- Esc always gets you back to browsing. Pressing Esc in the keywords box, personalities, headline — any caption-panel field — hands the keyboard straight back to the contact sheet, arrows scrolling immediately.
- The whole keywords box is clickable — click anywhere in it to start typing a keyword, not just the exact entry line. Removing a chip still works exactly as before.
[1.30.0] — 2026-08-07
Update both the host and the clients.
Changed
- Paste from Sent, reworked for speed of finding. The panel now fills most of the screen (more thumbnails per row, more rows in view), and the newest deliveries lead — the caption you want to re-use is almost always from the frames you just sent, so they're at the top instead of the bottom.
[1.29.0] — 2026-08-07
Update both the host and the clients.
Fixed
- Fixing athlete tags while connected to a host can no longer fail with an authorization error. Every ScorePlay tag operation from a connected Mac — searching athletes, reading a frame's tags, adding and removing them, single or batch — now runs on the host with the host's key, the same way the tag audit always has. A connected Mac's own saved key (stale, replaced, or missing) is never consulted, and keys never travel over the network. Change a key on the host and every editor is current instantly.
- The destinations panel is honest while connected: selecting a ScorePlay destination shows "Using the HOST's ScorePlay key" — or a clear warning if the host has no key saved for that account.
- No more wall of spinners when opening a tab. Cached thumbnails now appear in the same instant the grid does — previously even a fully-cached Sent tab flashed loading spinners for a second or two while cache reads queued behind the tab switch.
[1.28.0] — 2026-08-07
Update both the host and the clients.
Fixed
- The contact sheet stops paying rent on every sync message. Two structural changes aimed squarely at big-day slowness:
- Thumbnail cells no longer re-render on every update flowing through a live session — each cell now repaints only when its frame (or the view settings it draws with) actually changed. Peer edits still appear instantly; the ~80 wasted re-renders per message are gone.
- Bulk actions no longer freeze the click: hiding, ranking, or signing off hundreds of frames used to encode every frame's sync message on the main thread before the UI could breathe. That work now runs on a background queue with identical ordering.
- Thumbnail memory scales with the Mac (up to 10,000 cached thumbs on 32GB+ machines), and the connected-session thumbnail disk cache clears itself on quit so it never accumulates across events.
Added
- Colour and rating auto-advance. Marking a single frame with a colour key or spacebar rank steps straight to the next frame — grid and full-size view both. Multi-selection marks stay put.
- Dates filter. The filter pane gains a Dates section listing every capture day, selectable like Event MEIDs — the clean cut for multi-day events sharing one MEID.
[1.27.0] — 2026-08-06
Update both the host and the clients.
Changed
- Colouring an image no longer counts as captioning it. Who captioned a frame is now tracked separately, and only real typed caption work sets it — writing or editing the caption, keywords, or personalities (keyword-only work counts). Applying an event or photographer template doesn't claim it either. The delivered Description Writer field builds its captioner half from this real identity ("photoshopper/captioner"), and Event Stats' Captioned by counts it exclusively — someone who coloured a hundred frames no longer shows up as having captioned them. The bottom-right initials badge still shows who last touched or coloured a frame, exactly as before.
Added
- A caption pill on thumbnails — the blue text-bubble twin of the green Photoshop pill, side by side at the bottom-left, showing who captioned or keyworded the frame. It appears the moment real caption work happens.
- Keywords tab: "Hide keywords on 100% of frames." Event-template keywords ride every frame and flatten the chart — tick the box and they drop out, with the remaining keywords re-ranked and both bars and percentages re-based to the top remaining keyword. The choice persists, and Copy This Tab captures whichever view is showing.
[1.26.0] — 2026-08-06
Update both the host and the clients.
Added
- Event Stats — the EXIF Watcher engine, now living inside FrameFlow (hamburger menu → Event Stats; editor and admin licenses). Pick an event or All Events, pick a scope — Sent images only, or the Entire library including hidden — and run:
- Tabbed report: Summary (frames / edited / sent / hidden / days tiles, camera bodies, lenses, ISO-aperture-focal min/avg/max), Cameras and Lenses totals, Team (edited per person and captioned per person, straight from the Description Writer credits), Keywords usage, All Photographers (with each shooter's top body, top lens, averages and days), and one tab per photographer with their own gear and by-date breakdown. Every bar shows its true share of the frames, ranked highest first.
- Copy This Tab renders the tab you're looking at to a crisp image on the clipboard — paste it straight into a chat. Export .xlsx writes a multi-sheet workbook (including Overall Camera Totals and Overall Lens Totals) to a folder you choose, with an optional Auto-save toggle for every run.
- Session-aware: connected to a host, your Mac doesn't scan anything — the host runs the report over its own files and streams progress back live. Only verified editor/admin clients are served. And if the host can't run the report (an older build, or a host that simply never answers), your Mac computes it itself from its mirrored library — the counts, team, and keyword numbers are exact immediately, and the camera-EXIF plane pulls the files over the network with a visible per-frame progress bar. Slower, but nothing is out of reach.
- Browser access: the host can hand out a Copy browser link — any machine on the network with just a web browser (no FrameFlow install at all) gets the full report as a styled page plus a spreadsheet download. The link carries a fresh access key each launch, shown only inside the stats panel.
[1.25.0] — 2026-08-06
Update both the host and the clients.
Fixed
- The Sent tab now moves like every other tab. A deep performance review found three compounding costs and this release removes all of them:
- Arrow-key navigation no longer repaints the whole window per keystroke. The scroll-into-view request was wired through app-wide state, so every press re-diffed the entire grid — the bigger the tab, the worse it felt, which is why Sent suffered most. Navigation also stopped re-centering the viewport on every step: the view now scrolls only when the selection would leave the screen.
- Thumbnails on a connected Mac now have a disk cache. Previously every thumbnail that fell out of memory had to be re-fetched from the host over the network — and one unreachable frame could block a fetch slot for over a minute while visible frames waited behind it. Thumbnails now persist on disk between visits and sessions (edited frames refresh automatically), fetch slots are never held through retry waits, and switching to a tab pre-loads the first two screens immediately.
- Tag read-backs no longer repaint the host per result. A Check-tags pass over hundreds of frames applied results one repaint at a time; they now apply in quarter-second batches, matching the update batching clients already had.
- The audit toolbar's "Approve All Shown" count no longer goes stale. Signing off frames (or results arriving from ScorePlay) updates the count immediately — previously it could freeze until you switched tabs.
- Position lookups behind keyboard stepping, shift-click ranges, and the "Viewing N of M" label are now constant-time on any library size.
[1.24.0] — 2026-08-06
Update both the host and the clients.
Fixed
- The "my whole batch got hidden after saving out" mystery is solved and closed. The selection used to open a batch in Photoshop quietly survived the entire Camera Raw session, and the first H or ⌘⌫ pressed after saving out — meant for one frame — hid the whole batch in a single keystroke. Two guards now make that impossible: opening a multi-frame batch in Photoshop clears the selection, and any hide of more than 15 frames pauses to ask first. Hidden frames were always recoverable via Show Hidden; now the accident can't happen in the first place.
- Sent-tab navigation while connected to a host is dramatically smoother. A busy session could push hundreds of sync updates a minute (tag read-backs on freshly delivered frames), and each one repainted the entire window. Updates are now applied in batches — one repaint per quarter-second instead of one per message — and audit mode's on-frame sign-off menus and toolbar counts no longer tax every repaint. Nothing about what syncs changed, only how often the screen repays for it.
- Athlete names from ScorePlay arrive with proper capitalization. A roster entry stored fully lowercase ("andrew wevers") is title-cased everywhere it lands — athlete chips and Personalities — while names that already carry their own casing (McIlroy, DeChambeau) pass through untouched. Existing lowercase entries fix themselves on the next tag check.
- The ✕ on keyword, personality, and athlete chips is much easier to hit — the click target is now about twice the size, with no visual change.
Added
- Auto-filled Personalities now log each frame they touch, so you can confirm the automatic fill is working from the log alone.
[1.23.0] — 2026-08-06
Update both the host and the clients.
Added
- ⇧⌘E — orange highlight for uncaptioned frames. Toggle it and every frame in your current tab whose caption still carries
<<enter caption here>>glows with an orange ring and halo — the exact analog of the white selection lighting. Each frame's glow clears on its own the instant its caption is filled, by any means; press ⇧⌘E again (from any tab) to turn the mode off. Selection is untouched, and a selected cell's white ring outranks the orange. Rebindable in Preferences › Shortcuts.
Fixed
- A Mac that saves out a big batch can no longer briefly disagree with the host about its own edits. During a large save-back the editing Mac raced its own pushes and could re-send pre-edit copies of frames the host had already absorbed; the host repaired its own records but said nothing, leaving the editor's screen showing stale frames until something else touched them. The editing Mac no longer sends those stale copies at all, and whenever the host does repair one, it now rebroadcasts the corrected frame so every screen snaps back within a moment.
- Hiding is no longer invisible in the logs. Every hide and unhide — yours or another editor's — now records who hid which frames, so "where did my photo go" is answerable from any Mac's log.
- When a staged file disappears from Camera Raw without a save, the log now says so plainly — naming the frame and stating that no edit came back for it (the library original is untouched). Previously these read as routine lock cleanups, and frames that were quietly deleted in the Camera Raw filmstrip looked like they'd vanished mysteriously.
[1.22.0] — 2026-08-06
Update both the host and the clients.
Added
- Sessions now require matching versions. A Mac joining a hosted session on a different FrameFlow version is turned away with a clear message naming both versions — and an Update button that takes it straight to the download when the host is newer. Mixed versions in one live session are how subtle sync bugs happen; local work (and hosting your own session) stays unrestricted on any version.
- No-tags only — a second audit filter beside Needs-review only that narrows the Sent tab to just the frames ScorePlay read back with zero athletes. Fix the untagged pile first, then untick it and Approve All the rest.
- ⇧⌘F opens Fix Athlete Tags on the current selection (rebindable in Preferences › Shortcuts).
Changed
- Every default tab now sorts by capture time (Date Time Original), newest first on Sent. Rating a frame no longer re-shuffles the grid mid-review, since the camera clock doesn't move when you rate. Custom filters keep whatever sort you gave them.
Fixed
- Edits can no longer come back hidden. If a frame was hidden while its batch sat in Camera Raw (a cull sweep over the originals), the finished edit landed in Caption/Send still flagged hidden — invisible on every screen. A finished edit now always clears the hide, on every path.
- Batch athlete fix searches the right ScorePlay account. The modal now identifies the account that actually owns the selected frames' media (the same way the single-frame fix does) instead of trusting the first configured key — searching the wrong account's teams came up empty for athletes that plainly exist.
- Esc out of the full-size view is instant. The thumbnail grid now stays live underneath the expanded view instead of being rebuilt from scratch — on a deep Sent tab in audit mode that rebuild was a visible stall on every Esc.
[1.21.0] — 2026-08-06
Added
- Batch athlete tagging. Select any number of delivered frames, right-click → Tag Audit → Fix Athlete Tags on N Selected… (or use the button in the caption panel): search an athlete once, pick one or more, and APPLY TO ALL — every frame's ScorePlay media gets the tags with live progress, per-frame failures named, and each frame re-read so the audit shows what ScorePlay actually holds. The single-frame fix popover remains for one-off corrections.
- Athletes → Personalities. A → Personalities button in the TAGGED ON SCOREPLAY section copies the AI's athlete names into the frame's Personalities field, and a new preference (Preferences › Tag Audit) does it automatically on every read-back.
- See where SEND delivers, before pressing it. One chip per ticked destination sits above the SEND button — fuchsia for ScorePlay, blue for FTP — so a wire destination left ticked from the last take is visible at a glance. No destinations ticked shows an amber warning. The destinations cogwheel is now also available with nothing selected.
- Matching tags shown on multi-select. When every selected delivered frame carries the same ScorePlay athletes, the caption panel says so ("all N match") — including the red case where they all agree on no athletes at all.
Fixed
- Keyboard navigation can no longer get stranded. After captioning (or ⌘E) and clicking another thumbnail, arrow keys sometimes went dead and the caption kept a grey ghost highlight until a trip through the full-size view. Focus hand-off is now explicit and deterministic on every exit — clicking a thumbnail, clicking empty grid space, or pressing Esc in the caption hands the keyboard straight back to the grid, and the caption never keeps a stale selection. Every hand-off is also recorded in the app's log file, so a misbehaving session can be diagnosed from the log alone.
- Rating in the full-size view keeps your place. Rating a frame under the Sent tab's newest-first sort teleported it to the front and re-shuffled the filmstrip mid-flow. The full-size view now keeps the browse order you entered with — rate, step, rate — while the tab behind still re-sorts live.
- Frames pushed from another Mac arrive clean — no more initials badge implying someone is working on a freshly ingested frame.
[1.20.0] — 2026-08-06
Added
- Import an event from an exported .XMP template. The Events importer now takes a metadata template file (a Photo Mechanic or FrameFlow export) exactly like an image — headline, city/state, venue, country, source, categories, keywords, photographer, MEID and date all land on the event.
Fixed
- The MEID imports with the rest. Importing an event from an image's metadata skipped the MEID entirely — it now fills in like every other field, in both "Fill empty fields only" and "Overwrite" modes.
- Typing in the Events editor no longer fights you. Typing into the caption template or any event field could feel clunky, with the cursor jumping to the start of the field or the text wobbling mid-word — worst while connected to a session, where each keystroke raced its own sync echo. Fields now update instantly and sync a beat behind your typing, incoming session updates never overwrite a field you're actively editing, and the caption template edits as a plain text box that saves quietly in the background. Clicking into the template without typing no longer risks switching Auto-format off.
- Single space after "during the". Auto-formatted captions carried a double space there (an old deliberate fill-in gap) — delivered captions read cleaner without it.
[1.19.0] — 2026-08-04
Added
- PENDING UPLOAD TO — a built-in outbound queue. A new filter criterion matches frames that have not yet been delivered to the destination(s) you choose. Save Rank 1 + PENDING UPLOAD TO: your wire destination as its own tab, file everything to your DAM as you edit, then work the tab down — each frame leaves the tab automatically the moment its delivery succeeds. FrameFlow tracks its own deliveries per frame, so the queue needs no outside service to know what's been sent.
Fixed
- Sends no longer fail on filenames with spaces. A delivered file named like a Finder duplicate ("… copy.jpg") — or with # or % in the name — failed instantly with a cryptic transfer error. Such names now upload correctly (the server still receives the exact original filename), and the destination's host field tolerates addresses pasted straight off a vendor info sheet, "ftp://" prefix and all.
- Arrow keys work right after captioning. Typing in the caption panel and clicking another thumbnail sometimes left the arrow keys stuck in the text field, forcing a round-trip through the expanded view. Clicking a thumbnail now always returns keyboard control to the grid.
- ⏹ tells the truth on big imports. Stopping a large folder ingest froze copying immediately, but the progress bar kept marching as if the batch were still running. The tile now freezes on the spot with "stopping — finishing files already in flight…" and flips to DONE when those land.
[1.18.0] — 2026-08-01
Added
- Sign off tag audits right on the frame. In Audit mode on the Sent tab, every thumbnail carries a clickable sign-off pill: Approve, No Players Expected, Needs Review, or Clear — acting on your whole selection — and frames you haven't touched show a neutral SIGN OFF pill so nothing needs the right-click menu. The audit bar's buttons are bigger, and a small legend reminds you of the fastest path: keys 1 OK · 2 no players · 3 review.
- Stuck uploads get called out instead of spinning forever. A hot-folder file that stops arriving (a photographer's transmitter died mid-frame) used to re-trigger scans endlessly with no way to see which file was the problem. Now the log names the laggards, and a file genuinely frozen for several minutes is set aside with a red banner on every screen — "ask the photographer to re-send it". The banner can be closed and clears itself after 20 seconds; a re-send picks the file up automatically, and pressing ▶ on the source retries it. Works on the host's hot folders and on card readers at joined Macs alike.
- Everyone sees the whole session. The Clients list on a joined Mac now shows every connected editor — the host first, yourself marked YOU, and the same count the host sees — instead of reading "Clients: 0".
Fixed
- Tag audit now works from joined Macs. Check tags on a client used to look ScorePlay up with the client's own account, report every frame as "not found", and quietly stop the whole session's audit from re-checking those frames. A client now asks the host to do the read-back with its own account, results flow back to every Mac automatically, and the completion line reports honestly when frames can't be found. Polling is also better behaved: a rejected key pauses checks everywhere until you fix it, however many Macs are connected. Update both the host and the clients.
- First open of the send cogwheel / ScorePlay picker no longer stalls. The one-time system check that used to land right on your first click now happens quietly in the background at launch.
- The Sent tab is snappy while connected to a session. It was paying a hidden per-refresh accounting cost — heaviest with a big delivered take — even with Audit mode off.
- Shift-click selection behaves in the expanded view. The strip's gaps no longer swallow clicks, a plain click sets the range anchor so ⇧-click extends from the frame you just clicked, and rapid ⇧/⌘-clicking in the grid no longer pops you into the preview mid-select.
Changed
- Colour labels on the expanded view's filmstrip are squares now — bigger and edged, so a yellow or green class reads at a glance on dark thumbnails.
[1.17.0] — 2026-08-01
Added
- Custom byline format, per event. Every event now has a CAPTION CREDIT switch. Turn on Custom byline and each photographer applied under that event signs the caption in your own format instead of the standard "(Photo by Name/Credit)" — the BYLINE FORMAT field takes {name} and {credit}, so "Photo: {name}-{credit}" delivers "Photo: Craig Mitchelldyer-Portland Timbers". The custom credit is exactly as sticky as the classic one: re-selecting a photographer swaps it in place (never stacks), the caption template's live preview shows it, bulk caption edits across a selection keep it, and a missing name or credit collapses cleanly with no dangling separator. Applies everywhere photographers do — the Events window, the right-click event menu, folder defaults, and imports from other editors. Update both the host and the clients.
[1.16.1] — 2026-07-26
Added
- ↑ / ↓ in Image Properties. The panel's arrow browsing now speaks the contact sheet's full vocabulary: ← / → step one image, ↑ / ↓ jump a visual row of the grid, with the sheet scrolling along behind the panel.
[1.16.0] — 2026-07-26
Photo Mechanic-style color classes and a selection you can see across the room.
Changed
- Color classes now draw as a solid frame around the photo itself — a tall frame around a portrait, a wide one around a landscape — instead of a thin outline on the card edge. The frame sits beside the image, never over its pixels, with sharp square corners, and the rank number rides the frame's top-right corner.
- The selected frame lights up. Selecting a photo turns its whole cell near-white around the untouched image — margin, letterbox and footer — in addition to the white halo, so the highlighted frame and its color rating both read at a glance from anywhere on the contact sheet.
[1.15.0] — 2026-07-24
The full Photo Mechanic variable catalog, and a stop button for pushes to a host.
Added
- The full Photo Mechanic variable set — 473 names including every short alias. Everything from the PM catalog now works in captions, keywords, delivery codes, delivered filenames and export folder templates: camera variables read from each image at delivery (
{aperture}{shutter}{iso}{make}{model}{lens}{serialnum}{flash}{meteringmode}and more, plus the APEX values{av}{tv}{ev}{sv}{ev100}), the complete date and time families (capture, IPTC, modification,{now…}{today…}{tomorrow}{yesterday},{wiredate}→Wednesday, July 22, 2026), IPTC and wire-service fields ({persons}{transref}{suppcat1}{slug}{personality}{routingdest}…), and file tokens ({frame}{frame4}{prefix}{folder}{path}{filesize}{pixels}{aspect}). AP-style month abbreviations are done properly —Jan.,Feb., butMarchthroughJulyspelled out. User variables ({username},{usercompany}, custom fields…) are supported;{username}works out of the box. - FrameFlow's own long-standing tokens keep their exact meaning —
{date}{day}{month}{year}stay ingest-based for rename templates; the capture-date equivalents are{datesort}{day0}{monthname}{shot}and friends.
Fixed
- Stop button while pushing to a host. The ⏹ stop control now appears during an ingest that's uploading to a connected host, not just for local copies — photos already pushed stay on the host, the rest of the pass cancels cleanly.
[1.14.0] — 2026-07-24
Caption variables everywhere, and a date-token family for caption prose.
Added
{iptc…}date variables. New tokens drawn from each image's capture date (the camera clock):{iptcmonthname}(July),{iptcday}(5) and{iptcday0}(05),{iptcmonth}(07),{iptcyear4}/{iptcyear2}(2026 / 26), and{iptcdate}(20260722). A caption template like{iptcmonthname} {iptcday} {iptcyear4}; Portland, OR, USA; …delivers asJuly 22 2026; Portland, OR, USA; …. Month names are always US English regardless of the machine's system language. The existing{year}/{month}/{day}/{date}tokens keep their ingest-date meaning for rename templates. Also new:{venue}and{country}.
Changed
- Variables now resolve in every caption field, not just keywords. Caption text, headline, special instructions, venue, city, state, country, event name, category, source, and credit line all resolve
{tokens}at delivery — on FTP sends, ScorePlay uploads, and exports alike. In prose fields a mistyped variable stays visible in the output rather than being silently deleted, so a typo is caught at the caption preview or tag audit instead of after transmission.
[1.13.1] — 2026-07-23
Changed
- The RAW badge now reflects what you'd deliver. Once a Camera Raw save exists for a RAW frame, the badge comes off — the frame shows and sends the JPEG derivative. Reset to Original brings the badge back with the RAW pixels. Filters still match the frame as RAW.
- The join download card matches the app. "Downloading files from the server…" now uses FrameFlow's own card style and a brand-gradient progress bar, with a clearer Skip ("load the rest in the background").
[1.13.0] — 2026-07-23
A proper Reset to Original, smoother mouse work on the contact sheet, multi-select in the expanded view, and an Image Properties panel you can copy from.
Added
- Copy from Image Properties. All text in the Image Properties panel can now be selected and copied — drag across a whole section, labels included — and a new Copy All button puts every property on the clipboard as clean text in one click.
- Multi-select in the expanded view. The filmstrip now speaks the contact sheet's language: ⌘-click (or Ctrl-click) adds or removes frames, ⇧-click selects a range, plain click previews. Selected frames carry a white ring — cyan still marks the frame you're viewing — so rating, hiding, delivery codes and Reset apply to the whole selection without leaving full-size mode.
Changed
- Image Properties dates read on one clock. Every Date Info row is shown in your machine's local time with an explicit zone tag (e.g.
CDT), so an editor in one time zone working a game in another can't misread a bare timestamp. The capture row converts the camera's stamp when the camera recorded a zone offset — and keeps the original stamp alongside as ground truth.
Fixed
- Reset to Original actually resets. It now deletes the Camera Raw edit, clears the delivery code, edit credit, reject flag and any stale send error, returns the frame to Browse, and refreshes every preview — as if the edit never happened. On a shared session the fix reaches the host too: previously the host kept serving the edited image, so a reset looked like it only changed tabs. Update host and clients together to get the full effect.
- The ALL SOURCES lever turns everything off again. Switching it off genuinely stopped the watchers but the switches snapped back to ON visually — the off state was never shown. Per-source toggles now track truth in both directions.
- Right-click opens the menu on the first click, anywhere on a thumbnail. Right-clicking over the photo itself needed a second click; only the navy edges worked on the first. Every point of a cell now behaves identically.
[1.12.0] — 2026-07-22
Smoother culling, alternate crops that keep their metadata, more flexible delivery codes, and remote FTP management for admins and editors.
Added
- Delivery codes can go before or after the filename. A single Suffix / Prefix setting in the Delivery Code panel applies to every code, so
-16x9can deliver asAW1_0001-16x9or as16x9-AW1_0001. Right-click any saved preset to delete it. - Admins and editors can manage the host's FTP destinations remotely. From a joined machine, an admin or editor can add, edit, hide, reorder or remove the host's delivery destinations — credentials included — without walking over to the host. A password you leave blank keeps the one already saved on the host.
Fixed
- Hiding a photo moves you to the next one. Hiding now advances to the following frame in both the contact sheet and the expanded single-photo view, instead of leaving you on nothing.
- Alternate crops keep their caption and delivery code. A second Camera Raw save — an alternate crop — now always arrives in Caption/Send carrying the original frame's caption, keywords, delivery code and rating. On a shared session it could previously land in Browse with none of that.
[1.11.0] — 2026-07-22
Big-day speed and two important fixes: resets now clear in-camera-protected frames, and editing stays snappy no matter how large the library grows.
Changed
- Saves no longer grow with your library. Rating, colouring and captioning used to re-save the entire library on every edit — thousands of frames deep into an event day, that meant constant heavy background work. Edits are now saved incrementally, so a rating keystroke costs the same at 20,000 frames as it does at 200. Your library file stays fully compatible, a clean quit always leaves it complete, and crash recovery was tested against torn writes, disk-full moments and backup fallbacks.
- Big card copies no longer slow the rest of the app. The Import panel's live progress now repaints only its own cards instead of nudging every open panel several times a second, and part of the per-file bookkeeping moved off the interface thread.
Fixed
- Reset Working Library now clears in-camera-protected frames. Frames you protect in camera carry that lock into the library, and macOS refuses to move or delete locked files — so resets quietly left them behind and they reappeared on the next scan. Reset (and permanent delete, which had the same hidden failure) now unlock those frames before removing them.
[1.10.0] — 2026-07-21
Faster in large libraries, an automatic “description writer” credit, variables in keywords, and a new Editor licence tier — plus fixes to caption credits and resetting a shared library.
Added
- Editor licence. A new licence tier, alongside standard and admin, that unlocks two power tools: permanently deleting images, and resetting the working library for the whole session while you’re connected to a host. It carries an orange badge in the licence panel.
- Automatic “description writer”. Delivered files now carry the IPTC Writer/Editor field automatically as “retoucher/captioner” initials — e.g.
aw/cmwhen one person retouched and another captioned, oraw/awwhen the same person did both. - Variables in keywords. Keywords now accept the same
{…}variables as the export and rename fields —{filenamebase},{photographer},{event}, and the rest — resolved per frame as each file goes out.
Changed
- Reset the shared library from any editor. When you’re connected to a host, Reset Working Library now resets the host’s library for the whole session, so every editor’s contact sheet clears together. Open to admin and editor licences.
- Much snappier at scale. Rating, colouring and captioning thousands of frames — especially several at once — is faster, and flipping between two frames to compare is now instant instead of reloading each one.
- Cleaner import sources. Each ingest source now shows just its folder (“Receive/Avery Bane”) instead of the whole path; the full path is in the tooltip.
Fixed
- Caption photographer credit no longer duplicates. With Auto-format off, backspacing over the “(Photo by …)” credit used to stack a fresh copy on every keystroke. Fixed — and it cleans up any caption already affected.
- Reset Working Library now fully empties the library, even on network or cloud-synced volumes where moving files to the Trash can fail — so starting a clean shoot (or hosting straight after) no longer shows the old photos.
- Permanent delete is verified on the host against the deleting editor’s licence, so it always matches the on-screen admin/editor rules in a shared session.
[1.9.0] — 2026-07-20
Alternate crops without leaving Camera Raw, and a flexible delivery-rename system that carries all the way through send and export.
Added
- Alternate crops — stay in Camera Raw and save as many as you like. Open a frame, and each time you hit Save Image in Camera Raw it lands as its own frame: the first is the shot itself, the next become
…b,…c,…d— each a separate frame in Caption/Send that inherits the original's caption, byline and keywords. Re-edit the same frame later and it keeps counting up (e,f…) instead of colliding. There's also a right-click Duplicate & Edit (Alt Crop) for a one-off copy opened fresh from the original. - Delivery codes — non-destructive filename tags. Right-click a selection → Delivery Code to tag frames with a code like
-16x9or-4x3(manage your own presets in Preferences › Tags). The code is added to the delivered filename on send and export — the library file and its name never change — and any frame carrying a code shows it highlighted wherever the filename appears, so coded frames stand out at a glance. A Custom / Preview… dialog shows the resulting name live. - Variables in delivery and export names. Delivery codes and the export filename field accept the same tokens as the folder template —
{event},{photographer},{headline},{date},{city}, and the rest — resolved per frame (e.g.-{headline}). Unknown or empty tokens simply drop out. - Filename code in the Export dialog. Create Export gained a Filename Code field — preset chips, free text or tokens, with a live filename preview beside the folder preview. An export-level code applies to that export's files (overriding each frame's own code); leave it blank to use each frame's code.
Changed
- Delivery codes flow through send, Quick Export, and the full Export dashboard consistently.
[1.8.0] — 2026-07-17
Events gets a full-size workspace with per-photographer bylines on the event itself, and joining a host now shows a clear download progress bar while the contact sheet fills in.
Added
- Events is now a full editing workspace. Opening Events gives you a large three-column page: your events on the left, the full event template in the middle, and photographers on the right — all on one screen, no more cramped tabs.
- Per-photographer metadata, edited in place. Add photographers to an event, then click one to edit their byline name, byline title, credit and copyright right there on the event page. Apply to selected stamps that photographer's byline onto the chosen images and appends a “(Photo by …)” credit to the caption. A freshly added photographer opens straight into edit mode.
- Live caption preview per photographer. Click a photographer and the caption on the event page updates instantly to show their “(Photo by …)” credit — switch photographers and the credit swaps in place, so what you see is what gets applied. Clicking an event on the left returns to the base event with no photographer selected.
- Per-photographer keywords. Keywords are now sticky at two levels. With no photographer selected you edit the event's shared keywords; select a photographer and those event keywords show as “always applied” while the field edits that photographer's own keywords — so a keyword you add for one photographer never lands on the event or the others. Applying a photographer stamps the event's keywords plus theirs.
- Join progress bar. When you join a host, a “Downloading files from the server…” bar shows how many thumbnails have loaded so the grid fills predictably instead of appearing to hang. A Skip button lets you start working immediately.
Changed
- Snappier selection in large contact sheets. Selecting, rating and colouring frames stays responsive even in a browse view of several thousand images — the lag that grew with library size is gone.
- Cleaner, tighter contact sheet. Thumbnails now fit (never crop) straight onto the app's dark theme with no box or frame around them — portraits simply centre, nothing letterboxed — and the grid packs a little tighter, so frames are bigger, closer, and easier to click.
[1.7.0] — 2026-07-17
A big release: much faster ingest and large-library handling, a redesigned import panel that works the same whether you're local or joined to a host, one-click Quick Export, and a batch of workflow refinements.
Added
- Quick Export — one-click delivery to a preset folder. A new QUICK EXPORT field in the caption panel (reorder it like any other field). The first click asks for a destination folder and image size/quality; after that, one click exports the selection there and shows live progress and a Show-in-Finder button. Change the destination or quality any time in Preferences › Sending.
- Live card status while importing. Each card or folder in the Import panel now shows an IngestFlow-style status — a progress bar with a running count while it copies, a green “done” line after, and an unmistakable SAFE TO PULL banner once a card auto-ejects.
- Stop an ingest in progress. A ▶ that's copying becomes a ⏹ — stop any time, and everything already copied stays. Ingest also streams in batches now, so frames appear in the contact sheet as they land instead of all at once at the end.
- Custom byline titles. Preferences › Tags lets you add or remove the titles offered in the photographer byline dropdowns, so each outlet can tailor the list. Photographers already carrying a removed title keep it.
- Optional organization on activation. The activation window gained an Organization field — kept with your license record, handy when one newsroom runs several licenses.
- Spacebar ranking, your way. Preferences › General now offers 1–5 for the spacebar rank, plus a Cycle option that steps 1 → 2 → 3 → 4 → 5 and wraps back to 1 on each press.
Changed
- Import is now identical whether you're local or joined to a host. Joined editors get the same card detection, Add Folder, and per-source event/photographer menus as local mode — files simply upload to the host's library. The separate “Import to Host” button is gone; importing to the host is automatic.
- Ingest speed at scale. Importing thousands of frames — and working in a library of thousands — is dramatically faster and stays responsive. Copying uses your Mac's CPU threads (set the count in Preferences › Importing), thumbnails are generated as frames arrive so the grid fills without spinners, and the app no longer bogs down as the library grows through a big event.
- Snappier batch actions. Hiding, un-hiding, or signing off audit on thousands of frames at once is now near-instant instead of lagging.
- Any tab click leaves the single-image view. When you're zoomed into one photo, clicking a workflow tab snaps back to the thumbnail grid — same as Esc or a double-click.
- Bigger keywords box in the caption panel, and the photographer dialog reads Add Photographer with a clearer prompt.
- Tag-audit tools appear only when they apply. The Sent-tab tag-audit bar and the ScorePlay caption controls now show only when a ScorePlay destination is selected, so non-ScorePlay setups aren't cluttered by them.
Fixed
- Add Photographer works in every mode. Adding a photographer now works whether you're local, hosting, or joined to a host.
- Auto-eject after ingest now works when joined to a host, and retries once if the card is briefly busy.
- The session address bar's (+N) is now a button that lists this Mac's other network addresses, with a short explanation.
[1.6.11] — 2026-07-16
Added
- Optional organization on activation. The activation window has a new ORGANIZATION field. Leave it blank, or enter your outlet or company name — it's kept with your license record, which makes life easier when one newsroom runs several licenses. Existing licenses aren't affected and nothing is required.
[1.6.10] — 2026-07-15
Fixed
- Portrait frames show in full on the filmstrip. Vertical images were cropped to the filmstrip's landscape thumbnails — a portrait celebration frame showed as a chopped sliver. Every frame now scales to fit its filmstrip box, with black bars filling the sides, so the whole image is always visible.
[1.6.9] — 2026-07-15
Added
- Sort by Ingest Time. A new sort option orders images by when they arrived in the library — the card/FTP arrival sequence — for the moments when that matters more than the camera's clock. It sits right next to Date Time Original in the sort menu, on every tab.
Changed
- Tag Audit shows athletes as chips. The ScorePlay read-back now displays every tagged athlete as a large, clear chip — green when the name matches your caption, blue when there's no caption name to verify against, and amber (with a +) when a caption name is missing on ScorePlay. Clicking a chip's × untags that athlete on ScorePlay directly (with a confirmation), exactly like removing a keyword; an amber chip opens Fix athlete tags ready to add them.
- Fix athlete tags is now a real button. The audit's main action looks like one — a filled, full-width button — instead of a small text link.
- Fix athlete tags is ready to type the moment it opens. The panel puts the cursor in the athlete search immediately — no click needed. Type a name and press ↵ right away; a search entered while the current tags are still loading runs automatically as soon as they arrive.
[1.6.8] — 2026-07-15
Fixed
- Sorting by Date Time Original now uses the camera's clock. It previously ordered images by when they were ingested, so a library holding several shoots ingested together came out in filename order no matter what. Every image now carries its real capture time (read automatically at ingest, and filled in for existing libraries the first time they open), and the sort orders by it across every tab, the filmstrip, and arrow-key navigation. Images with no camera time (screenshots, graphics) fall back to their ingest time.
[1.6.7] — 2026-07-15
Fixed
- Images from a cancelled edit batch can be edited again. Closing a batch in Camera Raw without saving used to leave those images refusing to re-open for edit ("already open or being fetched for edit — skipped"), even after their edit badge cleared. Once the badge clears, Edit works again — and a straggler save from the earlier Camera Raw session still imports safely, so no finished edit is ever lost.
[1.6.6] — 2026-07-14
Fixed
- The send-destinations menu opens correctly the first time. The gear menu next to SEND could open squeezed into the bottom corner of the screen — with its rows cut off — the first time it was opened, or when a ScorePlay account was ticked while it was open. It now opens full-size and in place every time: the ScorePlay collections area is always laid out, and simply lights up once its account is ticked.
- ScorePlay accounts with many collections now list all of them. The collections picker previously stopped after the first 200 collections, so large accounts showed exactly 200 — and different accounts could show identical counts. Every collection is now listed and the count badge is accurate. This also applies when a joined editor searches collections through the host.
[1.6.5] — 2026-07-04
Fixed
- RAW thumbnails are dramatically faster. The contact sheet — and everything streamed to connected editors — now uses the camera's embedded preview instead of fully developing each RAW frame, measured at over 100× faster per image. A multi-hundred-RAW ingest shows thumbnails in seconds instead of leaving every editor staring at placeholders for many minutes. The sharpness zoom still renders from the full RAW, so focus checks look exactly as before.
[1.6.4] — 2026-07-03
Fixed
- Edits can no longer vanish on big batches. On a large Camera Raw "Save Image" run, a photo whose save finished after a grace window could be cleaned up before it was imported — the retouch was lost. FrameFlow now keeps watching every opened photo until its save actually arrives, no matter how long Camera Raw's queue takes; the "being edited" badge still clears on its own.
- Cancelling a send is safe now. Stopping a send mid-batch records the uploads that had already succeeded, so re-sending the batch no longer creates duplicates in ScorePlay.
- A failed edit hand-off is never silently dropped. When a joined editor's finished edit doesn't reach the host, it retries automatically; if it still fails, the frame is flagged and the finished file is kept on disk for recovery. The host also reports honestly when it couldn't accept an edit, instead of pretending it did.
- The library can't be wiped by a missing drive. Launching before an external disk or synced folder has mounted no longer overwrites the saved library with an empty one — and if the library ever can't save (full disk, permissions), FrameFlow warns loudly instead of failing silently.
- Edits survive restarts. Photos still open in Photoshop when FrameFlow quits, crashes, or updates are re-attached on relaunch — a save made while the app was closed imports automatically. Switching libraries parks open edits and re-attaches them when you return.
- Quitting cleans up properly. Quitting while hosting ends the session cleanly for connected editors instead of leaving them talking to a ghost session, and any caption you were still typing is saved.
- Audit sign-offs stay put. Marking a frame OK / Fix / Redo on the Sent tab no longer bumps it to the top of the tab or overwrites the editor credit — the sheet holds its order while you work down the take.
- ⌘U skips frames that were already sent (with a note), so a stray shortcut can't double-deliver a batch; re-send explicitly when you mean it.
- Clicking the filter tab you're already on no longer discards unsaved changes in the filter pane.
Changed
- Steadier, lighter networking on big jobs. Large sends and card imports stream a few files at a time instead of launching everything at once — uploads are steadier and memory use is far lower on multi-hundred-frame batches. Skimming frames in the preview no longer floods the connection with full-size fetches, and bulk rank/color edits no longer re-download thumbnails.
- Tag audits are more polite. Auto re-checks only look at recently sent frames, pause themselves when there's nothing left to check, back off when ScorePlay is unreachable, and stop (with a clear message) if the API key is rejected.
[1.6.3] — 2026-06-30
Added
- Filters are now editable, savable tabs. Each tab — Browse, Selects, Caption/Send, Sending, Sent — shows its own filter in the CURRENT FILTER pane, so selecting a tab reflects exactly what it's filtering. Change any criteria or the sort and the contact sheet updates live. Build your own: start from any tab, add or remove criteria, type a name, and SAVE to get a new custom filter tab; RESET reverts to the tab's saved state. Custom filters appear in the top bar alongside the built‑ins.
Fixed
- Selecting filter criteria actually filters now — and each tab's filter is independent, so a selection on one tab no longer silently carries over to another.
Changed
- Visibility is multi‑select — add Not Hidden and/or Hidden (both shows everything), like the other filter fields.
- The audit‑mode frame shows only on the Sent tab, where tag audit applies — it no longer frames other tabs when audit mode is left on.
[1.6.2] — 2026-06-30
Fixed
- Faster, more reliable clicking in the contact sheet. Selecting thumbnails is snappier, and clicks no longer miss when they land on a corner badge (rank, lock, editor, edited, upload status…) — the whole frame selects. Fast clicking through a shoot keeps up.
Changed
- The selected image stands out clearly. Selection is now a bold highlight that's easy to pick out even next to the colour‑class outlines.
- TAG AUDIT sits directly under PERSONALITIES in the metadata panel by default.
- Zoom stays on the image. In the full‑size view, the black margins around a portrait photo are inert — only the image zooms on scroll/click.
[1.6.1] — 2026-06-30
Fixed
- Opening several photos in Photoshop at once is reliable again. Selecting a batch and choosing Open in Photoshop now opens them together in a single Camera Raw window, instead of opening in waves — or, in a recent build, failing to open at all. An edit that's still loading is also no longer dropped mid‑open, so a photo can't disappear before Photoshop has it.
Added
- Audit your ScorePlay athlete tags after sending. Turn on Audit mode on the Sent tab (⇧⌘A) to confirm every delivered photo actually got tagged — without combing through the ScorePlay gallery afterwards. FrameFlow reads back the athletes ScorePlay applied, compares them to the personalities in your caption, and flags any photo that's untagged or missing a name. Sign each frame off as OK, No players, or Needs review (keys 1/2/3, or the chips), and fix tags in place from the Fix athlete tags popover — search the ScorePlay roster to add a missing athlete or remove a wrong one, with the whole player row clickable to add. Audit mode is per‑user and off by default.
- Zoom into the full‑size image to check sharpness. In the enlarged view you can now scroll, click, or pinch to zoom toward the cursor — Fit → 2× → 4× on each click, or smoothly with scroll/pinch — and drag to pan around. A magnifying‑glass cursor shows when the image is zoomable, and Esc snaps a zoomed image back to fit before it closes back to the contact sheet. Zooming pulls a higher‑resolution image so you're judging real detail; when you're joined to a host, it fetches that high‑res from the host machine, while the contact‑sheet thumbnails stay small so browsing stays fast.
[1.6.0] — 2026-06-15
Added
- Verify your ScorePlay key. The ScorePlay destination settings now have a Verify key button that confirms the key works and shows what it can reach (your account, or how many collections it can see) — so you know a key is good before an event instead of finding out mid‑delivery.
Changed
- ScorePlay deliveries carry more. Photos sent to ScorePlay now include the caption, capture date, and keywords alongside the image, and the delivery log confirms the event and media it landed in.
[1.5.11] — 2026-06-15
Changed
- Paste from Sent is faster to use. ⌘P now opens a larger window already focused on the search box, so you can start typing right away — search matches the caption, keywords, personalities and filename. The hover preview shows an image's keywords alongside its caption and personalities. And a single click on a thumbnail pastes: it previously took two clicks (the first only dismissed the preview).
[1.5.10] — 2026-06-14
Fixed
- Captions are always included on delivered images now. In a hosted session, captioning several images in quick succession — or pasting/applying a caption across a batch, or hitting Send right after typing — could deliver some images without their caption. Captions now reliably reach the host before any send, including bulk caption edits and apply‑to‑event, so every delivered image carries the text you wrote. Update both the host and the clients for this to take effect.
- Image Properties shows camera details reliably when connected to a host. Opening Image Properties on a joined session now loads the camera model, lens, exposure, aperture, ISO, dimensions and capture date quickly and dependably, instead of sometimes coming up blank. Update both the host and the clients.
- The "Copy/Paste includes keywords" setting now works. With it switched on, copying a caption and pasting it (right‑click or ⌘C / ⌘V) now carries the source image's Keywords too; with it off, paste behaves exactly as before (caption and personalities only).
- The host no longer shows editors who have already left. A client that quit, was force‑quit, went to sleep, or dropped off Wi‑Fi without a clean goodbye used to stay listed as connected on the host indefinitely — and kept holding any images it had locked for editing. The host now tracks each editor's activity and drops anyone it hasn't heard from for a short while, releasing their edit locks automatically; a still‑connected but idle editor keeps itself listed in the background, so only genuinely gone editors are removed. Stale "waiting to join" requests are cleared the same way. Update both the host and the clients for this to take full effect.
Changed
- ⇧⌘H now hides uncoloured images. The Hide shortcut culls by colour — anything without a colour class is hidden — instead of the old behaviour that keyed off the star rating (which hid everything when nothing was ranked). Colour your keepers, then ⇧⌘H to clear the rest.
[1.5.9] — 2026-06-13
Changed
- Sent tab leads with the most recently sent image. The Sent view now defaults to newest‑sent on top, so your latest deliveries are right there. (Set a Sort in the Current Filter to override.)
- Comma‑separated keywords become separate keywords. Typing or pasting
fist pump, reaction, emotionand hitting Enter now adds three keywords — commas delineate, so a singlefist pump(no comma) stays one keyword with its space intact. Applies to Keywords, Personalities, Supplemental Categories and Tags, and they embed individually on send.
Fixed
- Image Properties shows camera details when connected to a host. Camera model, serial, lens, focal length, exposure, aperture, ISO, dimensions and capture date now populate for joined editors (read from the host's copy), instead of showing "—".
[1.5.8] — 2026-06-13
Fixed
- Remote sessions show thumbnails even when only the session port is open. Joining a host over the internet, images (thumbnails, previews, full‑res, voice memos) now come over the same connection as everything else when the host's separate image port isn't reachable — so you no longer need a second port forwarded or a firewall exception for the app. On a local network where the image port is reachable, the fast direct path is used exactly as before. Update both the host and the clients for this to take effect.
[1.5.7] — 2026-06-12
Fixed
- Remote (internet) sessions stay connected. A live host connection was being dropped every few minutes on internet links — the connection check was too aggressive for the normal latency stalls of a remote link (it reconnected instantly each time, proving the link was fine). The check now tolerates a much longer stall before declaring the host gone, and reconnect keeps trying patiently for several minutes instead of dumping you to Local. This was the cause of thumbnails loading perpetually when joined to a remote host — the constant re-syncing never let them settle.
- Thumbnails on a joined session now retry more patiently over a slow link, so a late-arriving thumbnail lands instead of sticking on a spinner.
[1.5.6] — 2026-06-12
Fixed
- Move to Event is now a true reset. Right‑click → Move Selected to Event (and the Events dialog's Apply) resets every metadata field to exactly the event's template — including wiping the typed caption, personalities, tags and routes from the previous event. The photographer (byline / title / credit / copyright) is kept and re‑stamped onto the fresh caption, and already‑sent images reset too when you explicitly move them.
- Arrow keys scroll the contact sheet. Stepping with ←→↑↓ now scrolls the grid to keep the selected image on screen, just like scrolling with the trackpad.
- ⌘+ / ⌘− work in popped‑out tabs. Thumbnail zoom now responds in pop‑out windows, not just the main window.
- ⌘C / ⌘V copy and paste captions. Same as right‑click Copy/Paste Caption & Personalities — ⌘C copies from the selected image, ⌘V pastes onto everything selected. Works on the contact sheet and in the enlarged preview; copy/paste inside text fields is untouched.
[1.5.5] — 2026-06-12
Fixed
- Delivered files now carry the full wire metadata. Exports and FTP sends were missing several fields the wire expects: the MEID (transmission reference), Country, the venue (sub‑location) and the title field. All now embed — matching files produced by the standard template tools field-for-field. Country is a new field on events ("Country of Shoot" already existed there) and on the metadata panel, and flows through event templates onto images automatically.
- Keywords wrap. Keyword/personality/category chips now flow onto new lines and grow the box downward instead of clipping off the right edge.
- ↑/↓ arrows work on the contact sheet. Up and down move a full visual row (matching however many columns are on screen); left/right step as before. In the enlarged preview, ↑/↓ step previous/next.
[1.5.4] — 2026-06-11
Fixed
- The Filters preference now actually switches modes. Preferences › Filters: Default Filters shows exactly the five built-in workflow tabs (no customs); Custom Filters shows the built-ins plus every custom filter you've toggled visible. Switching back to Default automatically returns you to a built-in tab, and saving a new custom filter flips you into Custom mode so you can see it. (The radio existed but didn't control anything.)
[1.5.3] — 2026-06-11
Fixed
- No more truncated edits. Bulk-saving from Camera Raw could import (and deliver to the host) images that were still being written — the gray-bottom frames. Saved edits are now imported only once the file has finished writing and is verifiably complete, and the host independently refuses an incomplete edit from older clients.
- Selection counts agree again. A timing race during big ingests could register the same image twice (the "Selected: 38" vs "19" mismatch, and ghost twins that read as unedited). The race is closed at the source, duplicates self-heal everywhere they already exist, and a host can no longer hand duplicates to joining editors. Mid-ingest edits (color, rank, captions, even sends) on freshly landed frames are preserved.
- Pressing Edit again while a batch is still being fetched from the host no longer opens everything twice.
Changed
- Custom filters, reworked. Saving with a NEW name now creates a new custom filter and leaves the one you were editing untouched; the same name updates it in place (the button tells you which: UPDATE vs SAVE AS NEW). The five workflow tabs (Browse → Sent) are permanent — editing one saves your changes as a new custom filter, they can be hidden but never deleted, and any that went missing come back. Show as many custom filters in the top bar as you like — it scrolls. Filters can now also match the Headline.
[1.5.2] — 2026-06-10
Fixed
- Batch edits open in one Camera Raw filmstrip again — including when you're connected to a host. Selecting several images and editing opened them one Camera Raw dialog at a time while joined to a session (the 0.3.33 batch-open fix only covered working locally). All images are now fetched from the host first and handed to Photoshop together, in every mode. Every edit path in the app now runs through this single batch-open route, so this can't quietly regress again.
[1.5.1] — 2026-06-10
Fixed
- Now runs on Intel Macs. FrameFlow is now a universal app, so it opens on both Apple‑silicon and Intel Macs. Earlier builds were Apple‑silicon only, which gave Intel users “this application is not supported on this Mac.” (No code changes from 1.5.0 — same app, now built for both processors.)
[1.5.0] — 2026-06-09
A resilience and security release from a third full audit of the collaboration stack.
Added
- Automatic reconnect. A Wi‑Fi blip — or a host that dies silently — no longer kicks editors to Local. The app now notices a dead connection within ~35 seconds, shows a “Reconnecting…” banner, and retries for up to a minute before falling back, picking the session right back up when the host returns.
Fixed
- The double‑import at the source. Overlapping folder‑watcher passes could admit the same frame twice (the root cause behind the “already sent” ghosts). Watcher scans are now serialized and re‑checked, and a collapsed duplicate’s leftover file is moved to the library’s internal trash so it can’t come back.
- Retrying a partly‑failed send no longer re‑uploads everywhere. The app remembers which destinations already took each photo, and the retry only sends to the ones that failed — no more duplicate Scoreplay media after an FTP hiccup.
- SEND with nothing selected no longer fakes success. Images are left in place with a clear error instead of being silently marked Sent, and sending while disconnected from the host now says so instead of spinning forever.
Security
- Hardened the host’s image server against malicious requests from other devices on the network (path containment + uploads restricted to legitimate edited files).
- FTP passwords no longer travel over the session network or appear in the system process list during uploads.
- Session frames (send requests, event edits, destination updates, library snapshots) are now only accepted from editors actually admitted to the session, and the updater only accepts downloads from the official release host.
[1.4.5] — 2026-06-09
Fixed
- No more "already sent" ghost duplicates. When the same frame got ingested twice (a re‑saved/re‑copied source, or an ingest race), the two copies weren't recognized as the same image — so a duplicate lingered in Browse marked Sent and wouldn't take a colour. Duplicate detection now matches a frame by filename + size regardless of its file timestamp, collapsing the copies to the delivered one. (Relaunch the host once on this version to clear any ghosts already in the library.)
[1.4.4] — 2026-06-09
Fixed
- "Move Selected to Event" now re‑stamps the whole caption. Right‑clicking images → Move to Event (and the Events dialog's Apply) now overwrites every event field — caption, headline, city, venue, category — to the chosen event, not just the empty ones. Moving images to a different day/event finally updates the full caption, not only the photographer byline. (Auto‑ingest still won't override metadata you chose to keep from the source.)
[1.4.3] — 2026-06-09
Added
- FrameFlow tells you when there's an update. On launch (when you're online) it checks for a newer version and, if there is one, pops a brief "Update available" box — Download & Quit, What's New, or Later — and shows a glowing Update badge next to the FrameFlow wordmark. Click the badge any time to jump to the update. "Later" remembers the version so it won't ask again until there's a newer one. Offline launches do nothing.
[1.4.2] — 2026-06-09
Changed
- Captions draw from the event Headline, not the event name. The event name is for sorting, filtering and labelling cameras (e.g. "NBPA Top 100 Camp Day 2"); the caption now uses the clean Headline ("NBPA Top 100 Camp") and leaves a gap after "during the " for you to add "final round of the", "day 3", etc. — e.g.
ROCKFORD, SOUTH CAROLINA - JUNE 10: <<enter caption here>>during the NBPA Top 100 Camp at …. - The photographer picker only lists photographers from the selected event (no more bylines from other events), and auto‑selects the photographer when the event has just one — on both host and joined ingest. Picking a different event clears a photographer that doesn't belong to it.
Fixed
- Editing an event during ingest now applies to the next image without restarting ingest — the auto‑ingest folder treats its event as current (it still won't override metadata you chose to keep from the source file).
- Contact sheet no longer staggers during a big ingest. The sheet's sort is now a stable total order, so streaming images can't make the thumbnails reshuffle and tear (the issue that needed a host restart). The grid's column count is also held steady against momentary layout blips.
[1.4.1] — 2026-06-08
A delivery‑and‑captions reliability pass from a second audit.
Fixed
- The caption placeholder can never ship. If a template caption was sent before it was typed over, the literal “<<enter caption here>>” could end up in the delivered file — it’s now stripped automatically so the wire never sees it.
- Batch captioning keeps your whole caption. Typing a caption across several selected frames no longer drops anything after the words “during the …” when it spread to the other frames.
- Big sends don’t storm the server. Uploads are now capped to a few at a time, so sending a full take (200–300 frames) no longer trips “too many connections” errors that looked like the link had failed.
- A frozen upload now fails instead of hanging forever. A stalled transfer on a flaky link gives up and becomes re‑sendable, instead of leaving a photo stuck on “Sending…”.
- Sending through a host with no matching destination tells you, instead of leaving your photos stuck on “Sending…”.
- Removing a keyword or athlete name now actually removes it from the delivered file (a cleared field could previously leave the old value behind).
Changed
- FTPS deliveries require encryption — they won’t silently fall back to sending credentials in the clear.
- Exports never overwrite each other — two frames that resolve to the same filename are written side by side instead of one clobbering the other.
- Internal ingest/delete bookkeeping is now bounded so it can’t grow across shoots.
[1.4.0] — 2026-06-08
A reliability release from a full audit of the live‑collaboration and library code.
Fixed
- Filmstrip keeps loading while you scroll. Thumbnails along the bottom of the single‑image view could stay dark when you scrolled the strip — they now load as they come into view.
- Files imported to a host show up on clients without a refresh. A just‑arrived image now appears live, and its thumbnail keeps retrying until it lands instead of staying blank.
- Scoreplay details show when sending through a host. The destination and the collection a photo went to now appear in the panel on the host send path, not just locally.
- The metadata panel follows your next photo after a send. It no longer stays pinned to the image you just sent — the panel and FTP status move to the photo now under the selection.
- Your edits hold when joined to a host. A library sync arriving mid‑edit can no longer revert a colour/rank/caption you just made, and won’t hide a send it’s already confirmed.
- The contact sheet no longer half‑loads under heavy traffic. A library sync is now sent only to the editor who just joined, instead of being replayed to everyone on every join.
- The Clients panel shows the host (and no longer lists you to yourself), and edit locks release automatically when an editor disconnects or is removed — no more photos stuck “being edited” by someone who left.
Changed
- Your library can’t be lost to an interrupted save. Library metadata is now written safely with a backup that’s used automatically if the main file is ever incomplete.
- Stricter duplicate detection. Two genuinely different frames that happen to share a filename and size (common once a camera’s counter rolls over) are never merged into one.
- Smoother, more responsive thumbnails when joined to a host, and steadier behaviour on flaky networks.
Security
- Remote session management now verifies an admin’s signed license before the host will act on any management command (approve/kick/lock), rather than trusting a self‑reported setting.
[1.3.7] — 2026-06-08
Added
- Manage the session from an admin's machine, not just the host. Editors on an admin license can now open the Clients panel from a connected client and moderate the host remotely — see exactly who's connected (and who's pending), set the join policy (Open / Approve / Locked), approve or decline join requests, and remove an editor — the same controls you'd have sitting at the host. The host stays the source of truth and only acts on commands from a verified admin.
[1.3.6] — 2026-06-08
Added
- Master push / master auto on the host too. The "all sources" ▶ and auto‑push slider now appear at the bottom of the host's Ingest From list as well — so you can ▶ every card/folder at once, or flip live‑ingest on for all of them, whether you're hosting or joined.
[1.3.5] — 2026-06-08
Added
- Multiple watch folders when importing to a host. Joined editors can now add several folders at once (e.g. one per card reader) under Import to Host — each with its own ▶ push‑once and auto‑push toggle.
- Master push / master auto. A row at the bottom of the folder list pushes every folder once, or flips auto‑push on for all of them together.
[1.3.4] — 2026-06-08
Fixed
- Metadata stays live for joined editors during a big ingest. After a large batch arrived, the photographer credit/byline (and colour changes) could lag badly or not show until you switched tabs or restarted. The client was re-fetching every thumbnail on every library sync, which saturated the link and starved live updates. Thumbnails now load per cell as they scroll into view, so byline, credit and colour update instantly even mid‑ingest.
- Photographer credit arrives with the photo. The credit is now attached to each image as it's sent to clients, instead of in a follow‑up that could lag or be missed — so the name shows immediately and survives a reconnect.
Changed
- The log can't grow without bound. It's now trimmed automatically once it passes ~5 MB, during a session as well as at launch.
[1.3.3] — 2026-06-08
Fixed
- Capture time is never changed. Exporting at a resized delivery size (or "Final" for a RAW with no edit) was re-encoding the photo and dropping its original capture time — the date a wire service or catalog reads. Resized exports now carry the full original EXIF/IPTC capture‑time block through untouched, and every export preserves the source file's own dates. Byte‑for‑byte Original/JPEG delivery and ingest were never affected.
- Sort by Filename now sorts naturally. Frame numbers order the way Finder orders them (…99 before …100) instead of character‑by‑character, and case no longer splits the list.
- Contact sheet no longer staggers when you re‑sort. The grid uses a stable column count, so changing the sort (or a live sync arriving) can't leave gaps or offset rows.
Added
- The log now records the capture time of every exported file (before vs. after), so you can confirm at a glance that it was preserved.
[1.3.2] — 2026-06-08
Fixed
- Export always uses your current selection. The Export Dashboard now reads your live selection at the moment you press Create — growing or shrinking the selection (or new photos arriving) while the dialog is open is honored, and the count line updates live. Previously it could export a smaller, stale set captured when the dashboard first opened.
- Your colour, rank and caption edits stick when joined to a host. A library sync arriving a split‑second after you tagged a photo could briefly wipe the change on your screen while it stayed on the host's. Recent edits are now held and re‑synced to the host, so they hold on both screens.
[1.3.1] — 2026-06-08
Fixed
- Arrow keys return to the photos after captioning. Clicking another frame — or pressing Esc — now leaves the caption/metadata field, so ← / → step through images again instead of moving the caption cursor. Same in every tab.
[1.3.0] — 2026-06-08
Added
- Caption a whole selection at once. Select several frames and just start typing — your caption lands on all of them as you go, and each image keeps its own location prefix and (Photo by …) credit, so a burst split between photographers stays correctly credited.
- Batch the rest of the metadata too. With 2+ images selected, keywords, headline, category, special instructions and the other fields fill across the whole selection live (byline, credit and copyright stay per‑photographer, set from the Photographers panel).
- Scoreplay collections for joined editors. Editors in a shared session can now see, search and file into the host's Scoreplay collections — searches run through the host — without needing their own API key.
Fixed
- No more duplicate frames. A library reset or overlapping watch folders could leave two or three copies of the same photo, which then ghosted in the sheet, wouldn't take a colour, and reappeared after being sent. Duplicates are now prevented at ingest and collapsed when the library loads — a reload cleans up any that already crept in.
- Faster, smoother contact sheet. Thumbnails load per‑frame instead of redrawing the whole grid, so large batches stop ghosting, load quicker, and colour‑tagging keeps up.
- Photographer credit no longer doubles when the credit line already contains the byline name.
- ⌘A selects the text in the Events and Find/Replace fields instead of selecting every image.
[1.2.1] — 2026-06-06
Changed
- Revealing and unhiding hidden photos is available to every editor again. Hidden images stay out of the normal view, but anyone can show them (the eye toggle in the toolbar, or right-click → Show Hidden Images) and unhide one — so a mistaken hide is always easy to undo. Permanently deleting a photo remains admin-only.
[1.2.0] — 2026-06-06
Added
- Live delete sync. Deleting a photo now updates every connected editor instantly, instead of only showing up after a reconnect.
- Hide vs. permanent delete, with admin control. A regular editor's delete now hides the photo — it leaves the contact sheet but stays safe and fully recoverable. Only an admin can permanently delete a frame, and admins get a reveal view to see hidden photos, restore them, or remove them for good. An accidental delete can no longer lose a shot.
Changed
- More reliable folder ingest. Stronger duplicate detection — two genuinely different frames that happen to share a name and file size are no longer mistaken for one. A folder push to a host now retries automatically after a brief network hiccup instead of silently dropping a file, and overlapping scans of the same folder can no longer double-copy.
Fixed
- Keyboard accessibility. The contact-sheet shortcuts no longer take Space / arrow keys away from a focused on-screen control when macOS Full Keyboard Access is turned on.
[1.1.0] — 2026-06-06
Added
- Windows ingest client support. A host now answers
GET /eventswith its events + photographers, so the companion FrameFlow Ingest for Windows app can list them and ingest images from a Windows machine straight into the host's library — tagged with the chosen event and photographer. Nothing extra to set up on the host beyond being in Host mode.
[1.0.0] — 2026-06-05
FrameFlow 1.0 — first production release. The live multi-editor contact sheet, card ingest, Photoshop round-trip, captioning & metadata, FTP + Scoreplay delivery, the export dashboard, and collaborative hosting are all production-ready.
Changed
- Bigger expand/collapse targets in the Scoreplay collections picker — the folder arrows now have a much larger, easier-to-hit click area.
[0.3.51] — 2026-06-05
Changed
- Scoreplay collection picker shows media counts. When choosing Scoreplay collections to file into, each one now shows how many media it already contains — a quick way to confirm you're sending to the right, active collection.
[0.3.50] — 2026-06-05
Fixed
- Export works when you're connected to a host. A joined editor can now open the Export Dashboard and export the host's images — originals, edited JPEGs, resized versions, or voice memos — to their own Mac; the files download from the host on demand. Previously, export did nothing unless you were the host. (Built for the end-of-shoot workflow: log into the session, export your edits, save them locally.)
[0.3.49] — 2026-06-05
Added
- Permanent license badge. The License panel now shows a violet badge for a permanent license that never expires, alongside the gold administrator badge.
[0.3.48] — 2026-06-05
Added
- Admit new editors your way (admin). When hosting on an administrator license, choose how new editors join: Open (anyone), Approve (you allow or deny each one as they ask), or Locked (no new editors). Requests waiting for approval appear at the top of the Clients list with Allow / Deny.
- Session log (admin). A running, timestamped log of who joined, left, was admitted or removed — plus policy changes and announcements — that you can export to a text file.
Changed
- The "lock session" control is now part of a single Open / Approve / Locked join-policy switch.
[0.3.47] — 2026-06-05
Added
- More admin host controls. On an administrator license, while hosting a session you can now:
- Lock the session so no new editors can join — anyone already connected stays.
- Force-release an edit lock another editor is holding on an image (right-click the frame), so an image left open in Photoshop never blocks the team.
- Broadcast an announcement to everyone connected — it shows as a banner across the top of every editor's window.
[0.3.46] — 2026-06-05
Added
- Clients list shows initials + name. When you host a session, each connected editor now appears with their initials and full name. Initials are captured at activation and editable anytime in Preferences › Editing.
- Admin host controls. On an administrator license, the clients list also shows each editor's IP address, machine ID, and app version — and lets you remove an editor from the session (a removed machine can't rejoin until you restart hosting).
[0.3.45] — 2026-06-05
Added
- Admin license badge. The License panel now shows a gold badge when this Mac is running on an administrator license — an all-access license that doesn't expire.
[0.3.44] — 2026-06-05
Changed
- Updating quits the app for you. When you download an update, FrameFlow now asks to confirm, then downloads it, opens the installer, and quits — so you can drag the new version straight into your Applications folder. (macOS won’t let you replace an app while it’s running.)
[0.3.43] — 2026-06-05
Changed
- Internal maintenance and reliability improvements.
[0.3.42] — 2026-06-04
Fixed
- No more square flash on launch. The main window now restores its exact size and position the moment it opens, instead of briefly appearing small/square before snapping to size.
[0.3.41] — 2026-06-04
Added
- Pop a tab out into its own live window. Double-click any tab (or right-click it → Pop Out) to open it as a loose, live contact sheet in a separate window — ideal for parking the Sent tab on a second display to watch frames land in real time while you keep working in the main window. It mirrors the library, so it updates as images arrive, with the same send / color / lock badges. Open several at once; each window remembers its size and position per tab. Double-click its header bar — or use the collapse button, or just close the window — to snap it back in.
[0.3.40] — 2026-06-04
Added
- Built-in update check. Preferences › About now has a Check for Updates button. It tells you whether you're on the latest version and, when a newer one is out, downloads it and opens the installer so you can drag FrameFlow into your Applications folder. A "What's new" link opens the release notes.
[0.3.39] — 2026-06-04
Fixed
- Multiple Scoreplay accounts now work independently. Add a second Scoreplay destination with its own API key and its Collections picker now lists — and files into — that account's collections. Before, it could show the first account's collections and fail the upload with "event not found." Each account's recently-used collections are kept separate, and switching the selected account re-lists the correct collections.
[0.3.38] — 2026-06-04
Added
- Export folder templates. Create Export now has a subfolder template field — type variables like
{event}/{photographer}(or {date} {city} {init} {color} {rank} {serial} {orig} …) and FrameFlow builds those folders per image from its metadata, with a live preview. Empty or unknown tokens collapse away cleanly. - Freeze the contact sheet (⌘F). Freeze to cull a batch while photographers keep uploading — new arrivals flow into the library but stay held out of the grid until you unfreeze. Toggle via ⌘F or right-click. A banner shows how many new images are waiting.
- Hide Uncolored (⌘⇧U). Color your keepers, then hide everything uncolored in one shot. In freeze mode it only touches the frozen batch, so images that arrived during the freeze are never hidden — unfreeze and they're all still there.
[0.3.37] — 2026-06-04
Added
- Export your edited images out of the app with captions and all metadata intact. Right-click → Open Export Dashboard (also in the menu). Create an export: pick a folder, choose resolution(s) — Original, Final, 3000, 1920, 720, Wav — and a structure (single folder, or one folder per size), then hit ▶ to run it with a live progress bar. Edited frames are delivered as full-quality JPEGs (or resized) with the item's caption, byline, copyright and keywords embedded; RAW originals are copied as-is. Run several exports, cancel a running one, and reveal the finished folder in Finder.
[0.3.36] — 2026-06-04
Changed
- Wait for complete files. Ingest now skips any image that's still being copied (a slow transfer, AirDrop, or a network drop) or arrived truncated, and pulls it in only once it's fully written — so a partial frame never lands and can never block the complete copy that follows. Live-watched sources re-check automatically until the file finishes. New toggle in Preferences › Importing (on by default).
[0.3.35] — 2026-06-04
Fixed
- Deleted stays deleted. Right-click → Delete now remembers each photo by its content, so importing a different source can no longer resurrect it, and re-importing an overlapping source no longer floods the library with duplicates. Re-importing the photo's own source (▶) restores it.
Changed
- Import panel. The amber "tagged only" banner now shows only while tagged-only is on (importing everything needs no disclaimer — a quiet "Import tagged only" link replaces it).
- Keep-metadata cue. With "Keep existing image metadata on import" on, each import source is outlined in amber with a note that existing captions, byline and keywords will be carried in.
[0.3.34] — 2026-06-04
Added
- Reject in Camera Raw → trashed & hidden. Mark a frame for delete/reject in Camera Raw and FrameFlow flags it with a trash badge and hides it from the take.
- Keep existing metadata on import. New Importing option — when on, an imported image's existing caption, byline, location and keywords are read in and preserved instead of starting from a clean slate.
[0.3.33] — 2026-06-04
Added
- Open several images in Camera Raw at once. Selecting multiple frames and editing now opens them all in one Camera Raw filmstrip — like dragging them onto the Photoshop icon — instead of one at a time.
Fixed
- Edit locks clear when you cancel. Opening a frame then hitting Cancel/Done in Camera Raw (without saving) no longer leaves it stuck "being edited" — FrameFlow notices it was closed unsaved and drops the lock.
Changed
- Special Instructions is now a taller, scrollable field — in both Events and the metadata panel.
- Import into an event can overwrite — the Events import menu now offers "fill empty fields" or "overwrite this event".
- Clickable rows use the full rectangle as the hit target (Events list, etc.).
[0.3.32] — 2026-06-04
Added
- Build an event from an image. On the Events tab, import an image and FrameFlow reads its metadata to prefill the event details — and adds any detected byline as a photographer.
Changed
- Edit the host's events when joined. Preferences → Events now shows the host's events and your edits sync back to everyone (no more editing a private local copy).
- Image Properties follows along. Stepping ← / → through Image Properties now highlights and scrolls the matching thumbnail into view behind the panel, so you can see what you're inspecting.
[0.3.31] — 2026-06-04
Added
- Resize the Metadata panel — drag its left edge to make it wider or narrower.
- Resize the caption box — drag the grip at its bottom-right corner to make it taller so you can read a full caption. Both sizes are saved.
- Reset to defaults for the panel sizes + caption font in Preferences → General.
Changed
- Preferences left-nav rows are now clickable across the whole row, not just the label text.
[0.3.30] — 2026-06-04
Added
- Licensing. FrameFlow now activates with a license key on first launch — enter your name and key, it activates online once, then verifies offline for the life of the license. The account icon shows your license and days remaining; Deactivate this Mac frees the key to move to a new machine.
- Rearrange the Metadata fields. Click Arrange in the Metadata panel and drag the fields into whatever order you work. Keywords now sits directly under Caption by default.
Changed
- Help guide. The hosted FAQ now has screenshots throughout, and documents remote (over-the- internet) collaboration and the Camera Raw "save to the same folder" step.
[0.3.29] — 2026-06-04
Changed
- Releases are now signed and notarized, so Gatekeeper accepts the app on any Mac with no quarantine warning and no right-click-to-open dance.
- The bundled metadata engine is now smaller and more portable, trimming the download by ~18 MB.
[0.3.28] — 2026-06-04
Added
- The About pane (Preferences) now links to a Help & FAQ page, the website, and email support, alongside the version and copyright.
- Added a public FAQ page explaining the app end to end.
[0.3.27] — 2026-06-04
Added
- "Tagged" now means locked in-camera. When you lock or protect a frame on the camera, FrameFlow reads that straight off the card — so Import tagged only brings in just your locked keepers and skips the rest. No extra software needed (a Photo Mechanic tag still counts too). Works when you import directly from the card.
- Caption panel font size. Preferences › General › Display has a slider (11–22 pt); the metadata and caption fields scale to it and the caption box reflows so nothing gets clipped.
- Image Properties browsing. With the panel open, use ← / → to flip through the current view's images (with a "3 of 50" position bar) — details reload for each.
[0.3.25] — 2026-06-04
Fixed
- Metadata now works on a clean Mac with nothing installed. Reading the camera serial and writing caption fields on delivery no longer depend on any separate install.
[0.3.24] — 2026-06-04
Added
- Filter by Serial #, Destination, Photoshop Initials (who edited), and Tagged — these are now real, working filters. Removed the dead Client ID / High-Res / Read-Only fields, and moved Keywords under the caption fields.
- Who edited it. An edited image now shows the initials of whoever saved the edit on its badge, and you can filter by it.
Fixed
- Sorting works again. The Current Filter pane (Sort By, City, etc.) now narrows and sorts the active tab live.
Changed
- Camera serial is read on import (powering the Serial # filter).
- Scoreplay collections show as an expandable parent → sub-collection tree instead of one flat list.
- All text is one point larger for readability.
[0.3.23] — 2026-06-04
Added
- ⌘] / ⌘[ move right / left through the top tabs.
- Every command shortcut is now editable in Preferences › Shortcuts — click one, press the new combination. Reassigning a combo that's already in use warns you first; per-shortcut and global reset are included.
[0.3.22] — 2026-06-04
Changed
- The five workflow stages (Browse, Selects, Caption/Send, Sending, Sent) and your own saved filters now live in one list you can reorder (drag), turn on/off, and edit. Drag a filter up or down in SAVED FILTERS to move its tab left or right along the top bar; editing a default turns it into your own custom filter.
[0.3.18–0.3.21] — 2026-06-03
Changed
- Every import — card or folder — now copies into one common library (your contact sheet) instead of switching between referenced sources. Renames, Event/Photographer, and de-duplication apply on the way in.
- Library management in Preferences › Library: a default library, plus New Library and Reset Working Library (move everything to the Trash and start clean).
- Bottom-left status pill opens the left pane; the Library is renamed throughout for clarity.
[0.3.17] — 2026-06-02
Changed
- Colour classes renumbered to 1 Magenta · 2 Yellow · 3 Green · 4 Cyan · 5 Blue · 6 Orange · 7 Red · 8 Gray, with real swatches in the menu.
- Card readers auto-detect — a mounted camera card pops the Import panel and adds itself as a source, but doesn't auto-import; press ▶ when you're ready.
[0.3.14–0.3.16] — 2026-06-02
Fixed
- Fixed images spinning forever when you join a host by hostname (not just by IP) — the image stream now works however you address the host.
- Thumbnail fetches retry on a flaky link, large RAW originals get longer timeouts, and going back to Local no longer leaves thumbnails spinning.
[0.3.5–0.3.13] — 2026-06-02
Added
- Send straight into Scoreplay. Add their host as a destination and FrameFlow turns fuchsia and unlocks a Scoreplay mode: your API key is stored securely in the Keychain, with a searchable Collections picker for choosing where images land.
- Images upload directly into the chosen Collection — no rename, no waiting for them to appear. Paste a collection ID from the web and it's remembered with its real name after the first send.
[0.3.4] — 2026-06-02
Changed
- Clicking Host (Servers panel) now jumps straight to Preferences › Network, so the join address ("clients join using this address") shows immediately — no reopen needed.
- Color Class right-click menu now shows a real colour swatch next to each class (1 Magenta, 2 Red, … 8 Gray).
Fixed
- Switching back to Local no longer leaves the contact sheet spinning; the thumbnails you already have stay put (only a joined session's remote thumbnails are cleared).
[0.3.3] — 2026-06-02
Added
- Network status indicator in the top bar (green when online, red when not). Click it for the interface, public / local IP, subnet, router and MAC.
- Servers panel now has Local / Host mode buttons.
- Import to host can watch a folder — ▶ to push everything once, or a slider to auto-push new files as they land (for importing cards on a client into the host). The Event / Photographer pickers still apply.
Changed
- Settings: the active data-source root path is shown with a Reveal button, and Purge Working Cache moved out of the menu into Preferences (still double-confirmed).
- Color Class right-click now shows the actual colour swatch instead of names.
- Removed the Move to stage submenu from the right-click menu.
- Double-click an enlarged image to exit it (same as Esc).
- A failed send now shows the actual error in the metadata panel.
[0.3.2] — 2026-06-02
Added
- Voice memos ride along to the host. When a client imports images that have matching
.wavmemos, the memos upload too and are paired to their image on the host. - Import-to-host dialog has Event + Photographer pickers — populated from the host's events (inherited). Your choice is applied to the images as they land on the host.
- Thumbnail cache. FrameFlow now caches thumbnails instead of regenerating them every launch — a meaningful speed-up for big shoots. The cache auto-refreshes when a file changes.
- Default working folder. A fresh install creates a default library to start from (rename it with the app closed to start a clean one).
[0.3.1] — 2026-06-02
Added
- Import from a client to the host. When you're joined to a host, the Import Files panel shows "Import Files to Host…" — pick files or whole folders and they upload to the host's library and appear for every connected editor. Folders are expanded recursively; existing filenames are never overwritten; the host's folder Event/Photographer (if set) is applied on arrival.
[0.3.0] — 2026-06-02
Added
- Clients inherit the host's Events, just like destinations — the right-click "Move to Event" menu shows the host's events when you're joined.
- Right-click "Move to Event" is now grouped by date → event → and each event lists its photographers, so you can assign an event and a photographer in one move.
- ⌘A selects all, ⌘D deselects all, and shift-click selects a range.
- The status bar shows "Selected N of M" when you have multiple images selected.
Changed
- "Being edited" badge persists while an image is open in Photoshop and is replaced by the edited badge once saved (previously it flashed once).
- A client's edits are now credited to that editor's initials on the host.
- Clicking Server: HOSTING jumps to Network settings so you can stop hosting from there.
Fixed
- Failed sends now show a red badge on the thumbnail and in the metadata panel — hover either for the exact error (previously a failure was silent).
[0.2.9] — 2026-06-02
Added
- Event caption auto-format. An event's caption template is now built live from its City / State /
Venue / Event / Created-Date fields — "CITY, STATE - MONTH DD: <
>during the final round of the {event} at {venue} on Month DD, YYYY in City, State." — and updates as you type. An "Auto-format" switch lets you hard-edit instead. - Photographers gained a Copyright Line; applying a photographer fills it.
- Import rename. Each hot folder can rename files on import with Photo Mechanic-style tokens
(
{date} {time} {seq4} {orig} {ext} {year} {month} {day} {init} {event}). Renames the image and its same-name RAW /.wav/.xmpsiblings together; collision-safe; opt-in per folder.
Changed
- Byline Title in the metadata panel is now a dropdown matching the Events list.
- Supplemental Categories is a searchable sports picker that behaves like Keywords.
- Removed Routing Destinations (Events) and Inclusion/Exclusion Routes (metadata panel).
- Delivered files now use the clean original name.
- Bigger hamburger-menu hitbox; Paste-from-Sent shows its preview much sooner on hover.
Fixed
- People metadata fixed. Super-paste (⌘S) names are now written to the dedicated people fields on send, not dumped into Keywords.
[0.2.8] — 2026-06-02
Added
- Voice memo (.wav) support. A
.wavsitting next to an image (same basename) is detected automatically; a blue play/stop button appears on the thumbnail and in the preview to hear it inside FrameFlow. When joined, the memo plays from the host. - "Pull Edits" pulls every image you have open in Photoshop at once, exporting a copy so it never closes or alters your open tabs.
Changed
- Opening an image no longer moves it to Caption/Send — only a genuine save does. The auto-import now triggers only on a real Camera Raw "Save Image", never on the act of opening.
- Import tab Event/Photographer fields restyled — boxed value with an X to clear and a chevron, underlined when assigned.
- Purge Working Cache now asks for confirmation twice before deleting.
Fixed
- Fixed "Unable to save the raw conversion settings." Camera Raw can now reliably write its edit settings after saving.
[0.2.7] — 2026-06-02
Added
- Save back straight from Camera Raw / Photoshop. Editing opens the image in an isolated staging folder; saving there (Camera Raw ▸ Save Image → "Same Location", or ⌘S in Photoshop) auto-imports the result — no "open as document → run action" step. ⌘⇧I (Pull Edit) stays as a force-grab of the live canvas if an auto-import ever picks the wrong frame.
Changed
- Client edits route to the host: when you edit on a machine joined to a host, the saved edit is pushed to the host's library instead of staying local.
[0.2.6] — 2026-06-02
Added
- Host with no separate setup — fresh installs can Host straight away, nothing extra to fetch.
- Clients list (bottom-right) is clickable and shows each connected user + local IP.
- A "SENDING" progress bar shows on images as they upload.
Changed
- Edits captured by driving Photoshop directly (exporting the open document), after file-watching kept importing the original. (0.2.7 adds the seamless auto-import back on top of this.)
- Real connection state: "connected" reflects an actually reached host (amber while connecting, green when on); a join that can't reach the host times out to Local with a message; a client whose host quits or reloads gets a "Disconnected" alert and falls back to Local.
- Network preferences show this Mac's local IP prominently.
- Faster remote edits: thumbnails only reload when the pixels change, not on every colour, rank or caption change.
- "Viewing: N of M" tracks the highlighted image's position.
- Image Properties restyled (File Properties / Camera Details / Date Info / Editor Info) with lens, serial, flash, white balance, and upload start/complete times.
- Purge Working Cache in the menu; removed Low-Resolution Mode from Importing.
Fixed
- Clicking Host no longer blanks the contact-sheet thumbnails.
[0.2.5] — 2026-06-02
Added
- Import panel: ▶ = one-time import, the slider = per-folder auto-import, plus per-folder Event and Photographer assignment that auto-applies on import.
- ⌘R reloads the app cleanly.
Fixed
- Edits and crops now come back correctly. Each edit stages into its own isolated folder — whatever you save there is unambiguously the edit, so a re-saved original can no longer be grabbed in its place (full size, crop lost).
- "Viewing:" counter now reflects the current tab: position while previewing, selected-of-total in the grid (was showing the whole library).
[0.2.4] — 2026-06-02
Added
- ⌘+ / ⌘− grow/shrink contact-sheet thumbnails while keeping the adaptive auto-fit.
Changed
- Caption metadata is embedded on send, so delivered files carry the headline, caption, byline, keywords, etc. — previously only the raw pixels were uploaded, and JPEGs are passed through without recompression.
- Switching workflow tabs no longer keeps the previous tab's selection — it selects the first image in the tab you move to.
- The send-target picker is a popover (stays open while you tick destinations) and no longer carries Apply Event / Apply Photographer.
Fixed
- Fixed the Host-mode hang (the "image server up, spinning wheel" freeze).
[0.2.3] — 2026-06-02
Added
- Delivery tracking: a sent image records its destination(s) and upload time; the caption panel
status now shows Pending → Sending → Sent and, once sent, "✓
· s". The send-target gear menu uses visible checkboxes.
Changed
- Preferences: removed the unused high-res concurrency slider and the version blurb.
Fixed
- Fixed the Local/Host mode-switch hang — switching session modes (or importing a large folder) no longer freezes the UI.
- Adding new fields no longer wipes saved library state.
[0.2.2] — 2026-06-02
Added
- Log file with a "Reveal Log File" menu item, plus richer sync diagnostics. Hosting now bails to Local with a clear message if it can't start.
Changed
- Editing semantics: opening in Photoshop stamps the editor's initials but does NOT mark the image "edited"; only saving the JPEG back does (now shown with a green photo icon). Fixed premature import — opening could bump the file's timestamp; import now requires the content to actually change.
- Thumbnails: fit (whole frame shown, letterboxed) instead of cropped.
- The account icon turns green when a license is active.
Fixed
- Re-tagging a hidden image with a color now unhides it.
[0.2.1] — 2026-06-02
Changed
- Live sync: a full library snapshot is no longer silently dropped, so a joiner now actually receives the host's images; added presence and snapshot diagnostics; macOS now prompts for (rather than blocks) local network access.
- Editing: the import now waits for a complete, decodable file and matches the saved name precisely (jpg/png/tif), so edits actually appear; clearer save guidance.
- Hotkeys: ⇧↵ open-in-Photoshop now fires window-wide (no longer dependent on grid focus) and won't hijack ⇧↵ in text fields.
- Contact sheet: single-click selects instantly (removed the double-tap disambiguation delay); larger, even spacing for uniform boxes; editor initials shown on edited thumbs.
- Browse now hides images once they've been edited (they live in Caption/Send).
- Removed the Check for Updates button.
[0.2.0] — 2026-06-01
Added
- Workflow tabs by state: Selects = color-tagged but not yet edited; Caption/Send = edited (back from Photoshop) but not yet sent.
- Editing: opens the image directly in Photoshop (drag-onto-icon — RAW opens Camera Raw natively); the JPEG you save back is imported automatically.
- Caption super-paste: ⌘E snaps to
<<enter caption here>>; ⌘S sends the selection to the people field. Caption field rebuilt (white text, proper editing). - Photographers: per-event list; "Add photographer" opens a Create assignment dialog (byline name / title / credit). Selecting one fills the byline and appends a sticky "(Photo by Name/Credit)" to the caption.
- Hotkeys: ⌘⌫ hide, ⇧↵ open in Photoshop.
- Import: per-folder import-once (▶) and a master auto-import lever.
Changed
- Dialogs: click-outside-to-dismiss overlays.
- Uniform contact-sheet cells with even padding.
[0.1.0] — 2026-06-01
Added
- A live multi-editor contact sheet for fast event photography.
Core - Three session modes in one app: Local · Host · Join. - Shared data sources (named folders) with auto-ingest of RAW + JPEG. - Contact sheet with rank (0–5), color labels, workflow-stage badges, and edit-lock presence — keyboard-driven preview (← → step, esc, e = edit, 0–5 rank, c = color). - Workflow pipeline tabs: BROWSE · SELECTS · CAPTION/SEND · SENDING · SENT.
Live collaboration - One machine hosts the shared library; others join over the local network and see thumbnails, previews and originals stream live, with edited uploads flowing back. - State, import, edit-lock, presence, and library snapshots fan out to everyone in real time.
Camera Raw round-trip - Opens images through Camera Raw in Photoshop; the flattened JPEG you save is re-imported to CAPTION/SEND on the active data source. - Joined clients edit the host's image and push the result back to the host.
Brand - Flow-family dark navy theme, native FrameFlow viewfinder mark + wordmark.
Out of scope by request: archiving, Photoshop-action setup, external distribution.