The gallery endpoints rely on gallery-dl being installed on the server. They are purpose-built for sites that host image collections — Reddit galleries, Pixiv, DeviantArt, Tumblr, and similar — as well as TikTok photo carousels, which gallery-dl can also download along with the carousel’s background audio. Before making gallery requests from your application, callDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/coah80/yoink/llms.txt
Use this file to discover all available pages before exploring further.
GET /api/gallery/status to confirm gallery-dl is available. If available is false, all other gallery endpoints will return 503.
Progress events for gallery downloads and slideshow rendering are emitted on the
progressId channel. Pass progressId before subscribing to GET /api/progress/{progressId} for real-time updates.GET /api/gallery/status
Returns whether gallery-dl is installed and available on the server.Response
true if gallery-dl is installed and executable. false if it is missing — all other gallery endpoints will return 503 in this state.curl Example
GET /api/gallery/metadata
Fetches metadata for an image gallery without downloading any files. Internally callsgallery-dl --dump-json --range 1-10 with a 30-second timeout.
Query Parameters
URL of the gallery page to inspect. Must be a site supported by gallery-dl.
Response
Gallery or post title, derived from gallery-dl metadata fields
subcategory, category, or gallery. Falls back to "Image" if none are present.Number of images found (up to 10 from the metadata probe).
Array of up to 10 image preview objects. Each object contains:
filename(string) — bare filename without extensionextension(string) — file extension (e.g.jpg,png,webp)url(string) — direct URL to the image
Hostname extracted from the source URL (e.g.
reddit.com, pixiv.net). The www. prefix is stripped.Always
true.Errors
| Status | Meaning |
|---|---|
400 | Missing or invalid URL |
500 | gallery-dl failed or no images found |
503 | gallery-dl not installed on this server |
curl Example
GET /api/gallery/download
Downloads all images from a gallery. If the gallery contains a single image, streams that image directly with the correct MIME type. If it contains multiple images, assembles them into a ZIP archive and streams that.Query Parameters
URL of the gallery to download.
Pre-generated UUID for SSE progress tracking. If omitted, one is generated internally.
Session identifier for per-client job limiting (max 3 concurrent).
Filename hint for the downloaded file or ZIP archive (without extension). Defaults to the source hostname.
Response
Single image: streams the image binary with appropriate MIME type (image/jpeg, image/png, image/webp, etc.) and Content-Disposition: attachment.
Multiple images: streams a ZIP archive (application/zip) containing all downloaded files, named <filename>.zip.
Progress is emitted on the progressId SSE channel with messages like "Downloaded 5 images...".
Errors
| Status | Meaning |
|---|---|
400 | Invalid URL |
429 | Too many concurrent jobs for this client |
500 | gallery-dl failed or no images downloaded |
503 | gallery-dl not installed on this server |
curl Examples
- Download gallery as ZIP
- Download with progress tracking
GET /api/gallery/slideshow
Downloads a TikTok photo carousel (or any gallery with accompanying audio), then uses FFmpeg to assemble the images into an MP4 slideshow with crossfade transitions at 0.5-second duration. The output resolution adapts to the source images: portrait images produce 1080×1920 output; landscape images produce 1920×1080. If no audio is found in the downloaded files, the endpoint automatically falls back to the standard gallery download behaviour (streaming images or a ZIP).Query Parameters
Same asGET /api/gallery/download.
URL of the TikTok carousel or gallery with audio.
Pre-generated UUID for SSE progress tracking.
Session identifier for per-client job limiting.
Output filename hint (without extension). The server appends
.mp4.Response
Streams an MP4 video (video/mp4) with Content-Disposition: attachment. The video is encoded with libx264 (CRF 23, fast preset) and AAC audio at 192 kbps.
FFmpeg has a hard 5-minute timeout for slideshow rendering. Very long carousels with many high-resolution images may time out. Split large carousels and use
/api/gallery/download instead if this occurs.