Communitygithub.com

supdub/alist-media-manager

Manage AList-mounted cloud folders, organize movie and TV libraries with verified metadata IDs, preserve matched subtitles, and audit Japanese media for missing subtitles.

alist-media-manager 是什么?

alist-media-manager is a Claude Code agent skill that manage AList-mounted cloud folders, organize movie and TV libraries with verified metadata IDs, preserve matched subtitles, and audit Japanese media for missing subtitles.

兼容平台~Claude Code~Codex CLI~Cursor
npx skills add supdub/alist-media-manager

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

Use the configured AList API; keep credentials and signed download URLs outside this shareable skill. Resolve access from ALIST_CONFIG or ~/.config/alist/access.json (JSON keys url, username, password). Workspace access may be supplied through a local ignored config. Never commit configs, tokens, raw signed URLs, or private inventories.

Use scripts/alist.py for authenticated complete listings and recursive inventories. AList filesystem API: https://alistgo.com/guide/api/fs.html. Check the installed server version; documentation may describe newer behavior. Mutating calls use Client.call; rename: /api/fs/rename {path,name}; move: /api/fs/move {src_dir,dst_dir,names}; mkdir: /api/fs/mkdir {path}. Avoid deletion unless explicitly requested.

Inventory source and destination before writes. Match the existing library naming convention and obtain metadata from authoritative TMDB/IMDb records. Do not invent IDs, infer a season from its ordinal release chunk, or force ambiguous titles into a match. Keep future announcements and empty folders distinguishable from actual video files. Mixed franchises require separating movies, TV seasons, specials, and extras by verified identity.

Create a concrete mapping and a local journal containing old/new paths, sizes, operation and verification. After a rename, inspect the actual returned name: some servers HTML-escape punctuation, and providers may reject specific characters or words. Use a verified alternative title spelling compatible with the existing convention instead of retrying a rejected name. Before a rename or move, confirm the exact source exists and destination does not collide. If a title already exists, preserve distinct editions and merge only non-conflicting content. Stop on ambiguous duplicates. Perform moves within the same mount. Quark path resolution can briefly return object not found after a successful rename/move. Refresh parent listings and retry reads with bounded backoff before judging failure; do not repeat the mutation. After each operation refresh both paths, verify source disappearance and destination contents/sizes. An API success can mean an asynchronous task: inspect task status and filesystem state before proceeding. After a timeout inspect state before retrying; never blindly replay mutations.

Subtitle matching must follow the exact video basename, with optional language/forced/SDH suffixes. Preserve language tags, .idx/.sub pairs, fonts, attachments and alternate subtitle versions. Map each episode individually; do not rename by array order. Move basename-matched subtitles from dedicated subtitle subfolders beside the videos when needed for player discovery; preserve font archives. Inspect subtitle contents when language or episode identity is uncertain. Use scripts/check_subtitle.py --config CONFIG PATH to check ASS/SSA/SRT structure and cue timestamps, or declared subtitle tracks in MKS. A valid format and timestamps do not establish dialogue coverage or synchronization. Do not claim synchronization from filenames alone.

Recognize legacy video formats such as RMVB and external Matroska subtitle files (.mks). Executable/SFX archives and torrent placeholders are not playable videos; record them separately. For the final audit recursively enumerate every movie and TV video, including specials and alternate editions. Establish audio language using media stream metadata where accessible, otherwise report title-origin inference separately. Count matched external subtitles and embedded subtitle streams. scripts/probe_media.py (Python standard library; MP4 and Matroska) inspects streams using bounded HTTP ranges; call it with --config CONFIG PATH. It reads declared container tracks without decoding media packets and avoids large open-ended proxy reads. Other containers need a suitable media probe. Container references: https://www.matroska.org/technical/elements.html and https://mp4ra.org/registered-types/handlers. A byte-budget error or read failure means unverified; do not infer subtitle absence from it. Lack of sidecar files alone does not establish missing subtitles: inspect container streams, and consider burned-in subtitles through frame sampling or reliable release evidence. When sampling after a seek, decode forward to the requested playback timestamp; the first keyframe can fall between subtitle lines. Sample several dialogue times at readable resolution, keep letterboxed images aligned with the inspected crop, and manually review OCR evidence. OCR failures or three caption-free frames cannot prove whole-video absence. Treat inaccessible files, untagged language tracks, and burn-in uncertainty as unknown, not confirmed missing. Report confirmed missing files by title/season/episode, plus unresolved cases and coverage counts. Keep private reports local and summarize actionable results in chat.

相关技能