Affine Tile Lines Noise Options
Affine's tile-oriented lines
- noise_options
WASTileLinesOptions is the config node for Affine's tile_oriented_lines pattern, and it's the most visibly constructed mask in the WAS Affine pack. The image gets chopped into a grid of tiles, and each tile gets a short line pattern at its own orientation. The result is a mask that looks like a crosshatch made by a slightly drunk tiler - and that's the feature, not a bug.
Where organic patterns like Perlin or Worley fade into the background of an image, tile lines announce themselves. So you reach for this when you want a geometric texture: fabric weave, brushed metal, architectural screening, halftone-ish grille work. In the README's own pattern guidance, cross-hatch and the geometric family are the ones it suggests for architectural subjects, and tile-oriented lines is the same instinct with more visible structure per tile.
How it works
Three inputs, all pattern-specific, all exactly what they sound like:
tile_line_tile_size(default 24, range 4–512) - the edge length of each square tile in pixels. Smaller tiles = finer grid, more orientation changes; bigger tiles = coarser, calmer pattern.tile_line_freq_cyc_px(default 0.55, range 0.01–2) - line frequency inside each tile, in cycles per pixel. Higher frequency packs more lines into the tile; lower gives you spaced strokes.tile_line_jitter(default 0.25, range 0–1) - how random each tile's orientation and phase is. At 0 the tiles are uniform and the pattern reads as a strict grid; as it climbs toward 1 the orientations scatter and it degrades into chaos. 0.25 is a nice middle: structure you can still read as structure.
Because each tile's lines are independently oriented, the mask has strong high-frequency content at the tile boundaries - which matters when you use it for affine enhancement, because those seams are exactly where texture gets injected. Keep tile_line_jitter low if you want a clean, design-y look; push it up for something more like noise.
It outputs the standard noise_options DICT. Wire it into the noise_options input on Latent Affine, KSampler Affine Advanced, or the Ultimate Affine KSampler variants, and set that node's pattern to tile_oriented_lines. noise_options overrides the base options dict where keys collide, per the source.
Installing it
It's part of WAS Affine (WASasquatch/was_affine), by the author of the WAS Node Suite. Install via Manager (search "WAS Affine") or:
cd ComfyUI/custom_nodes
git clone https://github.com/WASasquatch/was_affine.git
Restart after. No models to fetch; deps are torch/numpy (plus matplotlib in requirements.txt). It doesn't need UltimateSDUpscale installed despite the sampler names.
The catch
- This pattern fights back if you're subtle about it. Tile lines at default settings are a lot of structure. If you just want gentle texture you'll usually be better served by perlin or velvet noise; reach for tile lines when the geometric look is the point.
- Watch your scale setting. With a busy mask like this, a
max_scaleabove ~1.05 on the integrated samplers can push the tiles into visible banding. tile_line_freq_cyc_pxinteracts with resolution - a frequency that looks right at 512px gets dense at 2K. Tune it per output size rather than assuming one setting ports over.
A purpose-built geometric pattern for when organic just isn't the vibe.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| tile_line_tile_size | INT | 244–512 | Tile edge length in pixels. Each tile has an oriented line pattern. |
| tile_line_freq_cyc_px | FLOAT | 0.550.01–2 | Line frequency in cycles per pixel inside each tile. |
| tile_line_jitter | FLOAT | 0.250–1 | Randomness of tile orientation/phase [0-1]. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| noise_options | DICT | — |