GooDAnDReaDY/dsh-image-gen
dsh-image-gen
Image generation for DeepSeek Harness: a generate_image tool backed by the FAL queue API, with the picture shown inline in the conversation
Install
npx @deepseek-ai/dsh plugin --profile web add @goodandready/dsh-image-genRestart `dsh web` after install. Bundle APIs can change during the developer preview.
README badge
[](https://dshhub.dev/plugins/goodandready-dsh-image-gen)Paste this into your README. The star count updates with every catalog sync.
From the README
Excerpt from GooDAnDReaDY/dsh-image-gen, cleaned of badges and images.
dsh-image-gen
Image generation for DeepSeek Harness (dsh).
The plugin gives the agent one tool, generate_image, and puts the result where
a picture belongs — in the conversation. Which service actually draws it is a
setting, not a rewrite: a paid API key, your own OpenAI-compatible endpoint, or a
consumer subscription you are already paying for.
A generated image is:
- shown inline in the conversation, in the plugin's own tool card;
- saved into the session working directory (
<session cwd>/generated/images/*.png); - returned to the model with its path, size and seed.
Renamed. This plugin used to be
dsh-fal-image-gen. FAL is now one provider out of four, and the old name said otherwise. Upgrading carries your settings over by itself, and images in existing conversations keep working — see Upgrading from dsh-fal-image-gen.
Providers
provider | What it is | What it needs |
|---|---|---|
fal (default) | the FAL queue, default model fal-ai/flux-2/klein/9b | a FAL API key |
custom | any OpenAI-compatible images API — OpenAI itself, a local gateway, anything speaking that shape | a base URL, a model id, usually a key |
codex | ChatGPT's image model (gpt-image-2) on your ChatGPT subscription | no key — a ChatGPT account connected in dsh-subscriptions |
grok | Grok's image model (grok-imagine-image-2.0) on your Grok subscription | no key — a Grok account connected in dsh-subscriptions |
The named sizes stay the same whichever provider runs — they are the tool's
language, and the agent should not have to know who is drawing. FAL takes them as
they are; an OpenAI-compatible API gets them translated into pixels (square_hd
→ 1024x1024, landscape_4_3 → 1024x768); Grok thinks in aspect ratios and
gets 1:1, 2:3, 3:2. An API picky about sizes gets customSize, which is
sent verbatim instead.
response_format is deliberately not sent: newer OpenAI models reject it, and
the answer is accepted either way — base64 inline, or a link that gets
downloaded.
Drawing on a subscription
codex and grok need no API key at all. They borrow an account that
dsh-subscriptions already
holds: connect ChatGPT or Grok there once, pick the provider here, and generation
goes through the same subscription you use for chat.
The token never leaves the Host. The two plugins talk through a service inside the process rather than over the network — a route handing out a live subscription token would be a hole in a harness that is otherwise reachable without a password.
If dsh-subscriptions is not installed, or no account of that vendor is
connected, these two providers say so instead of failing silently.
Example: OpenAI
- id: dsh-image-gen
config:
provider: custom
customBaseURL: https://api.openai.com/v1
customModel: gpt-image-1
customKeyEnv: OPENAI_API_KEY
An empty customKeyEnv means no authorization header at all, for a local
gateway that needs none.
Two delivery modes
The picture appears in the conversation either way. What differs is what the chat model receives — and that decides whether the turn survives a text-only model.
…

