Interactive Graphics
Interactive Graphics Streams (IG or IGS) is the main graphics format for interactive menus in HDMV mode.
| Type of format | Graphics Format | |
|---|---|---|
| First released | 2006 | |
| Developer | Blu-ray Disc Association | |
| Filename extension | None* | |
| Limits | 32 Streams | |
| Open Format? | Yes | |
| Free Format? | ? | |
| Magic Number | ? | |
Interactive Graphics are displayed on its own independent layer on top of the Presentation Graphics; it is similar to Presentation Graphics (PG) used for subtitles (both layers are on top of the Primary Video). The graphics (along with its code, X-Y coordinates, and other data) are stored inside M2TS files, separated by ones used for video, audio, and subtitles. The graphics are decoded from the Blu-ray player's special graphics decoder. The max file size is 6 MB (48mbps) per M2TS file and can only use 32 streams. The max graphics memory buffer size is 16 MB in HDMV mode. Interactive Graphics are not available on BD-J mode as they are replaced with Java Graphics.
![]() |
| Interactive Graphics on top of the Primary Video |
Features:
- It uses simple 8-bit colors and transparency (256 color palette), this is useful for simple graphics but complex ones like photos will cause dithering a la GIF.
Unlike Java Graphics (PNG, JPEG), Interactive Graphics use simple animations: Fade In/Out, Color changing, Wipe In/Out, and Scrolling. Despite being simple, they take a lot of space in the graphics memory buffer.
Example of Dithering
- It's resolution plane size supports 1920x1080/1280x720/720x480/720x576.
- Uses Run-length encoding, a simple compression method.
Interactive Graphics do not support true overlapping, but can be categorized into "Button Overlap Groups" (BOGs). Example: 0005.m2ts contains the graphics and code for the menu. A single BOG would contain 3 objects for a single button, Normal (not selected), Hover (selected), and Pressed.
![]() |
| BOG Example w/ 3 objects |
0005 (IG stream) >
0000 (BOG) >
0000 (Object)
0005_0000_0000 - Normal
0005_0000_0001 - Hover
0005_0000_0002 - Pressed
Interactive Graphics cannot be "opened" on a normal image program on a computer (it can't be demuxed with normal demuxing software), it must be opened by specialized Blu-ray editing software such as BDedit, BDReauthor, IGEditor, IGparser, etc. Some of these programs can let you create the graphics using PNG or PSD files and then convert those files to IGS format and vice versa.
Inside a Interactive Graphics Stream
This is the raw binary data of the IG stream
Overall Structure
- Interactive Composition Segment (ICS)
- Magic Number
- Presentation Time Stamp
- Decoding Time Stamp
- Segment Type: ICS
- Segment size
- Width
- Height
- Frame rate
- Composition Number
- Composition State
- Sequence Descriptor
- Data Length
- UI Model Flags
- User Timeout Duration
- Total Pages
- Page Information
Page NumberUser Operation Mask 1User Operation Mask 2Number of In/Out Effect Windows- Window ID
- X Coordinates
- Y Coordinates
- Width
- Height
- Number of Effects
- Effects
- Duration
- Pallete
- Composition Object.
- Object ID
- Window ID
- X Position
- Y Position
- Object Cropping
- Object Cropping Horizontal Position
- Object Cropping Vertical Position
- Object Cropping Width
- Object Cropping Height
Animation Frame Rate Code (divider)Default Selected ButtonDefault Activated ButtonPalette IDNumber of BOGs on this Page
- Button Overlap Group(s)
Default Valid Button -Number of Buttons
- Buttons
Button IDValue: button_numeric_select_valuea.act: auto_action_flagX: button_horizontal_positionY: button_vertical_positionupper: upper_button_id_reflower: lower_button_id_refleft: left_button_id_refright: right_button_id_refn.start: normal_start_object_id_refn.end: normal_end_object_id_refn.repeat: normal_repeat_object_flags.sound: selected_state_sound_id_ref (from sound.bdmv)s.start: selected_start_object_id_refs.end: selected_end_object_id_refs.repeat: selected_repeat_object_id_refa.sound: activated_state_sound_id_ref (from sound.bdmv)a.start: activated_start_object_id_refa.end: activated_end_object_id_refNumber of Commands
- Commands
50 40 00 01 00 00 00 00 00 00 00 0050 40 00 01 00 00 00 01 00 00 00 0851 00 00 03 80 00 00 00 C0 00 00 0100 00 00 00 00 00 00 00 00 00 00 00
- Pallete: Palette Definition Segment (PDS)
- Header "IG"
- Presentation Time Stamp
- Decoding Time Stamp
- Segment Type: PDS
- PDS size
- Palette ID
- Palette Version Number
- Palette Entry ID
- Luminance (Y)
- Color Difference Red (Cr)
- Color Difference Blue (Cb)
- Opacity
- Transparency (Alpha)
- Object: Object Definition Segment (ODS)
- Header "IG"
- Presentation Time Stamp
- Decoding Time Stamp
- Segment Type: ODS
- Segment Size
- Object ID
- Sequence Flags
- RLE Data Size (uint32)
- Width
- Height
- RLE Data
- End of ODS
- End of Display Segment (END)
- Header "IG"
- Presentation Time Stamp
- Decoding Time Stamp
- Segment Type: END
- Segment Length
| Example Code |
|---|
|
Segments & sections in detail
Data inside a IGS is made of several segments and sections:
| Name | Description | Byte Size |
|---|---|---|
| Magic Number | Shows the magic number 0x4947 = "IG" |
2 |
| Presentation Time Stamp | Indicates exact moment a decoded IG's sub-picture should be displayed/presented (synchronized) to the user (at a frequency of 90KHz). | 4 |
| Decoding Time Stamp | Indicates the precise moment when the decoding of the IG starts (at a frequency of 90KHz). | 4 |
| Segment Type: ICS | Segment Type: Interactive Composition Segment 0x18 |
1 |
| Segment Length | Size of the segment | 2 |
| Width | Video width in pixels (ex. 0x780 = 1920) |
2 |
| Height | Video height in pixels (ex. 0x438 = 1080) |
2 |
| Frame rate | Framerate ID | 1 |
| Composition Number | Number of this specific composition | 2 |
| Composition State | Type of this composition. Allowed values are:
|
1 |
| Sequence Descriptor | Strictly used to handle fragmentation. Sometimes, a graphics payload (like a massive high-res image or a wildly complex menu) is simply too large to be transmitted or processed in a single chunk. When this happens, the encoder splits the data into multiple segments. The Sequence Descriptor tells the decoder how to reassemble those "puzzle pieces". Allowed values are:
|
1 |
| Total Data Length | - | 3 |
| UI Model Flags | User Interface Model: The top bit of this byte acts as a boolean switch (0 or 1) to tell the decoder what kind of menu it is looking at:
|
1 |
| User Timeout Duration | Acts as a countdown timer. It defines exactly how long the Blu-ray player will wait for a user to press a button on their remote control before the menu automatically "gives up" and triggers a default fallback action. For a Pop-up Menu, the fallback action is usually hiding the menu. For a Top Menu, it might be automatically starting the feature film. Because Blu-ray relies on extremely precise timing to keep video, audio, and graphics perfectly synced, this duration is not measured in normal seconds. It is measured using the Blu-ray player's internal 90kHz clock (where 90,000 "ticks" equals 1 second).
|
3 |
| Total Pages | Total Number of Pages | 1 |
Page Information
Pages for the menu; 255 pages max.
| Name | Description | Byte Size |
|---|---|---|
| Page Number | Shows the page number; e.g. 0B = 11 pages |
1 |
| User Operation Mask 1 | User Operation Mask 1 | 4 |
| User Operation Mask 2 | User Operation Mask 2 | 1 |
| Number of In/Out Effect Windows | Shows how many In/Out Effect Windows are present (See: In/Out Effect for more detailed info ) |
- |
| Animation Frame Rate Code (divider) | - | 1 |
| Default Selected Button | Shows the Default Selected Button for this page | 2 |
| Default Activated Button | Shows the Default Activated Button for this page | 2 |
| Palette ID | Pallete ID used for this Page | 1 |
| Number of BOGs | Shows the number of Button Overlap Groups (BOGs) used in this page | 1 |
| Name | Description | Byte Size |
|---|---|---|
| Number of In/Out Effect Windows | 1 | |
| Window ID |
|
8 |
| Number of Effects | 1 | |
| Effects |
|
5 |
| Composition Object |
|
8 |
| Object Cropping |
|
8 |
Button Overlap Group(s)
Only 256 BOGs are allowed.
| Name | Description | Byte Size |
|---|---|---|
| Default Valid Button | Default Valid Number for the BOG; e.g. 0x0001 | 2 |
| Number of Buttons | Number of Buttons present in this BOG | 1 |
| Name | Description | Byte Size |
|---|---|---|
| Button ID | Button ID; e.g. 0x0001 |
2 |
| Value | Button_numeric_select_value | 2 |
| a.act | Auto_action_flag | 1 |
| X | Button_horizontal_position | 2 |
| Y | Button_vertical_position | 2 |
| upper | Upper_button_id_ref | 2 |
| lower | Lower_button_id_ref | 2 |
| left | left_button_id_ref | 2 |
| right | right_button_id_ref | 2 |
| n.start | normal_start_object_id_ref | 2 |
| n.end | normal_end_object_id_ref | 2 |
| n.repeat | normal_repeat_object_flag | 1 |
| s.sound | selected_state_sound_id_ref (from sound.bdmv) | 1 |
| s.start | selected_start_object_id_ref | 2 |
| s.end | selected_end_object_id_ref | 2 |
| s.repeat | selected_repeat_object_id_ref | 1 |
| a.sound | activated_state_sound_id_ref (from sound.bdmv) | 1 |
| a.start | activated_start_object_id_ref | 2 |
| a.end | activated_end_object_id_ref | 2 |
| Commands | Navigation Commands for the button(s); same programming language for Movie Objects Example:
|
Varies |
| Name | Description | Byte Size |
|---|---|---|
| Header | Header "IG" 0x4947 |
1 |
| PTS | Presentation Time Stamp | 4 |
| DTS | Decoding Time Stamp | 4 |
| Segment Type: PDS | Segment Type: Palette Definition Segment 0x18 |
1 |
| Segment Size | 2 | |
| Palette ID | Palette ID | 1 |
| Palette Version Number | Palette Version Number | 1 |
| Palette Entry ID | Palette Entry ID | 1 |
| Luminance (Y) | - | 1 |
| Color Difference Red (Cr) | - | 1 |
| Color Difference Blue (Cb) | - | 1 |
| Opacity | - | 1 |
| Transparency (Alpha) | - | 1 |
| Name | Description | Byte Size |
|---|---|---|
| Header | Header "IG" 0x4947 |
2 |
| PTS | Presentation Time Stamp | 4 |
| DTS | Decoding Time Stamp | 4 |
| Segment Type: ODS | Object Definition Segment | 1 |
| Segment Size | - | 2 |
| Object ID | - | 2 |
| Sequence Flags | - | 2 |
| RLE Data Size (uint32) | - | 3 |
| Width | - | 2 |
| Height | - | 2 |
| RLE Data | RLE data of the object | Varies |
| End of ODS | End of ODS ; always 0x0000 |
2 |
| Name | Description | Byte Size |
|---|---|---|
| Header | Header "IG" 0x4947 |
2 |
| PTS | Presentation Time Stamp | 4 |
| DTS | Decoding Time Stamp | 4 |
| Segment Type: END | End of Display Segment | 1 |
| Segment Size | Always zero | 2 |
Footnotes
- *It doesn't use a file extension in a traditional sense, but when demuxed, it uses the
.mnu(or.igs) extension. BD editing programs use other image formats and converts them to IG. Scenarist uses the.iesfile format for import, export, and editing (doesn't contain any magic numbers).
Sources
- Scenarist BD Development manual, BD-ROM Whitepaper (2010), and original research.
- Blu-ray Disc Demystified
- BDedit
- Reserved engineered 2 IG streams from Made in Abyss and The Terminator (2006) and analyzed them using libbluray and IGtools (parser).
Author(s) : Æ Firestone - Last Updated: 5/27/2026
Popular Pages
-
Interactive Graphics Streams (IG or IGS) is the main graphics format for interactive menus in HDMV mode.
-
BD-ROMs use the BDMV application format as a standard for commercial movies, music albums and video games.
-
Presentation Graphics Stream ( PGS or PG ) is a bitmap graphics format commonly used for subtitles.



