DSH Hub
dsh-file-upload cover

a903067276-rgb/dsh-file-upload

dsh-file-upload

UIWeb UI7 GitHub stars· updated 2026-08-23

One upload button plus drag-and-drop files into the conversation as local paths: save to project uploads/, path text into the input box, works with any vision tool

Install

npx @deepseek-ai/dsh plugin --profile web add "github:a903067276-rgb/dsh-file-upload#main"

Restart `dsh web` after install. Bundle APIs can change during the developer preview.

README badge

dsh-file-upload DSH Hub badge
[![DSH Hub](https://dshhub.dev/badge/a903067276-rgb-dsh-file-upload.svg)](https://dshhub.dev/plugins/a903067276-rgb-dsh-file-upload)

Paste this into your README. The star count updates with every catalog sync.

From the README

Excerpt from a903067276-rgb/dsh-file-upload, cleaned of badges and images.

dsh-file-upload ⬆️

English | 简体中文

One upload button + drag-and-drop files straight into the conversation — a plugin for DeepSeek Harness (dsh) web.

Unofficial project: independently developed and maintained by a community member, not an official DeepSeek product.

Screenshot

The upload icon button in the composer tool row (official DSH design tokens, follows dark/light theme); either the file's path is inserted into the input box, or — for supported images — the image lands in the official attachment rail (auto file_id reuse).

Features

ActionEffect
Click upload iconSystem file picker (multi-select) → smart routing → attachment rail and/or path text
Drag a file into the windowImages & any file type are taken over (no "unsupported" toast) → smart routing
Drag a folder into the windowRecursively reads the whole folder → rebuilds it under the attachment library with its original layout → only the folder path goes into the draft (contents not expanded)
Image (PNG/JPEG/WebP/GIF)① archived to the attachment directory (by-day folders) ② added to the official draft attachment rail → sent with automatic DeepSeek Files API file_id (same image reuses the id; 7-day expiry auto-reuploads)
Any other fileArchived to the library's files/ subfolder, <prefix> <path> text goes into the draft
Model without image supportImage falls back to archive + path text (never sent as an image block, no 400)
  • Single-file limit: 64 MB (DeepSeek Files API hard limit; the local attachment store defaults to 20 MB — see Large images below)
  • Everything lands in the attachment library: ~/Documents/DSH/Attachments/images/<YYYY-MM-DD>/ (images) or .../files/<YYYY-MM-DD>/ (other files) — configurable in Settings
  • Button shows busy state while uploading; failures surface as Chinese notices

Settings card

  • Attachment directory (~/Documents/DSH/Attachments default, ~ supported) — only used for image archives
  • Path prefix ([上传文件] default) — text prepended to paths in the draft; clear it to send bare paths
  • Images via official attachment (default on) — off = images follow the old path-text logic
  • Archive images to the attachment directory (default on) — off = official attachment only (saves disk; if the official channel is unavailable, the image is still force-archived)
  • Allow public uploads (default off) — off = same-origin check keeps allowing localhost only (CSRF-safe); on = any origin may upload, for public/port-forwarding access (e.g. ddnsto). Enable only if you trust everyone who can reach your DSH.
  • Read-only display: current image size limit from the host

Large images (20–64 MB)

DeepSeek accepts up to 64 MB per image. DSH's local attachment store defaults to 20 MB; images above that (and ≤64 MB) are archived + path-text referenced (the model can still read them via read_image, which follows the same store limit).

To let large images through the official attachment path too, add this to ~/.dsh/profiles/web/cordis.patch.yml and restart dsh web:

- id: attachment-local
  config:
    maxImageBytes: 67108864   # 20 MiB → 64 MiB (DeepSeek hard limit)

Related plugins