A plugin that lets you import animated GIF and WebP images into Unreal Engine 5 as a new AnimatedTexture asset type.
| UE Version | Status |
|---|---|
| 5.3 | ✅ Supported |
| 5.4 | ✅ Supported |
| 5.5 | ✅ Supported |
| 5.6 | ✅ Supported |
| 5.7 | ✅ Supported |
- Import animated GIF / WebP files as Texture assets, with full support for animation, transparency, interlacing, and more
- Editable through the built-in Texture Editor
- Works with UMG Image widgets, Materials, and Material Instances
- Blueprint-accessible playback API — Play, Stop, SetPlayRate, SetLooping, etc.
- Runtime Load — create
UAnimatedTexture2Dat runtime from a local file or an HTTP(S) URL, usable directly in UMG / Materials.
This plugin should work on all platforms supported by Unreal Engine 5. It has been tested on:
- Windows (64-bit)
- macOS
- Download the plugin package for your engine version from the Releases page.
- Extract and copy the
AnimatedTexturePluginfolder into your project'sPluginsdirectory. - Restart the Unreal Editor. Enable the plugin if prompted.
- Drag and drop
.gifor.webpfiles into the Content Browser to import them.
The plugin can build UAnimatedTexture2D objects at runtime, without going through the editor asset pipeline. Two sources are supported: the local file system and HTTP(S) URLs.
In your game module's *.Build.cs, add the AnimatedTexture module (and HTTP if you use the download API directly from C++):
PrivateDependencyModuleNames.AddRange(new string[] { "AnimatedTexture", "HTTP" });#include "AnimatedTextureFunctionLibrary.h"
#include "AnimatedTextureLoadTypes.h"
#include "AnimatedTexture2D.h"
void UMyUserWidget::LoadLocalGif()
{
// Relative paths are resolved against FPaths::ProjectDir().
const FString Path = TEXT("Content/Runtime/sample.gif");
EAnimatedTextureLoadError Error = EAnimatedTextureLoadError::None;
UAnimatedTexture2D* Texture =
UAnimatedTextureFunctionLibrary::LoadAnimatedTextureFromFile(Path, Error);
if (Texture)
{
// Assign to UMG Image's Brush.ResourceObject, or use as Texture parameter in a Material Instance.
MyImage->SetBrushFromTexture(Cast<UTexture2D>(Texture), /*bMatchSize=*/ true);
}
else
{
UE_LOG(LogTemp, Warning, TEXT("Failed to load gif: %d"), (int32)Error);
}
}- Load Animated Texture From File Async — reads file bytes on a background thread, then constructs the object on the GameThread. Two output pins:
On Success (Texture)andOn Failed (Error). - Download Animated Texture — downloads a
.gif/.webpfrom an HTTP(S) URL. Inputs:Url,Timeout(default 30s),Max Bytes(default 32 MiB). Output pins:On Success (Texture, Url, ETag),On Canceled,On Failed (Error). - Cancel — a Blueprint-callable method on the download node; will trigger
On Canceledexactly once. - Load Animated Texture From Memory — synchronous helper accepting a byte array (e.g. bytes read from Pak or a custom network protocol).
EAnimatedTextureLoadError: None, HttpFailed, HttpBadStatus, EmptyBody, DecodeFailed, FileNotFound, InvalidFormat, SizeLimitExceeded, InvalidUrl.
UObjectconstruction and RHI resource creation always happen on the GameThread.- The returned
UAnimatedTexture2Dis created underGetTransientPackage()by default; keep a hard reference (e.g. aUPROPERTY()on your owning widget/actor) to prevent it from being garbage-collected. - HTTP download only accepts
http://andhttps://URLs; other schemes fail immediately withInvalidUrl. - Runtime load reuses the exact same initialization path (
UAnimatedTextureFunctionLibrary::InitAnimatedTextureFromMemory) as the editor import factory, so behavior stays consistent.
- Drag & drop
.gif/.webpinto Content Browser — import still works. - Asset Reimport — still works.
- Thumbnail renders correctly.
-
LoadAnimatedTextureFromFilewith absolute path works. -
LoadAnimatedTextureFromFilewithProjectDir-relative path works. - HTTP download: 200 OK →
OnSuccess.
This project is licensed under the MIT License.
If this plugin saved you time and you'd like to say thanks, you can buy me a coffee:
Donations are 100% optional — stars and PRs are equally welcome. 🙏




