The media library and the creator asset editors.

Asset Studio

Beyond maps and content, the Studio ships a suite of asset editors for making the art, audio, and effects your game uses. Everything they produce lands in the shared media library and becomes selectable from every content form — items, mobs, NPCs, tilesets, and more.

There are two things people mean by "the Asset Manager", and it helps to keep them straight:

SurfaceWhat it isHow you open it
Asset Manager (workspace)A full-screen studio with a sidebar of asset editors — Library, Animations, Pixel Editor, VFX, Sound Studio, Fonts, Shaders, Atlas PackerEditor Tools → Asset Manager, or Ctrl+Shift+A
Media Manager (file library)The actual file library — upload, folders, search, tag, delete, AI-generate. It's what pops up when you click any media field in a formAutomatically, from any media field in a content form; the manager's Library tab also links to it

This page covers both: how to get media in (the Media Manager), and how the editors around it are organized. Each editor has its own page in this section.


Opening the Asset Manager

From the zone editor, open Tools → Asset Manager or press Ctrl+Shift+A. The Tools submenu lets you jump straight to a specific tab (Library, Animations, Pixel Editor, VFX Editor, Sound Studio, Fonts, Shaders, Atlas Packer). The window has a vertical tab sidebar on desktop and a horizontal strip on mobile.

The Library tab is a read-mostly grid across every asset kind (images, animations, tilesets, audio, video, VFX, fonts, shaders, atlases) with a search box and type chips — a good place to see everything at a glance. The other tabs are the editors documented on the following pages.


The Media Manager — getting files in

You'll spend most of your asset time here. It opens by itself whenever you click a media field in any form (an item icon, an ability icon, a tileset, an NPC portrait…), and it also runs as a standalone browser. In a form it shows a Select Mode badge and hides the folder stats to stay compact; standalone it shows folders, storage stats, and a sync footer.

Uploading

You have several ways to add files:

  • Upload button — opens a file picker; select one or many files at once.
  • Drag and drop — drop files anywhere on the grid. You can even drop an OS folder and its subfolder structure is recreated inside the library.
  • Drop onto a field — a media field in a form accepts a single dropped file directly.
  • Link — the Link button adds a remote asset by URL (with an optional name) instead of uploading bytes.
Size limits: up to 50 MB per file on hosted projects (raised only by lifting your Supabase project's global upload limit first), and up to 64 MB on local projects. Oversized files are rejected before upload with a clear message.

Supported types: images (png, jpg, jpeg, gif, webp, svg, bmp), audio (mp3, wav, ogg, webm, flac, aac, m4a), video (mp4, webm, ogv), and fonts (ttf, otf, woff, woff2).

> Large files just work. On hosted projects, big uploads go straight to cloud storage via a signed URL, bypassing the ~4.5 MB server-action body cap. You never have to think about it — just drop the file.

Duplicate detection

Every upload is fingerprinted (SHA-256). If an identical file already exists, a resolver dialog appears:

  • Same filename → Skip or Upload anyway
  • Different filename → Use existing (default) or Keep both
  • A "Apply to all remaining files in this batch" checkbox handles bulk drops in one decision.
This is why re-importing the same art twice doesn't quietly bloat your library.

Folders

The left sidebar lists folders. The root is called Home.

  • Create a folder with the folder-plus button, type a name, press Enter. Folders nest — a new folder is created inside whichever folder you're viewing.
  • Navigate with the folder list or the breadcrumb trail (Home → … ).
  • Scoping: browsing shows only the files in the current folder (not everything underneath it). This keeps large libraries manageable.
  • Searching escapes the scope — a search spans every folder, so you can always find a file regardless of where it lives.
> Good to know: there is currently no rename or delete for folders. A folder effectively goes away once it's empty. Plan your folder names up front.

Finding assets

  • Search — matches both the display name and the original filename, across all folders.
  • Sort — Newest/Oldest updated, Newest/Oldest added, Name A→Z / Z→A, Largest, Smallest, or by Type.
  • View — toggle Grid or List.
  • Type filters (sidebar) — All, Images, Audio, Video, Links, each with a live count.
  • Top tabs (standalone) — All Assets, Images, Tilesets, Animations, Audio, Video, plus two smart buckets: Generated (AI-made assets) and, on hosted (Studio Web) projects only, Unsynced (assets not yet in cloud storage).
  • Load more — the grid pages in as you scroll (200 at a time), with a manual Load more button as a fallback.

Working with a single asset

Hover or click an asset for its actions:

  • Click — docks the details panel on the right for that asset.
  • Preview / magnify — the expand button on the tile, or a double-click, opens the asset full size in a centred viewer: wheel to zoom, drag to pan, double-click to reset, ←/→ to flip through the rest of the folder without closing, Esc to drop back to the docked panel.
  • Edit — the only single-item editor: change the Name and edit Tags (comma-separated).
  • Details — the preview panel lists name, type, MIME, pixel size, file size, duration, sample rate/channels (audio), filename, tags, and created date.
  • Used By — for any asset, see every place it's referenced (table · field · label), or "Not referenced anywhere — safe to delete." Check this before removing anything.
  • Regenerate (AI images only) — the panel shows the original prompt, provider and model, with a one-click Regenerate.
> What isn't here (by design, today): there is no per-item Delete, Download, Copy URL, Copy ID, Move, or Replace on a single asset. Deleting and moving are bulk operations (below). To "replace" an asset in a form, clear the field and pick/upload a new one.

Bulk actions

Selecting works like a file browser:

GestureSelection
ClickSelects just that asset (and docks its details)
Click the tile's checkboxAdds or removes that one, leaving the rest of the selection alone
Ctrl-click (Cmd on Mac)Same as the checkbox — add or remove one
Shift-clickTakes everything between the last click and this one
Select allSelects every asset currently listed — respects your folder, search and type filter, so it never grabs more than you can see

Once anything is selected a bulk toolbar appears (Clear empties the selection again):

ActionWhat it does
Move (N)Move the selection into another folder
Delete (N)Delete the selection (with confirmation)
Rename (N)Add a prefix and/or suffix to every selected name
Tag (N)Add and/or remove tags across the selection

This is the intended path for cleaning up, reorganizing, and removing media.


Importing existing content

  • URL / Link import — the Link button (above) references a remote file without copying it.
  • Library "Import" funnel — on the Asset Manager's Library tab, the Import button opens a per-file table where each file gets a name and an "Import as" choice: Image, Tileset, Sprite sheet → Animation (with frame width × height), Audio, or Video. Sprite sheets become configurable animation assets; everything else lands in the library.
  • Whole-project imports (RPG Maker / RPG Tools) are separate importers — see Data Management.

Editing an image you already have

Select an image in the Library tab and press Edit pixels. It opens in the Pixel Editor at its own size, as a normal editable layer — every tool works on it.

When you save, you are asked which you meant:

ChoiceWhat happens
Replace originalThe same asset now holds the new art. Everything already using it — items, tiles, NPCs, abilities — shows the change, because they all point at the asset rather than at a copy of its pixels. The prompt tells you how many things that is first.
CancelSaves a separate copy named "… (edited)" in the same folder and leaves the original exactly as it was.

Only images open this way. VFX, shaders, fonts and atlases have no picture behind them, so their actions just take you to the right editor.

> Replacing is not undoable. The old pixels are gone once you save over them. If an image is used in many places and you only want it different in one, save a copy and point that one thing at the copy.


Deleting several assets at once

The Library tab tidies up as well as it imports. Hover any card and a checkbox appears in its corner; Select all (to the right of the filter chips) ticks everything the current search and filter chips are showing — never the rows hidden behind them. A bar then appears along the bottom with the count and a Delete button.

One selection can mix kinds freely — images, animations, VFX, fonts, shaders and atlases go together, and each is removed the way its own editor would remove it. That means the usual protections still apply: a font still assigned to a UI role refuses to go, and says which roles to reassign first. Anything that can't be deleted stays ticked with the reason shown, so a partial result is never silent.


Generating assets with AI

  • Generate (the ⚡ button) opens the image generator: Prompt, Negative prompt, Asset type (Icon, Tileset, Sprite, Texture, VFX, UI, Concept), Style preset (Pixel Art, Isometric, Stylized, Realistic, Hand-drawn, Photoreal), Model & Quality, Size, and a Transparent background toggle. It shows credits available and the per-generation cost, and offers Generate variation afterward.
  • Audio generation — media fields for audio open a Sound Effect or Voice Line generator (prompt or line, voice selection, duration).
  • AI Settings — manage per-asset-type style reference images that steer future generations toward your game's look.
Generated assets are tagged so the Generated bucket collects them automatically.

How an asset gets referenced

When you pick an asset, the form receives both a media id and a resolved src (URL or data URI). Which one is stored depends on the field — some editors store the id, others store the URL directly (for example, an ability's icon stores the resolved URL). You don't manage this yourself; just pick the asset and the field records the right thing.

On hosted projects, files are content-addressed in cloud storage (identical bytes dedupe to one file). Local projects work the same way on disk: every upload is stored once, by its fingerprint, under your project's assets/.ed5-media/ folder, and the library keeps only a small reference — the project database stays lean no matter how much art you add. Files you drop directly into the assets/ folder are picked up in place (see the sync footer below); they keep their names and locations. Older projects that still carry images inside the database are moved to the file store automatically the next time you Publish (the "Optimizing media" step) — a one-time cleanup that can shrink a big project's database dramatically.

The engine's own built-in art — the 600 object sprites and the 20 ground terrains — is stored the same way from the moment a project is created, which keeps roughly 120 MB out of every new project's database. A project made before this change picks the saving up the next time its starter content is refreshed.

> Leave .ed5-media alone. It's the engine's content store — deleting files from it breaks the assets that reference them. Deleting an asset in the Media Manager cleans up its file automatically once nothing else uses it.


Syncing (standalone footer)

On a hosted (Studio Web) project the footer shows local/remote status, pending upload/download counts, and any conflicts. Sync Now processes the queue; Sync Activity opens a log where you can resolve conflicts. Sync is what keeps a project's media consistent between your machine and the hosted copy in cloud storage.

> Desktop projects never use cloud storage for media. If you run Studio on your own computer — with the embedded database, Docker, your own Postgres or Supabase database, or your own game server — your media lives in the project folder (assets/.ed5-media) and reaches players through Publish: publishing sends every image, sheet and sound to the game server you are connected to, bytes included when that server is on another machine, and the server serves them to players itself. Nothing is written to a Supabase Storage bucket, so an empty bucket in your own Supabase project is expected. The footer reads Remote: sent on Publish, and the Unsynced tab, Sync Now and Sync Activity do not appear.


The editors at a glance

Each of these is a tab in the Asset Manager, documented on its own page:

EditorWhat it makesPage
Avatar & Sprite EditorSprite sheets mapped to named animations (used by players, mobs, NPCs)Avatar & Sprite Editor
Sound StudioA full in-browser DAW plus the data-driven game-audio engineSound Studio & Audio
Shader EditorPost-processing and sprite effects (presets or raw GLSL)Shader Editor
Atlas PackerPacks a zone's images into efficient texture atlasesAtlas Packer & Fonts
Font ManagerUploaded / Google fonts assigned per UI role, with baked bitmap atlasesAtlas Packer & Fonts
Pixel EditorA built-in pixel-art paint toolPixel Editor
VFX EditorDeath effects, hit sparks, AOE visuals, telegraphs, lightsVisual Effects