Installs into .claude/skills of the current project.
Are you the author of Durindoor Image?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/bloodf-durindoor-image)
---
name: durindoor-image
description: Generate images through DurinDoor with a model discovered from /v1/models/image.
---
# DurinDoor Image Generation
## Discover
```bash
curl -H "Authorization: Bearer $DURINDOOR_KEY" "$DURINDOOR_URL/v1/models/image" | jq -r '.data[].id'
MODEL_ID="$(curl -s -H "Authorization: Bearer $DURINDOOR_KEY" "$DURINDOOR_URL/v1/models/image" | jq -r '.data[0].id')"
curl -H "Authorization: Bearer $DURINDOOR_KEY" "$DURINDOOR_URL/v1/models/info?id=$MODEL_ID"
```
## Generate
```bash
curl -X POST "$DURINDOOR_URL/v1/images/generations?response_format=binary" \
-H "Authorization: Bearer $DURINDOOR_KEY" \
-H "Content-Type: application/json" \
-d "{\"model\":\"$MODEL_ID\",\"prompt\":\"watercolor mountains at sunrise\"}" \
--output out.png
```
Required fields are `model` and `prompt`. Optional fields such as `n`, `size`, `quality`, `style`, images, or output format depend on the selected model. Inspect `/v1/models/info?id=...` before sending provider-specific fields.
JSON responses use OpenAI-compatible `data[].url` or `data[].b64_json`. The binary response mode returns image bytes.
## Use the default route
Leave out `model` and DurinDoor uses the image generation route from **Dashboard → Media Routes**, trying the fallbacks in order.
```bash
curl -X POST "$DURINDOOR_URL/v1/images/generations" \
-H "Authorization: Bearer $DURINDOOR_KEY" \
-H "Content-Type: application/json" \
-d '{"prompt":"watercolor mountains at sunrise"}'
```
If no connected provider serves this endpoint, the response is HTTP 400 with `error.code` set to `no_provider_for_kind`. Connect a provider, or pass `model`.
Reference: https://github.com/bloodf/durindoor/blob/main/docs/reference/api.mdx