dsh-inline-media-viewer-plugin
开发工具 活跃维护

dsh-inline-media-viewer-plugin

Wisdoverse/dsh-inline-media-viewer-plugin

轻量级内联媒体预览插件,支持图片、视频、音频文件直接在当前页面预览,兼容工作区安全本地文件、网络直链媒体,可选配置ComfyUI代理,无需跳转第三方页面便快速查看媒体内容。

0
Stars 标星
0
Forks 分支
0
Watchers 关注
0
Open Issues
JavaScript
主要语言
MIT
开源协议
52 KB
仓库大小
20 天前
最后推送
一键安装扩展 / 插件指令
dsh plugin --profile web add github:Wisdoverse/dsh-inline-media-viewer-plugin
git clone https://github.com/Wisdoverse/dsh-inline-media-viewer-plugin.git
git clone git@github.com:Wisdoverse/dsh-inline-media-viewer-plugin.git
README.md main

dsh-inline-media-viewer

Inline image, video, and audio previews for DeepSeek Harness Web

Latest tag License Top language Optional ComfyUI

English · 简体中文

Turn media paths and URLs mentioned in a DSH conversation into secure inline
previews—without copying them out of the chat log.

https://…/view?filename=frame.png  →  <img>
exports/demo.mp4                   →  <video controls>
audio/sound.mp3                    →  <audio controls>

Contents

Features

Feature Description
Inline rendering Displays images, videos, and audio directly below the chat turn that mentions them.
Workspace-safe reads Resolves local paths with realpath and rejects traversal, out-of-workspace paths, and symlink escapes.
Optional ComfyUI proxy Fetches recognized ComfyUI media URLs server-side from the configured origin, including for remote users and HTTPS pages.
Bounded transfers Limits each file or response to 48 MiB and remote requests to 20 seconds.
User controls Provides auto-render, per-turn item limit, media height, and optional ComfyUI origin settings.

[!NOTE]
ComfyUI is not required. Workspace files and regular HTTP(S) media URLs work
when ComfyUI is not installed or running; its proxy is activated only for
recognized ComfyUI URLs.

Supported media

Type Extensions
Images png, jpg, jpeg, webp, gif, avif, bmp, svg
Video mp4, webm, mov, m4v, mkv, avi, ogv
Audio mp3, wav, m4a, aac, ogg, oga, flac, opus

Installation

From npm

Install and activate the bundle in your Web profile:

dsh plugin --profile web add @wisdoverse/dsh-inline-media-viewer

Restart the Web profile after installation.

From source

  1. Clone the plugin into a location available to your Web profile:

    git clone https://github.com/Wisdoverse/dsh-inline-media-viewer-plugin.git \
     /path/to/local-plugins/dsh-inline-media-viewer
  2. Add the bundle to profiles/web/package.json:

    {
     "dependencies": {
       "@wisdoverse/dsh-inline-media-viewer": "link:/path/to/local-plugins/dsh-inline-media-viewer"
     },
     "dsh": {
       "profile": {
         "bundles": ["…", "@wisdoverse/dsh-inline-media-viewer"]
       }
     }
    }
  3. Rebuild or restart the Web profile.

The plugin mounts its host RPC channel, client projection, and settings section
through cordis.patch.yml.

Configuration

Open Settings → 媒体预览 / Media preview.

The navigation label and all setting copy follow DSH's active UI language and
switch live between English and Chinese.

Setting Default Allowed values
Auto-render detected media On On / off
Maximum items per turn 12 130
Maximum media height 380 px 1601200 px
ComfyUI origin (optional) Empty http(s)://host[:port]

Settings are stored in the DSH settings document. Writes are available only on
loopback connections; remote browsers can read settings but cannot persist
changes.

ComfyUI origin

  • Skip this setting entirely if you do not use ComfyUI.
  • Leave the field empty to use http://127.0.0.1:8188.
  • Accepted forms are http://host[:port], https://host[:port], and bare
    host[:port] (http is assumed).
  • The default port is 8188 for HTTP and 443 for HTTPS.
  • Credentials, paths, query strings, and fragments are rejected.
  • The origin must be reachable from the DSH host process. For a containerized
    host, use the address visible from inside the container.

Local aliases (127.0.0.1:8188 and localhost:8188) and the configured origin
are recognized as ComfyUI sources. A non-empty invalid address fails explicitly
instead of silently falling back to another target.

Security

The plugin is designed as a local trust helper, not a general-purpose file or
network proxy:

  • Local reads are confined to the active session's workspace and known media
    extensions.
  • Remote reads can target only the configured ComfyUI origin; redirects are
    refused.
  • Local files and remote responses are capped at 48 MiB.
  • Settings writes are restricted to loopback connections.
  • The browser receives media as data: URLs rather than filesystem paths.

See SECURITY.md for the complete trust model and known
limitations.

Development

Commands

Command Purpose
node test.mjs Run the dependency-free unit tests directly.
npm test Run the same unit test suite through npm.
npm run lint Syntax-check the host modules and test file.

Project structure

Path Responsibility
index.js Host RPC channel, ComfyUI proxy, and settings registration.
lib.js Pure, dependency-free helpers.
client/client.js Turn projection, media renderer, and settings UI.
cordis.patch.yml Bundle mounting and integration points.
test.mjs Unit tests for the pure helpers.

The running Web profile serves a bundled copy. Rebuild or restart it after
changing the source files.

License

Released under the MIT License.