Commit 3d2dbf
2026-07-09 19:39:02 Donovan_DMC: Add ImageGen| YiffyAPI.md .. | |
| @@ 2,6 2,6 @@ | |
| <p>A hand picked image api, for furries.</p> | |
| - | YiffyAPI consists of a handpicked [[Image API|YiffyAPI/Images]], a [[URL Shortener|YiffyAPI/Shortener]], and an [[E621 Video Thumbnailer|YiffyAPI/Thumbnails]].<br> |
| + | YiffyAPI consists of a handpicked [[Image API|YiffyAPI/Images]], a [[URL Shortener|YiffyAPI/Shortener]], an [[E621 Video Thumbnailer|YiffyAPI/Thumbnails]], and [[Meme Generation|YiffyAPI/ImageGen]].<br> |
| While many routes do not require an api key, using one is recommended. Getting one is free, and only requires signing in with Discord.<br> | |
| You can manage your API keys here: <https://yiff.rest/apikeys>. | |
| YiffyAPI/Error Codes.md .. | |
| @@ 102,3 102,15 @@ | |
| | 1081 | 422 | URL Too Long <a id="shortener-url-too-long"/> | | |
| [^8]: URLs are no longer unique | |
| + | |
| + | <hr> |
| + | |
| + | > [!NOTE] |
| + | > The codes below can only be returned in the [[ImageGen|YiffyAPI/ImageGen]] service.<br> |
| + | > The following codes are reserved for this service: 1090-1099 |
| + | |
| + | | Error Code | Status Code | Description | |
| + | |:-------------------------------------:|:-------------------------------------:|:--------------------------------------------------------------------------:| |
| + | | 1090 | 404 | Endpoint Not Found <a id="image-gen-endpoint-not-found"/> | |
| + | | 1091 | 400 | Bad Request <a id="image-gen-bad-request"/> | |
| + | | 1092 | 500 | Generation Error <a id="image-gen-generation-error"/> | |
| /dev/null .. YiffyAPI/ImageGen.md | |
| @@ 0,0 1,215 @@ | |
| + | # ImageGen |
| + | |
| + | An [[API Key|YiffyAPI/APIKey]] <span style="color: red;">is</span> required for this service (it must have the "ImageGen" service flag). See [[Shared Responses|YiffyAPI/Shared Responses]] for common error responses. |
| + | |
| + | <p>Meme and image generation - avatar compositing, text overlays, and a handful of video/gif effects. Successful requests return the generated file directly (as <code>image/png</code>, <code>image/jpeg</code>, <code>image/gif</code>, or <code>video/mp4</code> depending on the endpoint) rather than a JSON envelope.</p> |
| + | |
| + | <hr> |
| + | |
| + | ## List Endpoints |
| + | > <code><span style="color: rgb(52, 141, 248);">GET</span></code> `https://imgen.yiff.rest/endpoints.json` |
| + | |
| + | <p>Returns every currently available endpoint and its parameters. This is the authoritative, always-up-to-date list - the table further down this page is a convenience snapshot and can drift out of date.</p> |
| + | |
| + | ::: success |
| + | # 200 OK: Success |
| + | ```json |
| + | { |
| + | "endpoints": [ |
| + | { |
| + | "name": "dab", |
| + | "parameters": ["avatar0"] |
| + | } |
| + | ] |
| + | } |
| + | ``` |
| + | ::: |
| + | |
| + | <hr> |
| + | |
| + | ## Generate |
| + | > <code><span style="color: rgb(52, 141, 248);">GET</span></code> <code><span style="color: rgb(0, 136, 71);">POST</span></code> `https://imgen.yiff.rest/api/{endpoint}` |
| + | |
| + | <p>Endpoint-specific parameters (see the table below) are on top of the common ones listed here. GET requests take everything as query string parameters; POST requests take a JSON body instead, and use array keys (<code>avatars</code>/<code>usernames</code>) rather than numbered ones.</p> |
| + | |
| + | ::: none |
| + | # Path Parameters |
| + | | Name | Type | Description | |
| + | |-------------------------------------------------------------|--------|---------------------------------------------------------------------------------------------| |
| + | | endpoint <span style="color: red" title="required">*</span> | String | The name of the endpoint to use. See [List Endpoints](#list-endpoints), or the table below. | |
| + | ::: |
| + | |
| + | ::: none |
| + | # Query Parameters (GET) |
| + | | Name | Type | Description | |
| + | |-----------|--------|----------------------------------------------------------------------------------------------------------| |
| + | | avatar1 | String | Image URL. Usually a Discord avatar. Supports at least JPG, PNG, GIF, and BMP. Also accepted as `image`. | |
| + | | avatar2 | String | Image URL, for endpoints involving two users. | |
| + | | username1 | String | Username for the first user. | |
| + | | username2 | String | Username for the second user. | |
| + | | text | String | Text to render on the generated image. | |
| + | ::: |
| + | |
| + | ::: none |
| + | # Body Parameters (POST) |
| + | | Name | Type | Description | |
| + | |-----------|---------------|-----------------------------------------------------------------------------------| |
| + | | avatars | Array<String> | Image URLs, in order (`avatars[0]` is `avatar1`, etc). Also accepted as `images`. | |
| + | | usernames | Array<String> | Usernames, in order. | |
| + | | text | String | Text to render on the generated image. | |
| + | ::: |
| + | |
| + | ::: success |
| + | # 200 OK: Success |
| + | <p>The raw generated file is returned, with an appropriate <code>Content-Type</code>. Standard rate limit headers are also present (see [[Shared Responses|YiffyAPI/Shared Responses]]).</p> |
| + | ::: |
| + | |
| + | ::: danger |
| + | # 404 Not Found: Unknown Endpoint |
| + | ```json |
| + | { |
| + | "success": false, |
| + | "code": 1090, |
| + | "error": "Endpoint whatever not found!" |
| + | } |
| + | ``` |
| + | ::: |
| + | |
| + | ::: danger |
| + | # 400 Bad Request: Bad Request |
| + | <p>Returned for both malformed/missing parameters and endpoint-specific validation (e.g. an endpoint that expects `text` to contain a comma-separated pair of strings).</p> |
| + | ```json |
| + | { |
| + | "success": false, |
| + | "code": 1091, |
| + | "error": "index 0 outside of array bounds: 0...0. Are you missing a parameter?" |
| + | } |
| + | ``` |
| + | ::: |
| + | |
| + | ::: danger |
| + | # 500 Internal Server Error: Generation Error |
| + | ```json |
| + | { |
| + | "success": false, |
| + | "code": 1092, |
| + | "error": "..." |
| + | } |
| + | ``` |
| + | ::: |
| + | |
| + | <hr> |
| + | |
| + | ## Endpoints |
| + | |
| + | > [!NOTE] |
| + | > This list is a snapshot and can drift out of date - use [List Endpoints](#list-endpoints) for the authoritative list. `avatar1`/`avatar2`/`username1`/`username2`/`text` are the common parameters described above; anything else listed is specific to that endpoint. |
| + | |
| + | | Endpoint | Parameters | |
| + | |------------------------|---------------------------------------------------------| |
| + | | `abandon` | `text` | |
| + | | `aborted` | `avatar1` | |
| + | | `affect` | `avatar1` | |
| + | | `airpods` | `avatar1` | |
| + | | `america` | `avatar1` | |
| + | | `armor` | `text` | |
| + | | `balloon` | `text` | |
| + | | `bed` | `avatar1`, `avatar2` | |
| + | | `bongocat` | `avatar1` | |
| + | | `boo` | `text` | |
| + | | `brain` | `text` | |
| + | | `brazzers` | `avatar1` | |
| + | | `byemom` | `avatar1`, `username1`, `text` | |
| + | | `cancer` | `avatar1` | |
| + | | `changemymind` | `text` | |
| + | | `cheating` | `text` | |
| + | | `citation` | `text` | |
| + | | `communism` | `avatar1` | |
| + | | `confusedcat` | `text` | |
| + | | `corporate` | `avatar1`, `avatar2` | |
| + | | `crab` | `text` (two comma-separated strings) | |
| + | | `cry` | `text` | |
| + | | `dab` | `avatar1` | |
| + | | `dank` | `avatar1` | |
| + | | `deepfry` | `avatar1` | |
| + | | `delete` | `avatar1` | |
| + | | `disability` | `avatar1` | |
| + | | `doglemon` | `text` | |
| + | | `door` | `avatar1` | |
| + | | `egg` | `avatar1` | |
| + | | `emergencymeeting` | `text` | |
| + | | `excuseme` | `text` | |
| + | | `expanddong` | `text` | |
| + | | `expandingwwe` | `text` | |
| + | | `facts` | `text` | |
| + | | `failure` | `avatar1` | |
| + | | `fakenews` | `avatar1` | |
| + | | `farmer` | `text` (two comma-separated strings) | |
| + | | `fedora` | `avatar1` | |
| + | | `floor` | `avatar1`, `text` | |
| + | | `fuck` | `text` | |
| + | | `garfield` | `text`, `avatar1` | |
| + | | `gay` | `avatar1` | |
| + | | `godwhy` | `text` | |
| + | | `goggles` | `avatar1` | |
| + | | `hitler` | `avatar1` | |
| + | | `humansgood` | `text` | |
| + | | `inator` | `text` | |
| + | | `invert` | `avatar1` | |
| + | | `ipad` | `avatar1` | |
| + | | `jail` | `avatar1` | |
| + | | `justpretending` | `text` | |
| + | | `keepurdistance` | `text` | |
| + | | `kimborder` | `avatar1` | |
| + | | `knowyourlocation` | `text` | |
| + | | `kowalski` | `text` | |
| + | | `laid` | `avatar1` | |
| + | | `letmein` | `text` | |
| + | | `lick` | `text` | |
| + | | `madethis` | `avatar1`, `avatar2` | |
| + | | `magik`<sup>[^1]</sup> | `avatar1` | |
| + | | `master` | `text` | |
| + | | `meme` | `avatar1`, `top_text`, `bottom_text`, `color`, `font` | |
| + | | `note` | `text` | |
| + | | `nothing` | `text` | |
| + | | `obama` | `text` | |
| + | | `ohno` | `text` | |
| + | | `piccolo` | `text` | |
| + | | `plan` | `text` | |
| + | | `presentation` | `text` | |
| + | | `quote` | `avatar1`, `username1`, `text` | |
| + | | `radialblur` | `avatar1` | |
| + | | `rip` | `avatar1` | |
| + | | `roblox` | `avatar1` | |
| + | | `salty` | `avatar1` | |
| + | | `satan` | `avatar1` | |
| + | | `savehumanity` | `text` | |
| + | | `screams` | `avatar1`, `avatar2` | |
| + | | `shit` | `text` | |
| + | | `sickban` | `avatar1` | |
| + | | `slap` | `avatar1`, `avatar2` | |
| + | | `slapsroof` | `text` | |
| + | | `sneakyfox` | `text` | |
| + | | `spank` | `avatar1`, `avatar2` | |
| + | | `stroke` | `text` | |
| + | | `surprised` | `text` | |
| + | | `sword` | `text`, `username1` | |
| + | | `theoffice` | `text` | |
| + | | `thesearch` | `text` | |
| + | | `trash` | `avatar1` | |
| + | | `trigger` | `avatar1` | |
| + | | `tweet` | `avatar1`, `username1`, `text`, `username2`, `altstyle` | |
| + | | `ugly` | `avatar1` | |
| + | | `unpopular` | `avatar1`, `text` | |
| + | | `violence` | `text` | |
| + | | `violentsparks` | `text` | |
| + | | `vr` | `text` | |
| + | | `walking` | `text` | |
| + | | `wanted` | `avatar1` | |
| + | | `warp` | `avatar1` | |
| + | | `whodidthis` | `avatar1` | |
| + | | `whothisis` | `avatar1`, `text` | |
| + | | `yomomma` | *(none, returns JSON instead of an image)* | |
| + | | `youtube` | `avatar1`, `username1`, `text` | |
| + | |
| + | [^1]: Currently non-functional - the liquid-rescale effect it depends on needs an ImageMagick build with `liblqr` support, which isn't available in production yet. Returns a 500 Generation Error. |
