Releases: v0l/route96
Releases · v0l/route96
v0.6.0
What's New
Features
- Admin onboarding setup flow – new admins go through an explicit setup flow instead of being auto-promoted
- Database-backed dynamic config – settings are stored in the database and hot-reloaded without restart; config tab added to admin UI
- Database-backed whitelist – whitelist is now managed via the database with a full admin UI editor (whitelist mode selector, "Add me" button)
- File stats tracking – in-memory stats (downloads, egress) flushed periodically to DB; sort/order controls and stats columns added to admin file list
- File deletion policies – auto-delete files with no downloads after a configurable threshold; hard-age retention policy; live deletion task settings in UI
- User file list – new
GET /user/filesendpoint with rich metadata, sorting, and label search; sharedFileListControlscomponent - Admin onboarding – upsert user on
admin_get_selfbefore reading their record
Fixes
- Use
i64forget_admin_countto match MySQLCOUNT()return type - Set
RequestBodyLimitLayertousize::MAXto avoid 413 on non-upload routes - Enforce
max_upload_bytesinFileStore::putregardless ofContent-Length - Hot-reload whitelist mode when config changes
- Only reload config on
Modifyevents for the config file itself - Suppress spurious config reload logs when nothing changed
- Cast coalesce egress bytes to unsigned to avoid
DECIMALtype mismatch - Reload config immediately on admin API changes, drop DB poll
- Hide
listenaddress andstorage_dirfrom config UI - Remove analytics from Dockerfile feature flags
- FileStore reads
max_upload_bytesfrom liveArc<RwLock<Settings>> - Make
start_background_tasksasync to avoid blocking read in runtime - Include deletion reason in FileDeleter log output
v0.5.2
What's new
UI
- Login/signup flow on the logged-out homepage (NIP-07, nsec, NIP-46 bunker)
- Create account flow: generates a Nostr keypair, shows nsec for safekeeping, sets up profile (name, avatar, about), publishes kind-0 and kind-10063 blossom server list
- Avatar upload uses the current server via Blossom
- Left/right arrow keys to paginate the file list
- Payment Options button hidden when payments are disabled on the server
- Storage widget always visible (shows zeros while loading)
- File list reloads after a successful upload
- Stale uploads/storage/admin state cleared on logout or account switch
- Mirror suggestions now re-fetch when the blossom server list loads from relays
- Arrow keys no longer conflict with the grid columns slider
- Logout navigates back to the root page
- Login button removed from header (login is on the homepage)
- SEO meta tags added (description, keywords, Open Graph, Twitter Card)
Backend
- Fix: audio-only MP4 containers (e.g. DASH segments) now classified as
audio/mp4instead ofvideo/mp4, preventing spurious 500 errors on thumbnail requests - Fix: replace infinite while-let loop with if-let in thumbnail and load_image decoders
- Fix: add exponential backoff to background workers to prevent tight loops on errors
- Fix: add sleep on DB error to prevent busy-wait spin in background workers
- Refactor: convert background tasks to fully async with Tokio tasks
v0.5.1
What's New
Perceptual Image Hashing (pHash + LSH)
- Compute 64-bit DCT-based perceptual hashes using
image_hasher+ ffmpeg - Hashes computed at upload time and backfilled by background worker
- LSH band pre-filtering for efficient similar image search at scale
- New admin endpoint:
GET /admin/files/{id}/similar?distance=N - Similar images UI modal in admin panel
Batch Admin Endpoints
PATCH /admin/files/review,DELETE /admin/files/review, andDELETE /admin/reportsnow accept a JSON body with a list of IDs- Single SQL query per batch operation instead of row-by-row loops
Agent Skill
- Added
docs/SKILL.md(agentskills.io format) documenting Blossom + NIP-96 APIs - Served at
GET /SKILL.md
Other Improvements
- Optimized SQL queries with missing indexes, removed legacy void_db
- Replaced
labeled_bycomma-separated column with proper join table - Introduced
MediaLabelertrait for pluggable labeling backends - Reduced background worker intervals from 30-60s to 2s
- Fixed all clippy warnings
- Updated agents submodule
v0.5.0
What's New
AI Content Labeling
- Automated file tagging using configurable HuggingFace ViT models (CPU and CUDA)
- Background task retroactively labels existing uploads missing labels
- Auto-download models from HuggingFace on first use, cached to disk
- Video labeling: samples 1 frame/second (up to 60s) and averages scores
- Configurable per-model
label_excludeandmin_confidencesettings
Content Moderation
- Files automatically flagged (
LabelFlagged) when AI labels match configured terms - User reports via NIP-56 set
Reportedstate - Admin review queue:
GET /admin/files/review - Admin actions: mark reviewed (
PATCH) or hard-delete (DELETE) flagged files bannedflag prevents re-upload of deleted content
API & Framework
- Migrated from Rocket to Axum (#54)
- Admin API: user info, file list, reports, purge account
GET /docs.md— embedded admin API reference- EXIF privacy protection: reject uploads containing sensitive metadata (GPS, device info) (#51)
- Dynamic whitelist: monitor a file for pubkey changes without restart
UI
- New theme and layout
- Upload progress bar with average speed
- Mirror suggestions for blossom servers
- Admin reports panel and quota display
Fixes & Infrastructure
- Fixed cuBLAS
CUBLAS_STATUS_NOT_INITIALIZEDby threading device through labeling pipeline - Fixed range response off-by-one and unbounded range handling
- Fixed storage quota system when payments config is absent
- Optimised Docker build with dependency layer caching
- Dropped
cudafrom default features (opt-in via--features cuda)