DSH Hub

anitman/dsh-plugin-video-player

dsh-plugin-video-player

UIWeb UI1 GitHub stars· updated 2026-08-19

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

dsh-plugin-video-player DSH Hub badge
[![DSH Hub](https://dshhub.dev/badge/dsh-plugin-video-player.svg)](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: Space or single-click toggles pause; M mutes; Esc or ✕ 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: F or the ⛶ button; Esc exits fullscreen first, second Esc (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 parsing mount output (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

Related plugins