HF Assets
Provides a render_mesh tool that uses Blender to produce six studio renders of a 3D mesh, allowing agents to inspect the mesh from multiple angles.
Generates game assets such as images, 3D meshes, sound, music, and speech through free Hugging Face Spaces. It also lists available models with licences and costs, manages ZeroGPU quota, supports batch audio manifests, and writes provenance sidecars for generated files.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@HF Assets make a seamless engine loop for a six-cylinder race car"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
HF Assets
An MCP server that generates game assets through free Hugging Face Spaces — no GPU and no subscription: images, 3D meshes, sound and music. A free Hugging Face token is optional and raises the daily quota. Plus procedural synthesizers that spend no quota at all.
The ZeroGPU quota is shared by all Spaces and resets 24 hours after first use, so the cheap option goes first and the expensive one is only run for the final take.
Install
npm install
npm run buildNode 20 or newer. The only runtime dependencies are the official MCP SDK, the official Gradio JavaScript client and Zod.
Related MCP server: grok-game-mcp
Run it as an MCP server
node dist/server.jsRegister it with a client. Claude Code, for example:
claude mcp add hf-assets -- node /path/to/hf-assets/dist/server.jsor, for a client that reads a config file:
{
"mcpServers": {
"hf-assets": {
"command": "node",
"args": ["/path/to/hf-assets/dist/server.js"],
"env": { "HF_TOKEN": "hf_...", "HF_ASSETS_ROOT": "/path/to/hf-assets" }
}
}
}This repository ships a .mcp.json that points at the server next
to it, so a client that reads it needs no configuration at all.
Variable | Meaning |
| Free Hugging Face token (Read). A token raises the ZeroGPU quota. It is also read from a |
| The directory relative paths are resolved against. Defaults to the working directory. |
| Path to the Blender executable, for |
| Path to ffmpeg, for reading and writing OGG, MP3 and FLAC. Found on |
The tools
Tool | What it does |
| Every model with its Space, licence and cost. Read this first: it says which models may ship and which are prototype-only. |
| Text → image. Z-Image Turbo, FLUX.2 Klein (edit from a reference), Qwen-Image (legible text in frame). |
| Image → raw 3D mesh (GLB). Hunyuan3D-2, TRELLIS. |
| Text → sound, music or speech. Stable Audio Open, MMAudio, ACE-Step, Chatterbox. |
| A whole manifest of audio assets, two takes each. The manifest is a file or JSON text. |
| Trim the silence, crossfade the ends into a seamless loop, normalise the level. |
| Procedural engine loop (any cylinder count), vehicle Foley (crash, tyre skid, boost) and music. No network, no quota. |
| A 4-in-1 model sheet prompt (front, rear, side, 3/4) for any object, from a note or from fields. Has a |
| Six studio renders of a mesh, in Blender. |
render_mesh takes a couple of minutes on CPU: the client needs a longer
timeout than the default for that call. Lower samples, width and height
for a quick look.
The resources
URI | What it holds |
| Prompt templates for model sheets, concept art and prop sheets. |
| Every model with its Space, licence and cost, as JSON. |
| An example audio manifest, showing the format the batch tool expects. |
How it is put together
src/
server.ts the MCP server: every tool and resource
catalogue.ts the models: Space, licence, cost (the one source of truth)
paths.ts the working root and the package root
types.ts what the tools hand back
gradio.ts the Hugging Face Space layer, and the take/sidecar writer
image.ts text -> image
mesh.ts image -> mesh
audio.ts text -> sound, music, speech
audio-batch.ts a manifest of audio assets
model-sheet.ts the model sheet prompt builder
render.ts the Blender subprocess
dsp/
fft.ts a complex FFT for any length
engine.ts the engine loop
sfx.ts vehicle Foley
music.ts the breakbeat suite
postprocess.ts trimming, looping, normalising
arrays.ts the numpy-shaped array helpers
rng.ts a seeded random generator
wav.ts WAV natively, the rest through ffmpeg
blender/
render_raw.py the Blender mesh renderer
studio_render.py the lights, the backdrop and the camerablender/ is the one part that is still Python: Blender's API is Python, so
the studio renderer is a script the server runs as a subprocess.
Why not the official Hugging Face MCP server?
Hugging Face ships an official MCP server
that can search the Hub and call any Space that exposes itself as an MCP tool,
and Gradio can turn an app into an MCP server with mcp_server=True. If all you
want is to call one of those Spaces from an agent, use it: it is less to install.
This project exists for what that does not cover.
Not every Space is an MCP tool. The author of a Space has to switch MCP on. Checked on 2026-10-20, four of the nine Spaces used here expose it (Z-Image Turbo, Qwen-Image, TRELLIS, Chatterbox) and five do not: FLUX.2 Klein, Hunyuan3D-2, Stable Audio Open, MMAudio and ACE-Step. Between them they cover editing from a reference, one of the two image-to-3D models and all of the sound effects and music. Here they are reached through the plain Gradio API, which every Space has. A Space may turn MCP on later, and then the official server will reach it too.
One tool per job, not a raw API. TRELLIS alone exposes twelve tools through MCP, and the agent has to work out which to call and in what order. Here,
generate_meshis one call, with the right parameters filled in. Likewise for image sizes, which Z-Image only accepts as exact strings.A licence gate.
list_modelssays which model may ship, andgenerate_audio_batchrefuses a manifest that names a non-commercial model (MMAudio is CC-BY-NC-4.0), so a prototype take cannot be mistaken for a shippable one.Provenance. Every file is written next to a
.jsonwith the prompt, the parameters, the seed and the raw Space response.Work after the generation.
postprocess_audiotrims, crossfades a loop and normalises;render_meshshows the agent the mesh from six angles in Blender so it can judge the shape;model_sheetbuilds a prompt that works for image-to-3D.Things that need no Space at all.
synth_soundmakes an engine loop that survives a pitch shift, Foley and music with no network and no quota.
What is the same: both spend the same ZeroGPU quota, and both depend on someone else's free Space staying up.
Why this works
A synthesised loop survives a pitch shift. A recorded or generated loop has
an arbitrary length, so when the revs of an engine or a motor change in-game the seam produces a
phase jump — a click on every revolution. The synthesis is built so that the loop
contains a whole number of engine cycles and the seam matches in phase at
any pitch. The synth_sound tool checks this and reports:
seam step 0.0123 vs sharpest in-loop step 0.0254 -> looping is cleanSelection stays human. The pipeline is split on purpose: generation is
automatic, choosing the take is not. Candidates sit next to their prompt,
parameters and raw Space response (*.json), a human listens, picks one, and
only then does postprocess_audio turn the chosen take into a finished file.
Every run is traceable. Next to the result sits a .json with the prompt,
the parameters, the seed and the Space response, so a take can be repeated. The
one exception is Stable Audio Open: its Space takes no seed, so its takes are
numbered but cannot be reproduced exactly.
ZeroGPU quota
Account | GPU time per day |
no token | ~2–3 min, about 3 runs in total |
free, with | 5 min |
PRO ($9/mo) | 40 min, above the limit is charged |
The quota is shared between images, meshes and sound.
It resets 24 hours after first use, not at midnight.
A Space reserves time before it starts: if there is less than the reservation left, the run is rejected immediately, even if the computation itself would have taken seconds.
Model licences
Model | Licence |
Z-Image Turbo, FLUX.2 Klein, Qwen-Image | Apache-2.0 |
ACE-Step (music) | Apache-2.0 |
Chatterbox (speech) | MIT |
Stable Audio Open 1.0 | Stability AI Community (free below $1M revenue) |
MMAudio | CC-BY-NC-4.0 — not for production |
Hunyuan3D-2 | Tencent Hunyuan Community (with territorial restrictions) |
TRELLIS | MIT |
Licences change: check the model page before using a model in a commercial
project. list_models carries the same table, and generate_audio_batch
refuses a manifest that names a non-commercial model. Prompts and images are
uploaded to Hugging Face.
Prompt templates
Templates for model sheets, concept art and prop sheets live in
PROMPT_TEMPLATES.md, also served as the
hf-assets://prompt-templates resource.
Development
npm run dev # run the server from the sources
npm run build # the server tests run dist/server.js, so build first
npm test # the test suite
npm run typecheck # tsc --noEmit, sources and testsThe tests cover the FFT against reference values from numpy, the engine loop against reference output of the original implementation, the post-processing chain and the server itself over a real stdio pipe.
Licence
MIT — see LICENSE. It covers the code and the prompt templates. The models behind the Spaces have their own licences, listed above.
Author: Ivan Glazyrin (glazrus97@gmail.com).
Available Tools
9 toolsgenerate_audioGenerate sound, music or speechA
Generate sound effects, music or speech through a free Hugging Face Space. Writes the audio and a .json sidecar with the prompt, the parameters, the seed and the raw Space response. mmaudio is CC-BY-NC-4.0: prototype only, it must never reach a build.
Inputs: prompt (required), name, seed, count, +8 more. Returns: log, files
generate_audio_batchGenerate a batch of audio assetsA
Generate every asset in a manifest, two takes each, with its sidecar. The manifest lists the prompt, the model, the parameters, the licence and the target loudness of each asset. The tool refuses a manifest that names a model with a non-commercial licence, so nothing that must not ship gets generated in the first place.
Inputs: only, count, out_dir, manifest, +1 more. Returns: log, files
generate_imageGenerate an imageA
Generate an image from a text prompt through a free Hugging Face Space. Writes the image and a .json sidecar with the prompt, the parameters, the seed and the raw Space response. Use klein with reference_images to edit an existing picture, qwen when the image has to carry legible text.
Inputs: prompt (required), name, seed, size, +5 more. Returns: log, files
generate_meshGenerate a 3D meshA
Turn an image into a raw 3D mesh. trellis gives a textured GLB at ~30k faces; hunyuan gives an untextured shape at ~450k faces. Writes the GLB and a .json sidecar with the parameters, the inputs and the raw Space response.
Inputs: image (required), seed, model, out_dir, +1 more. Returns: log, files
list_modelsList modelsA
Every model this server can reach, with its Space, licence and rough cost. Read this before generating: it says which models may ship and which are prototype-only.
Inputs: no named parameters. Returns: root, quota, models, out_dir, +2 more
model_sheetBuild a model sheet promptA
Assemble a 4-in-1 model sheet prompt: front, rear, side and 3/4 in one image. One prompt, one board, four angles of the same object — the fastest way to get a consistent set of views, and the best input for the image-to-3D models. The object preset suits any prop, building, character or machine; the vehicle preset keeps a car or a bike in factory trim.
Inputs: name, rear, side, front, +6 more. Returns: info, prompt
postprocess_audioPost-process audioA
Trim the silence, crossfade the ends into a seamless loop, normalise the level. This is the step that turns a chosen take into a finished asset. With loop on, the file is shortened by the crossfade so that it tiles without a click at the seam.
Inputs: input_path (required), output_path (required), loop, fade_ms, +1 more. Returns: path, seam, seconds, rms_dbfs
render_meshRender a mesh in a studioA
Render a mesh from six studio angles: both ends, both sides and two 3/4 views. The mesh is centred, put on the floor and lit with a key, a fill and a rim light. Use it to judge the shape before building anything on top of it. Needs Blender; set HF_ASSETS_BLENDER if it is not on PATH.
Inputs: glb (required), width, height, length, +3 more. Returns: log, files
synth_soundSynthesise sound procedurallyA
Synthesise audio without the network and without spending any quota. engine writes a loop whose length is a whole number of firing cycles, so it still loops cleanly when the game pitches it up or down. sfx writes vehicle Foley: crash, tyre skid and boost. music writes a breakbeat in four intensity tiers plus a menu theme.
Inputs: rpm, kind, name, seed, +3 more. Returns: log, files
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 9 tools
Most tools have distinct purposes, but the audio tools (generate_audio, generate_audio_batch, synth_sound, postprocess_audio) share a broad domain and require careful reading to pick correctly. model_sheet could also be mistaken for an image generator, though its description clarifies it assembles a prompt.
Eight of nine tools follow a consistent snake_case verb_noun pattern (list_models, generate_image, generate_mesh, generate_audio, generate_audio_batch, postprocess_audio, synth_sound, render_mesh). model_sheet is a noun phrase, which is a minor deviation from the otherwise strong convention.
Nine tools are well-scoped for an asset-generation pipeline covering images, meshes, audio, and supporting steps. Each tool has a distinct job, and the set is neither thin nor bloated.
The core lifecycle for generating, post-processing, and rendering image, mesh, and audio assets is well covered, including model and licence awareness. Minor gaps exist around inspecting or managing generated artifacts and image post-processing, but they do not block the main workflows.
Related MCP Connectors
Turn prompts into production-ready game assets: animated characters, textures, terrain, VFX, HUD.
Generate reproducible image, video, and audio assets with leading models and your own provider keys.
Generate game-ready 3D models, textures, and audio from natural language, over MCP.
Make all the audio for your game from a single prompt. Describe your game and your AI assistant plans every sound it needs (sound effects, ambience loops, music tracks and character voice lines), then generates them all in one go. You get several AI versions of each sound and keep the ones you like. Sounds are organized per game in folders and scenes, and the free Godot plugin installs them into your project, ready to play with one line of code. Works with Claude, Claude Code, Cursor and any MCP client, with OAuth login (no API key needed). Free plan included; sounds can be used in commercial games.
Related MCP Servers
- AlicenseAqualityBmaintenanceEnables AI agents to generate game-ready 3D assets from reference images with PBR textures, and to retexture meshes the user already owns, while recording full provenance for every generated file.2013MIT
- FlicenseNot gradedqualityCmaintenanceEnables generating game assets from natural language prompts, including sprite sheets, animations, voiceover, sound effects, chiptune music, tilesets, backgrounds, VFX, and cohesive asset packs with shared style and audio DSP presets.-

Sprixen MCP serverofficial
AlicenseNot gradedqualityCmaintenanceEnables AI agents to create style-locked game projects and generate sprites, animations, tiles, maps, music, 3D models, and VFX, then export engine-ready packages for Godot, Phaser, Unity, GameMaker, or RPG Maker MZ.MIT- AlicenseCqualityBmaintenanceEnables AI agents to build game assets in Blender by modeling, lighting, rendering previews to inspect and correct, validating against engine budgets, and exporting to GLB/FBX.126MIT