Skip to content

Assets

The Assets tab is a core Feather feature for inspecting images, fonts, and audio sources loaded by your LÖVE game at runtime. It is not a plugin and does not require any plugin registration.

Feather tracks calls to:

  • love.graphics.newImage
  • love.graphics.newFont
  • love.audio.newSource

Assets appear in the desktop app after they are loaded by the game.

Repeated file-backed loads are grouped into one row. Feather keeps a loadCount, first seen time, and last seen time so duplicate loading is visible without spamming the catalog. Runtime/procedural assets remain separate rows because each created object can represent different generated content.


Setup

No extra setup is required beyond running the game through the Feather CLI:

feather run path/to/my-game
feather run path/to/my-game --target web
feather run path/to/my-game --target android
feather run path/to/my-game --target ios

Open the Assets tab in the desktop app to view the tracked catalog.

Disabling asset previews

Asset tracking is enabled by default. To disable it for a session:

-- feather.config.lua
return {
  assetPreview = false,
}

When disabled, Feather does not hook love.graphics.newImage, love.graphics.newFont, love.audio.newSource, or love.draw for asset previews.

You can also toggle asset previews for the active session from the Assets tab. Turning it off clears the current asset catalog in the desktop app. Turning it back on starts tracking assets loaded after the toggle; assets loaded while previewing was disabled are not backfilled.


Asset Lists

The Assets tab has three views:

View Tracks Details shown
Textures love.graphics.newImage dimensions, format, mipmaps, source path
Fonts love.graphics.newFont font height, ascent, descent, source path when available
Audio love.audio.newSource source type, channel count, duration, source path

Use the filter input to search by filename or source path. Quick filters narrow the catalog to file-backed assets, runtime-created assets, repeated loads, or file-backed assets whose local path cannot be resolved.

Texture rows also include lightweight runtime metadata when LÖVE exposes it, including filter, wrap mode, and an estimated texture memory footprint.

Note

Feather only sees assets loaded after Feather has initialized. If an asset is loaded before Feather starts, reload the game with Feather enabled earlier in startup.


Previewing Textures And Fonts

Click View on a texture or font row to load a preview.

The preview/details panel shows dimensions, load counts, first/last seen times, resolved local paths, and copy actions. Use Constructor to copy a love.graphics.newImage, love.graphics.newFont, or love.audio.newSource snippet for the selected asset. File-backed assets can also copy or reveal their resolved local path in the desktop app.

File-backed textures

When an image was loaded from a file path:

local player = love.graphics.newImage("assets/player.png")

Feather sends the original Lua path to the desktop. The desktop resolves that path against the session's Game Root folder and reads the image directly from disk.

This avoids sending large image data over the WebSocket and keeps previews fast for normal project assets.

Procedural textures

When an image was created from runtime data:

local imageData = love.image.newImageData(16, 16)
local texture = love.graphics.newImage(imageData)

There is no file path to read from disk. Feather renders the texture to a canvas in the game and sends a base64 PNG preview to the desktop.

Fonts

Fonts are previewed by rendering sample text in the game and sending a PNG preview to the desktop.


Game Root

The Game Root folder is the desktop-side root directory used to resolve asset paths and debugger source files.

Important

If the game runs somewhere the desktop cannot read directly, such as a mobile device, remote machine, or bundled runtime, click Select Folder and choose the local copy of the game's root folder.

Feather automatically reports the source directory when the LÖVE version supports it.

The selected folder is stored per session and is shared by:

  • Assets — resolves image paths for file-backed previews
  • Debugger — reads .lua source files for the file tree and source view

Click Auto to remove the manual folder and return to Feather's detected root.

Path resolution

If Lua reports:

assets/player.png

and the selected Game Root is:

/Users/me/projects/my-game

the desktop reads:

/Users/me/projects/my-game/assets/player.png

Tip

For absolute paths reported by the game, a manually selected Game Root still wins. Feather strips the absolute prefix and resolves the path inside the selected folder so remote/mobile paths can map to a local project copy.

When the desktop cannot resolve a file-backed asset, the row appears in the Missing local file filter. Select the correct Game Root or copy the resolved path from the detail panel to inspect what Feather tried to read.


Preview Controls

The preview panel supports:

Control Description
Zoom in Increase zoom by 1.5x
Zoom out Decrease zoom by 1.5x
Fit Reset zoom to 100% and clear pan
Drag Pan the canvas when zoomed above 100%

When zoom is above 100%, Feather draws a pixel grid over the preview. This is useful for inspecting sprites, tiles, and procedural images at the pixel level.


Troubleshooting

The texture list is empty

Important

Make sure the game loads images after Feather starts. When using feather run, the CLI starts Feather before your game's main.lua is loaded.

Preview says the file is not available

The desktop could not read the image from the resolved path. Select the correct Game Root folder in the Assets tab.

This often happens when:

  • the game is running on another machine
  • the game is running on mobile
  • the LÖVE source directory cannot be detected
  • the game reports a path from a bundled/runtime environment

Procedural previews do not update immediately

Procedural texture and font previews are rendered during love.draw. Make sure your game continues drawing while connected to Feather.