Skip to content

Releases: sdblepas/archive-mirror

v1.1.0 — Fast restarts & Scan button

14 Apr 16:49

Choose a tag to compare

What's new in v1.1.0

Smarter sync architecture

IA discovery and file downloads are now fully decoupled — a key quality-of-life improvement for long-running mirrors.

Before

Every sync cycle re-crawled the entire Internet Archive collection before downloading a single file. Container restarts meant re-doing all that network work.

After

Phase Trigger What happens
Discovery First boot (empty DB) or Scan button Paginates IA scrape API, upserts new items as pending
Downloads Every SYNC_INTERVAL tick Reads DB, downloads pending/failed items

Container restarts are now instant — the scheduler detects existing DB items and goes straight to downloading with zero IA traffic.

New: Scan button

The dashboard header now has a "🔍 Scan for new" button:

  • Fires POST /api/scan → runs discovery in the background
  • Button shows a spinner while running
  • Polls /api/scan/status every 3 s, refreshes the concert list when done
  • New Last scan panel shows when the last scan ran and how many new concerts were found

New API endpoints

Method Path Description
POST /api/scan Start discovery (202 Accepted, 409 if already running)
GET /api/scan/status {running, last_scan_at, last_scan_stats}

Docker

docker pull sdblepas/archive-mirror:v1.1.0
# or
docker pull sdblepas/archive-mirror:latest

Upgrade from v1.0.0

Drop-in replacement — no config or DB changes needed.


🤖 Built with Claude Code

v1.0.0 — Web UI, Multi-Collection & Catalog Export

14 Apr 16:12

Choose a tag to compare

What's new in v1.0.0

This is a major release bringing a full Web UI dashboard, multi-collection support, and catalog export — on top of a batch of critical bug fixes.

✨ New features

Web UI Dashboard

  • Live stats dashboard at http://your-host:6547/ (FastAPI + Alpine.js + Tailwind)
  • 6 stat cards: total concerts, tracks, downloaded, skipped, failed, active collections
  • Last sync panel with per-collection breakdown
  • Sync history table (last 10 runs)
  • Searchable, filterable, paginated concert browser with item detail modal
  • 30-second auto-refresh
  • OpenAPI docs at /api/docs

Multi-Collection Support

  • Set COLLECTION=col1,col2,col3 to mirror multiple Internet Archive collections
  • Each item is tagged with its source collection in the database
  • Filter the UI by collection

Catalog Export

  • JSON + CSV catalog files written to the state directory after every sync
  • On-demand refresh: GET /api/catalog/refresh

Router Architecture

  • FastAPI split into src/routers/ package: health, stats, syncs, items, catalog

🐛 Bug fixes

  • Hash corruption on resumed downloads — md5/sha1 were reset before knowing if the server honored the Range header; fixed so hashes restart correctly after a forced full re-download
  • Atomic file promotion — replaced Path.rename() with os.replace() for true cross-device atomicity
  • SQLite migration crash on v0.1 databasesCREATE INDEX for the new collection column was running before the ALTER TABLE that adds it; fixed by splitting into ordered migration steps
  • Concurrent stats race conditionasyncio.Lock added around stats accumulation in _process_item
  • Bare except clauses — replaced with specific exception types throughout
  • Dead code removed from sync work-list calculation

⚠️ Breaking change

COLLECTION now accepts a comma-separated list. Single-collection configs (COLLECTION=grateful-dead) are fully backward compatible.

Docker

docker pull sdblepas/archive-mirror:v1.0.0
# or
docker pull sdblepas/archive-mirror:latest

Upgrade from v0.1.x

The database schema is automatically migrated on first start — no manual steps needed.


🤖 Built with Claude Code

v0.1.1

14 Apr 11:34

Choose a tag to compare

What's Changed

🐛 Bug Fixes

  • Fixed Dockerfile HEALTHCHECK heredoc parse error — Docker does not support heredoc syntax inside HEALTHCHECK CMD, causing a build failure with unknown instruction: import
  • Corrected health endpoint port from 8080 to 6547 in Dockerfile and healthcheck

📚 Documentation

  • Reworked README with badges, Aadam Jacobs collection backstory, and step-by-step Docker Compose installation guide
  • Added French translation (README.fr.md)
  • Added MIT LICENSE

🐳 Docker

  • Image available on Docker Hub: sdblepas/archive-mirror:v0.1.1
  • sdblepas/archive-mirror:latest updated

Full Changelog: v0.1.0...v0.1.1