What it does
It repaints a texture file from your own Zwift install. The file it gives
back is the same byte length as the original and carries the same
CRC-32, so Zwift's file check accepts it.
Back up the original first. Copy the
.ztx somewhere safe before you replace it. Restoring that copy
is how you undo a change — there is no revert button here.
The four steps
- Find it. Pick a category or search, then copy the folder path.
- Drop the
.ztx on this page. Back it up first.
- Design. Add text and image layers, or recolour the whole thing.
- Build & download, then put the file back where you found it.
Zwift may restore the original on a game update. Keep your backup, and
keep the built file too.
You can only repaint kits you already own
Painting a kit does not unlock it. Pick something you can already select
in Zwift's garage — repainting a locked kit changes a file the game never
loads for you.
The change is also only on your screen. Other riders see the kit
Zwift has on record, not your design.
What you can add
- Text — five bundled faces or your own
.ttf; black,
white or automatic ink; optional outline; rotation; position presets.
- Images — a PNG with a transparent background. A flat logo costs
about what text does; a photograph will not fit.
- Colour — recolour the whole garment, keeping its light and shade.
- The whole kit — export it as a PNG, repaint it in any image
editor, and bring it back. See below.
- Any number of layers, in any mix. Lower in the list paints on top.
Designing a whole kit: what fits
Your design has to compress into the space the original file occupied,
and that budget is small — typically a few kilobytes on top of the texture
itself. What decides it is how much detail your artwork has.
| Fits, with room to spare | Will not fit |
Flat colour fields Hard-edged stripes and shapes
Bold type Two-stop gradients Limited palettes, dithering off |
Photographs Film grain, noise, "fabric texture"
Soft airbrush and multi-hue gradients Anything exported with
dithering on |
The rule that surprises people: cost comes from edge length,
not colour count. Two hundred small shapes cost far more than a dozen
large ones, even in the same four colours. If a design will not fit, make the
shapes bigger before you make the palette smaller.
Turn dithering off. "Save for Web", indexed colour and
GIF export all default to it. The same sixteen colours fit comfortably without
dithering and fail with it — it sprays single-pixel noise across every
gradient, which is the one thing this format cannot compress.
Designing in GIMP, Photoshop or Affinity
There is a full round trip: take the kit out as a PNG, paint it however
you like in a real editor, and bring it back.
- Export PNG. Under Whole-kit artwork. You get the texture
at its true size — 1024×1024 for most kits — not a preview.
- Open it and paint. It is a flat, unwrapped map of the garment:
the jersey front and back sit in the top half, the shorts below. Use the
rider preview and the calibration grid here to work out which
region is which before you commit.
- Save as PNG at exactly the same pixel size. Do not resize,
do not crop, do not flatten to JPEG.
- Replace with a PNG. Your artwork becomes the kit. If the size is
wrong it is refused and told you so — nothing is silently stretched.
- Add text or a logo on top if you want. Layers still work, and
everything is encoded in one pass.
- Build & download, then put the file back.
| Do | Don't |
PNG, 8-bit RGB Exact original pixel size
Flat colour, hard edges Dithering off |
DDS / DXT export Resizing or cropping
JPEG (its ringing fights the format) Grain, noise, soft gradients |
Don't export DDS, even though GIMP can. Zwift's file
is not a DDS: it uses a different 18-byte header, its mip chain stops when the
smaller side reaches 8 rather than going to 1×1, and the whole thing is
compressed and padded to an exact byte length with a matching checksum. A
mipmapped DDS has three levels too many; one without mipmaps has seven too
few. Export a PNG and let this app do that part.
Transparency doesn't work on kits. Almost every garment texture is a
format with no alpha channel, so erased areas are filled in rather than
becoming see-through. Paint the colour you want instead of deleting.
Two things that waste time if you don't know them
- A dead strip. On a kit, roughly the band at 51–58% of the
texture's height sits on no part of the garment — it is invisible in game.
It is exactly where you land if you place a name "just below the jersey".
The app warns you.
- Distance eats detail. Zwift shows your kit at a few dozen pixels
in a pack. Anything thinner than about 16 px on a 1024-wide texture
disappears entirely. Bold and simple reads; fine detail does not.
If it will not fit
The build tries harder compression first, then shrinks your layers, drops
outlines, and reduces the palette. When it still misses it tells you how many
bytes over you are. Flatten the artwork, use fewer and larger shapes, or pick
a kit whose file is bigger — the roomier the original, the more you can spend.