[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-82163":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":9,"language":10,"languages":9,"totalLinesOfCode":9,"stars":11,"forks":12,"watchers":12,"openIssues":13,"contributorsCount":14,"subscribersCount":14,"size":14,"stars1d":12,"stars7d":15,"stars30d":16,"stars90d":14,"forks30d":14,"starsTrendScore":17,"compositeScore":18,"rankGlobal":9,"rankLanguage":9,"license":9,"archived":19,"fork":19,"defaultBranch":20,"hasWiki":21,"hasPages":19,"topics":22,"createdAt":9,"pushedAt":9,"updatedAt":23,"readmeContent":24,"aiSummary":25,"trendingCount":14,"starSnapshotCount":14,"syncStatus":13,"lastSyncTime":26,"discoverSource":27},82163,"exFAT-Ripper","kerrdec97\u002FexFAT-Ripper","kerrdec97","PS5 exFAT Library Scraper",null,"Python",47,1,2,0,10,18,3,46.7,false,"main",true,[],"2026-06-12 04:01:37","# exFAT Ripper v2.7\n\nA premium Windows desktop launcher for the PS5 exFAT library. Browse cover art, PPSA codes, titles, versions and download links — and scrape or update the library in the background while you browse.\n\nBuilt with pywebview (Python backend + HTML\u002FCSS\u002FJS frontend). Dark gaming-launcher aesthetic: custom frameless titlebar, animated sidebar, cover-art grid, cinematic detail panel.\n\n---\n\n## What's new in v2.7\n\nThis is a full rewrite of the original scraper UI. Everything below is new since the first release.\n\n### Interface\n- **Premium launcher UI** — DM Sans + JetBrains Mono fonts, deep-space dark theme, smooth hover animations, card glow effects\n- **Wider detail panel** (440px) with cinematic 172px hero image, gradient overlay, game title at the bottom in 900-weight\n- **Windows 11 window controls** — monochrome `— □ ✕` icons, close button turns red on hover; macOS-style dots removed\n- **Tab-pill row** — `All | Native | Backports | DLCs | Updates` with live counts, plus Import \u002F Export \u002F Backup strip buttons\n- **Library Health widget** — animated SVG ring gauge, percentage score (Excellent \u002F Good \u002F Fair), ✔\u002F⚠\u002F✖ checklist for games, covers, missing metadata, broken links, verified count\n- **Storage widget** — ring gauge showing TB used\u002Ffree\n- **Sort cycling** — Title A–Z \u002F Z–A \u002F Top Rated \u002F Largest First \u002F Recently Added\n- **Grid + list view toggle**\n- **Firmware and extra filter dropdowns**\n\n### Scraping\n- **\"Update Library\" split button** — main button runs a smart update (new games only); dropdown expands to: Update Library \u002F Fetch Missing Metadata \u002F Repair Missing Covers \u002F Rebuild Cover Cache \u002F Full Re-Scrape \u002F Repair Database\n- **Specific status messages** per mode — \"Checking for new games…\", \"Fetching missing metadata…\", etc. instead of generic \"Loading…\"\n- **First-time onboarding modal** — fires on first launch with an empty library, explains the scrape phases (Downloading covers → Fetching metadata → Building local cache → Verifying files), with Start \u002F Not Now buttons\n- **Live progress bar** in status bar showing label, fill, %, Workers, Speed, ETA\n\n### Game cards\n- Fixed `aspect-ratio: 3\u002F4`, `object-fit: cover` — no more stretching\n- **FW badge colour coding** — green = native\u002Fplayable, purple = backport, cyan = FW version, amber = DLC\n- Hover: `translateY(-3px)` + purple glow shadow\n- **Hover quick-actions overlay** — favourite \u002F open folder \u002F re-scrape \u002F fetch metadata without opening the detail panel\n- ⚠ \"No metadata\" indicator on cards missing enrichment data\n- Favourite star top-right (persisted in localStorage)\n\n### Detail panel\n- **Scores row** — Metacritic \u002F OpenCritic \u002F HowLongToBeat from enrichment\n- **Rich 2-col metadata grid** — Developer, Publisher, Genres, Play Modes, Languages, Release Date with icons\n- **Collapsible description** — 4–5 lines shown, fade at bottom, \"Read More ↓ \u002F Show Less ↑\" toggle with smooth animation\n- **Missing Metadata banner** — amber warning with Retry and Manual Match buttons; separate red warning if no API keys are configured with \"Open Settings\" link\n- **Action row** — Verify Files + More dropdown (Open Folder \u002F Fetch Metadata \u002F Copy Game Info \u002F Re-Scrape)\n- **Re-Scrape** moved into the More dropdown — cleaner panel\n\n### Files tab — complete rebuild\n- **Version-grouped download cards** — builds are grouped by version number (e.g. `v01.006`), sorted newest first\n- **Older versions collapse by default** with chevron toggle and \"Older Version\" tag\n- **Never shows raw numbers** (`1 2`) — the original bug where hosts with 2–3 links rendered as bare index numbers is fixed\n- **Host cards** with emoji icons (📦 Akirabox, ⚓ VikingFile, 💾 Datanodes, 🔥 MediaFire, etc.) and pretty-printed names\n- Multi-part hosts show `Part 1 \u002F Part 2 \u002F …` rows; multi-mirror hosts show `Mirror 1 \u002F Mirror 2 \u002F …`\n- Mirror\u002Fpart count badge: `Akirabox (2 mirrors)` \u002F `Datanodes (3 parts)`\n- Open + Copy buttons per link; Open All + Copy All for multi-link hosts\n- BACKPORT \u002F DLC \u002F UPDATE \u002F FIX each get their own colour-coded chip, never mixed into version groups\n- Null\u002Fempty links silently filtered\n\n### Screenshots\n- **Fullscreen gallery** — click any screenshot thumbnail to open\n- Keyboard navigation (← → Esc), arrow buttons, background blur\n- Thumbnail strip at the bottom; click to jump\n- Zoom on click\n- Preloads adjacent images\n\n### Metadata enrichment\n- **RAWG → IGDB → Steam fallback chain** with confidence scoring\n- Enrichment data stored in `game[\"enrichment\"]` sub-dict — scraped fields (PPSA, version, firmware, credits, links) are never overwritten\n- **API key warning** — reactive; disappears the moment you type a key in Settings (no save required), re-checks on every navigation back to the library\n- **Fix All Missing Metadata banner** — appears at the top of the Missing Metadata view with a one-click \"Fetch All Missing Metadata\" button and count of affected games\n\n### Settings page\n- RAWG API key, IGDB Client ID + Token\n- Cover cache controls (download on scrape, prefer cached, custom folder, repair, rebuild, clear)\n- Metadata enrichment toggles (auto-enrich, offline mode, enrich all now)\n- Database repair and update scrape\n\n### Credits renderer — fixed\n- `{\"files\":\"SiESPTA\",\"backport\":\"BestPig\",\"dlc\":\"\"}` objects now render as `Files: SiESPTA · Backport: BestPig`\n- Handles string, array, array-of-objects (with role\u002Fname fields), and plain objects\n- Empty fields silently dropped — no more `[object Object]` or raw JSON dumps\n\n### Close \u002F support modal\n- Every window-close attempt shows a lightweight support overlay (Ko-fi link + Close App)\n- Blurred background, fade-in animation\n\n### Bug fixes\n- **App hang on launch** (v2.6 regression) — `saveSettings` had a mismatched paren\u002Fbrace that caused a JS parse error, making the entire script fail silently on startup. Fixed and a full duplicate-function audit run.\n- **Duplicate `startScrape` definition** — the stale single-line version was never removed when the multi-line version was added. Removed.\n- JS brace balance verified: 427 opens \u002F 427 closes, zero duplicate function names.\n\n---\n\n## Metadata API keys\n\nMetadata (descriptions, ratings, genres, Metacritic, screenshots) comes from external APIs. All are free tier.\n\n| Provider | Free limit | Get key |\n|---|---|---|\n| RAWG | 20,000 req\u002Fmonth | [rawg.io\u002Fapidocs](https:\u002F\u002Frawg.io\u002Fapidocs) |\n| IGDB | Unlimited (Twitch auth) | [api.igdb.com](https:\u002F\u002Fapi.igdb.com) |\n\nPaste keys into **Settings → API Keys**. The app falls back RAWG → IGDB → Steam (no key needed for Steam).\n\n---\n\n## Building the .exe\n\nYou need **Python 3.10+** (tick \"Add to PATH\" in the installer).\n\n```\nbuild_exe.bat\n```\n\nInstalls dependencies, downloads the Chromium engine, builds with PyInstaller. Output:\n\n```\ndist\\PS5 exFAT Library.exe\n```\n\nMove\u002Fcopy the `.exe` anywhere — it keeps its `exfat_games.json` next to itself.\n\n## Running without building\n\n```\npython -m pip install -r requirements.txt\npython -m playwright install chromium\nrun_app.bat\n```\n\n---\n\n## How it works\n\nScraping is split into two phases:\n\n**Phase 1 — Page walk** (~1–2 min, once): reads every game's cover, title, PPSA, version, badges, and captures each download button's *encrypted* link. Future updates only walk pages you haven't seen.\n\n**Phase 2 — Link unlock** (instant, on demand): locked links are decrypted offline the moment you open a game. No browser, no waiting.\n\nThe old approach opened a browser tab per link (~30–40 min). This app never does that.\n\n---\n\n## Browser requirement\n\nThe exFAT source sits behind a password gate and Cloudflare\u002FGitHub Pages JavaScript — a real browser engine is needed:\n\n- `build_exe.bat` bundles a private Chromium for Playwright automatically\n- If you run **Brave\u002FChrome\u002FEdge with remote debugging on port 9222**, the app attaches to that instead — useful if a CAPTCHA appears\n\nAfter scraping, everything is offline.\n\n---\n\n## Files\n\n```\napp.py                        backend (pywebview + Python API)\ncore\u002Fscraper.py               exFAT fast page-walk\ncore\u002Fdecrypt.py               offline AES-GCM link-lock decryption\ncore\u002Fcover_cache.py           local cover image caching\ncore\u002Fmetadata.py              RAWG \u002F IGDB \u002F Steam enrichment\ncore\u002Fsettings.py              settings persistence\ncore\u002Fdlps_scraper.py          dlpsgame scraping\ncore\u002Fdlpsgame_ps5_scraper.py  dlpsgame scraper\ncore\u002Fdlps_links.py            dlpsgame link grouping\nui\u002Findex.html                 full launcher UI (HTML\u002FCSS\u002FJS)\nrequirements.txt              Python dependencies\nexFAT_Ripper.spec             PyInstaller build recipe\nruntime_hook_playwright.py    points Playwright at bundled Chromium\nbuild_exe.bat                 one-click build\nrun_app.bat                   run without building\n```\n\n---\n\n## Notes\n\n- First launch of an unsigned `.exe` may show a Windows SmartScreen warning — \"More info\" → \"Run anyway\". Normal for unsigned apps.\n- The packaged `.exe` is large (bundled Chromium + Python runtime). Expected.\n- If scraping fails with \"grid never appeared\" the site is showing a CAPTCHA. Open the site in Brave\u002FChrome, solve it, leave it open, scrape again.\n- This app scrapes a site hosting pirated content. Make sure your use complies with local law.\n\n---\n\n## Credits\n\nSpecial thanks to **pippo26442999** — creator and maintainer of the PS5 exFAT library. Without pippo's work there would be nothing to scrape.\n\nBuilt by [kerrdec97](https:\u002F\u002Fgithub.com\u002Fkerrdec97) · [Discord](https:\u002F\u002Fdiscord.gg\u002FqFJw7pcpX) · [Ko-fi](https:\u002F\u002Fko-fi.com\u002Fdeckerr9746220)\n","exFAT Ripper 是一个专为 PS5 exFAT 库设计的 Windows 桌面启动器。其核心功能包括浏览封面、PPSA 代码、游戏标题、版本信息及下载链接，并支持在后台自动更新或抓取库数据。该项目采用 Python 语言开发，前端界面基于 HTML\u002FCSS\u002FJS 构建，具有现代化的无边框标题栏、动态侧边栏和封面网格等特色设计。它特别适合那些希望以更直观、美观的方式管理和查看自己 PS5 游戏库的用户使用。此外，该工具还提供了丰富的排序选项、多种视图切换以及详细的存储和库健康状态监测等功能，进一步增强了用户体验。","2026-06-11 04:07:55","CREATED_QUERY"]