Add DRM downloads, scrapers, gallery index, and UI improvements

- DRM video download pipeline with pywidevine subprocess for Widevine key acquisition
- Scraper system: forum threads, Coomer/Kemono API, and MediaLink (Fapello) scrapers
- SQLite-backed media index for instant gallery loads with startup scan
- Duplicate detection and gallery filtering/sorting
- HLS video component, log viewer, and scrape management UI
- Dockerfile updated for Python/pywidevine, docker-compose volume for CDM

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Trey t
2026-02-16 11:29:11 -06:00
parent c60de19348
commit 1e5f54f60b
28 changed files with 4736 additions and 203 deletions

View File

@@ -11,6 +11,8 @@ import downloadRouter from './download.js';
import galleryRouter from './gallery.js';
import hlsRouter from './hls.js';
import settingsRouter from './settings.js';
import scrapeRouter from './scrape.js';
import { scanMediaFiles } from './gallery.js';
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
@@ -31,6 +33,7 @@ app.use(downloadRouter);
app.use(galleryRouter);
app.use(hlsRouter);
app.use(settingsRouter);
app.use(scrapeRouter);
// Serve static client build in production
const clientDist = join(__dirname, '..', 'client', 'dist');
@@ -59,6 +62,12 @@ async function start() {
app.listen(PORT, () => {
console.log(`[server] Listening on http://localhost:${PORT}`);
// Scan filesystem and populate media index in background
setImmediate(() => {
try { scanMediaFiles(); } catch (err) {
console.error('[server] Media scan failed:', err.message);
}
});
});
// Start HTTPS server for DRM/EME support (requires secure context)