Preface

DeepSeek Harness (dsh) packages models, tools, conversations, and interfaces as pluggable capabilities, as described in the official repository as “everything is a plugin”. When agents work locally, they often write screenshot paths, generated images, and exported images as disk paths: Windows drive letters, UNC shares, POSIX absolute paths, or ![](local path) in Markdown. The web interface treats these contents as plain text or links by default, and users can only see a string of paths in the conversation without seeing the images themselves.

What dsh-inline-images does is very specific: it scans for locally existing image paths in assistant replies, rewrites them into loopback URLs that are same-origin with the page, and hands them over to the built-in Markdown renderer of the product to embed the images directly into the message body. This article is organized after cross-checking with the community plugin directory page, GitHub repository README, and source code. Note: DeepSeek Harness is open-sourced by DeepSeek AI; deepseek-harness-plugin.com is an independent community directory and has no official affiliation with DeepSeek / HyperMind, and should not be treated as an official app store.

What It Is

dsh-inline-images is a UI enhancement plugin maintained by GitHub user 3403473060, with the repository address at 3403473060/dsh-inline-images, licensed under MIT. The directory page was listed on 2026-08-14; the versions in the repository’s package.json and dsh.plugin.json are both 1.0.0. As of 2026-08-18, both the directory page and the GitHub star count are 2. The repository has the topics deepseek-harness and dsh-plugin.

The problem it solves can be stated in one sentence: when a local image path appears in an assistant’s reply, directly render the image in the web conversation body instead of just showing the link or path text. The dsh.plugin.json marks the client platform as web, meaning it runs on the web interface, not a terminal TUI plugin.

Core Features

The capabilities listed in the README can be matched with src/index.ts and src/client.ts.

Inline Rendering in Message Body

The plugin wraps llm/stream on the host side, and scans assistant replies when the text block ends. Recognizable path formats include:
- Windows drive letter paths, such as C:\screenshots\a.png
- UNC paths
- POSIX absolute paths, such as /tmp/out.webp
- Markdown image or link syntax ![](local path)
- Paths wrapped in backticks

After scanning candidate paths, it will use the file system to confirm that the file exists and is a regular file, then replace the original interval with:

![](http://127.0.0.1:<port>/plugins/dsh-inline-images/image?t=<token>&p=<path>)

<port> uses the current web service port; <token> is randomly generated each time the plugin is activated. The image bytes are read and returned in real time by the webServer route on the host, and the URL is same-origin with the page, which the README states can avoid CSP and mixed content issues. The rewritten content is still plain text Markdown URLs, and the README specifically notes that plain-text model adapters will not reject them due to embedded image blocks.

There are also clear boundaries in the source code: addresses starting with https:, data:, file:, mailto: are skipped directly, so remote image links will not be rewritten; paths must have supported extensions and start with a drive letter, UNC, or /, and relative paths will not be processed.

Supported Formats

Consistent with the directory page and README, there are 9 types in total: png, jpg, jpeg, webp, gif, svg, avif, bmp, ico. The host sets the Content-Type based on the extension and writes the file bytes back to the response.

There is a read volume limit: the default maximum is 20MB in the source code; if an attachment service is attached to the current process, it will follow the maxImageBytes of the attachment service. If the limit is exceeded or the read fails, this route returns 404, and the conversation itself will not be interrupted.

Click-to-Zoom Lightbox

The client registers a lightbox in shell.overlay. Clicking on an image rendered by this plugin in the body (whose src contains /plugins/dsh-inline-images/image) will open a full-size view; you can exit by clicking the background, clicking “Close (Esc)”, or pressing the Esc key. Other images will not be taken over by this click logic.

Adjustable Display Size

In the web interface, open “Settings → Inline Images” to correct the maximum width and height of inline images in the conversation. The allowed range is 64–2400 pixels, with a default of 640×420. The values are written to the credential store under the keys INLINE_IMAGE_MAX_WIDTH and INLINE_IMAGE_MAX_HEIGHT. After saving, the client will inject CSS max-width / max-height into img elements matching the above loopback URLs.

Quiet Degradation

When the path does not exist, is not a regular file, or the path fragment looks like a placeholder (the source code skips fragments like “path”, “example”, “placeholder”, “local path”, “some”, “xx”, “xxx”), the plugin will silently skip the rewrite, keep the original text, and will not affect the conversation. If the llm/stream request carries a purpose field, the wrapper will directly pass through without modification.

Installation and Activation

You must have a running DeepSeek Harness first. The official repository’s web startup methods are:

npx @deepseek-ai/dsh web

Or start from source code:

git clone https://github.com/deepseek-ai/deepseek-harness.git
cd deepseek-harness
pnpm install
pnpm run build
pnpm dsh web

The default web UI address is http://127.0.0.1:3080.

The installation command given on the directory page is as follows, run it in the DeepSeek Harness terminal (do not manually concatenate the repository name):

dsh plugin add github:3403473060/dsh-inline-images

For reproducible installations, the directory page recommends pinning a commit at the end of the repository. The latest commit on the current main branch is 79f8ba778441c86738dedba574f5911fd2b5b2be (2026-08-14), which can be written as:

dsh plugin add github:3403473060/dsh-inline-images#79f8ba778441c86738dedba574f5911fd2b5b2be

If you are developing from a local clone, the build and installation steps from the README are:

pnpm install
pnpm run build
dsh plugin --profile web add ./dsh-inline-images

After installation, you can use the following command to confirm whether the plugin appears in the current configuration:

dsh plugins list

Some plugins require a web UI restart to take effect visually. This plugin declares its platform as web, so please check in the web interface, instead of only looking for effects in a pure terminal session.

Typical Usage

After installing and enabling the plugin, no extra tool calls are needed. As long as the assistant writes a locally existing image path in its reply, the message body will try to render it as an image. The examples used in the settings page descriptions are paths like C:\screenshots\a.png.

You can self-test in the following ways:
1. Prepare a local image, note down its absolute path, and ensure its extension is one of the 9 types listed above.
2. Ask the assistant to output this path in its reply, or use the Markdown image syntax pointing to this path.
3. If the file exists, an image should appear in the message body instead of just the path text.
4. Open “Settings → Inline Images”, adjust the maximum width and height, click “Apply”, and the images rendered by this plugin in the body will scale to the new limit.
5. Click on the image in the body to confirm that the lightbox opens; click the background or press Esc to close it.

If the path is a fictional example, the file has been deleted, or only a relative path is provided, the body will remain unchanged, which is by design and not an installation failure.

The token will be regenerated each time the plugin is activated. After the plugin is reloaded or Harness is restarted, the loopback URLs already embedded in old messages may fail to open, and you need to ask the assistant to output the path again or re-run the rendering process for the current conversation.

Applicable Scenarios and Notes

It is suitable for these use cases: local screenshot comparisons, images just generated or exported by agents, design drafts / charts that have been saved to disk in the workspace. The premise is that you mainly view conversations in DSH’s web UI, and the images are on the file system accessible to the current dsh process.

Pay attention to these points before use:
- Permissions and Security. The directory page states: the plugin runs with the permissions of the current dsh process, and may execute code during installation. You should check the source code repository and license before installing. The host-side image route reads local file bytes based on query parameters, and although a random token is used for verification, you should review the source code as you would for any untrusted plugin.
- Only handles local absolute paths. HTTP(S) images, data URIs, file: links, and relative paths will not be rewritten.
- Only modifies assistant streaming text. The capability is attached to the text block of llm/stream, and is not a general Markdown enhancement for user messages.
- Web Interface. The client platform is web; without a web UI, this plugin has no corresponding lightbox or settings page.
- Volume Limit. The default read limit is 20MB, which may also be restricted by the attachment service.
- License. MIT, free to use after reviewing the source code.

Summary

dsh-inline-images connects the event of “the assistant writes a local image path” to the Markdown rendering of web conversations: confirms the file exists, rewrites it to a same-origin loopback URL, displays the image directly in the message body, and includes a lightbox and adjustable size. It does not provide visual understanding, nor is it responsible for downloading remote images, with very clear boundaries.

Directory page: https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-inline-images/

GitHub: https://github.com/3403473060/dsh-inline-images