bd812bb601aca2692ceb5bd817b5bef5b4260a13
The hand-rolled chunk assembly was verified correct in Node but still produced a broken MP4 in the browser, so stop relying on it: the muxer now streams into an Origin Private File System file (random access is exactly what MP4 needs), the worker returns the OPFS File directly, and the entry is deleted after a successful apply (stale ones are purged hourly). The chunk collector remains only as a fallback for browsers without OPFS. The result is validated before it reaches the UI: MP4s must contain a moov box and WebM files must start with the EBML magic, so a broken muxer output surfaces as an error instead of a 0x0 preview.
J621
Self-hosted media library and e621 archive manager, rebuilt as a React SPA + Django REST API.
Structure
backend/ Django 6 + DRF API (SQLite in dev, MariaDB in production)
frontend/ Vite + React + TypeScript SPA
Development
Backend
cd backend
source venv/bin/activate
python manage.py migrate
python manage.py scan_files # index the watched folder
python manage.py runserver
Copy .env.example to .env and set WATCHED_FOLDER before scanning.
Frontend
cd frontend
npm install
npm run dev # http://localhost:5173, proxies /api to :8000
Production
Not wired up yet — planned: Nginx serving the SPA build, /media and /library media
directly, and proxying /api to Waitress/Django. See frontend/ design docs for the UI
specification.
Licence
Source-available, non-commercial: personal and other non-commercial use is welcome under the Jake Labs Non-Commercial Software Licence, which requires attribution and keeps derivative works under the same licence. Commercial use is not permitted. Third-party dependencies keep their own licences (all permissive: MIT, BSD, Apache-2.0, ISC).
Releases
2
desktop-v0.1.2
Latest
Languages
TypeScript
55.8%
Python
37.7%
Shell
3.3%
PowerShell
2.5%
Rust
0.5%
Other
0.1%