texture_Offset
Roll a texture around to check its seams — 50% by default
- pixels
- IMAGE
The classic way to test whether a texture actually tiles: offset it by half and look. If you can spot the seam, it isn't seamless. texture_Offset is exactly that operation - it rolls an image's pixels around by a percentage, with the wrap-around behavior that keeps the rolled result the same size. One input image, one shifted output, nothing fancy. But it's a workhorse in the texture pipeline, and here's why it earns a permanent spot.
It's one of the small nodes in ComfyUI-Apt_Preset's texture group, sitting alongside texture_create, texture_Ksampler, and texture_render. It looks trivial - and mechanically it is - but every texture baker needs it.
How it works
Under the hood it's a torch.roll along the height and width axes. x_percent shifts horizontally, y_percent vertically, each as a percentage of the image size. Default is 50 / 50: the image shifts half its width and half its height. Because it's a roll (not a crop), the pixels that fall off one edge reappear on the opposite edge - which is precisely why this is the seam test:
- Shift 50% and inspect the middle of the output. If a visible seam runs through it, your texture doesn't tile.
- Shift 50% and see nothing? Congratulations, your texture is seamless (or your
texture_Ksamplercircular-padding hack worked). - Run it through
texture_createafter an offset to bake from a different tiling phase.
It's also just a handy image-shift effect when you need a wrap-around pan without losing resolution.
Inputs and outputs
- pixels - any IMAGE (batch-friendly; each frame in the batch is rolled independently).
- x_percent - 0–100 horizontal roll (default 50).
- y_percent - 0–100 vertical roll (default 50).
- Output: IMAGE - the rolled result, same dimensions.
Installing it
Part of ComfyUI-Apt_Preset. ComfyUI Manager → search ComfyUI-Apt_Preset, or:
cd ComfyUI/custom_nodes
git clone https://github.com/cardenluo/ComfyUI-Apt_Preset
Restart; install.bat on Windows for the pack's requirements. No models, no GPU pressure - this node is pure tensor math.
Common issues
Honestly, not much to break. The one thing people expect and don't get: it does not resize or pad, so if your source isn't tileable in the first place, rolling it won't make it so - you've just moved the seam. Use it as the test, and pair it with texture_Ksampler (or a seamless bake) for the fix. Also, since it's percentage-based rather than pixel-based, 50% of a 256px texture is a different pixel shift than 50% of a 1024px one - that's usually fine for a seam check, but if you need exact pixel offsets, this isn't that node. Keep it simple and it'll never bite you.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| pixels | IMAGE | — | |
| x_percent | FLOAT | 500–100 | — |
| y_percent | FLOAT | 500–100 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |