v0.4.0 — backend media metadata
First MINOR release under release-plz infrastructure (#10).
Note: release-plz did not auto-open the release PR despite 5 feat
commits on main. Falling back to manual tag for this release; config
tuning filed as follow-up (see Project section below).
Added
-
Media metadata extraction + background queue (utof/perima phase 4).
perima-core:MediaMetadatavalue type +MetadataExtractortrait
(MIME-dispatched, not first-non-empty) +MetadataRepositoryport
using&selfwith interior mutability.perima-db: V002 migration addsfile_metadatatable (content-
addressed byblake3_hashPK, matchingfiles; CRDT-compliant;
partial index oncaptured_at WHERE deleted_at IS NULL).perima-db::SqliteMetadataRepository:Mutex<Connection>+
BEGIN IMMEDIATEupsert mirroring v0.3.1 hardened pattern;
list_with_metadatauses LEFT JOIN withfm.updated_atas the
NULL sentinel.- New crate
perima-media:ImageExtractor(image + kamadak-exif)
for JPEG/PNG/WebP/GIF;VideoExtractor(mp4parse) for MP4/MOV;
CompositeExtractordispatches by MIME;MetadataQueuewith
syncenqueueviatry_send+ 50ms poll loop watching
CancellationToken. - CLI:
perima metadata <path>subcommand extracts metadata for a
single file.perima ls --with-metadataadds captured_at +
dimensions + camera_model columns. - Scan integration: enqueues freshly hashed files after
Inserted/Updated. Bounded 30s drain on scan exit; new
--no-wait-metadataflag bypasses drain. - Desktop: new
list_files_with_metadataTauri command with
FileWithMetadataPayload(specta-typed).AppStatenow holds
Arc<SqliteMetadataRepository>. TS types + API wrapper added
(grid view lands in v0.4.1).
-
Runtime-generated test fixtures for
perima-media: minimal
JPEG/MP4 assembled in-test viaimage+mp4+ kamadak-exif's
experimental writer. No binary blobs committed to git.
Changed
- CLI
scan::runis nowasyncand carries aMetadataQueue. Scan
waits up to 30s for the queue worker to drain after walking
completes, unless--no-wait-metadatais passed. scripts/pre-commitnow exports Tauri build env vars
(PKG_CONFIG_PATH, LIBRARY_PATH, RUSTFLAGS) sojust cisucceeds on
this dev machine without shell-specific wrappers.
Project
- release-plz wired (chore-only runs verified) but did not auto-open
PRs for this release — the per-crate release-aggregation config
needs more tuning (all feats landed in dep crates; onlyperima
wasrelease = true; dep graph not followed). Filed as
follow-up: reconfigure release-plz to aggregate feat commits from
perima-core/-db/-fs/-mediaintoperima's release PR for
v0.4.1+. - First manually tagged release since release-plz was wired. Future
minor/patch releases will automate from this point.