What Gfx Maker Actually Does
Gfx Maker is a graphics editing tool built specifically for creating and modifying texture packs in Grand Theft Auto: San Andreas. It lets you pack sprites, spinners, HUD elements, and custom textures into .txd formats that the game can actually load. If you've ever tried to make a custom server skin, a clean HUD rework, or just wanted to replace that dated default spinner with something that looks like 2024 instead of 2004, this is the program most people end up using. The interface is functional at best and looks like it hasn't been updated since the mid-2000s. That doesn't matter though because the underlying engine handles txd packing, clipping, and format translation better than any of the more polished-looking alternatives I've tried. I spent a few months using a fancy web-based sprite tool before going back to Gfx Maker because the export pipeline was completely broken for SA multiplayer use.
How to Download and Install Gfx Maker
You can find the current version on the official modding forums where the original developer posts updates. The download is a simple ZIP archive containing the executable and a few support DLLs. Extract it somewhere permanent, not your Downloads folder, and don't run it from a path with special characters. I learned that the hard way when my first installation path included an ampersand and the program silently failed to save output files without any error message. Here is the basic installation flow: Extract the ZIP to C:\Tools\GfxMaker or wherever you keep your utility programs. Run GfxMaker.exe as administrator if you're on Windows 10 or later, otherwise it sometimes fails to write to certain directories. Launch it and you'll see a mostly blank workspace with a file menu on top and a toolbar below that. No need to install anything else.
The Workflow Most People Get Wrong
Most tutorials start with creating a new project and then jump straight into making a HUD element. That's backwards. Before you open Gfx Maker, you need your source images ready and organized in a specific way, or you'll waste an hour debugging why your spinner looks wrong in-game. The source images need to be PNG files with no alpha channel compression artifacts. This matters more than you'd think. If you export a PNG from Photoshop or any major image editor, make sure the export settings use standard PNG-24 without interlacing. Interlaced PNGs look fine on screen but produce garbage output when Gfx Maker tries to read them. I spent about forty-five minutes once wondering why my entire HUD was rendering as blue static until I realized my source file had been exported as an interlaced PNG by default in GIMP. The correct order of operations is:
Get the Full Details

Prepare all your source graphics in the exact pixel dimensions the GTA SA sprite sheet expects. Load Gfx Maker. Create a new TXD project. Import your images into the correct slots by matching the game's sprite naming conventions. Set the UV coordinates manually if you're doing custom positioning. Export to TXD. Test in-game. Repeat until it looks right.
Setting Up a Custom HUD Project
I'm going to walk through a custom spinner replacement since that's the most common thing people use Gfx Maker for. You'll need a 128x128 source image for the spinner gauge. The original SA spinner uses an arcade-style circular gauge that fills clockwise. Open Gfx Maker and go to File, New TXD Project. Name it whatever you want. In the project window, you'll see a list of default GTA sprite IDs. Scroll down to the spinner entry, which is typically labeled under the HUD weapons category. Right-click it and select Replace Texture. Browse to your 128x128 PNG and confirm. Before you export, there is a setting you need to check. Go to the Project Settings panel and make sure the Compression Mode is set to None or DXT5 depending on what your target uses. For multiplayer servers running custom textures, DXT5 preserves your alpha channel correctly. Compression mode set to DXT1 will cut your alpha channel in half and make transparent areas render as opaque black blocks.
The UV coordinates also need attention. Default GTA HUD sprites are mapped to a specific region of the texture sheet. If you're making a standalone spinner, you usually want UVs set to 0.0 on the X axis and roughly 0.75 to 0.875 on the Y axis. These numbers come from reverse-engineered sprite sheet layouts that have been documented across several modding wikis. Getting the UV wrong means your spinner appears in the wrong spot on screen or shows a completely different texture than what you intended.

Exporting and Testing
When you're ready to export, go to File, Save TXD and choose a name. The file goes into your GTA San Andreas directory under models\interface or however your server is configured to load custom HUD assets. Some multiplayer setups require you to drop the TXD into a specific folder and register it in a config file. Check your server's documentation for that part because it varies between implementations. Test it immediately after export. Load the game, enter a server, and look at the spinner. If it looks distorted, the UV coordinates are wrong. If it's invisible, the texture wasn't loaded into the right slot. If the edges are jagged or pixelated at odd angles, your source image probably has alpha compression artifacts from the export process.
A Problem I Ran Into That Isn't Covered Anywhere
There is a specific edge case with Gfx Maker that took me about three hours to figure out. When you replace a sprite that has an animated rotation component, Gfx Maker silently ignores the rotation animation data and locks the sprite to a single frame. This affected my spinner project because the original gauge has a subtle sweeping needle animation that plays when the player is driving at speed. After replacing the texture, the needle stopped moving entirely. The workaround was to not replace the spinner sprite at all. Instead, I created a completely new sprite slot with a unique ID, packed my custom texture into it, and then edited the server's HUD script to reference my new sprite ID instead of the default one. This required reading the server's HUD definition file and changing one line of code. It is more work than a simple texture swap but it preserves every animation the original sprite had.
What Gfx Maker Cannot Do
The tool does not support animated sprite sheets natively. If you need multi-frame animations like the weapon wheel or the health bar transition effects, you have to handle those separately through script edits or by using a different tool. Gfx Maker is strictly for static texture replacement within the TXD container format. It also does not support modern texture formats beyond DXT1 and DXT5. You cannot export to BC7 or any of the newer compressed formats that exist now. This is a limitation of the game engine itself, not the tool, but it still means your textures will look slightly worse than they would in a modern title. The difference is barely noticeable at normal gameplay distances but it shows up clearly on high-resolution monitors. The program also has no batch processing feature. If you need to replace fifty sprites across a full HUD pack, you do it one at a time through the UI. There is no command-line mode, no scripting API, nothing. I built a simple PowerShell wrapper around the executable to automate repetitive imports for a full retexture project, but it was brittle and broke whenever I updated to a new version of Gfx Maker.

When to Use Something Else
If you are building a full custom HUD from scratch with dozens of animated elements, Gfx Maker is the wrong tool for the job. You'd be better off using a combination of RenderWare modding tools and direct TXD hex editing, which gives you control over animation data and sprite sheet layout. For simple texture swaps and single-element HUD replacements, Gfx Maker is still the fastest option available and it is what most server owners end up using despite its age. The last stable version I checked had a known issue where very large sprite sheets above 4096x4096 pixels could cause the program to hang during export. If you run into that, split your project into two TXD files and reference them separately in your HUD config. It adds a small performance overhead in-game but it is better than the alternative of waiting ten minutes for the program to crash.