Texture {kb(texture.rawBytes)} decoded · deflate ×{texture.ratio} · sheet {texture.width}×{texture.height} · {texture.spriteCount} frames
{texture.format === "png" ? (Legacy PNG texture. Re-importing as WebP Lossless would store{" "} {kb(texture.webpEstimate.bytes)} {texture.webpEstimate.savingBytes > 0 ? ( <> , saving {kb(texture.webpEstimate.savingBytes)} ( {texture.webpEstimate.bytes > 0 ? Math.round( (1 - texture.webpEstimate.bytes / texture.rawBytes) * 100, ) : 0} % smaller) > ) : ( " (no gain on this bundle)" )}
) : (WebP Lossless stores {kb(texture.rawBytes)} against{" "} {kb(texture.pngEstimate.bytes)} for the same artwork as PNG {pngSaving > 0 ? ( <> , saving {kb(pngSaving)} ( {texture.pngEstimate.bytes > 0 ? Math.round((pngSaving / texture.pngEstimate.bytes) * 100) : 0} % smaller) > ) : ( " (PNG is not larger on this bundle)" )}
)}{visibleDiffs === 0 ? ( <> Pixel-exact — every visible texel round-trips unchanged. {texture.invisibleDifferences > 0 && ( {" "} {texture.invisibleDifferences.toLocaleString()} fully transparent texels carry no RGB, which VP8L discards and no renderer can see. )} > ) : ( {visibleDiffs.toLocaleString()} texel {visibleDiffs === 1 ? "" : "s"} differ after a lossless round-trip — the furniture may not render identically. )}
{report.assets.length} sprites · {report.animations.length} animation definitions · directions {report.directions.join(", ") || "—"}
{report.state === "missing" && (This bundle contains no sprites at this scale. Missing scale 32 does not by itself mean the furniture is unusable.
)} {report.assets.length > 0 && ( <>This sprite could not be rendered.
) : (Inspect the saved bundle at both scales. Previews show individual sprites, not the assembled furniture or animation playback.
{error}
) : !report ? (Checking scales and texture references…
) : (