Skip to content

Releases: v0l/route96

v0.6.0

12 Mar 15:00
@v0l v0l
b89c185

Choose a tag to compare

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/files endpoint with rich metadata, sorting, and label search; shared FileListControls component
  • Admin onboarding – upsert user on admin_get_self before reading their record

Fixes

  • Use i64 for get_admin_count to match MySQL COUNT() return type
  • Set RequestBodyLimitLayer to usize::MAX to avoid 413 on non-upload routes
  • Enforce max_upload_bytes in FileStore::put regardless of Content-Length
  • Hot-reload whitelist mode when config changes
  • Only reload config on Modify events for the config file itself
  • Suppress spurious config reload logs when nothing changed
  • Cast coalesce egress bytes to unsigned to avoid DECIMAL type mismatch
  • Reload config immediately on admin API changes, drop DB poll
  • Hide listen address and storage_dir from config UI
  • Remove analytics from Dockerfile feature flags
  • FileStore reads max_upload_bytes from live Arc<RwLock<Settings>>
  • Make start_background_tasks async to avoid blocking read in runtime
  • Include deletion reason in FileDeleter log output

v0.5.2

11 Mar 15:13
@v0l v0l
b3fc976

Choose a tag to compare

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/mp4 instead of video/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

05 Mar 11:49
@v0l v0l
7d82854

Choose a tag to compare

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, and DELETE /admin/reports now 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_by comma-separated column with proper join table
  • Introduced MediaLabeler trait for pluggable labeling backends
  • Reduced background worker intervals from 30-60s to 2s
  • Fixed all clippy warnings
  • Updated agents submodule

v0.5.0

04 Mar 22:37
@v0l v0l
3121873

Choose a tag to compare

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_exclude and min_confidence settings

Content Moderation

  • Files automatically flagged (LabelFlagged) when AI labels match configured terms
  • User reports via NIP-56 set Reported state
  • Admin review queue: GET /admin/files/review
  • Admin actions: mark reviewed (PATCH) or hard-delete (DELETE) flagged files
  • banned flag 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_INITIALIZED by 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 cuda from default features (opt-in via --features cuda)