Events written in author mode by anyone without Manager wait here.
ep01.json beside it, prompt to skip intros and recaps.VioletData) instead of only inside this browser profile — every profile pointed at the same folder shares accounts, progress, bookmarks, all of it. Sign-ins stay per-profile.VioletWatch reads a folder of video files directly in your browser — nothing is uploaded anywhere. Posters, scores and synopses are looked up from the free AniList API based on each folder's name. Your watch progress and resume positions are saved locally in this browser.
Pick the folder that contains your shows. Each show should be its own sub-folder:
Anime/
├─ One Piece/
│ ├─ One Piece - 1001.mp4
│ └─ One Piece - 1002.mp4
└─ Re Zero/
├─ Re Zero - 01.mp4
└─ Re Zero - 01.srt ← subtitles auto-detected
Drop a .srt or .vtt file with the same name next to a video and it loads automatically (SRT is converted on the fly). Toggle it with the CC button or the C key.
If an episode has no subtitles, the player offers to generate them for you using a local speech-recognition model (OpenAI Whisper, via transformers.js). It runs entirely on your PC — audio never leaves your machine. Pick how you want it done: Quick → English (Whisper translates the audio directly — fastest, roughest), JA → EN (better) (transcribes the Japanese first, then runs a dedicated Japanese→English model over the text — slower but noticeably better, since text→text is an easier problem than audio→translation), or Original language. If the episode already has Japanese subtitles, best of all is to right-click → Translate these → English: it skips speech recognition entirely, so there are no transcription errors to compound. Also pick a quality level: Faster (base) or Better (small) — "small" is noticeably more accurate but slower and a bigger download. It runs on the CPU for accuracy (the WebGPU path produced garbled output), the model's encoder is kept at full precision (quantising it is what caused the earlier repeating-gibberish output), and a repetition filter strips any looping the model still produces. serve.py makes the CPU path multi-threaded so it stays reasonably quick. Results are saved permanently and you can Save .srt. You can also right-click the video to regenerate, remove, or load your own subtitle file. Audio decoding has the same format limits as playback (works best on .mp4).
Watch progress, resume positions, fetched metadata and generated captions are all stored on your PC (localStorage + IndexedDB) and the app requests persistent storage so the browser won't clear them — everything survives closing the app. The one thing browsers won't let a local page remember is the folder itself, so you'll re-pick it each launch; the moment you do, all your progress and captions snap back into place.
.mp4 / .m4v / .webm (H.264 / AAC) play natively. Browsers can't open .mkv (and .avi, .ts, etc.) directly, so VioletWatch offers to convert them to MP4 on your PC using FFmpeg compiled to WebAssembly — nothing is uploaded. When a file can't play, click Convert & play:
• Quick convert (re-wrap to MP4) is fast and works when the video is H.264.
• For HEVC/x265: install the HEVC Video Extensions from the Microsoft Store ($0.99) and open VioletWatch in Microsoft Edge — then quick convert is usually enough (Edge decodes HEVC with your GPU; VioletWatch tags it hvc1 so the browser accepts it).
• If it still won't play (no HEVC support, or AV1), you'll be offered a full re-encode — plays anywhere but slow.
The converter downloads ~32 MB the first time. Converting happens in memory, so very large files (>~1 GB) can run out of memory — for those, converting to mp4 with a desktop tool is more reliable. After converting, hit Save .mp4 to keep the converted file so it plays instantly next time (you can delete the original .mkv).
The player has three modes, switchable top-right (or press T to jump to Theater):
• Normal — standard flat playback, edge to edge.
• Theater — the picture floats as a glass-edged panel inside an infinite warped grid void. The frame curves and tilts back in 3D while the video itself stays perfectly flat and sharp, and an ambient light bleed sampled from the picture spills out onto the void.
• Cinema — pure black, no framing, maximum focus.
Theater costs almost nothing to run: the video is never redrawn, the grid is painted once per resize, and only a tiny 24×14 ambient sample refreshes a few times a second.
Space / K play·pause · J / L −10s·+10s · ← / → −5s·+5s · ↑ / ↓ volume · F fullscreen · M mute · C captions · T theater · N next episode · 0–9 jump to % · < / > speed
Can't play this file
Your browser can't decode this video's format. It works best with .mp4 (H.264).