DSH 插件市场DeepSeek Harness 社区插件目录

dsh-read-animation

已验证 界面与体验 ★ 16 0.1.2

Let a DeepSeek Harness agent actually see an animated GIF or animated WebP: decode every frame, sample the animation across time, and hand the model a labelled sequence of real frames instead of the single first frame the harness otherwise delivers.

一句话定位

Let a DeepSeek Harness agent actually see an animated GIF or animated WebP: decode every frame, sample the animation across time, and hand the model a labelled sequence of real frames instead of the single first frame the harness otherwise delivers.

安装方式

在 DSH 的 web profile 中执行下面的命令;装完刷新页面即可。

$ dsh plugin --profile web add dsh-read-animation@0.1.2

兼容的 DSH 版本

>=0.1.3-alpha.2

作者与热度

NeoHotaru · ★ 16 · 更新于 2026-11-08

关于这个插件

dsh-read-animation

A DeepSeek Harness plugin that lets the agent actually see an animated GIF.

read_image on a GIF gives the model one picture — the first frame — and no

signal that the other frames existed. This plugin decodes every frame and hands

the model a labelled sequence of real frames sampled across the animation's

timeline.

dsh plugin --profile web add dsh-read-animation

---

The problem

DeepSeek Harness normalizes every stored image to a single-frame 8-bit sRGB

raster before it reaches a model, and it does this to animations too.

@deepseek-ai/dsh-attachment-local excludes image/gif from its pass-through

path and re-encodes through a pipeline that never sets animated or page, so

sharp returns page 0 and the rest are dropped on the floor.

Measured, on this machine, against an 8-frame GIF:

metadata:  {"format":"gif","width":240,"height":160,"pages":8,
            "delay":[80,80,80,80,80,80,80,80],"loop":0}
default -> 240x160  pages=1     ← what read_image delivers
animated -> 240x1280 pages=1    ← all eight frames, when asked for

No layer above the read step can repair this. By the time a vision plugin, an

image router, or the LLM adapter sees the image it is already a single frame —

which is why the growing ecosystem of DSH vision plugins

([dsh-multimodal](https://github.com/SCT192221/dsh-multimodal),

[dsh-mmroute](https://github.com/jmxsxwyzjdwl/dsh-mmroute),

[dsh-vision-mix](https://github.com/haiziyao/dsh-vision-mix),

[dsh-tool-plus](https://github.com/xiaoso456/dsh-tool-plus), …) all say they

"support PNG/JPEG/WebP/GIF" without any of them showing you motion. The

animation is still intact in exactly one place: the file. So the tool lives

there.

Animated PNG has the same disease with a worse prognosis: libvips 8.18.7 does

not read acTL/fcTL/fdAT at all, reports an APNG as a one-page PNG, and

silently discards every frame after the first. This plugin detects that case from

the chunk stream and refuses it by name instead of returning frame 0.

Two ways in, both handled

Pasting into the chat box. That path is already clean on the browser side: the

paste handler hands the clipboard's own File straight to the upload path, and

that path encodes image/gif and image/webp unchanged (imageMediaType()

accepts both and returns them as-is) — no canvas, no drawImage, no toBlob.

The bytes reach the Host whole. The Host normalizes them through

attachments.saveImages. In DSH 0.2.2 this happens during upload, so prompt

admission receives an already-stored image reference.

The plugin wraps saveImages, captures the animation from its raw inputs, and

stores the original and decoded frames against the returned image reference.

This covers raw uploads and older encoded-prompt admission:

you paste 1 animation
   ├─ the message: unchanged — the picture you sent, not one word added
   ├─ the UI: the animation itself, played from the original bytes
   └─ the model: one sheet of its frames, each labelled with index and time

What you send is what you send. Nothing is added to the message you wrote,

and it does not turn into eight stills.

And it keeps playing in the UI. The Web UI has exactly one way to display a

durable image: session.readAttachment(id) → the Host's

ctx.attachments.readImage(ref) →

URL.createObjectURL(new Blob([bytes], { type: attachment.mediaType })). Both the

同分类对比

同一分类下 Star 最高的 5 个,便于横向比较。

插件作者 Star版本更新
open-design nexu-io 106.9K 0.25.1 2026-11-10
huashu-design alchaincyf 29.1K 3.3.0 2026-11-10
dsh-web zhu1090093659 10.3K 0.0.1 2026-11-10
baoyu-design JimLiu 6.3K 2.12.2 2026-11-10
dsh-wallpaper-engine elysia395 6.3K 1.4.2 2026-11-10