imageset-packer is a CLI tool for building DayZ .imageset + .edds
from folders with PNG/TGA/TIFF/BMP files.
It replaces the routine manual atlas creation in Workbench:
just organize your source images into folders, run pack,
and you get correct placement, good atlas density,
and ready-to-use files for your DayZ mod.
Typical workflow: prepare source icons in a folder tree, run one command, and get production-ready outputs:
.eddsatlas with configurable format (bgra8,dxt1,dxt5).imagesetdescriptor with positions/sizes and optional groups- optional mipmap chain and quality control for DXT compression
- stable output naming for automated builds and CI pipelines
What this utility gives you in practice:
- no manual sprite placement in Workbench
- deterministic atlas generation for repeatable builds
- YAML-based multi-project build mode for larger mod repositories
- conversion and unpack helpers for migration from legacy atlases
Help for available commands
imageset-packer -hHelp for flags of a specific command
imageset-packer pack -hPacks a folder of images into a single atlas (.edds) and
a .imageset description file.
Packing heuristic reference with visuals and explanations: https://github.com/WoozyMasta/atlasforge/blob/master/README.md#packing-examples
Examples:
imageset-packer pack ./iconsPacks ./icons into icons.imageset + icons.edds in the same folder.
imageset-packer pack ./icons ./out -x 3 -g 2 -f -P mod/data/imagesPacking with 3 mipmap levels, 2px gap, overwrite enabled, and the texture path set in the imageset.
imageset-packer pack ./icons -F dxt5 -q 8Packing with DXT-compressed output format and explicit encoder quality.
imageset-packer pack ./icons --skip-unchangedSkips writing if the input files have not changed.
Tip
--skip-unchanged is useful for local builds and CI.
A small .imagehash file is created next to the outputs.
Runs multiple packing tasks from a YAML config. Useful for CI and automation.
The .imageset-packer.yaml file is recommended at the project root.
A detailed example can be found here.
imageset-packer buildBuilds all projects from .imageset-packer.yaml.
Migration helper.
Splits an existing project .imageset + .edds into separate images.
This lets you convert an old atlas into a folder structure
and switch to imageset-packer as the main tool.
# Extracts images and splits groups into subfolders.
imageset-packer unpack ui.imageset ui.edds --groupsHelper utility for converting a single file between PNG/TGA/TIFF/BMP/DDS/EDDS formats.
Example:
# EDDS to PNG, file type is determined by the extension
imageset-packer convert atlas.edds atlas.png# PNG to EDDS with explicit format/quality
imageset-packer convert icon.png icon.edds -F dxt1 -q 8 -x 1Simple .imageset-packer.yaml example.
# .imageset-packer.yaml
projects:
- name: hud
args:
input_dir: ./images/hud
output_dir: ./data/images
edds_path: mod/data/images
camel_case: true
force: true
skip_unchanged: true
packing:
gap: 2
mipmaps: 1
output_format: bgra8
quality: 0
input:
group_dirs: true
- name: ui
args:
input_dir: ./images/ui
output_dir: ./data/images
edds_path: mod/data/images
camel_case: true
force: true
skip_unchanged: true
packing:
gap: 2
mipmaps: 2
output_format: dxt5
quality: 8
input:
group_dirs: trueDetailed example file: .imageset-packer.yaml.
Advanced example with anchors and reuse (4 atlases)
# .imageset-packer.yaml
defaults: &defaults
edds_path: mod/data/images
camel_case: true
force: true
skip_unchanged: true
packing: &packing
gap: 2
mipmaps: 1
output_format: bgra8
quality: 0
input: &input
group_dirs: true
projects:
- name: chars
args:
input_dir: ./chars
output_dir: ./out
<<: *defaults
- name: ui
args:
input_dir: ./ui
output_dir: ./out
<<: *defaults
packing:
<<: *packing
mipmaps: 2
- name: markers
args:
input_dir: ./markers
output_dir: ./out
<<: *defaults
- name: hud
args:
input_dir: ./hud
output_dir: ./out
<<: *defaults
packing:
<<: *packing
mipmaps: 2- Keep a clear folder structure and stable file names.
- Supported atlas formats:
bgra8,dxt1,dxt5. - Default atlas output is
bgra8(DXGI_FORMAT_B8G8R8A8_UNORM). - For UI icon atlases, recommended baseline is:
output_format: bgra8andmipmaps: 1. dxt1is suitable for opaque assets, but it does not preserve soft alpha.- If you need compressed output with transparency, prefer
dxt5. - DXT quality uses
0..10(0= library optimal default,1fastest,8high quality). - For UI icons and UI parts, avoid long mipmap chains: usually 1-4 levels are enough.
- If the build is automated and
.imageset/.eddsartifacts are not in.gitignore, enableforceto ensure files are overwritten. - For frequent local runs, use
skip_unchangedto avoid noisy commits. The hash is stored in.imagehash; add these files to.gitignoreif desired, especially if source images are not tracked. - For UI elements,
gapis useful when mipmaps are enabled and there are many small elements. Usually2-6is enough, but it reduces atlas density. This option is not required, but it can help if neighboring elements bleed into the current element when scaled.
Caution
--skip-unchanged considers only the contents of input files.
If you change packing parameters (gap/mipmaps/path, etc.),
run without --skip-unchanged or delete .imagehash.
Warning
Windows + MSYS2/Git Bash may require disabling path conversion for
--edds-path:
MSYS2_ARG_CONV_EXCL='--edds-path;-P' go run ./cmd/imageset-packer/ pack ...
