Animations (FMA/AFMA)

How to make and use FancyMenu animation files.

Animationslink

AFMA and FMA files are animated texture formats created for FancyMenu.

AFMA Fileslink

AFMA (Advanced FancyMenu Animation) is the successor to classic FMA files.

AFMA uses a non-ZIP format with smaller files, lower memory use, and better performance than classic FMA.

For large or complex animated textures, use AFMA instead of classic FMA.

Create AFMA files with the built-in creator:

  1. Open FancyMenu's menu bar.
  2. Go to Tools -> AFMA Creator.
  3. Import/convert your frames with the creator.

Classic FMA files remain supported, so existing layouts do not need to be converted immediately.

Classic FMA Fileslink

Making an FMAlink

A classic FMA file is a ZIP archive with a .fma extension.

File Extensionslink

Enable file extensions in your file manager before creating or renaming the files below.

On Windows, open File Explorer and enable View -> File name extensions.


Screenshot_9

Preparationlink

Create a folder named fancymenu_animation for the archive contents.

Create a required frames directory and an optional intro_frames directory inside it.

In the same folder, create metadata.json. Make sure its file extension is .json, not .txt.

The folder must now contain frames/, intro_frames/, and metadata.json.


Screenshot_3

The Metadata JSONlink

Open metadata.json in a text editor and use this template:

{
  "loop_count": 0,
  "frame_time": 41,
  "frame_time_intro": 41,
  "custom_frame_times": {
  },
  "custom_frame_times_intro": {
  }
}

Edit the values as needed.

loop_countlink

Controls how many times the animation plays. Use 0 to loop indefinitely. A positive value plays that many times, then holds the last frame.

frame_timelink

Sets how long each normal frame remains visible, in milliseconds.

frame_time_introlink

Sets the frame time for optional intro frames.

custom_frame_timeslink

Optionally overrides the duration of individual normal frames. This example keeps frames 0 and 1 visible for 5000 milliseconds while other frames use frame_time:

{
  "loop_count": 0,
  "frame_time": 41,
  "frame_time_intro": 41,
  "custom_frame_times": {
    "0": 5000,
    "1": 5000
  },
  "custom_frame_times_intro": {
  }
}

Frame indexes are zero-based: the first frame is 0, the second is 1, and so on.

Add a comma after every custom frame-time entry except the last one.

custom_frame_times_introlink

Uses the same format as custom_frame_times, but applies to optional intro frames.

Save metadata.json.

The Frameslink

Place normal frames in frames/. They must be PNG files named sequentially from 0.png, such as 0.png, 1.png, and 2.png. Other formats and names are not supported.

To extract frames from a video, see Extracting Frames with FFmpeg.


Screenshot_4

The Introlink

Place optional intro frames in intro_frames/. They follow the same PNG naming rules as normal frames, play once before the normal sequence, and do not loop.

Packing the FMA Filelink

Create a ZIP containing the folder's contents. metadata.json, frames/, and the optional intro_frames/ directory must be at the ZIP root, not inside another directory.

On Windows, select the contents of fancymenu_animation, right-click the selection, and choose Send to -> Compressed (zipped) folder.


Screenshot_6

Locate the resulting ZIP file.


Screenshot_7

Its root contents should look like this:

Screenshot_8

Rename the file to fancymenu_animation.fma, replacing the .zip extension. The base filename can be changed, but the .fma extension is required.

The renamed archive is now ready to use as an FMA file.

Using AFMA & FMA Files in FancyMenulink

Use AFMA/FMA files anywhere that accepts an image, including Image elements and Image menu backgrounds.

Store the AFMA/FMA file in <game-directory>/config/fancymenu/assets/ so it appears in FancyMenu's local resource chooser.