Skip to content

WoozyMasta/imageset-packer

Repository files navigation

ImageSet Packer

ImageSet Packer

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:

  • .edds atlas with configurable format (bgra8, dxt1, dxt5)
  • .imageset descriptor 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

Main commands

Help for available commands

imageset-packer -h

Help for flags of a specific command

imageset-packer pack -h

pack

preview

Packs 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 ./icons

Packs ./icons into icons.imageset + icons.edds in the same folder.

imageset-packer pack ./icons ./out -x 3 -g 2 -f -P mod/data/images

Packing with 3 mipmap levels, 2px gap, overwrite enabled, and the texture path set in the imageset.

imageset-packer pack ./icons -F dxt5 -q 8

Packing with DXT-compressed output format and explicit encoder quality.

imageset-packer pack ./icons --skip-unchanged

Skips 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.

build

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 build

Builds all projects from .imageset-packer.yaml.

unpack

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 --groups

convert

Helper 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 1

Build automation

Simple .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: true

Detailed 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

Recommendations

  • 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: bgra8 and mipmaps: 1.
  • dxt1 is 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, 1 fastest, 8 high quality).
  • For UI icons and UI parts, avoid long mipmap chains: usually 1-4 levels are enough.
  • If the build is automated and .imageset/.edds artifacts are not in .gitignore, enable force to ensure files are overwritten.
  • For frequent local runs, use skip_unchanged to avoid noisy commits. The hash is stored in .imagehash; add these files to .gitignore if desired, especially if source images are not tracked.
  • For UI elements, gap is useful when mipmaps are enabled and there are many small elements. Usually 2-6 is 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.

Known behavior and fixes

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 ...

About

CLI tool for automating the creation of DayZ image sets (.imageset + .edds) from folders with PNG/TGA/TIFF/BMP files.

Topics

Resources

License

Stars

Watchers

Forks

Contributors