addedInput schema / properties / finish
Added value: +{
+ "anyOf": [
+ {
+ "additionalProperties": false,
+ "description": "Reduce to a palette built from the image.",
+ "properties": {
+ "colors": {
+ "description": "Build a palette of at most this many colors (2–256) from the image itself.",
+ "maximum": 256,
+ "minimum": 2,
+ "type": "integer"
+ },
+ "dither": {
+ "default": "none",
+ "description": "How palette colors are placed: none maps each pixel to its nearest color; bayer4 mixes the two nearest in an ordered 4×4 pattern; floyd-steinberg diffuses the difference to neighboring pixels, smoothest on photos.",
+ "enum": [
+ "none",
+ "bayer4",
+ "floyd-steinberg"
+ ],
+ "type": "string"
+ }
+ },
+ "required": [
+ "colors"
+ ],
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "description": "Reduce to a fixed palette.",
+ "properties": {
+ "dither": {
+ "default": "none",
+ "description": "How palette colors are placed: none maps each pixel to its nearest color; bayer4 mixes the two nearest in an ordered 4×4 pattern; floyd-steinberg diffuses the difference to neighboring pixels, smoothest on photos.",
+ "enum": [
+ "none",
+ "bayer4",
+ "floyd-steinberg"
+ ],
+ "type": "string"
+ },
+ "palette": {
+ "description": "Map every pixel to these colors (1–256 entries).",
+ "items": {
+ "description": "Hex color (#RRGGBB or #RGB) or a named color.",
+ "type": "string"
+ },
+ "maxItems": 256,
+ "minItems": 1,
+ "type": "array"
+ }
+ },
+ "required": [
+ "palette"
+ ],
+ "type": "object"
+ }
+ ],
+ "description": "Reduce the image to a palette before it reaches the panel: exactly one of colors (2–256, built from the image) or palette (1–256 hex or named colors), plus dither. Transparent pixels stay unlit and are not counted. The preview shows the finished frame."
+}
changedInput schema / properties / source / description
Previous value: -"Absolute local file path or https (not http) URL of the image to display."New value: +"Absolute local file path or https (not http) URL of the image to display; a relative path is rejected. An animated GIF or WebP, whatever its file name, pushes as an animation."
addedInput schema / properties / speed
Added value: +{
+ "description": "Milliseconds per frame for an animated source (10–2000). Default: the source's total duration over the pushed frame count, or 150 when it records no delays. A still ignores it.",
+ "maximum": 2000,
+ "minimum": 10,
+ "type": "integer"
+}
changedOutput schema / anyOf
Previous value: -[
- {
- "not": {
- "required": [
- "error"
- ]
- },
- "required": [
- "pushed"
- ]
- },
- {
- "required": [
- "error"
- ]
- }
-]New value: +[
+ {
+ "not": {
+ "required": [
+ "error"
+ ]
+ },
+ "required": [
+ "pushed",
+ "frames",
+ "sourceFrames"
+ ]
+ },
+ {
+ "required": [
+ "error"
+ ]
+ }
+]
changedOutput schema / properties / error / properties / data / properties / reason / description
Previous value: -"Machine-readable failure mode. Declared by this tool: `device_unreachable`: Device is not reachable. `device_http_error`: The device answered with a non-2xx HTTP status (retryable for 408, 429, 500, and 502–504). `device_rejected`: Device firmware returned a non-zero error code. `no_device_configured`: PIXOO_IP is not set. `asset_not_found`: Image path or URL could not be read. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `device_unreachable`: Device is not reachable. `device_http_error`: The device answered with a non-2xx HTTP status (retryable for 408, 429, 500, and 502–504). `device_rejected`: Device firmware returned a non-zero error code. `no_device_configured`: PIXOO_IP is not set. `asset_not_found`: Image path or URL could not be read. `invalid_image`: The source was read but did not decode as an image. `invalid_color`: A finish palette entry could not be resolved to a color. Other values are possible when a failure originates below the handler."
changedOutput schema / properties / error / properties / data / properties / reason / examples
Previous value: -[
- "device_unreachable",
- "device_http_error",
- "device_rejected",
- "no_device_configured",
- "asset_not_found"
-]New value: +[
+ "device_unreachable",
+ "device_http_error",
+ "device_rejected",
+ "no_device_configured",
+ "asset_not_found",
+ "invalid_image",
+ "invalid_color"
+]
addedOutput schema / properties / frames
Added value: +{
+ "description": "Frames rendered and pushed: 1 for a still, 2–40 for an animation.",
+ "type": "number"
+}
changedOutput schema / properties / outputFiles / description
Previous value: -"Absolute paths to saved PNG preview files. Present only when PIXOO_OUTPUT_DIR is configured."New value: +"Absolute paths to saved preview files: a PNG for a still, a GIF at the pushed speed for an animation. Present only when PIXOO_OUTPUT_DIR is configured."
addedOutput schema / properties / sourceFrames
Added value: +{
+ "description": "Frames in the source before sampling down to 40: 1 for a still.",
+ "type": "number"
+}
addedOutput schema / properties / speed
Added value: +{
+ "description": "Milliseconds per frame the animation plays at. Absent for a still.",
+ "type": "number"
+}