Brahoule Studio - Texture Medic

The engine can already tell you what is big. Almost nothing tells you what is wrong.

TextureMedic measures every texture in your project without opening a single package, separates

genuine waste from settings that are simply incorrect, and lets you fix both in bulk — with a full

change list before anything is written and one-click undo after.

### It measures the whole project in seconds

Dimensions and pixel format are both recorded in the asset registry, so a project with forty

thousand textures is measured in the time it takes to list them. Nothing is loaded. Sort by memory,

resolution or format, filter by folder, and see the total for exactly what is on screen.

Every byte comes from the engine's own pixel-format block table, with the real mip chain summed

rather than approximated — not a percentage somebody liked the sound of.

### It finds the bugs that never look like bugs

Some texture settings are not a matter of budget. They are wrong, and they never announce

themselves:

- Grayscale compression with sRGB enabled does not give you G8. The engine silently falls back

to uncompressed RGBA8 — eight times the memory. Epic documents this in a tooltip on the

compression dropdown and nowhere else. In most projects this is the single largest win available.

- sRGB on a normal map, mask or roughness texture applies a curve meant for colour perception to

data that was never colour. Every material sampling it gets values that are subtly wrong, forever.

It does not crash, does not warn, and does not look broken — so nobody ever files it.

- A texture sampled as a normal map that was never compressed as one. The material editor reports

this when you compile it, which is no help at all across four hundred materials nobody has opened

since the day they were made.

- Uncompressed art, missing mip chains, non-power-of-two imports, and the editor-icon compression

setting quietly storing shipping textures at four bytes a pixel.

### Three numbers, and never one

Most tools would add all of that up and print one big headline. TextureMedic reports three, on

purpose:

- Recoverable — what pressing Fix All actually gives back. Only correctness findings with an

automatic fix count, so the number is reproducible by pressing the button.

- Potential — available from waste findings, if you agree with them. Dropping a resolution is a

decision, not a fix.

- Added by correctness fixes — because some fixes cost memory. A normal map wrongly stored as

BC1 doubles in size when it is correctly stored as BC5. Hiding that would be a lie by omission the

first time somebody applied everything and measured the result.

Where a fix does not deterministically change the pixel format, no saving is claimed at all.

### Batch editing that cannot bite you

26 fields across Compression, Level of Detail, Texture and Import Adjustments — compression

settings, sRGB, texture group, maximum size, LOD bias, mip generation, Never Stream, virtual

texturing, filtering, addressing, flip green channel, and the full set of import colour adjustments.

Only fields you explicitly tick are ever written, so a preset carrying three settings cannot reset

the other twenty-three. Mixed values across a selection show as Multiple Values. A field that

cannot reach every selected asset says so — 12 of 30 — instead of silently doing nothing.

Nothing is written until you have seen the exact change list: one row per property that would

actually move, with the value before and after, exportable to CSV. The entire batch is a single undo

transaction, so Ctrl+Z puts every asset back in one step, and there is an explicit Revert Last Batch

button as well.

### Decide it once, keep it

Presets are assets that store only the fields that were set when you saved them. Rules bind a

preset to a folder or a name pattern — so /Game/Props gets one resolution ceiling and

/Game/Characters/Hero gets another, and the tool stops guessing what is "too big". One Re-apply

Rules button puts the whole project back in line after three months of imports.

### Also finds

Materials over the sampler budget (SM5 exposes 16 slots and the engine reserves several — a material

past a dozen will fail to compile on some targets, and mobile and VR are tighter still); textures

pinned in memory with Never Stream; and one source image imported twice as separate assets, which a

byte-identical comparison can never pair.

Runs headless as a commandlet for CI, exiting non-zero only on a Critical finding.

### Ideal for

Any project shipping to a platform with a memory budget — which is all of them. Especially mobile

and VR, where the sampler budget and the streaming pool are hard limits rather than guidelines, and

any team that has ever asked where 4 GB of textures came from.