{"id":43598682,"url":"https://github.com/nwund/vault-project","last_synced_at":"2026-07-05T23:00:28.452Z","repository":{"id":335599461,"uuid":"1141512789","full_name":"Nwund/vault-project","owner":"Nwund","description":"Vault is a powerful, privacy-focused desktop application for organizing, viewing, and enjoying your adult media collection. Built with Electron and React, it offers a sleek, immersive experience with AI-powered features, customizable visual effects, and comprehensive library management.","archived":false,"fork":false,"pushed_at":"2026-05-23T00:30:54.000Z","size":27223,"stargazers_count":6,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-05-23T01:12:42.444Z","etag":null,"topics":["adult-ai","aggregator","ai","downloader","editor","gallery","library","media","nsfw","nsfw-detection","pmv","stash","tagging","video"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Nwund.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-01-25T00:26:56.000Z","updated_at":"2026-05-23T00:30:57.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/Nwund/vault-project","commit_stats":null,"previous_names":["nwund/vault-project"],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/Nwund/vault-project","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Nwund%2Fvault-project","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Nwund%2Fvault-project/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Nwund%2Fvault-project/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Nwund%2Fvault-project/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Nwund","download_url":"https://codeload.github.com/Nwund/vault-project/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Nwund%2Fvault-project/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35171813,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-05T02:00:06.290Z","response_time":100,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["adult-ai","aggregator","ai","downloader","editor","gallery","library","media","nsfw","nsfw-detection","pmv","stash","tagging","video"],"created_at":"2026-02-04T05:11:02.172Z","updated_at":"2026-07-05T23:00:28.443Z","avatar_url":"https://github.com/Nwund.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n# 🔐 VAULT\n\n### *Your Private Media Sanctuary*\n\n[![Version](https://img.shields.io/badge/v2.8.5-Latest-brightgreen?style=for-the-badge)](https://github.com/Nwund/vault-project/releases)\n[![Platform](https://img.shields.io/badge/Windows%20%7C%20macOS%20%7C%20Linux-Platform-blue?style=for-the-badge)](https://github.com/Nwund/vault-project)\n[![Electron](https://img.shields.io/badge/Electron-32.0-47848F?style=for-the-badge\u0026logo=electron\u0026logoColor=white)](https://electronjs.org)\n[![React](https://img.shields.io/badge/React-19.2-61DAFB?style=for-the-badge\u0026logo=react\u0026logoColor=white)](https://react.dev)\n[![TypeScript](https://img.shields.io/badge/TypeScript-5.7-3178C6?style=for-the-badge\u0026logo=typescript\u0026logoColor=white)](https://typescriptlang.org)\n\n\u003cbr/\u003e\n\n**The ultimate private media library for discerning adults.**\u003cbr/\u003e\n*AI-powered • Privacy-first • Beautifully designed*\n\n\u003cbr/\u003e\n\n[**⬇️ Download**](https://github.com/Nwund/vault-project/releases) · [**📖 Documentation**](#features) · [**🚀 Quick Start**](#quick-start)\n\n\u003cbr/\u003e\n\n---\n\n\u003cbr/\u003e\n\n\u003cimg src=\"https://img.shields.io/badge/AI%20Powered-Venice%20%2B%20ONNX-ff69b4?style=flat-square\" alt=\"AI\"\u003e\n\u003cimg src=\"https://img.shields.io/badge/DLNA-Smart%20TV%20Streaming-success?style=flat-square\" alt=\"DLNA\"\u003e\n\u003cimg src=\"https://img.shields.io/badge/Mobile-Sync%20%26%20Control-orange?style=flat-square\" alt=\"Mobile\"\u003e\n\u003cimg src=\"https://img.shields.io/badge/GPU-Accelerated-purple?style=flat-square\" alt=\"GPU\"\u003e\n\n\u003c/div\u003e\n\n\u003cbr/\u003e\n\n## 🆕 v2.8.5 — AI Review scheduler + tagger sanity + regen-anywhere (2026-06-18)\n\nBug-fix + small-feature release. Most of these came out of a long live-review session where the user surfaced model failure modes the calibration layer wasn't catching.\n\n- **Content-ratio scheduler in the AI processing queue** — animated/hentai content currently produces worse Tier 2 titles + descriptions than IRL, so the review backlog was clogging with garbage. The queue now interleaves at 50 real : 10 animated per cycle. Detection uses a media-tag check (any of `hentai` / `animation` / `3d` / `sfm` / `cartoon` / `drawn` on the item) plus filename/path keywords (`hentai`, `anime`, `koikatsu`, `honey select`, `mmd`, `blender`, `rule34`, etc.). If a bucket is empty the scheduler falls back to the other so the worker never idles.\n- **Trans/transgender/shemale/futa never auto-apply** — bare `trans` was firing on cis-female content constantly. The model overuses it. New `isAutoApplyBlocked()` in `canonical-tags.ts` runs the never-auto-apply checks **before** the canonical-wins shortcut in `isJunkTag()` (which was letting `trans` through because the tag exists in canonical for manual selection). Same gate catches \"implied X\" hedge forms that slipped past the prefix-strip. Used in tier3-tag-matcher, description-tag-extractor, and the Tier 2 richTags filter — but NOT in the cleanup IPC, so existing manually-applied `trans` tags survive. `mtf` and `ftm` still auto-apply, gated by the existing corroboration rule (must have another trans indicator OR conf ≥ 0.85).\n- **Description no longer concatenates JoyCaption local caption** — Venice's description was getting a `[Local caption]` block appended from the JoyCaption sidecar, intended for backend tag-mining but ugly in the UI. The companion JoyCaption `tags-danbooru` call already feeds tag candidates directly into rich_tags, so removing the description concat doesn't lose tag-extraction signal. Sidecar still runs; user just sees one clean description.\n- **`ai:regenerate-title` / `ai:regenerate-description` work on never-analyzed media** — both IPCs were throwing \"No analysis record found\" because they `INNER JOIN`'d on `ai_analysis_results`. Switched to `LEFT JOIN media` and an `INSERT … ON CONFLICT(media_id) DO UPDATE` so the row gets created on first regen instead of silently no-op'ing. Tier 1 hints just stay empty when there's no prior context.\n\n## 🆕 v2.8.4 — Theme reactivity + AI Review polish + LAION installer (2026-05-25)\n\nFollow-up patch addressing five user-reported issues, plus a new install script for the LAION aesthetic predictor.\n\n- **Theme text no longer pink across every theme** — Tailwind `text-pink-*` / `-rose-*` / `-fuchsia-*` / `-violet-*` / `-purple-*` classes now remap to `var(--primary)` globally so they flow with the active theme (was hardcoded #f9a8d4 etc.).\n- **Quick Actions sidebar block removed** — collapsed dropdown at the bottom of the sidebar. Cycle Theme / Rescan Library / etc. are reachable from the Command Palette (Ctrl+K) instead.\n- **AI Review sort now actually works** — uncertainty sort was scoring 0 on rows with no `rich_tags` JSON (most older items), so the list looked identical to newest sort. Added an `nsfw_confidence`-based fallback so the toggle re-orders even on legacy rows.\n- **AI Review preview is click-to-play with full timeline** — replaced the hover-preview with a click-to-play `\u003cvideo controls\u003e` so reviewers can pause, scrub, and seek frame-by-frame to verify tags against specific moments.\n- **AI Review frame grid spreads across the whole video** — `mpdecimate` dedup was clustering tiles from a narrow window on slow-pan videos (\"first 10 seconds 12 times\" symptom). Disabled for the review contact-sheet. Plus an ffmpeg-side duration probe for videos missing `durationSec` in DB — was falling to `select=not(mod(n,30))` which packs frames from t=0.\n- **New `npm run install:aesthetic`** — Node script that downloads the LAION aesthetic-predictor `.pth` from GitHub and converts it to the JSON schema Vault's loader expects, writing to `%APPDATA%\\vault\\models\\aesthetic-linear.json` directly. Supports the 1-layer linear MSE (default) and the 5-layer MLP variant (`--variant=mlp`). No PyTorch dependency — parses the .pth zip + raw float32 tensors in pure Node.\n\n## 🆕 v2.8.2 — Unified optional-models UI + one-click installers (2026-05-24)\n\nReplaces the previous two-card split (ModelFileCard grid + ExtraDetectorsCard) with one consolidated **Optional models \u0026 sidecars** panel under AI Tools → Setup. Same models, organized by capability instead of file type, with one-click installers where the upstream URL is stable. Per-model download progress bars stream live.\n\n- **One-click installers** for JoyTag (model.onnx + top_tags.txt from HuggingFace), Real-ESRGAN x4 upscaler, and Chromaprint fpcalc.\n- **Categorized rows**: Vision · Faces \u0026 people · Text · Audio · Voice. Scaffold-only detectors (wrappers without inference paths wired yet) collapsed behind a toggle so the main view stays scannable.\n- **Three install affordances**: `Install` button when we know the URL; `Setup guide` for Python sidecars (WhisperX, F5-TTS); `Manual` for models with no canonical community ONNX (AI-image, deepfake, AdaFace, PaddleOCR, BEATs, PANNs).\n- **No more duplicate rows** — the v2.7.1 split had `ai-image` and `deepfake` listed in both cards with different framings.\n- **No more stuck-on-Checking…** — the bug that the v2.8.1 ModelFileCard fix addressed is preserved in the new card's tristate `loading | ok | error | empty` status.\n- **Progress streaming**: `models:install-progress` event lets the UI show real `N MB / N MB · 73%` instead of a generic spinner.\n\n## 🆕 v2.8.1 — Build-fix + freeze-perf patch (2026-05-24)\n\nFollowup to v2.8.0. No new features; two fixes for stability.\n\n- **Build fix**: an upstream electron-vite bug (PR #838, still open) was splicing the CJS-shim header mid-line in the bundled main.js, breaking the build. The `media:importBuffer` IPC for Brainwash clipboard paste was moved into its own file (`src/main/ipc-media-import.ts`) with all comment patterns that could trip the regex stripped out.\n- **Perf — AI Review autocomplete didn't freeze, but felt that way**: the Custom Tag autocomplete's render-time substring scan walked the entire tag DB on every keystroke without an early break, and the SQLite writes in `approveEdited` weren't transactioned. Both fixed: hard break once 6 visible matches are gathered, and tag inserts wrapped in a single transaction (~200ms → ~5ms on 20-tag approves).\n- React 19 `fetchPriority` casing fix in CaptionsPage (was `fetchpriority`, lowercase — Chromium worked, React 19 logged a dev warning).\n\n## 🆕 v2.8.0 — UX \u0026 perf polish (2026-05-23)\n\nA ~50-item polish + perf release on top of v2.7.1. Headline numbers:\n**53 features / fixes shipped**, **~30 new keyboard shortcuts**, **1 new\nvisibility-gated polling hook** that cut background IPC chatter to ~zero\nwhen the app is in the background.\n\n- **Voice Intake fix** — `getIntakeStatus()` was returning only 3 of the 8 fields the renderer card reads, so the panel rendered \"Stopped\" with \"undefined done · undefined failed\" even while the watcher was active. All counters now wire through.\n- **Theme text reactivity** — hardcoded Tailwind `text-white` / `text-zinc-*` / `text-gray-*` / `text-slate-*` now follow the active theme's `--text` variable in **every** theme (was only doing so in `light`).\n- **Library**: Untagged / Recent 24h / `\u003c5min` / `5–20min` / `\u003e20min` quick-filter pills · vim `gg`/`G`/`/`/`d` shortcuts · PageUp/PageDown paging · selection-bar additions (`+Tag` / `-Tag` / AI re-tag / Generate Thumbs / Open up to 4) · TopBar subtitle showing `N items · X GB` (or `N selected` in selection mode) · Random Pick excludes Continue Watching items · Library count badge in sidebar.\n- **Floating Player**: Ctrl+S saves current frame as PNG · `r` rotates 90° · `q`/Ctrl+W close · Shift+Q closes all · `[`/`]` rate ±10% (rate persists) · floating speed badge when rate ≠ 1× · Shift+S / Shift+E explicit A-B loop endpoints · Skip-intro overlay (configurable offset) · pause-on-blur (default ON) · Retry button on error overlay.\n- **AI Tools**: bare `a` approves / `x` rejects + auto-advance · Approve ≥85% bulk-confidence button · 1-4 keys swap tabs · ETA line in queue status.\n- **Sessions**: 1-5 keys swap sub-tabs · top-right End Session button (broadcasts `sessions:end-all`; verifier, stroke tempo, HR band, lockout all listen and stop themselves).\n- **Browse**: `sortBy` persists across sessions · vim `gg` / `G` jump to top / bottom.\n- **GoonWall**: `p` pauses all tiles · `1`-`9` set tile count.\n- **Performers**: `j`/`k` cluster navigation with focus ring + scroll-into-view · sort dropdown (by size / name / recent).\n- **Playlists**: search field · Cmd/Ctrl+N focuses new-playlist input.\n- **Brainwash**: Tab ping-pongs top↔bottom text inputs · **clipboard paste imports the image into your library** via new `media:importBuffer` IPC.\n- **Toast**: Logs button on error toasts · Dismiss-all when ≥3 stacked · dimmed during Zen mode.\n- **Settings**: Open userData folder · Reload from disk · API key reveal toggles.\n- **Command palette** gained 5 new entries: Pause/Resume AI Queue, Reload Settings, Open Logs Folder, Close All Floating Players.\n- **Perf**: new `useVisibilityInterval` hook applied to 10 polling cards (QueueDashboard 2s, DevicesView 2s, LiveSessionView 5s, CrossDeviceCard 5s, SidecarWatcherBadge 5s, VaultMlSidecarCard 8s, HomeAssistantCard 10s, ExtraDetectorsCard 30s, SubscriptionsBellButton 60s, App-level untagged count 30s) so polls pause when the tab is hidden. App-level AI status poll backs off 5s → 30s while hidden.\n\nSee [CHANGELOG.md](CHANGELOG.md) for the full v2.8.0 notes.\n\n## 🆕 v2.7.0 — The integration sweep (2026-05-17)\n\nThe largest release since v2.6.0. Every preload bridge that had no UI surface now has one. **32 new components**, **23 new Settings cards**, **6 player overlay buttons**, **8 Library Tools entries**, plus React 19 + React Compiler.\n\n- **Settings → Services tab** gained 23 cards across themed sections: Decentralized (Iroh / Hyperswarm / Helia / Syncthing), Privacy (Veilid / Tor / WebTransport / Nostr), Social (Bluesky labeler / UnifiedPush / IMAP), AI gen (Video Diffusion / VaultMl sidecar), Tag intelligence (Tag implications / Folder actions), Security (WebAuthn / Shamir / ntfy), Content imports (Coomer / AudioErotica / CaptionPool / yt-dlp profiles)\n- **Library page** got Stack Mode pager, Quick Look (hold-Q), Color Palette filter chip, Duplicate Triage modal, Animated sub-library facet picker, Sprite-sheet Chapter editor, Export Pipeline recipe builder, SidecarWatcher status badge in TopBar\n- **Floating player** gained a right-edge overlay rail with 7 toggles: LUT grade · Subtitles · Scopes · Beats (Cock-Hero) · Heatmap · Quick Look · Capture moment\n- **Right-click context menu** added Share via Iroh, Pin to IPFS, Open Export Pipeline, Auto-tease, Deny for, Feature less\n- **MediaInfoModal** gained an Obsidian-style backlinks panel\n- **AI Tools** added JoyTag + Real-ESRGAN cards + an Audits section (Quality auditor + Clip similarity)\n- **MessagePort scrub-thumb fast-path** — ffmpeg-backed disk-cached thumbnails, second-pass scrubbing is near-instant\n- **View Transitions API** wrapping page navigation for GPU-accelerated cross-page morph\n- **React 19.2 + React Compiler** in annotation mode, 21 v2.7 components opted in\n- **Bug fixes**: watch-history `m.rating` SQL error, PlaylistsPage `allMedia.filter` crash, bridge access paths corrected across 9 files\n\nSee [CHANGELOG.md](CHANGELOG.md) for the full v2.7.0 notes.\n\n## 🆕 v2.6.1 — Polish patch\n\n- **One-click installs** — CLIP BPE vocab + NudeNet model (Nano / Medium) now install with a single click from AI Tools. No more \"open DevTools and drop a file.\"\n- **8 more detector status cards** — SFace, Person ReID, DB+CRNN OCR, LAION aesthetic, deepfake / AI-face, AI-image, WhisperX sidecar, F5-TTS sidecar — all probe their own state and show install path + size in AI Tools.\n- **WhisperX auto-start + consumer** — when the WhisperX Python sidecar is configured + opted in, transcripts route through it for word-level + speaker-diarized output instead of whisper.cpp.\n- **TS sweep** — `npx tsc --noEmit` clean across the codebase.\n- **Booru video CDN fix** — gray-frame playback on xbooru / gelbooru / realbooru / tbib / hypnohub / paheal solved at the network layer via Electron `webRequest.onBeforeSendHeaders` Referer strip.\n- **ML wrapper backlog doc** — `docs/ML_WRAPPER_BACKLOG.md` is the single index of every optional ML add-on with status (shipped / functional / scaffold).\n\nSee [CHANGELOG.md](CHANGELOG.md) for full v2.6.1 notes.\n\n## 🆕 v2.6.0 — What's new\n\n- **Browse aggregator** — 27-source parallel search across boorus, AI-gen platforms, tube sites, and social feeds (e621, rule34.xxx, Danbooru, AIBooru, Civitai, Gelbooru, Pixiv R-18, RedGifs, PornHub, RedTube, Eporner, xnxx, Bluesky, PullPush/Reddit archive, and more). Multi-select bulk save, custom filename templates, in-library duplicate detection, Vault-tag-blacklist application, source-family tabs, and a filter popover with active-count badge.\n- **ML detector stack** — six ONNX models wired into the AI tagging queue: YuNet face detection, SFace face recognition (with face_clusters table), Person ReID body embeddings, MoveNet pose detection, NudeNet v3 body-part detection, and a gender classifier. Plus whisper.cpp transcription, JoyCaption sidecar, and LAION aesthetic predictor.\n- **Performers page** — face-cluster grid driven by SFace. Name a cluster once and every video featuring that face auto-gets a `performer:NAME` tag.\n- **HLS-aware video lightbox** — xnxx + other tube playback now works via `hls.js` with yt-dlp as the universal fallback resolver.\n- **Tag autocomplete** — Vault's canonical-tags vocabulary now drives in-place autocomplete in the Browse search bar.\n- **Migrations v17 → v23** — face_clusters, face_embeddings, body_embeddings, multi-frame pHash, ai_analysis_results repairs, whisper transcripts (FTS5), CLIP embeddings.\n\nSee [CHANGELOG.md](CHANGELOG.md) for the full v2.6.0 release notes.\n\n---\n\n## ✨ Why Vault?\n\n\u003ctable\u003e\n\u003ctr\u003e\n\u003ctd width=\"50%\"\u003e\n\n### 🎯 **Built for Privacy**\nYour collection stays on YOUR machine. No cloud uploads, no tracking, no telemetry. Panic key instantly hides everything.\n\n\u003c/td\u003e\n\u003ctd width=\"50%\"\u003e\n\n### 🧠 **AI That Understands**\n3-tier AI system auto-tags content, generates captions, and learns your preferences. Works offline too.\n\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd width=\"50%\"\u003e\n\n### 🎨 **Immersive Experience**\n20+ visual overlays, 15+ themes, multiple view modes. From focused browsing to immersive walls.\n\n\u003c/td\u003e\n\u003ctd width=\"50%\"\u003e\n\n### 📱 **Everywhere Access**\nStream to smart TVs via DLNA. Control from your phone. Your library, your way.\n\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n\u003cbr/\u003e\n\n---\n\n\u003cbr/\u003e\n\n## 🖼️ Screenshots\n\n\u003cdiv align=\"center\"\u003e\n\n| Library View | Goon Wall | Brainwash Editor |\n|:---:|:---:|:---:|\n| *Organize thousands of files* | *Multi-video immersive grid* | *AI captions \u0026 filters* |\n\n| Feed Mode | PMV Editor | Mobile Sync |\n|:---:|:---:|:---:|\n| *TikTok-style navigation* | *Beat-synced video creation* | *Control from your phone* |\n\n\u003c/div\u003e\n\n\u003cbr/\u003e\n\n---\n\n\u003cbr/\u003e\n\n## 🚀 Quick Start\n\n```bash\n# Clone \u0026 Install\ngit clone https://github.com/Nwund/vault-project.git\ncd vault-project\nnpm install --legacy-peer-deps\nnpx electron-builder install-app-deps\n\n# Launch\nnpm run dev\n```\n\n**That's it!** Add your media folders in Settings and start exploring.\n\n\u003cbr/\u003e\n\n---\n\n\u003cbr/\u003e\n\n## 🎬 Features\n\n### 📚 Library Management\n\n| | Feature | Description |\n|:---:|---|---|\n| 🔍 | **Smart Scanning** | Auto-imports from watched folders |\n| 🤖 | **AI Auto-Tagger** | Venice AI + ONNX analyzes content |\n| 🏷️ | **Tag Categories** | Hierarchical organization system |\n| 🔗 | **Tag Aliases** | Synonyms auto-resolve |\n| 💾 | **Custom Filters** | Save complex filter combos |\n| 👯 | **Duplicate Finder** | Hash, size, or name matching |\n| ⚡ | **Batch Operations** | Bulk tag, rate, delete, organize |\n| 📋 | **Watch Later** | Priority queue with reminders |\n\n\u003cbr/\u003e\n\n### 🎥 Viewing Modes\n\n\u003ctable\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\" width=\"20%\"\u003e\n\u003ch3\u003e📖\u003c/h3\u003e\n\u003cb\u003eLibrary\u003c/b\u003e\u003cbr/\u003e\n\u003csub\u003eGrid browsing with filters\u003c/sub\u003e\n\u003c/td\u003e\n\u003ctd align=\"center\" width=\"20%\"\u003e\n\u003ch3\u003e📱\u003c/h3\u003e\n\u003cb\u003eFeed\u003c/b\u003e\u003cbr/\u003e\n\u003csub\u003eTikTok-style swipe\u003c/sub\u003e\n\u003c/td\u003e\n\u003ctd align=\"center\" width=\"20%\"\u003e\n\u003ch3\u003e🧱\u003c/h3\u003e\n\u003cb\u003eGoon Wall\u003c/b\u003e\u003cbr/\u003e\n\u003csub\u003eMulti-video grid\u003c/sub\u003e\n\u003c/td\u003e\n\u003ctd align=\"center\" width=\"20%\"\u003e\n\u003ch3\u003e🧠\u003c/h3\u003e\n\u003cb\u003eBrainwash\u003c/b\u003e\u003cbr/\u003e\n\u003csub\u003eCaption editor\u003c/sub\u003e\n\u003c/td\u003e\n\u003ctd align=\"center\" width=\"20%\"\u003e\n\u003ch3\u003e🎵\u003c/h3\u003e\n\u003cb\u003ePMV Editor\u003c/b\u003e\u003cbr/\u003e\n\u003csub\u003eBeat-synced edits\u003c/sub\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n\u003cbr/\u003e\n\n### 🤖 AI Intelligence (3-Tier System)\n\n```\n┌─────────────────────────────────────────────────────────────┐\n│  🌐  TIER 3: Synonym → canonical-tag mapping                │\n│      • Maps free-text into Vault's porn-site tag vocab      │\n│      • Atomic tags only, deny-listed clinical/anime meta    │\n├─────────────────────────────────────────────────────────────┤\n│  ☁️  TIER 2: Venice vision LLM (qwen3-vl-235b)              │\n│      • Multi-frame scene understanding                      │\n│      • Title + description + rich-tag generation            │\n│      • Library-wide rejection-pattern soft prior            │\n├─────────────────────────────────────────────────────────────┤\n│  ⚡  TIER 1: Local ONNX (offline, instant)                  │\n│      • Multi-tagger ensemble (WD-Tagger variants + consensus)│\n│      • NSFWJS, NudeNet v3, CLIP                             │\n│      • 16 ML detector wrappers (face, pose, ReID, audio…)   │\n└─────────────────────────────────────────────────────────────┘\n```\n\n\u003cbr/\u003e\n\n### 🎨 Visual Experience\n\n| 🌈 Themes | 💫 Overlays | 🎭 Effects |\n|---|---|---|\n| Obsidian, Neon Dreams, Ember | Film Grain, CRT, Matrix Rain | Vignette, Chromatic, Glitch |\n| Velvet, Sapphire, Midnight | Bokeh, Hearts, Aurora | Thermal, Dreamy, VHS |\n| Arctic, Mint, Peach Blossom | Sparkles, Fire, Neon Drip | Pixelate, Strobe, Shake |\n| *+ Goon themes: Hypno, Latex* | *20+ total overlays* | *15+ PMV transitions* |\n\n\u003cbr/\u003e\n\n### 🎬 PMV/HMV Editor\n\nCreate professional-quality beat-synced videos:\n\n- **🎵 BPM Detection** - Auto-detect beats from any audio\n- **✂️ Smart Cuts** - 6 built-in templates (Classic, Hypno, Romantic...)\n- **🔀 16 Transitions** - Flash, Glitch, Zoom, VHS, Pixelate...\n- **📝 Beat Text** - Synced text overlays with 6 animation styles\n- **🔊 Audio Burner** - Extract audio from any video\n\n\u003cbr/\u003e\n\n### 📲 Mobile \u0026 Streaming\n\n| Feature | Description |\n|:---:|---|\n| 📺 **DLNA Streaming** | Cast to smart TVs with full queue control |\n| 📱 **Mobile Sync** | Browse \u0026 control from your phone |\n| 🔗 **QR Pairing** | Instant device connection |\n| 🎮 **Remote Control** | Playback controls from anywhere |\n\n\u003cbr/\u003e\n\n### 🏆 Gamification\n\n\u003e *Turn your sessions into achievements*\n\n- **50 Achievements** to unlock\n- **Daily Challenges** for XP rewards\n- **Personal Records** \u0026 streaks\n- **Weekly Stats** tracking\n- **Streak Protection** warnings\n\n\u003cbr/\u003e\n\n---\n\n\u003cbr/\u003e\n\n## 🛠️ Tech Stack\n\n\u003cdiv align=\"center\"\u003e\n\n| Layer | Technology |\n|:---:|:---:|\n| **Framework** | Electron 32 |\n| **Frontend** | React 19 + TypeScript + React Compiler |\n| **Styling** | Tailwind CSS |\n| **Database** | SQLite (better-sqlite3) |\n| **Media** | FFmpeg + FFprobe |\n| **AI** | ONNX Runtime + Venice vision LLM |\n| **Browse** | 27-source booru / tube / social aggregator |\n| **Downloads** | yt-dlp (bundled) |\n\n\u003c/div\u003e\n\n\u003cbr/\u003e\n\n---\n\n\u003cbr/\u003e\n\n## 📊 By the Numbers\n\n\u003cdiv align=\"center\"\u003e\n\n| | |\n|:---:|:---:|\n| **134** Backend Services | **140+** UI Components |\n| **19** Database Tables | **23** Migrations |\n| **27** Browse Sources | **16** ML Detector Wrappers |\n| **23** Services-tab cards | **7** Player overlays |\n| **58** Achievements | **20+** Visual Overlays |\n| **16** PMV Transitions | **15+** Themes |\n\n\u003c/div\u003e\n\n\u003cbr/\u003e\n\n---\n\n\u003cbr/\u003e\n\n## ⌨️ Keyboard Shortcuts\n\n| Key | Action | | Key | Action |\n|:---:|---|---|:---:|---|\n| `Space` | Play/Pause | | `L` | Like/Favorite |\n| `←` `→` | Navigate/Seek | | `B` | Bookmark |\n| `↑` `↓` | Volume/Scroll | | `D` | Downloader |\n| `F` | Fullscreen | | `Ctrl+K` | Command Palette |\n| `M` | Mute | | `Ctrl+Z` | Undo Delete |\n| `H` | Hide UI | | `Esc` | **Panic Key** |\n\n\u003cbr/\u003e\n\n---\n\n\u003cbr/\u003e\n\n## 🔒 Privacy \u0026 Security\n\n\u003ctable\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e💾\u003cbr/\u003e\u003cb\u003e100% Local\u003c/b\u003e\u003cbr/\u003e\u003csub\u003eAll data on your machine\u003c/sub\u003e\u003c/td\u003e\n\u003ctd align=\"center\"\u003e🚫\u003cbr/\u003e\u003cb\u003eNo Telemetry\u003c/b\u003e\u003cbr/\u003e\u003csub\u003eZero data collection\u003c/sub\u003e\u003c/td\u003e\n\u003ctd align=\"center\"\u003e🚨\u003cbr/\u003e\u003cb\u003ePanic Key\u003c/b\u003e\u003cbr/\u003e\u003csub\u003eInstant hide (Esc)\u003c/sub\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e👻\u003cbr/\u003e\u003cb\u003eIncognito Mode\u003c/b\u003e\u003cbr/\u003e\u003csub\u003eNo history recording\u003c/sub\u003e\u003c/td\u003e\n\u003ctd align=\"center\"\u003e🔐\u003cbr/\u003e\u003cb\u003eEncrypted Backup\u003c/b\u003e\u003cbr/\u003e\u003csub\u003eSecure data export\u003c/sub\u003e\u003c/td\u003e\n\u003ctd align=\"center\"\u003e🛡️\u003cbr/\u003e\u003cb\u003eContext Isolation\u003c/b\u003e\u003cbr/\u003e\u003csub\u003eSecure Electron config\u003c/sub\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n\u003cbr/\u003e\n\n---\n\n\u003cbr/\u003e\n\n## 📝 Recent Updates\n\n### v2.6.0 *(Latest)*\n\n**🌐 Browse Aggregator + 🧠 ML Detector Stack + 👤 Performers UI**\n\n- ✨ **Browse Aggregator** - 27 sources parallel-searched: e621, rule34, Danbooru, AIBooru, Civitai, Gelbooru, Pixiv R-18, RedGifs, PornHub, RedTube, Eporner, xnxx, Bluesky, PullPush (Reddit archive), and more\n- ✨ **Multi-select + bulk save** with floating action bar and spring animations\n- ✨ **Tag autocomplete** from Vault's canonical-tag vocabulary, with ↑↓ Tab Enter keyboard nav\n- ✨ **Recent + saved searches** dropdown with star-to-pin\n- ✨ **Source family tabs** (Booru / Tube / AI-gen / Social) narrow both the chip list and the fan-out\n- ✨ **HLS-aware lightbox** via hls.js + universal yt-dlp fallback for all tube URLs\n- ✨ **Filter chips**: rating, min-resolution (720p+/1080p+/4K), min-score, SFW-only, Vault-blacklist\n- ✨ **6 ML detectors** - YuNet face + SFace recognition + Person ReID body + MoveNet pose + NudeNet v3 + gender classifier, all folding into the AI tagging queue\n- ✨ **Performers page** - SFace face clusters, inline rename auto-applies `performer:NAME` tags\n- ✨ **Whisper.cpp transcription** (opt-in) with FTS5-indexed dialogue search\n- ✨ **JoyCaption sidecar** for high-quality VLM captioning\n- ✨ **8 new achievements** for Browse + Performers + AI usage (First Crate Dig, Browse Explorer, Face Namer, AI Pioneer, Tag Curator, Performer Dossier, Bulk Dropper, Crate Digger)\n- ✨ **XMP sidecar export** for Darktable / Lightroom / Immich interop\n- ✨ **Stash interop** (`.stash.json` import/export)\n- ✨ **Custom filename templates** + in-library duplicate badges + auto-tag `source:browse` on save\n- ✨ **Multi-tagger ensemble** - load multiple WD-style tagger ONNX models simultaneously (`wdTaggerVariants` setting); tags merged with consensus boost (+10% on 2-variant agreement, +20% on 3+)\n- ✨ **Browse UI condensed** - secondary filters collapsed into a single popover with active-count badge; double-click any source chip to mute it from \"All sources\" fan-out\n- ✨ **PullPush Reddit-archive source** - replaces the gated Reddit Data API entirely (no auth required); NSFW-subreddit-name filter + dead-image URL pattern blocklist + tile auto-hide on load failure\n- ✨ **Pixiv referer injection** - Electron `webRequest.onBeforeSendHeaders` interceptor rewrites Referer/Origin for `pximg.net` requests so Pixiv's hotlink-protected CDN serves images in the lightbox\n- ✨ **Bluesky AT Protocol auth** - app-password session token, queries the user's PDS instead of the public appview to avoid 403s\n- ✨ **xnxx playback** via `yt-dlp` universal fallback when all RapidAPI providers 403; bundled binary, HLS playback via `hls.js`\n- ✨ **11 new ML wrappers** scaffolded — InsightFace ArcFace, TransNet V2 shot detection, VideoMAE Kinetics-400 actions, X-CLIP zero-shot video, Chromaprint audio fingerprint, YAMNet 521-class events, LAION CLAP zero-shot audio, Demucs stem separation, WhisperX word-level transcripts (Python sidecar), F5-TTS voice cloning (Python sidecar), JoyTag + idolsankaku-eva02 (via the multi-tagger ensemble). Each has an in-source ACTIVATION block with download URLs and target paths.\n- ✨ **6 UI library installs** ready for future integration: `@dnd-kit/*` (reorder/merge UX), `@base-ui-components/react` (a11y primitives), `echarts` + `echarts-for-react` (big-data dashboards), `masonic` (variable-aspect virtualized grid), `photoswipe` (standard lightbox)\n\n### v2.4.0\n\n**🚀 Stability, Performance \u0026 Polish Release**\n\n- ✨ **GoonWall Stability** - Improved video slot limiting and playback recovery\n- ✨ **URL Downloader UX** - Quality selector, auto-import, toast notifications\n- ✨ **Native Notifications** - OS notifications when downloads complete\n- ✨ **Database Performance** - New indexes for faster duplicate detection and filtering\n- ✨ **Memory Optimizations** - Fixed timer/listener leaks, improved cleanup\n- ✨ **Code Quality** - Removed 935 lines of dead code, improved type safety\n- ✨ **PMV Editor Polish** - Live preview, improved BPM detection\n- ✨ **GIF Thumbnails** - Better GIF thumbnail generation with fallbacks\n\n### v2.3.0\n\n**🎬 30 Professional Video Editing \u0026 Media Management Components**\n\n- ✨ **Scene Detector** - AI-powered scene detection with frame analysis\n- ✨ **Video Chapters** - Chapter navigation with custom markers and thumbnails\n- ✨ **Color Grading** - Professional color grading with 5 cinematic presets\n- ✨ **Loop Region** - A/B loop region selector with saved loops\n- ✨ **Bookmark Manager** - Video timestamp bookmarks with notes/categories\n- ✨ **Subtitle Editor** - Full subtitle editor with SRT import/export\n- ✨ **Thumbnail Strip** - Video timeline with hover thumbnail preview\n- ✨ **Audio Visualizer** - Real-time visualization (bars, wave, circular, spectrum)\n- ✨ **PiP Controller** - Picture-in-Picture with position presets\n- ✨ **Keyframe Extractor** - Extract keyframes at configurable intervals\n- ✨ **Video Filters** - Real-time filters (vivid, warm, cool, noir, vintage, dreamy)\n- ✨ **Split Screen** - Multi-video split screen player (2-6 videos)\n- ✨ **Smart Crop** - AI-assisted cropping with aspect ratio presets\n- ✨ **Metadata Editor** - Advanced metadata editor with custom fields\n- ✨ **Playlist Sorter** - Advanced sorting with drag-reorder\n- ✨ **Watch Progress** - Continue watching tracker with progress bars\n- ✨ **Media Exporter** - Export with format conversion (mp4, webm, mkv, gif)\n- ✨ **AI Tagger** - AI-powered auto-tagging with confidence thresholds\n- ✨ **Thumbnail Selector** - Select/generate custom thumbnails from any frame\n- ✨ **Related Media** - Smart related media suggestions\n- ✨ **Media Timeline** - Timeline view by date (day/week/month)\n- ✨ **Quick Note** - Quick notes with colors, pinning, and timestamps\n- ✨ **View Mode Selector** - 7 view modes (grid, list, masonry, timeline, carousel...)\n- ✨ **Auto Playlist** - Auto-generated playlists based on behavior\n- ✨ **Media Merger** - Merge multiple videos with transitions\n- ✨ **Media Rotator** - Rotate and flip with undo history\n- ✨ **Watermark Adder** - Add text/image watermarks with 9 positions\n- ✨ **Speed Ramp** - Variable speed ramping with graph editor\n- ✨ **Media Queue** - Playback queue with shuffle and repeat modes\n- ✨ **Aspect Ratio Switcher** - Quick aspect ratio switching with zoom/pan\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003ePrevious Versions\u003c/b\u003e\u003c/summary\u003e\n\n### v2.2.0\n\n**🎯 35 New Components for Ultimate Experience**\n\n- ✨ **Command Palette** - Spotlight-style launcher (Ctrl+K)\n- ✨ **Watch History Timeline** - Visual timeline with session groupings\n- ✨ **Content Queue** - Smart queue with drag-reorder and shuffle\n- ✨ **Discovery Engine** - AI-powered suggestions that learn preferences\n- ✨ **Edge Mode** - Timer-based intensity sessions with 5 presets\n- ✨ **Immersive Mode** - Distraction-free fullscreen with gesture controls\n- ✨ **Quick Actions Panel** - Floating panel with Alt+key shortcuts\n- ✨ **Session Summary** - Post-session stats and insights\n- ✨ **Smart Playlist Builder** - Visual rule-based playlist creation\n- ✨ **Ambient Mode** - Dynamic lighting from video frame colors\n- ✨ **Video Preloader** - Smooth transitions with smart preloading\n- ✨ **Streaks \u0026 Achievements** - Gamification with 50+ achievements\n- ✨ **Gesture Controls** - Touch/swipe controls for mobile-like navigation\n- ✨ **Theater Mode Controller** - Enhanced theater mode settings\n- ✨ **Slideshow Controller** - Advanced slideshow with 8+ transitions\n- ✨ **Quick Rating** - Star rating with hover preview\n- ✨ **Playback Speed Control** - Speed selector with custom presets\n- ✨ **Media Info Overlay** - Detailed media metadata panel\n- ✨ **Search History** - Search suggestions with recent history\n- ✨ **Playlist Quick Add** - Quick add to playlists with search\n- ✨ **Tag Autocomplete** - Smart tag input with suggestions\n- ✨ **Screenshot Capture** - Capture frames with format/scale options\n- ✨ **Hotkey Help** - Full keyboard shortcut reference (press ?)\n- ✨ **Context Menu** - Right-click menus with submenus\n- ✨ **Media Preview** - Hover preview with video scrubbing\n- ✨ **Batch Actions** - Bulk operations with confirmation dialogs\n- ✨ **Import Progress** - Import queue with progress tracking\n- ✨ **Folder Watcher** - Watch folder management with status\n- ✨ **Volume Normalizer** - Audio normalization with compressor/limiter\n- ✨ **Media Comparison** - Side-by-side comparison with sync playback\n- ✨ **Duplicate Finder** - Find duplicates with hash comparison\n- ✨ **Media Stats** - Analytics dashboard with trends\n- ✨ **Quick Search** - Instant search with keyboard navigation\n- ✨ **Performer Tagger** - Actor tagging with AI suggestions\n- ✨ **Collection Manager** - Hierarchical collections with drag-drop\n\n### v2.1.7\n- Floating Labels - Draggable text anywhere on images\n- Vignette Effect - Cinematic borders with slider control\n- Beat-Synced Text - PMV text overlays synced to music\n- 9 New Transitions - VHS, Spin, Blur, Pixelate, Wipe...\n- 6 New Effects - Chromatic, Strobe, Thermal, Dreamy...\n- Home Dashboard - Today's Picks, Trending, Unwatched sections\n- Series Modal - View and play full series in order\n\n### v2.1.6\n- Audio Burner in PMV Editor\n- GoonWall auto-shuffle control\n- Climax point toggle\n\n### v2.1.5\n- Smart Playlists\n- Venice AI Captions\n- Welcome Tutorial\n- Video Frame Capture\n- Image Cropping\n- Settings Search\n\n\u003c/details\u003e\n\n\u003cbr/\u003e\n\n---\n\n\u003cbr/\u003e\n\n## 🗺️ Roadmap\n\n| Version | Features |\n|:---:|---|\n| **v2.7** | JoyTag + idolsankaku second-opinion taggers • InsightFace ArcFace face ID upgrade • TransNet V2 + VideoMAE action labels |\n| **v2.8** | WhisperX word-level timestamps • Demucs vocal isolation • LAION CLAP zero-shot audio search |\n| **v2.9** | F5-TTS voice cloning UI • Vidstack player core • dnd-kit reorder • ECharts analytics |\n| **v3.0** | Plugin system • Cloud sync • Watch parties • Multi-user library |\n\n\u003cbr/\u003e\n\n---\n\n\u003cbr/\u003e\n\n\u003cdiv align=\"center\"\u003e\n\n## 📥 Get Started\n\n\u003cbr/\u003e\n\n[![Download Latest](https://img.shields.io/badge/Download-v2.7.0-success?style=for-the-badge\u0026logo=windows)](https://github.com/Nwund/vault-project/releases/latest)\n\n\u003cbr/\u003e\n\n**Requirements:** Node.js 20+ (Node 22 recommended) • npm 10+ • Windows 10+ / macOS 11+ / Linux\n\n\u003cbr/\u003e\n\n---\n\n\u003cbr/\u003e\n\n*Built with obsession by developers who understand the mission.*\n\n\u003csub\u003e\n🔐 Vault v2.7.0 • 134 backend services • 27 Browse sources • 140+ components • 16 ML detector wrappers • 23 v2.7 Settings cards\n\u003c/sub\u003e\n\n\u003cbr/\u003e\n\u003cbr/\u003e\n\n\u003c/div\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnwund%2Fvault-project","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnwund%2Fvault-project","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnwund%2Fvault-project/lists"}