# thumbnail

A RocketRide filter node that generates a 128×128 PNG thumbnail from an input image.

## What it does

Resizes incoming images into compact, fixed-size thumbnails. It accepts either a raw
image stream or Image documents, and outputs the resized result downstream. Useful for
creating lightweight image previews before passing them to a vision LLM, reducing token
usage and processing time compared to full-resolution images.

Uses **Pillow** (via the shared `ai.common.image.ImageProcessor` helper, the node itself
declares no extra requirements). Thumbnails are produced by stepwise downscaling (halving
until the larger side is ≤ 256 px, which avoids aliasing), an aspect-ratio-preserving
resize, and a final **center crop to exactly 128×128 pixels**. Output is always encoded
as PNG, preserving transparency.

The node is registered as a `filter` with class type `image` and has no configurable
fields.

---

## Configuration

### Lanes

| Lane in     | Lane out    | Description                           |
| ----------- | ----------- | ------------------------------------- |
| `image`     | `image`     | Resize raw image to thumbnail         |
| `image`     | `documents` | Resize raw image and emit as document |
| `documents` | `documents` | Resize image documents to thumbnail   |

### `image` lane in

Raw image data arrives as a chunked stream (`BEGIN` / `WRITE` / `END`). The node buffers
all chunks, loads the complete image once the stream ends, and generates the thumbnail.
It then emits on whichever output lanes have listeners attached:

- **`documents` listener**: the thumbnail is base64-encoded (PNG) and emitted as a
  single `Doc` of type `Image` with fresh metadata (`chunkId`, `isTable: false`,
  `tableId: 0`, `isDeleted: false`).
- **`image` listener**: the thumbnail is emitted as raw PNG bytes in a new
  `BEGIN` / `WRITE` / `END` stream, keeping the incoming MIME type.

### `documents` lane in

Each incoming `Doc` of type `Image` has its base64 content decoded, thumbnailed, and
re-emitted as a new `Image` document with the **original metadata preserved**. Documents
are skipped with a warning (not an error) when they are not of type `Image`, have empty
content, or fail to decode/process, the remaining documents in the batch are still
processed.

None. The node's shape defines no properties; the thumbnail size (128×128) is fixed.

---

<!-- ROCKETRIDE:GENERATED:PARAMS START -->
<!-- Generated by nodes:docs-generate. Do not edit by hand. -->

## Schema

_No configuration fields._

## Source

[<svg viewBox="0 0 16 16" width="15" height="15" fill="currentColor" aria-hidden="true" style="vertical-align:-0.15em;margin-right:0.35em"><path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z"/></svg> View source](https://github.com/rocketride-org/rocketride-server/tree/develop/nodes/src/nodes/thumbnail)
<!-- ROCKETRIDE:GENERATED:PARAMS END -->
