Anuken/Mindustry · error · IllegalArgumentException
Max image size exceeded
Error message
Max image size exceeded
What it means
While packing generated data images into the atlas, DataManager installs a MultiPacker.add override that rejects any region whose pixmap width exceeds 2000 pixels. Oversized textures are refused to keep atlas pages within safe GPU limits.
Source
Thrown at core/src/mindustry/mod/DataManager.java:87
//remove content that doesn't need to be packed
contentToPack.removeAll(u -> imagesWithHashes.contains(hashes.get(u)));
ObjectMap<String, ImageAsset> imageMap = new ObjectMap<>();
for(var image : images){
imageMap.put(DataImagePacker.regionPrefix + image.name, image);
}
int[] packed = {0};
ObjectMap<String, PixmapRegion> imagePixmaps = new ObjectMap<>();
PixmapRegion error = new PixmapRegion(Pixmaps.blankPixmap());
UnlockableContent[] currentContent = {null};
String[] currentHash = {null};
MultiPacker saver = new MultiPacker(false){
@Override
public void add(PageType type, String name, PixmapRegion region, int[] splits, int[] pads){
try{
if(region.pixmap.width > 2000) throw new IllegalArgumentException("Max image size exceeded");
//strip duplicate prefix
if(name.startsWith(DataImagePacker.regionPrefix)) name = name.substring(DataImagePacker.regionPrefix.length());
String path = "generated/" + currentHash[0] + "/" + name + ".png";
ImageAsset newImage = new ImageAsset();
newImage.setPath(path);
//it would be nice to do this async, but the pixmap typically gets disposed right after add() exist
byte[] bytes = PixmapIO.writePngBytes(region.pixmap);
newImage.updateData(bytes);
images.add(newImage);
packed[0] ++;
}catch(Exception e){
Log.err("Failed to pack image " + name, e);
}
}
@OverrideView on GitHub (pinned to f695ad7e60)
Solutions
- Resize the offending image so its width is at most 2000px.
- Split a large sheet into several smaller textures.
- Identify the culprit from the packing log / currentHash path.
Example fix
// before: sprite.png is 4096x4096 -> 'Max image size exceeded' // after: downscale to <=2000px width (e.g. 1024x1024) and re-export
Defensive patterns
Strategy: validation
Validate before calling
// Reject oversized textures before packing.
if(region.pixmap.width > 2000) {
throw new IllegalArgumentException("Texture too wide (" + region.pixmap.width + " > 2000): " + name);
} Type guard
boolean withinAtlasLimit(PixmapRegion r){ return r != null && r.pixmap.width <= 2000; } Prevention
- Cap sprite widths at 2000px during asset authoring.
- Split large sheets into multiple textures.
- Automate size checks in the mod build pipeline.
When it happens
Trigger: A data image (sprite) contributed to the packer is wider than 2000px during the data-image packing pass.
Common situations: Mod or generated asset includes an oversized sprite sheet; full-resolution artwork not downscaled; accidentally bundling a UI screenshot as a sprite.
Related errors
- Calling getPixmap outside of createIcons is not supported!
- Failed to load image {file} for mod {mod.name}
- Cache file for asset {path} not found!
- SectorPresets must have a sector number.
- '${field.field.getName()}' in ${className} is missing! ${obj
AI-assisted analysis of Anuken/Mindustry@f695ad7e60 (2026-08-14).
Data as JSON: /api/errors/33c87bbccca68ca3.
Report an issue: GitHub.