Font Images

Images and Font Assets

SkinEngine now loads managed image assets from:

/plugins/SkinEngine/packs/<pack_id>/configs/images.yml

and from image files in:

/plugins/SkinEngine/packs/<pack_id>/resourcepack/images/

What this system is for

This system is mainly for text-driven visuals, not normal item skins.

Managed images are used for:

  • GUI backgrounds
  • title strips
  • icon-style text inserts
  • bitmap atlases
  • image tokens such as {$image:pack_image}
  • PlaceholderAPI image placeholders such as %se_image_pack_image%

If you are trying to style a GUI item icon, you will often combine this page with:

File structure

Example:

my_pack/
├ configs/
│  └ images.yml
└ resourcepack/
   └ images/
      ├ gui/
      │  └ frame.png
      └ icons/
         └ logo.png

images.yml

The file supports two top-level sections:

  • images
  • bitmaps

Use images for standalone PNG entries.

Use bitmaps when one PNG contains many slices, such as a stacked title sheet.

This is how the built-in skinengine pack handles GUI title strips: one bitmap plus many image entries that each point to one bitmap cell.


Single image example

images:
  logo:
    resource: "icons/logo.png"
    ascent: 8
    height: 8
    shadow_color: "#FF000000"

Bitmap example

bitmaps:
  titles_en:
    resource: "titles_en.png"
    rows: 27
    columns: 1
    ascent: 20
    height: 20

images:
  title_main:
    bitmap:
      id: "titles_en"
      row: 1
      column: 1

What each field means

Single image entry

images.<id> can use:

  • resource
  • ascent
  • height
  • shadow_color

resource must point to a readable PNG inside resourcepack/images/.


Bitmap entry

bitmaps.<id> can use:

  • resource
  • rows
  • columns
  • ascent
  • height

The source PNG must divide cleanly into the configured number of rows and columns.


Bitmap-linked image entry

An image can point to one bitmap cell using:

images:
  title_main:
    bitmap:
      id: "titles_en"
      row: 1
      column: 1

In that form, the image inherits resource, ascent, and height from the parent bitmap. Defining those fields again on the child entry is rejected by the loader.

Rules

  • image ids and bitmap ids may only use letters, numbers, and _
  • image resources must stay inside resourcepack/images/
  • image resources must be readable PNG files
  • ascent must be 0 or greater
  • height must be greater than 0
  • ascent cannot be greater than height
  • bitmap rows and columns must both be greater than 0
  • bitmap-linked image entries inherit resource, ascent, and height from the parent bitmap
  • a bitmap cell can only be assigned to one image entry
  • linked bitmap rows and columns are 1-based, not 0-based

Tokens

SkinEngine supports:

  • {$image:pack_image}
  • {$offset:<pixels>}

Examples:

<white>{$offset:-48}{$image:skinengine_gui_start}
<white>{$image:my_pack_logo}

That means the token key is not just the image id. It is:

<pack_id>_<image_id>

So image logo inside pack my_pack becomes:

{$image:my_pack_logo}

Codepoints

Image codepoints are allocated automatically inside:

After adding or changing images, rebuild with /se zip.

Where images are actually used

The current plugin uses this system for:

  • translated GUI titles in translations/<language>/guis.yml
  • text components that include {$image:...}
  • text components that include {$offset:...}
  • PlaceholderAPI image output such as %se_image_pack_image%

This is why the feature belongs to the text layer, not the item-model layer.

When to use this page vs decorative items

Use images when you want:

  • text-like inserted graphics
  • title bars
  • offset-based UI composition
  • PlaceholderAPI image output

Use decorative items when you want:

  • actual item-model icons
  • item-model references in guis.yml
  • GUI buttons that look like custom items

Good patterns

  • use standalone images for small logos and inline icons
  • use bitmaps for title sheets and larger grouped UI strips
  • keep image ids stable because titles and placeholders depend on them
  • rebuild with /se zip after changing assets so the generated pack matches the config