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:
imagesbitmaps
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:
resourceascentheightshadow_color
resource must point to a readable PNG inside resourcepack/images/.
Bitmap entry
bitmaps.<id> can use:
resourcerowscolumnsascentheight
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
ascentmust be0or greaterheightmust be greater than0ascentcannot be greater thanheight- 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, not0-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
imagesfor small logos and inline icons - use
bitmapsfor title sheets and larger grouped UI strips - keep image ids stable because titles and placeholders depend on them
- rebuild with
/se zipafter changing assets so the generated pack matches the config