Reelframe is a fast, modern, and local-first media library designed for browsing, organizing, and viewing your photos and videos with a clean and distraction-free interface.
- Fast local media browsing.
- Modern and minimal user interface.
- Smooth image viewing with zoom and pan support.
- Video playback support.
- Lightweight and responsive design.
- Local-first workflow with no cloud dependency.
- Keyboard and mouse friendly navigation.
git clone https://github.com/yourusername/reelframe.git
cd reelframeIf using a simple static setup:
python -m http.server 8000Then open:
http://localhost:8000
If your project uses another development server, follow the instructions for your chosen framework or build system.
Reelframe's optional NSFW detection feature (Settings → redeem a code to unlock it in beta) uses two on-device machine learning models. Neither ever sends your photos anywhere — both run entirely in your browser.
| Pass | Model | Where it loads from | Do you need to do anything? |
|---|---|---|---|
| Whole-image scan (badge + full blur) | nsfwjs (tfjs) | CDN (cdn.jsdelivr.net), fetched automatically |
No — nothing to download, it just needs internet access the first time |
| Region scan (blurs just the flagged spot) | NudeNet 320n (ONNX) | Bundled in this repo at models/nudenet-320n.onnx |
No, if that file is present — see below if it's missing |
It should already be committed to this repo, so normally you don't need to do anything. If you've cloned a copy where it's missing (e.g. it got excluded by a .gitignore rule, stripped by a host with binary-file limits, or you're setting the project up from scratch), you have two options:
Option A — pip (simplest, and how the bundled copy was obtained):
pip install nudenet
python3 -c "import nudenet, shutil, os; shutil.copy(os.path.join(os.path.dirname(nudenet.__file__), '320n.onnx'), 'models/nudenet-320n.onnx')"Option B — download the wheel directly, no nudenet install required:
pip download nudenet --no-deps -d /tmp/nudenet_pkg
cd /tmp/nudenet_pkg && unzip -o nudenet-*.whl -d extracted
cp extracted/nudenet/320n.onnx /path/to/reelframe/models/nudenet-320n.onnxEither way, the file should land at models/nudenet-320n.onnx (~12 MB) relative to index.html. That path is what NUDENET_MODEL_URL in js/01-constants.js points at — if you'd rather host it somewhere else (a CDN, a different folder), just update that constant to match.
The model is MIT-licensed by its original authors (a copy of the license is at models/NUDENET-LICENSE.txt) — safe to keep in this repo, including in a public one.
Note: earlier notes in this codebase pointed
NUDENET_MODEL_URLat NudeNet's GitHub release asset instead of a local file. That URL redirects to a github.com login page even for anonymous requests, so it wasn't actually reachable from a browser — hence the switch to bundling the file locally.
Reelframe/
├── css/
├── js/
├── models/ — bundled ML model(s) for NSFW region detection
├── assets/
├── favicon.svg
├── index.html
├── LICENSE
└── README.md
Contributions, suggestions, and bug reports are welcome. Feel free to open an issue or submit a pull request.
This project is licensed under the MIT License. See the LICENSE file for details.