Introduction

In usage scenarios of DeepSeek Harness (DSH), users often need to view chat content while browsing or previewing video clips on a Stash server. The traditional approach usually requires opening a new tab, which interrupts the current workflow. dsh-video-player provides a PiP (Picture-in-Picture)–like floating window, mounting the video player on top of the DSH Web UI so that videos can be viewed without interrupting operations.

What Is This

This is a DSH plugin maintained by IP050. It allows users to run a floating, draggable, and resizable video player within the web interface. This player is primarily used for playing MP4 clips from Stash-style scene servers, and also supports YouTube, Twitch, Jellyfin, or custom links.

Core Features

  1. Window Operations: Supports dragging the title bar to move the window, and dragging the bottom-right corner to resize it in real time (minimum size: 200×140). The window is built using a native <video> tag and includes full playback controls.
  2. Stash Scene Navigation: Provides ◀ and ▶ buttons for stepping between scenes, with support for direct jumps via a numeric input field. It defaults to connecting to http://host.docker.internal:9999 and uses the /scene/{no}/stream path.
  3. Multi-Source Support: Includes a built-in channel dropdown menu supporting Stash, Custom, YouTube, Twitch, and Jellyfin.
  4. Link Auto-Detection: Pasting a YouTube/Twitch/Jellyfin link or a direct file link into the link field automatically detects it and switches to the appropriate channel for playback, without incorrectly appending a /scene/N/stream suffix.
  5. Configuration Panel: Click the gear icon (⚙) to configure window width, height, opacity, and the Stash base URL.
  6. Persistence and Coexistence: Window position, size, and opacity are saved to localStorage and persist after a refresh. The plugin coexists with DSH’s pet and theme features, acting as an independent fixed overlay.

Installation and Enabling

  1. Install the plugin:
    dsh plugin --profile web add /path/to/dsh-video-player
Note: If using the `link:` installation method (i.e., installing from a local directory), you must first establish an import bridge; otherwise, imports in the main module will fail to resolve. Create symbolic links:
    mkdir -p /path/to/dsh-video-player/node_modules/@deepseek-ai
    ln -s ~/.dsh/profiles/node_modules/@deepseek-ai/dsh-settings /path/to/dsh-video-player/node_modules/@deepseek-ai/dsh-settings
    ln -s ~/.dsh/profiles/web/node_modules/schemastery /path/to/dsh-video-player/node_modules/schemasty
  1. Restart the Web Profile:
    sh ~/.dsh/dsh-guard/restart-web.sh
Changes take effect upon startup.

Typical Usage

  • Move and Resize: Hold the title bar to drag the window, or drag the bottom-right corner to resize it.
  • Browse Scenes: Locate the target clip on your Stash server, then use the ◀ / ▶ buttons on the window to navigate, or enter a number in the input field and press Enter.
  • Play External Links: Directly paste a YouTube or Twitch link into the link field and click Play.

Notes

  • Module Export Requirements: This plugin has specific module export requirements. The host module must use named exports (export function apply, export const inject, export const name) and must not use export default; otherwise, the DSH loader may discard the inject configuration, causing startup to fail.
  • Client Independence: The client module (lib/client.js) should not declare an inject service list (it should be set to []); otherwise, it may enter a suspended state.
  • Primary Source: Stash is the primary data source for this plugin. Other sources (such as YouTube) operate in best-effort mode.

Conclusion

This plugin addresses the need for video viewing during multitasking for DSH users. The project currently has 1 star on GitHub. For more details or to contribute, visit the project homepage: GitHub | Directory Page.