Quick answer: Pygame loaded PNG appearing washed out or color-shifted? The display surface format differs from the loaded surface — call convert() or convert_alpha() after load.
Sprites loaded with pygame.image.load render with a slight blue cast versus the source PNG. The source is 32-bit RGBA; the display is 24-bit RGB without conversion.
Convert After Load
img = pygame.image.load("sprite.png").convert_alpha()Converts the surface to the display’s pixel format — faster blits and accurate colors.
Color Profile
Pygame doesn’t honor PNG color profiles (sRGB metadata). If your source was authored in a wide-gamut workspace, export to sRGB and strip the embedded profile before shipping.
Alpha vs Colorkey
convert for opaque sprites; convert_alpha for per-pixel alpha. Mixing them up gives black halos around feathered edges.
Verifying
Loaded sprites match the source PNG visually side-by-side, no color drift.
“Convert every load to the display format. Use convert_alpha for transparent PNGs.”
Wrap image.load in a tiny helper that always converts — you’ll never debug forgotten-convert color bugs again.