anitman/dsh-plugin-video-player
dsh-plugin-video-player
dsh-plugin-video-player is a community DeepSeek Harness plugin. Read the repository README before installing.
Install
npx @deepseek-ai/dsh plugin --profile web add "github:anitman/dsh-plugin-video-player#main"Restart `dsh web` after install. Bundle APIs can change during the developer preview.
README badge
[](https://dshhub.dev/plugins/dsh-plugin-video-player)Paste this into your README. The star count updates with every catalog sync.
From the README
Excerpt from anitman/dsh-plugin-video-player, cleaned of badges and images.
<a href="#english">English</a> | <a href="#%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87">简体中文</a>
<br>DSH Video Player / DSH 刷视频
<b>DSH web GUI client plugin: TikTok-style vertical video feed in a floating window.</b><br>
<b>DSH web GUI 客户端插件:浮动窗口里的抖音式竖屏刷视频(窗口随视频自适应 + SMB NAS)。</b>
English
A client plugin for the DSH web GUI: adds a "video" button at the bottom of the sidebar. Clicking it opens a floating window where you point at a folder (local or SMB-mounted), press "play this folder", and swipe through its videos TikTok-style — arrow keys, mouse wheel, or drag.
Features
- Directory browsing: enter an absolute path (defaults to the current session's working directory) — lists subdirectories plus all videos inside (recursive, depth 8 / 2000-file cap); "▶ Play this folder" starts the feed;
- TikTok-style feed: full-screen scroll-snap + depth animation (current video scaled up, neighbors shrunk and dimmed); a finished video auto-advances to the next, and an "all done" card appears at the end;
- Switching:
↑/↓keys, mouse wheel, or drag on the video (1:1 tracking; releases dock to the nearest video; paused while dragging, resumes on release); - Seeking:
←/→±5 seconds with a ⏩/⏪ flash; the bottom progress bar is click-to-seek; - Playback:
Spaceor single-click toggles pause;Mmutes;Escor ✕ closes; auto-play blocked by the browser degrades to muted with an "unmute" hint; - Aspect-ratio auto-fit: the window fits the current video's ratio at ¼ of the native size (240 px floor, viewport-clamped); switching between portrait/landscape re-fits live; manual resizing turns auto-fit off;
- Auto-hide UI: mouse leaving the window fades out the title bar, resize handle and top/bottom info bars — a pure video window (restored on mouse enter; the cursor hides too);
- Resizable via the bottom-right ⋱ handle (min 240×240); title bar is draggable — position + size + auto-fit state are remembered in
sessionStorage; double-click the title bar to reset position and re-enable auto-fit; - Fullscreen:
For the ⛶ button;Escexits fullscreen first, secondEsc(or ✕) closes the window; - SMB NAS: with the share mounted on the dsh host, accept the mount-point path,
smb://host/share/sub, or\\host\share\sub— the host resolves it to the local mount by parsingmountoutput (Chinese share names in raw or percent-encoded form all match); - Range streaming via
/video-player/stream(HTTP 206) — seeking sends ranged requests, never a full-file download; - Online videos (yt-dlp): paste a yt-dlp-supported video / playlist / uploader URL into the same address bar (bilibili, YouTube, …) — the list is fetched via
--flat-playlist(in-memory, 30 min); single-file progressive streams are proxied by the host (browser UA + Referer + Cookie, Range passed through); DASH/HLS segment streams (all bilibili) are auto-downloaded and merged to a local mp4 (≤1080p, needs ffmpeg) and then served as a local Range stream — each video downloads once, replays are instant; - Generic page fallback (no per-site code): when yt-dlp cannot extract a list at all, the host fetches the page itself and scans the HTML for direct media links (tag attributes, inline JSON, JSON-LD — escaped or not), normalizes vendor URL quirks (trailing slashes, prefers signed/
?token=variants over bare duplicates) and lists whatever it finds for you to pick — covers "plain" sites with no yt-dlp extractor; - **bi
…

