Releases: sdblepas/archive-mirror
v1.1.0 — Fast restarts & Scan button
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/statusevery 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
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,col3to 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
Rangeheader; fixed so hashes restart correctly after a forced full re-download - Atomic file promotion — replaced
Path.rename()withos.replace()for true cross-device atomicity - SQLite migration crash on v0.1 databases —
CREATE INDEXfor the newcollectioncolumn was running before theALTER TABLEthat adds it; fixed by splitting into ordered migration steps - Concurrent stats race condition —
asyncio.Lockadded around stats accumulation in_process_item - Bare
exceptclauses — 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
What's Changed
🐛 Bug Fixes
- Fixed Dockerfile
HEALTHCHECKheredoc parse error — Docker does not support heredoc syntax insideHEALTHCHECK CMD, causing a build failure withunknown instruction: import - Corrected health endpoint port from
8080to6547in 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:latestupdated
Full Changelog: v0.1.0...v0.1.1