Texture compression and backup utility for S.T.A.L.K.E.R. Anomaly modlists.
S.T.A.L.K.E.R. Anomaly and its modpacks represent a labor of love by hundreds of modders, culminating in a unique and memorable gaming experience. However, the ecosystem ships many texture assets uncompressed. On hardware with limited VRAM, this causes stuttering, hitching, and outright crashes during gameplay. ATAK compresses those textures to BCn block compression formats, dramatically reducing VRAM pressure with minimal visual difference.
Works with GAMMA, EFP, and any Anomaly-based modpack.
As of 0.3.0, atak now ships with a second backend option, our fork of AMD compressonator with Richard Gelreich's excellent BC7 encoder. This backend boasts slightly higher quality output than texconv and 20x-200x faster. It's CPU only with SIMD acceleration. It's the default, and we highly recommend it. For GPU accelerated compression on Windows only, switch to texconv.
Grab the latest binary for your platform from Releases:
| Platform | File |
|---|---|
| Linux x86-64 | atak-vX.X.X-linux-x64.tar.gz |
| Windows x86-64 | atak-vX.X.X-windows-x64.zip |
| macOS (Intel + Apple Silicon) | atak-vX.X.X-macos.tar.gz |
No installation required.
Linux / macOS:
tar -xzf atak-vX.X.X-linux-x64.tar.gz
chmod +x atak-linux
./atak-linuxWindows: Extract the zip, run atak-windows.exe in Windows Terminal or PowerShell.
ATAK defaults to Mod Output Mode — a non-destructive workflow that outputs compressed textures to a separate MO2 mod folder instead of modifying your originals. This is the recommended approach.
Setup:
- Launch ATAK and go to Settings
- Set your MO2
modlist.txtpath - Set output mod name (default:
ATAK) - Go to Backup Manager and create a backup — still recommended as a safety net
- Go to Scan & Compress and press [r] to compress everything
- Add the output folder (e.g.
mods/ATAK/) as a mod in MO2 - Place it at the highest priority of your load order and enable it
To compress in-place instead (replaces original files — make a backup first): Disable Mod Output Mode in Settings. Then follow the backup-first workflow below.
In-place workflow:
- Go to Backup Manager — create a backup first, always
- Go to Scan & Compress
- Press [m] to compress a single mod first — verify it looks right in game
- If happy, press [r] to compress everything
- If something looks wrong, restore from backup
- Cancelling a compression job deletes the in-progress file — originals untouched
- Mod Output Mode without a valid modlist.txt will show 0 textures — check Settings if this happens
- ATAK was tested with G.A.M.M.A but should support most mods and mod packs. Feel free to report any bugs in the issue tracker.
- Texconv does not support GPU acceleration on Linux, and will likely take several hours to complete. I highly recommend using compressonator_bc7e instead.
- compressonator_bc7e is SIMD enabled and will very aggressively utilize your CPU cores. We highly reccomend killing background processes and setting your worker threads to 1-2.
- UI and Icon textures are incompatibile with BC7 in the xray-monolith engine. We recommend leaving them as 'BC3_UNORM'
- Backup functionality isn't necessary in mod output mode, which leaves your original mods installations intact. We highly recommend making a backup before using in-line mode.
- Backup Compression level default is 1. Increasing it reduces your archive size by a few gigabytes, but will take much longer. YMMV.
- 7-Zip backup progress is sparse on large solid archives — the archive is growing even when the progress bar appears stuck
- The default profiles should satisfy most users, but can be tuned for your individual case.
- Users with less than 8GB VRAM budget can use downscaling to get even more VRAM savings.
- We recommend against downscaling AND using BC7. Replace 'BC7_UNORM' with 'BC3_UNORM'. It may introduce severe artifacting, but tinkering is encouraged.
- MIP chains clamp your VRAM usage to the Texture MIP bias setting.
-
DirectX 9 does not support BC7. If you use DirectX 9, be sure to set every BC7_UNORM profile to BC3_UNORM.
-
Keep reading for more details and advanced functionality.
- Create compressed LZMA archives of your full Anomaly mods directory
- Restore individual mods or your entire modlist from backup
- Verify archive integrity
Non-destructive compression that reads your MO2 modlist.txt to build a virtual filesystem — the same merged view MO2 presents to the game. Only the winning file for each texture path is compressed (respecting load order). Output goes to a single flat mod folder you add to MO2.
- Your original textures are never modified
- Incremental updates — rerun after adding mods, only new files are compressed
- Delete the output folder to force full recompression
- If scan shows 0 textures, check your modlist.txt path in Settings
ATAK scans for uncompressed DDS textures and classifies them by type using filename patterns and directory paths. Only textures explicitly matched by a profile are compressed — nothing is touched blindly.
Default profiles cover the most common texture categories:
| Profile | Format | Detection method |
|---|---|---|
| Normal / bump maps | BC5 | _bump, _normal, _nrm, _norm suffixes |
| Sights / Reticles | BC3 | scope_reticles/, bonus_sights/, *crosshair* |
| Scope textures | BC7 | *scope*diff*, *scope*bump*, *lens_bump*, */textures/wpn/scope_* |
| UI / Icons | BC3 | textures/ui/ path |
| Diffuse / color | BC3 | _diff, _base, _col, _d suffixes |
| Weapon textures | BC3 | textures/wpn/, textures/rwap/ paths |
| Character / hands | BC3 | textures/act/, textures/MK/ paths |
| Sky textures | BC3 | textures/sky/ path |
| Terrain / detail | BC3 | textures/terrain/, textures/detail/ paths |
| Items | BC3 | textures/items/, textures/item/, textures/usable_items/ paths |
| Particle / FX | BC3 | textures/semitone/ path |
Already-compressed textures (~24,000 in a typical G.A.M.M.A install) are detected and skipped automatically.
Unmatched textures are never touched. Files that don't match any profile are shown in scan results but excluded from compression. Add patterns to profiles.json to include them.
ATAK uses BCn block compression — a GPU-native format that decompresses in hardware with no performance cost. The tradeoff is a small, usually imperceptible quality loss during the compression step.
| Format | Field value | Alpha | Quality | Size | Linux GPU | Best for |
|---|---|---|---|---|---|---|
| BC1 | BC1_UNORM |
No | Good | 0.5 bpt | Yes | Opaque diffuse, environment |
| BC3 | BC3_UNORM |
Yes | Good | 1 bpt | Yes | UI, general alpha textures |
| BC5 | BC5_UNORM |
No | Excellent | 1 bpt | Yes | Normal maps only |
| BC7 | BC7_UNORM |
Yes | Excellent | 1 bpt | No (CPU) | High quality diffuse, weapons |
bpt = bytes per texel
BC5 is required for normal maps — using BC3 on normal maps produces incorrect lighting. Do not change the Normal Maps profile format.
BC7 on Linux is CPU-only — no GPU acceleration available. Expect 40-60 minutes for large jobs. For faster Linux compression, use BC3 for all profiles (the default). Quality difference is minimal at normal viewing distances.
Mip chains: ATAK resolves mip generation per file. World-texture profiles (generateMips: true) always get a full chain built with cubic filtering, letting the engine load lower-resolution versions for distant objects and reducing effective VRAM further. Fixed-size art profiles (generateMips: false) follow the source instead — a texture that shipped with mips keeps them, one that didn't stays single-level. This matters for flares and scope reticles: many ship a mip chain and flattening them makes them alias and read as the wrong shade in-game. To force the old always-strip behavior for generateMips: false, enable stripMipsWhenDisabled in Settings. Keep your in-game texture quality setting at High — lowering it on top of BCn compression will reduce visual quality unnecessarily.
Config lives at:
- Linux:
~/.config/atak/ - Windows:
%AppData%\atak\ - macOS:
~/Library/Application Support/atak/
{
"modsDir": "/path/to/Anomaly/mods",
"backupDir": "/path/to/backups",
"workerCount": 1,
"backupLevel": 1,
"scanExclusions": [".*", "downloads", "Downloads", "G.A.M.M.A. UI"],
"modOutputMode": true,
"modOutputName": "ATAK",
"modlistPath": "/path/to/MO2/profiles/Default/modlist.txt",
"stripMipsWhenDisabled": false
}workerCount— concurrent texconv processes (compression only). Each worker pegs one CPU core. Default: 1backupLevel— 7-Zip compression level 1-9. Default: 1scanExclusions— directories to skip during scan. A plain name (downloads,.*) matches a directory or mod name anywhere; a path pattern (*/textures/ui/SquareDOV) matches a nested directory, using the same pattern syntax as the profile lists above. The matched directory and everything under it is skippedmodOutputMode— non-destructive output mode. Default: truemodOutputName— output mod folder name. Default: "ATAK"modlistPath— path to MO2modlist.txt. Required whenmodOutputModeis truestripMipsWhenDisabled— when true, profiles withgenerateMips: falsestrip mips entirely, dropping any chain the source shipped. When false (default), such a source keeps its chain (seegenerateMipsbelow). Never affectsgenerateMips: true. Toggle in Settings ("Strip Mips When Disabled")
Finding your modlist.txt:
- Usually at
<MO2 install>/profiles/<Profile Name>/modlist.txt - In MO2: click the profile dropdown → "Open Profile Folder"
Controls which textures get compressed and how. Created on first run from embedded defaults. Edit freely.
{
"minFileSizeBytes": 1024,
"excludePatterns": ["fx_sun*", "fx_*", "lut_*", "*#small*", "*cube#*"],
"profiles": [
{
"name": "Normal Maps",
"format": "BC5_UNORM",
"generateMips": true,
"maxTextureSize": 0,
"patterns": ["*_bump.*", "*_normal.*"],
"exclude": []
}
]
}Top-level fields:
minFileSizeBytes— skip files smaller than this. Default: 1024excludePatterns— glob patterns never compressed regardless of profile match. Matched against the filename, or against the full path when the pattern contains/. These run before profile matching, so an entry here always beats a profile pattern
Per-profile fields:
name— display name in scan resultsformat— compression format. See table abovegenerateMips— mip-chain policy, not an on/off switch.trueforces a full chain — use for world textures (diffuse, normals, weapons, terrain, sky) that minify with distance.falsepreserves the source's own choice: a source that shipped mips (many flares, scope reticles) keeps its chain, one that didn't (most flat UI art) stays single-level. Set thestripMipsWhenDisabledconfig option to makefalsestrip unconditionally insteadmaxTextureSize— cap output resolution.0= no limit. Set to1024on sky/terrain profiles for 4GB VRAM cards. Textures smaller than this value are never upscaledpatterns— glob patterns matched against filename or full pathexclude— optional. A file matching this profile'spatternsand itsexcludeis declined by this profile, and matching continues with later profiles. Use it to route exceptions elsewhere — Normal Maps declines*scope*bump*so scope lens bumps fall through to Scope Textures (BC7) instead of being flattened to two-channel BC5. To drop a file outright, use the top-levelexcludePatternsinstead
Pattern syntax:
*matches any characters except/;?matches a single character except/- Patterns without
/match filename only:*_bump.*matchesrock_bump.dds - Patterns with
/match full path:*/textures/wpn/scope_*matchesgamedata/textures/wpn/scope_30mm.dds - A trailing
/*is recursive — it covers the whole subtree, not just direct children.*/textures/ui/SquareDOV/*also excludestextures/ui/SquareDOV/nested/file.dds. A bare trailing/means the same thing, so*/textures/ui/SquareDOV/is equivalent - Matching is case-insensitive on all platforms
- Order matters — first match wins. Put specific patterns before general ones
Community profiles available in the profiles/ directory in the repository:
default.json— conservative BC3 defaults (same as embedded)quality.json— BC7 for weapons and characters (Windows GPU recommended)
Default profiles use BC3 for all textures except Normal Maps (BC5) and Scope Textures (BC7). BC3 produces minimal visible quality loss at typical Anomaly viewing distances and compresses quickly on all platforms.
Scope Textures is the one BC7 profile in the defaults. Scope lens textures often pack reflection, gloss, and specular data across all four RGBA channels, so BC5 would discard blue and alpha and BC3 would band the gradients. It covers a small number of files, so the CPU cost on Linux stays bounded — see Compression formats for the BC7 caveat.
For higher quality weapon and character textures, copy profiles/quality.json from the repository to your config directory — this uses BC7 for weapons and characters. Recommended for Windows users with GPU acceleration.
For 4GB VRAM cards, set "maxTextureSize": 1024 on Sky and Terrain profiles in profiles.json to reduce VRAM usage further beyond BCn compression.
Requires Go 1.21+.
git clone https://github.com/noisethanks/atak
cd atak
go build -o atak-linux .Release build:
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build \
-ldflags="-s -w -X main.version=v0.2.0" \
-o atak-linux .S.T.A.L.K.E.R. GAMMA is a large modpack for S.T.A.L.K.E.R. Anomaly maintained by Grok. Join the community on Discord.
- texconv (Texconv-Custom-DLL) — MIT — matyalatte
- 7-Zip — LGPL v2.1 — Igor Pavlov
- Bubble Tea — MIT — Charmbracelet
- Bubbles — MIT — Charmbracelet
- Lip Gloss — MIT — Charmbracelet
The optional compressonator-bc7e compression backend (Windows/Linux) additionally incorporates:
- AMD Compressonator — MIT — © 2024 Advanced Micro Devices, Inc.; © 2004-2006 ATI Technologies Inc.
- nlohmann/json — MIT — © 2013-2017 Niels Lohmann (linked into Compressonator)
- bc7e.ispc from richgel999/bc7enc_rdo — Apache License 2.0 — © 2018-2021 Binomial LLC (Richard Geldreich, Jr.)
This software incorporates bc7e.ispc from richgel999/bc7enc_rdo, © Richard Geldreich / Binomial LLC, licensed under the Apache License, Version 2.0.
Full license text for every third-party component ships in
licenses/compressonator-bc7e/ and is also available in-app via the About
screen.
If ATAK saved your playthrough, consider supporting development:
Made by mrchocolate

