
a903067276-rgb/dsh-file-upload
dsh-file-upload
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
[](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 ⬆️
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
| Action | Effect |
|---|---|
| Click upload icon | System file picker (multi-select) → smart routing → attachment rail and/or path text |
| Drag a file into the window | Images & any file type are taken over (no "unsupported" toast) → smart routing |
| Drag a folder into the window | Recursively 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 file | Archived to the library's files/ subfolder, <prefix> <path> text goes into the draft |
| Model without image support | Image 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/Attachmentsdefault,~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)
…

