tileable-texture is a skill from the Summer skill library: a guide your AI agent reads when the task matches, so it builds the good version on the first try. Generate a seamless tileable texture for walls, floors or terrain, wired as a StandardMaterial3D albedo.
When your agent uses it
- Generating a seamless tileable texture for walls, floors, terrain, or ceilings — a square tile that repeats cleanly on all four edges
- A wall, floor, or terrain material shows visible seams or repetition and needs a texture that tiles cleanly
Install
summer setup installs every skill for your agent. To add only this one:
claude-code for your agent, such as codex or cursor. See Skills for every option.
The skill
This skill generates a seamless square texture (typically 1024×1024) that tiles cleanly on all four edges with no visible seams. Output goes onto aPlaneMesh, CSGBox3D, or MeshInstance3D as a StandardMaterial3D albedo, often with uv_scale cranked up so a single tile covers a small area and the surface repeats it across a wall or floor.
The hard part is “seamless.” Most diffusion models violate edge continuity by default — generate a brick wall and the bricks stop mid-row at the edge. This skill encodes the prompt suffix and the post-import verification that catches seams before they ship.
When to use
- “Generate a brick wall texture for this room.”
- “I need a grass ground texture for the level.”
- “Tileable wood-floor texture, 1024×1024.”
- “Stone tile texture for the dungeon.”
- “Sand / dirt / metal-panel — seamless.”
When NOT to use
- The user wants a 3D-modeled wall with geometric brick relief →
asset-strategy(image-to-3D). - The user wants a unique mural / non-tiling artwork →
concept-artorcharacter-portrait. - The user wants a skybox / 360° environment →
skybox-panorama. - The user wants a normal map / PBR material set — generation today is albedo-only. Normals must be derived (
MaterialMaker,NormalMap-Online) or hand-authored.
Steps
1. Search for an existing texture
2. Build the prompt — material + the seamless suffix
Pattern:seamless tileable texture— primes the model.top-down view— kills perspective convergence (which is the #1 source of visible seams).uniform lighting— kills directional shadows that bake into the tile and stripe across the surface when it repeats.no perspective, no shadows, no edges— explicit negation of common failure modes.no specific objects in frame— kills “interest” features the model adds (a single bright leaf, a chip in one brick) that scream “this is a repeating tile.”
3. Generate
- There is no
image_sizeand nonegative_prompt.assets.generate_imagetakesprompt,model,style,aspectRatio,width,height,numImages,referenceImageUrl,removeBackground,seedandtitle; a field it does not list does nothing, so the call looks like it worked. Put the negations in the prompt text. LeaveaspectRatioat its1:1default, which is exactly what a tileable texture wants; for a larger tile, leavemodelout and passwidthandheight: a model that reaches the size is picked, or the answer names the models that can. style: "realistic"is a no-op. Onlycartoonandanimeappend anything to the prompt;realisticandnoneappend nothing, and any other value is coerced tonone. The photographic look has to come from the prompt (photographic detail). Switching to"none"for stylized work likewise changes nothing on its own — change the prompt.
4. Import to project
Repeat: Enabled(REQUIRED for tiling).Filter: Linear with mipmaps(smoother at distance).Mipmaps: Enabled(textures viewed at angle need mipmaps).Compress: VRAM Compressedfor ship;Losslesswhile iterating.
5. Verify the seam
Before wiring into a scene, view the texture tiled. Quick check: in the editor’s filesystem dock, right-click the texture → preview → set repeat 4×4 mentally. Or apply to aPlaneMesh with uv_scale = (4, 4) and look from above.
If you see a grid of identical “interest features” (a chip, a stain, a bright pixel) repeating, the tile has a hotspot — regenerate with stronger negative on “single feature.”
If you see hard horizontal/vertical seams, the edges don’t match — regenerate with extra emphasis on seamless or run the texture through a seamless-tile filter (Photoshop “Offset” + heal, GIMP “Make Seamless”, or Aseprite’s Tiled Mode).
6. Wire onto geometry
On a PlaneMesh (floor/ceiling): Every scene-mutating tool takes an explicitscenePath; node paths are relative to that scene’s root (./); summer_set_prop’s property argument is named key; and summer_set_resource_property needs all five of scenePath, nodePath, resourceProperty, subProperty, value (there is no two-argument form and no "mesh:size" colon-path form).
Assigning a bare class name to a resource property auto-instantiates it, so the mesh comes first:
material_override is a Material, and StandardMaterial3D is the class name that auto-instantiates:
uv1_scale = (20, 20, 1) on a 20m plane means the texture tiles 20× across — each tile covers 1m².
On a CSGBox3D (walls):
uv1_scale tuned to wall dimensions.
Prompt patterns
Bad prompts (and why)
Anti-patterns
- Skipping
Repeat: Enabledon import. Default isRepeat: Disabled. The texture stretches across the whole surface instead of tiling. Looks blurry at distance. - Not tuning
uv1_scale. Default scale of (1, 1, 1) on a 20m floor means the 1m-real texture is stretched to 20m. Always scale to physical sizing. - Hotspot features that scream “repeated tile.” Regenerate with stronger negative on single-feature words.
- Generating PBR sets with one image. Diffusion outputs albedo only. For normals/roughness, use a derivation tool or hand-author. Don’t claim it’s PBR-ready when it’s not.
- Forgetting mipmaps. Tileable textures viewed at distance need mipmaps; without them, you get shimmering moire.
- Using textures with directional shadow baked in. Even subtle shadow stripes when tiled. Always demand “uniform lighting.”
Edge cases
- User wants normal map / roughness / AO too. Generation today produces albedo only. Use
Materialize(free) orMaterialMaker(open source) to derive a normal from the albedo. Hand-paint roughness if the surface is heterogeneous (wood = low roughness on knots, high on grain). Set the user’s expectation: AI gives albedo; PBR is a follow-up step. - Texture must tile in only one direction (e.g., a brick wall that runs horizontally but not vertically). Generate 1024×1024 seamless, then crop to your actual aspect; the horizontal tile remains seamless. Or: prompt
tileable horizontally only, distinct top and bottom edgesfor ceiling-to-floor walls. - Texture must read at very low resolution (mobile, distant LOD). You cannot request a generation size over MCP anyway — take the default and downscale on import (
Compress: VRAM Compressed, or set a smaller size in the import dock). - User wants animated water / lava texture. Generate a still tileable texture and use a
ShaderMaterialwith UV scrolling to animate. Don’t try to generate frames. - Visible seam after generation. Run through GIMP
Filters → Map → Make Seamlessor open in Aseprite, set Tiled mode, paint over the seam manually. AI-generated tileables often need a 5-minute touch-up.
Without Summer Engine
In a session without Summer Engine tools (the assets profile; thesummer-assets skill has the whole loop), do steps 1-3 and the seam check in step 5 by eye on the image (tile it 2x2 in an image viewer); skip step 4 and step 6 (import, wiring onto geometry). Pass out with the person’s folder so the PNG lands there (the summer-assets skill says how), and tell them to set the texture to repeat.
Fallback (no MCP)
Print the call:summer_import_from_url to res://art/textures/<name>.png, set Repeat: Enabled, and tune uv1_scale to physical size.
If MCP is offline entirely: AmbientCG and Polyhaven offer free CC0 PBR texture sets that often beat AI for realism. For stylized, hand-author in Aseprite/Krita with tile-mode preview.
Handoff
After the texture is wired:- More textures in the same biome → re-invoke this skill, hold style/lighting consistent.
- Apply to a procedurally-built level →
scene-compositionfor CSG and modular wall kits. - PBR set with normals/roughness → out of MCP scope today; user runs derivation in MaterialMaker.
- Skybox for the level’s environment →
skybox-panorama.
See also
asset-strategy— meta-router and 3D pipeline.skybox-panorama— sky/environment counterpart.scene-composition— applying textures to CSG and MeshInstance3D.summer_docs_readidreference/mcp-tools-reference— how to callassets.generate_image.
From a shell
No Summer MCP tools in this session? Run each one as a command; whensummer --version is missing or below 4.0, use npx -y summer-engine@latest in place of summer. Fields are flags in kebab-case (--scene-path res://main.tscn) or one --input '<json>', and summer ops describe <op> prints the exact input. The summer-cli skill has the rest.
Related skills
character-portrait: Generate one polished character bust for dialogue UI, character select, lore cards or codex entries.concept-art: Explore art direction with 3-4 rough concept variants of a character, environment or prop.skybox-panorama: Generate a 360-degree sky panorama and wire it as a PanoramaSkyMaterial Sky resource on WorldEnvironment.asset-strategy: Route any ‘I need a [thing]’ asset request to the right skill: 2D, 3D, audio, video, VFX or animation.create-asset-sheet: Generate a pack of 2D assets from one prompt (tile sheet, UI kit, character pack, biome), sliced.
Source:
library/skills/tileable-texture/SKILL.md, rendered from summer-engine@4.3.0 on npm.
