Patch release rolling up two post-migration fixes.
Fixes
Serve /images/<path> from disk (f653c26): without this route, the SPA catch-all swallowed every thumbnail/original URL and returned index.html, causing the aspect-ratio-shaped grey placeholders in Showcase and Gallery. Added a guarded send_from_directory route registered before the SPA fallback.
Features
/api/migrate/cleanup migrator (f5efbea): targeted destructive cleanup — deletes every image_record attributed to one artist (CASCADE handles image_tag, image_provenance, series_page, tag_suggestion_rejection), unlinks originals + thumbnails on disk, optionally sweeps import_task rows under a given source_path_prefix, removes empty import_batch rows, and finally deletes the artist row. Built for the IR-migration rescue case where the scan derived a bogus imagerepo artist from a mismatched bind-mount layout. Honors dry_run for a safe preview; requires force: true to bypass the pre-migration backup guard.
Commits
f5efbea feat(fc5): /api/migrate/cleanup — delete every image attributed to one artist, files + thumbs + DB
f653c26 fix(web): serve /images/<path> from disk so thumbnails+originals render instead of grey placeholders
Patch release rolling up two post-migration fixes.
## Fixes
- **Serve `/images/<path>` from disk** (`f653c26`): without this route, the SPA catch-all swallowed every thumbnail/original URL and returned `index.html`, causing the aspect-ratio-shaped grey placeholders in Showcase and Gallery. Added a guarded `send_from_directory` route registered before the SPA fallback.
## Features
- **`/api/migrate/cleanup` migrator** (`f5efbea`): targeted destructive cleanup — deletes every `image_record` attributed to one artist (CASCADE handles `image_tag`, `image_provenance`, `series_page`, `tag_suggestion_rejection`), unlinks originals + thumbnails on disk, optionally sweeps `import_task` rows under a given `source_path_prefix`, removes empty `import_batch` rows, and finally deletes the artist row. Built for the IR-migration rescue case where the scan derived a bogus `imagerepo` artist from a mismatched bind-mount layout. Honors `dry_run` for a safe preview; requires `force: true` to bypass the pre-migration backup guard.
## Commits
```
f5efbea feat(fc5): /api/migrate/cleanup — delete every image attributed to one artist, files + thumbs + DB
f653c26 fix(web): serve /images/<path> from disk so thumbnails+originals render instead of grey placeholders
```
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Patch release rolling up two post-migration fixes.
Fixes
/images/<path>from disk (f653c26): without this route, the SPA catch-all swallowed every thumbnail/original URL and returnedindex.html, causing the aspect-ratio-shaped grey placeholders in Showcase and Gallery. Added a guardedsend_from_directoryroute registered before the SPA fallback.Features
/api/migrate/cleanupmigrator (f5efbea): targeted destructive cleanup — deletes everyimage_recordattributed to one artist (CASCADE handlesimage_tag,image_provenance,series_page,tag_suggestion_rejection), unlinks originals + thumbnails on disk, optionally sweepsimport_taskrows under a givensource_path_prefix, removes emptyimport_batchrows, and finally deletes the artist row. Built for the IR-migration rescue case where the scan derived a bogusimagerepoartist from a mismatched bind-mount layout. Honorsdry_runfor a safe preview; requiresforce: trueto bypass the pre-migration backup guard.Commits