Seamless 2: Pattern Utility Plugin - Full Guide

Creating seamless patterns involves some repetitive tasks, which was the reason for why I decided to build a Photoshop plugin dedicated to this topic. The result of that, Seamless, was released in 2019 and was actually my very first plugin, so I was just learning along the way. Undoubtedly I made some mistakes back then from which I learned, but despite that, Seamless still helps hundreds of people speed up their workflows related to seamless patterns and textures.

Anyways, it’s been a while and with the release of UXP in Photoshop 2021, I thought it’d be a great opportunity to rework the whole plugin to cover even more use cases, but also to be more performant in general.

Since I had lots of functionality planned, a single interface would be way too overloaded. This led to the decision to build standalone panels for every use case, which can also be used independently from another. You could say that Seamless 2 is actually a bundle of 9 individual plugins.

In this post I’ll explain the purpose and functionality of all the panels in full detail.

Shuffle Elements

Create unique element patterns by randomizing various layer properties, such as position, rotation, scale, color and more.

If you need to create different variations of one or several layers, editing everything by hand can be very tedious. This panel creates all necessary copies, groups them together, and applies the desired adjustment for each layer. The new values are chosen randomly, but you can define value ranges for each layer property inside a settings popup.

Properties: Choose from position, scale, rotation, opacity, hue, saturation and brightness.

Copies: The shuffle panel works based on the selected layers. If you want multiple copies of the same layer, you don‘t have to do this by hand. Just set a value on the slider.

Versions: Since Shuffle works with random values, the first run might not always give the

desired result. A common workflow is shuffle > undo > shuffle > undo etc. To save some time, you can also let the panel generate multiple versions in one run, which you can easily view and select from the history snapshots.

Advanced settings: You control how random the results will be. Just go to the advanced settings and specify the minimum and maximum values for certain properties, define a specific color palette (instead of fully random colors) and more.

Offset & Overflow

Create pattern offsets relative to the canvas size and fix overflowing elements by automatically copying them to the opposite side.

A horizontal or vertical half offset can break up the repetition occuring in straight lines and make the pattern look more dynamic. (Aka “Rapport“)

Generate offset: Offsets all selected layers relative to the canvas width and height. You can apply uneven offsets by setting one direction to 25%,50% or 75%. This will automatically expand the canvas by 200% or 400% (but you can also turn this off), so that the result will still be a seamless pattern.

The interactive panel provides a real time preview that visualizes the resulting effect with circles (representing your layers). When the offset is generated, copies of the selected layers will be shifted in all 4 directions. So you can still move elements around afterwards, without breaking the seamless layout.

Expand manually: If you want to offset the elements, but keep your original canvas bounds, just uncheck the option in the previous section. This section simply provides convenient buttons to quickly expand the canvas by 200% or 400%.

Offset manually: Do you prefer to shift your layers around manually? The panel has some helpful tools for this, too! Just specify the offset and click one of the direction-buttons. You can toggle whether the layer should be duplicated in the flyout menu. Also, there’s an option to calculate the offset based on the layer bounds instead of the canvas bounds. If a selection is active, the selection bounds will be the reference value.

Fix overflow: Fix all overflowing layers with just one click. In other words, copy all layers that touch the canvas edge to the opposite side(s). This makes sure that the resulting image will be seamless. Unlike Photoshop’s recently added “Pattern Preview“ feature, this doesn‘t split layers apart and therefore also works with shapes and smart objects.

Remove outside: Deletes all layers that are outside of the canvas (and therefore not visible). It only affects layers that are fully outside and doesn‘t crop any layers that just touch the edge.

Repeat & Fill

Fill up the canvas using the selected layer while adjusting various options like offset and gap. The live preview helps to get an immediate feedback of the expected result.

Repeat & Fill creates copies of the selected layer and arranges them in a grid the way you specify via the settings. Additionally, there’s an auto-scale option, which calculates the necessary up- or down-scale to perfectly fit the generated grid to the canvas size.

All copies are grouped together by default and you can optionally create a backup of the selected layer beforehand.

Start at origin: If you uncheck this option, the layer will stay in place and repeat from there. Otherwise the layer gets moved to the top left before the repeat process.

Fill available space: Instead of filling up the canvas, you can also set a number of columns and rows. By the way, if there’s an active selection, the panel will work based on the selection bounds instead of the canvas bounds.

Gap: Set the spacing between each column or row. The input can process unit values like “25%“, “2in“, “30mm“ etc. If you leave the unit away, it will default to pixels.

Offset: Indent either the rows or columns by a certain percent amount. When “alternating offset” is on, the offset will oscillate back and forth between the value and 0. Otherwise, the offset will grow steadily.

Auto-Scale: Automatically scale up or down the original layer so that the repeated grid will fit perfectly to the canvas width or height. The calculation and scaling happens in advance (instead of on the whole grid), so that the specified gap will remain unscaled.