- Active video loads with priority; next video preloads only after the
active one has 12s of forward buffer or is buffered to the end
- Add high/low watermark hysteresis (12s grant / 4s revoke) so the
preload grant no longer thrashes around the threshold, discarding
already-preloaded data
- Treat buffered-to-end as healthy to avoid revoking preload near the
end of short clips
- Mark sources as cacheable on first canplay and keep src bound for
cached adjacent slides in both directions, so swiping back (and
forward again) reuses the browser buffer instead of reloading
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Add Unicom cloud drive support for source-file deletion and crawler uploads.
- Implement source-file removal for Unicom cloud drive so deleting videos can also remove the original cloud-drive file when requested.
- Resolve Unicom cloud drive source identifiers across file FID, object ID, directory ID, rename, and delete flows.
- Add upload support for Spider91 crawler imports targeting Unicom cloud drive storage.
- Add Unicom cloud drive QR login backend APIs, frontend form support, and tests.
- Extend drive capability metadata, scanner behavior, proxy handling, preview handling, and migration coverage for cloud-drive source operations.
- Rename Chinese display labels from 联通沃盘 to 联通网盘 and from 123 云盘 to 123网盘 while keeping the root README aligned with origin/main.
- Add referrer-policy coverage for 302 video playback and update related frontend playback tests.
Updated the script crawler section to clarify that the project supports importing custom scripts with specific guidelines, and removed the mention of built-in crawlers.
Handle already-migrated crawler assets by binding local script crawler rows to equivalent files that already exist on the configured target drive. This keeps thumbnail, preview, and fingerprint readiness stable while removing local crawler videos once an equivalent target object is available.
Harden PikPak uploads by retrying failed upload sessions, requesting fresh resumable upload metadata between attempts, and using CNAME-style OSS requests for PikPak upload endpoints so the SDK does not generate invalid bucket-prefixed hosts such as vip-lixian-07.upload-a10b.mypikpak.com.
Add focused tests for duplicate target binding, retrying failed PikPak OSS uploads with a fresh session, and preserving the expected PikPak upload endpoint URL shape.
- Count crawler assets by crawler source ID prefix after cloud migration
- Add crawler API totals for cumulative, local, and migrated videos
- Let crawler thumbnail and preview readiness inherit equivalent canonical videos
- Show cumulative crawl data in crawler management cards
- Remove low-value expanded crawler metadata fields from the card body
- Move return-to-site into the main admin navigation with grouped sections
- Rename the content admin group to management and adjust footer icon sizing
- Update backend and frontend tests for crawler/admin behavior
Redesign crawler management around imported Python scripts instead of built-in crawler storage. Crawler scripts now declare CRAWLER_NAME, imports validate metadata, crawler IDs are generated internally, and deleted crawler scripts are detached without deleting already imported videos.
Add backend support for file and URL script imports, dry-run testing, metadata parsing, safer job paths, original filename preservation, and crawler listing that ignores detached script records. Remove the legacy built-in Spider91 script path flow and hidden Python/config JSON fields from the crawler API.
Rework the admin crawler page into an independent crawler console with script import, dry-run testing, status metrics, spider iconography, and simplified controls. Update docs, examples, installer checks, Docker/release packaging, and tests for the new protocol.
- add generic scriptcrawler backend runner using the crawler.v1 JSONL protocol
- support crawler script upload and HTTP(S) URL import from the admin crawler page
- simplify the user-facing crawler contract to title, media_url, optional thumbnail_url and optional source_id
- convert Spider91 into a normal script crawler and reject new Spider91 storage-drive configs
- keep legacy Spider91 storage rows visible only for cleanup/deletion
- add crawler protocol docs, example script, admin UI, tests and migration coverage
Add ArtPlayer/HLS playback, resume prompts, mobile gestures, orientation toggle, and theme-aware controls. Hide author metadata from video detail headers.
Add per-drive and global admin controls to stop scan, preview, thumbnail, and fingerprint work.
Keep stopped pending generation resumable, wire cancellation through workers and nightly runs, and refine mobile drive-management UI/history behavior.
- Split DrivesPage.tsx (1821→594 lines) into modular components under src/admin/drive/
- Add Escape key to close any modal dialog
- Pause drive list polling when browser tab is hidden (Page Visibility API)
- Remove duplicate formatBytes from VideosPage, unify to storageFormat.ts
- Batch delete (TagsPage) and batch regen (VideosPage) now use Promise.allSettled for concurrency
- Add mobile bottom sheet for logout and check-update (previously hidden on <768px)
- Update adminDriveForm tests to cover extracted component files