New
- Edit In… External App Handoff: Right-click any file or selection and pick Edit In… ▶ <App> to send the files straight to Photoshop, Affinity Photo, Capture One, Pixelmator, or any editor you add under Settings → Edit In…. Multi-selection sends the whole batch in a single launch. Choose Application… opens the system picker for one-off handoffs and auto-saves the chosen app to your list, ranked by usage so the more you use a tool the higher it surfaces. Pairs with Finder → MetaScope to close the round-trip multi-tool workflow.
- Edit In… for Vocabulary Terms: The Edit Vocabulary sheet's Terms section gains an Edit in Spreadsheet… button that exports the term list to CSV and reveals it in Finder. Open in Excel, Numbers, or any spreadsheet tool, make bulk edits, and re-import via Vocabulary Manager → Import/Export → Merge.
- Duplicate Built-in Vocabulary as Editable Copy: Built-ins (IPTC Subject, IPTC Scene, ISO Country, Common Keywords) ship read-only so MetaScope can refresh their content with each release. A new Duplicate button creates a fully editable user copy with all terms, synonyms, translations, categories, IPTC codes, and hierarchical structure preserved. The original built-in stays untouched, and the copy is auto-selected so it's immediately obvious.
- Enable / Disable Any Vocabulary Without Deleting It: A power-toggle button on every vocabulary's header turns it OFF without losing any data. Disabled vocabularies stay in the sidebar but stop appearing in keyword autocomplete, synonym enrichment, normalization suggestions, and rule-target pickers. Existing keyword rules referencing a disabled vocabulary keep working, so disabling never silently breaks your rule-based workflow.
- Hierarchy Editor with Dedicated Pane: The Edit Vocabulary sheet for hierarchical vocabularies splits into a Terms pane (term content edits) and a Hierarchy pane (full tree view with search, right-click reparent, and confirmation toasts). Reparent failures from cycles surface as orange toasts, successful moves as green. Scales smoothly to vocabularies with thousands of terms.
- Snappy Editing on Large Vocabularies: Editing a copy of Common Keywords or any user vocabulary with 100+ terms is now responsive on every keystroke. Previously each character re-rendered every visible row and recomputed the parent-eligibility tree.
- Advanced Filter Popover Refinements: A right-aligned Done button plus keyboard dismiss (Return commits, Escape cancels), no more click-outside-to-close friction. The field-name picker at the top of each filter row now opens a focused search field above the category-grouped list. Type 'key' to find Keywords, 'creator' for IPTC creator fields, 'camera' for camera fields. Removes the manual scan through 125 fields.
- Compare Tray Full Drag-Drop: Drag rows out as file promises to Finder, Mail, Slack, and other apps. Drop files in from Finder or other MetaScope windows. Reorder rows by drag. Plus a new Add to Compare context menu item in the file browser.
- Metadata Copy: Folder Drops, Board Controls, Display Toggle: Dropped folders expand to their immediate supported media children. Board rows are individually removable, and a Clear Board action wipes the whole board. A persistent Names / Thumbnails display toggle switches between compact name view and full thumbnails.
- Search Result Double-Click Opens Edit Metadata: Double-clicking a metadata search result (in both integrated and standalone search) opens the same Edit Metadata window that file-mode double-click, the toolbar pencil, and the right-click menu use. Spacebar continues to open the popout image viewer.
- Standalone Metadata Search Keyboard Navigation: Arrow keys navigate up/down through results in list view and up/down/left/right in grid view. Spacebar opens the popout viewer.
- Integrated Metadata Search Pagination: Searching from inside the file browser exposes the same Prev / Page X of Y / Next / page-size strip the standalone window has had since v1.3.2. Page sizes 50 / 100 / 250 / 500.
- Reset Window Size (OPT+CMD+0): Every standalone window (Batch, Template Manager, Metadata Search, Help, Analytics Dashboard, Field Picker, Search Settings, Export Wizard, Metadata Copy, Launchpad, Exif Editor, Entity Enrichment, and the full vocabulary window family) animates back to its default size and re-centres on screen. Single API contract, so future windows are wired correctly by construction.
- Sidebar Reorder Drop Indicator: Dragging a Quick Access or Favorites entry shows a visual insertion-point while hovering over the target position.
Improvements
- Indexing roughly 50× faster end-to-end. Original baseline was 3 to 5 rows/s on a typical mixed JPEG/RAW folder. The six-chunk pipeline rework (streaming extract+ingest, concurrent ExifTool extraction, WAL-during-ingest, FTS insert-only fast path) landed throughput around 84 rows/s. An ExifTool stay-open argfile fix that closed a 26% empty-output rate on paths with spaces brought the same fixture to 241 rows/s. First results appear in ~3 seconds instead of after the entire run completes. Search-during-ingest p95 stays under 4 ms throughout.
- List view is fast. Switching from grid to list, scrolling, and sorting no longer produce hangs. Hot SwiftUI cells were replaced with native AppKit cells for name, date, size, and kind columns. Trace delta: 15 hangs / 6 s to clean.
- Settings stays fluid during indexing. Opening Settings, switching tabs, and adjusting sliders during an active indexing run no longer pumps the main thread or slows the search window. Main-thread baseline 85% to 24% during Settings-open + indexing, main-thread hangs 20 to 3.
- Photos thumbnails are sharper. Fast-preview cache entries are upgraded to high-quality results when available, no more permanently blurry thumbnails after the first preview.
- All standalone windows fill available space when resized. Settings, Metadata Search, Analytics Dashboard, Format Options, Export Wizard, Template Manager, Entity Enrichment, Custom Field Form, and the video popout windows no longer leave whitespace gaps when resized larger.
- Indexing skips .DS_Store, dotfiles, and non-media files. AppleDouble forks, Spotlight markers, and sidecar XMPs no longer enter the metadata index.
Fixes
- Drag from MetaScope to Photoshop now works. NEF, JPG, and other formats can be dragged from the thumbnail grid into Photoshop. The sandbox file promise resolves correctly.
- Photos drag import works reliably. Dragging files from MetaScope onto a Photos album reliably imports them. Files are staged through a temporary handoff directory with duplicate-filename disambiguation.
- Bookmark recovery after wake. Favorite and Quick Access entries no longer show red warning badges after the Mac wakes from sleep or after a long idle period.
- Right-click → Add to Favorites now works. The context-menu favorites action was broken in v1.3.2 and is now fixed via active-scope wrapping at bookmark creation.
- List view double-click opens Edit Metadata. Matches the thumbnail grid, the toolbar pencil, and the right-click menu.
- List view single-click selects, arrow keys navigate. Matches the thumbnail grid's keyboard model.
- List view drag-to-Finder works. Sandboxed file-promise pipeline produces correct copies at the destination.
- List view refreshes after rename. Old filenames stop producing IIOImageSource errors, new name appears immediately.
- Rating submenu in list view shows current rating beyond 500 items. The 500-item cap is gone.
- Photos Library safeguard opens the Photos environment. Double-clicking a .photoslibrary no longer descends into package internals (animated/, database/).
- Kind label stable after rename. Renaming a NEF file no longer flips the kind label between 'Nikon raw image' and 'Nikon Electronic Format file' (UTI cache quirk now invalidated correctly).
- Search-mode rename works end-to-end. Standalone Metadata Search Window supports inline rename via Return key, context menu, and keyboard, with post-rename live update of the result row. The integrated metadata-search context menu exposes the same actions as the regular browser context menu.
- Trash and rename now prune the metadata search index. Files removed via trash or renamed in any browser have their old index rows pruned so they don't appear in subsequent searches.
- Cmd+Z (undo trash) now works in metadata search. Standard keyboard shortcut.
- Subfolder browsing no longer trusts incomplete snapshots. Recursive folder browsing seeds from a snapshot if one exists, then automatically performs live verification by default. No more pressing Verify Now for normal first-open or reopen correctness.
- List filter mode picker (Audio Only / Videos Only / etc.) works in list view. Wired through the unified browser filter pipeline.
- List-mode inline rename no longer auto-escapes after ~1 second. The text field stays focused until you commit (Return) or cancel (Escape).
- Selection persists when switching between thumbnail and list view. Mode-agnostic via the unified browser core model.
- Switching to list view no longer triggers a slow folder rescan.
- List-view column-resize cursor activates at the resize edge reliably and restores after resizing.
- Metadata-search list and file-browser grid no longer steal clicks as drags.
- Open with Default App no longer produces a sandbox permission error.
MetaScope 1.3.3 (Build 41)
May 2026, Build 41
A release where the headline is performance: indexing a typical JPEG+RAW folder is now roughly 50× faster than where it started this cycle. On the 500-file bench fixture, throughput climbed from 3 to 5 rows per second through a sequence of staged rebuilds to 241 rows per second, and first results now appear in ~3 seconds instead of waiting for the entire run. You can browse, search, and edit metadata while a large library indexes in the background without the UI stalling.
Underneath the perf win, this release closed five major architectural refactors in two weeks (drag-drop, list rendering, thumbnail rendering, ExifTool service contract, and the vocabulary editor) alongside foundation work for the v1.4 sidebar restructure. Each was a multi-phase RFC that in pre-RFC, pre-AI-collaboration days would have stretched across months. The cumulative scope rewrites the rendering, drag-drop, indexing, and ExifTool subsystems on top of which v1.4 Keyword-First and v1.5 Catalog will be built. The 1.3.x line stops being incremental polish here. From v1.3.3 onwards, the codebase is the substrate the next two releases land on.
The visible upshot: the list view doesn’t hang anymore. Drags to Photoshop and Photos albums work. Sixteen v1.3.2-era bugs are fixed (Add to Favorites context menu, list-view selection and arrow keys, list-mode rename, NEF UTI cache rename quirk, metadata-search index hygiene on trash, snapshot-vs-live-scan trust, and more). The compare tray supports full drag-drop. Built-in vocabularies can be duplicated as fully editable copies, individual vocabularies can be disabled without losing data, and large hierarchical vocabularies are responsive on every keystroke. Every standalone window resets to default size with OPT+CMD+0.
Editing & external app handoff
Edit In… external app handoff. Right-click any file or selection and pick Edit In… ▶
Edit In… for vocabulary terms. The Edit Vocabulary sheet’s Terms section now has an Edit in Spreadsheet… button that exports the term list to CSV and reveals it in Finder. Open in Excel, Numbers, or any spreadsheet tool, make bulk edits, and re-import via Vocabulary Manager → Import/Export → Merge.
Vocabulary depth
Duplicate built-in vocabulary as editable copy. Built-ins (IPTC Subject, IPTC Scene, ISO Country, Common Keywords) ship read-only so MetaScope can refresh their content with each release. A new Duplicate button creates a fully editable user copy with all terms, synonyms, translations, categories, IPTC codes, and hierarchical structure preserved. The original built-in stays untouched, and the copy is auto-selected so it’s immediately obvious.
Enable / disable any vocabulary without deleting it. A power-toggle button on every vocabulary’s header turns it OFF without losing any data. Disabled vocabularies stay in the sidebar but stop appearing in keyword autocomplete, synonym enrichment, normalization suggestions, and rule-target pickers. Existing keyword rules referencing a disabled vocabulary keep working, so disabling never silently breaks your rule-based workflow.
Hierarchy editing has its own pane. The Edit Vocabulary sheet for hierarchical vocabularies splits into a Terms pane (term content edits) and a Hierarchy pane (full tree view with search, right-click reparent, and confirmation toasts). Reparent failures from cycles surface as orange toasts, successful moves as green. Scales smoothly to vocabularies with thousands of terms.
Snappy editing on large vocabularies. Editing a copy of Common Keywords or any user vocabulary with 100+ terms is responsive on every keystroke. Previously each character re-rendered every visible row and recomputed the parent-eligibility tree.
Search & filter ergonomics
Advanced filter popover refinements. A right-aligned Done button plus keyboard dismiss (Return commits, Escape cancels), no more click-outside-to-close friction. The field-name picker at the top of each filter row opens a focused search field above the category-grouped list. Type “key” to find Keywords, “creator” for IPTC creator fields, “camera” for camera fields. Removes the manual scan through 125 fields.
Compare tray full drag-drop. Drag rows out as file promises to Finder, Mail, Slack, and other apps. Drop files in from Finder or other MetaScope windows. Reorder rows by drag. Plus a new Add to Compare context menu item in the file browser.
Metadata Copy: folder drops, board controls, display toggle. Dropped folders expand to their immediate supported media children. Board rows are individually removable, and a Clear Board action wipes the whole board. A persistent Names / Thumbnails display toggle switches between compact name view and full thumbnails.
Search result double-click opens Edit Metadata. Double-clicking a metadata search result (in both integrated and standalone search) opens the same Edit Metadata window that file-mode double-click, the toolbar pencil, and the right-click menu use. Spacebar continues to open the popout image viewer.
Standalone Metadata Search keyboard navigation. Arrow keys navigate up/down through results in list view and up/down/left/right in grid view. Spacebar opens the popout viewer.
Integrated Metadata Search pagination. Searching from inside the file browser exposes the same Prev / Page X of Y / Next / page-size strip the standalone window has had since v1.3.2. Page sizes 50 / 100 / 250 / 500.
Performance & responsiveness
List view is fast. Switching from grid to list, scrolling, and sorting no longer produce hangs. Hot SwiftUI cells were replaced with native AppKit cells for name, date, size, and kind columns. Trace delta: 15 hangs / 6 s to clean.
Indexing roughly 50× faster end-to-end. Original baseline was 3 to 5 rows/s on a typical mixed JPEG/RAW folder. The six-chunk pipeline rework (streaming extract+ingest, concurrent ExifTool extraction, WAL-during-ingest, FTS insert-only fast path) landed throughput around 84 rows/s. An ExifTool stay-open argfile fix that closed a 26% empty-output rate on paths with spaces brought the same fixture to 241 rows/s. First results appear in ~3 seconds instead of after the entire run completes. Search-during-ingest p95 stays under 4 ms throughout.
Settings stays fluid during indexing. Opening Settings, switching tabs, and adjusting sliders during an active indexing run no longer pumps the main thread or slows the search window. Main-thread baseline 85% to 24% during Settings-open + indexing, main-thread hangs 20 to 3.
Photos thumbnails are sharper. Fast-preview cache entries are upgraded to high-quality results when available, no more permanently blurry thumbnails after the first preview.
Window & UI polish
All standalone windows respond to OPT+CMD+0 to reset size. Every auxiliary window (Batch, Template Manager, Metadata Search, Help, Analytics Dashboard, Field Picker, Search Settings, Export Wizard, Metadata Copy, Launchpad, Exif Editor, Entity Enrichment, and the full vocabulary window family) animates back to its default size and re-centres on screen. The shortcut and its listener are folded into a single API contract, so future windows are wired correctly by construction.
Sidebar reorder shows a drop insertion indicator. Dragging a Quick Access or Favorites entry shows a visual insertion-point while hovering over the target position.
All standalone windows fill available space when resized. Settings, Metadata Search, Analytics Dashboard, Format Options, Export Wizard, Template Manager, Entity Enrichment, Custom Field Form, and the video popout windows no longer leave whitespace gaps when resized larger.
Architecture: five major refactors closed in one release
For developers and power users tracking what’s underneath, this cycle closed five major architectural rebuilds and shipped foundation work for the v1.4 sidebar restructure. Each was multi-phase, multi-day work; in the pre-staged-RFC, pre-AI-collaboration era these would have stretched across months individually.
- Drag-drop kernel migration (10 phases, closed). Every drag-drop surface in MetaScope (file browser grid + list, sidebar reorder, vocabulary hierarchy, compare tray, Metadata Copy, PDF Export, Batch Keyword Editor, the rename rule stack, the registry / exif / Native Photos field reorder surfaces) routes through one AppKit-backed adapter pipeline with typed UTTypes per surface family. A build-phase enforcer fails any new SwiftUI
.onDrop/.draggableinvocation. The visible benefits land across the drag-drop fixes in this release. The invisible benefit is that all future drag-drop work routes through one tested pipeline rather than fighting SwiftUI’s pasteboard coercion. - Browser unification (8 phases, closed) plus list view migration (implemented). Thumbnail mode now renders through
NSCollectionView, list mode throughNSTableView. The legacy SwiftUI LazyVGrid path is gone (~533 lines reclaimed in the final deletion alone). Selection, drag, context menu, keyboard nav, type-ahead, inline rename, and pagination all converge through one code path across both file browsing and integrated metadata search. - ExifTool service contract (substantively shipped). Six invariants codified after the indexing-bench investigation surfaced six independent invariant violations. Continuation hygiene under sustained concurrency, per-extension adaptive scope (5-min TTL replacing the session-wide flip), indexing fast path (1 op per file instead of 3 to 5), and the
exifMaxOpsAuto default all shipped one PR per invariant. - Indexing pipeline rebuild (6 chunks, shipped). Signposts plus harness, progress-throttle plus jobs-snapshot decoupling, streaming extract+ingest, concurrent extraction via TaskGroup, WAL-during-ingest, FTS insert-only fast path. Full numbers in the perf section above.
- Vocabulary editor split (accepted plus shipped). The Edit Vocabulary sheet for hierarchical vocabularies splits into Terms and Hierarchy panes. The per-row parent picker that was the perf hot-spot is gone, hierarchy editing moves to a dedicated tree with right-click reparent and confirmation toasts. Scales to vocabularies with thousands of terms.
- Sidebar restructure foundation (shipped invisibly, flag-OFF). Versioned
LibrariesV1data model with SHA-256-keyed migration idempotence, payload recovery on decode failure, and 16 unit tests covering the full acceptance bar. Surfaces in v1.4.
Requirements
- macOS 15.4 Sequoia or later
- Apple Silicon or Intel Mac
Get MetaScope
MetaScope is available on the Mac App Store. Free tier includes 5 edits per day. MetaScope Pro unlocks unlimited edits and all professional features.