How Shirts Work in Roblox and What You Actually Need to Know Before Uploading
Shirts in Roblox are player-created clothing assets that get applied to the default torso mesh of a character. They work as a texture map that wraps around the upper body part. The system is straightforward on paper but has a few quirks that waste a lot of people's time if they don't know about them upfront. You need to start with a blank template. Roblox provides one at their official template site. Download it and use any image editor that handles transparency properly. GIMP is free and works fine. Photoshop is better if you already have it. Both do the job. Here is the important part that most tutorials skip. The canvas is 512 by 512 pixels. The left side maps to the left sleeve and left torso panel. The right side maps to the right sleeve and right torso panel. The top band becomes the collar area. The bottom band wraps around the waist. If you put something on the far left edge, it will appear on both the left and right sides of the shirt because the template mirrors that section. I spent about forty minutes debugging why my design was showing up doubled on the character before I realized I had placed a stripe pattern along the outer edge without accounting for the mirror wrap. Move your important elements away from the extreme left and right borders and everything lines up correctly.
Once your image is ready, go to Roblox and navigate to the Create menu. Select Avatar and then find the shirt slot. Upload your image file. It must be a PNG with transparency. JPG files cause problems because the compression artifacts show up as visible noise on the fabric texture. Keep your file under four megabytes. Roblox compresses it anyway after upload, but uploading something too large can trigger rejection or excessive compression that makes your detail disappear. After upload, there is a review period. Most shirts get approved within a few minutes. Some take several hours. A few get rejected for various reasons. If yours gets rejected, check if it contains copyrighted material like brand logos or character art that belongs to someone else. The automated filter catches that quickly. It also flags images that are mostly solid colors with no real content, thinking it might be a quality or policy violation.
The Technical Details Nobody Talks About
The shirt UV mapping is fixed to the default HumanoidRigR15 mesh. That means your shirt design will stretch differently depending on the character type. R15 rigs display the shirt more proportionally. R6 rigs warp the texture because the body mesh is simpler and the mapping is less accurate. If you are designing for maximum compatibility, test on both rigs before publishing. I typically preview my designs by applying them to a free model character that supports R15, then switching to an R6 model in the same place to check for visible distortion. Another thing that trips people up. Shirt textures do not interact with lighting in a physically accurate way. Roblox uses a simple diffuse color map. There is no normal mapping or specular channel for player-created shirts. This means your shirt will look flat no matter how much detail you add with shading. It also means dark designs will not actually look darker in shadow areas. The texture is baked flat. Understanding this early saves you from wasting time adding gradient shading that the game engine will never render properly. The repeat rate for uploads is strict. You cannot upload the same image twice. If you make a small edit and want to reupload, you have to change the image file enough that Roblox's content filter sees it as different. Slight color adjustments or minor geometric changes are usually enough. The system compares pixel data and hash values. Identical files get blocked immediately. This is intentional to prevent spam and asset flipping.
Get the Full Details

Practical Workflow for Consistent Results
I design shirts in a specific order now instead of jumping straight into the artwork. First I set up the canvas at 512 by 512. Then I draw the center panel that will appear on the front and back of the torso. After that I handle the sleeve areas separately. The sleeves are narrow strips on the far left and right. Working on them last prevents me from accidentally designing elements that will get mirrored and duplicated in unexpected places. I save the working file as a layered PSD or XCF file so I can go back and modify individual elements. The final export goes out as a PNG with the transparency layer intact. I keep the file size between 800 kilobytes and 1.5 megabytes before upload. Anything under 800K tends to get compressed into blurriness on the server side. Anything over two megabytes triggers extra compression that degrades quality regardless. This range seems to be the sweet spot where Roblox applies minimal additional compression. If you need a proper shirt template link, go to the Roblox Creator website and search for the official shirt template. The page will give you the correct dimensions and show you a preview of how the UV map is laid out. Using the official template prevents alignment mistakes that happen when people design from scratch without understanding the mapping structure.
When Shirts Are Not the Right Tool
There are cases where the shirt system simply will not work for what you are trying to do. If you need clothing that covers arms, legs, or the head, a shirt alone will not achieve that. Shirts only affect the torso. For full body outfits you need to use a bundle asset or create separate clothing pieces and combine them. Shirts also do not animate. If you want a cape or flowing fabric effect, you need to build that as a separate accessory or use a mesh tool. The shirt system is static texture placement. That is it. It is useful for basic clothing, team uniforms, and branded designs. It is not useful for anything requiring movement, multiple body parts, or complex layering. Another limitation worth noting. Player created shirts cannot be combined with certain game mechanics that override avatar rendering. Some games use custom meshes for characters or apply their own texture overrides. In those cases your shirt may not appear at all, or it may appear completely different from what you designed. This is not a bug. It is just how the rendering pipeline works when a game takes control of the character model. Keep your designs simple. The more complex the texture, the more it degrades through Roblox's compression pipeline. Clean shapes and solid colors hold up better than detailed illustrations. This is not an opinion. It is a technical constraint of the platform.