Manifest Field Reference
This page documents every field in the three Thumper-Run manifest types: .thumper.yaml (app), .model.yaml (model), and .pack.yaml (pack). Each table lists the field name, type, whether it is required, and a description.
Manifest Validator
Paste a manifest to validate required fields.
App Manifest (.thumper.yaml)
The app manifest describes how to install, configure, and launch an application. It is the most common manifest type and the one you’ll write first.
Minimal Example
thumper: "1.0"id: my-appname: My Appversion: 1.0.0description: A simple demo applicationauthor: youtype: appruntime:type: pythonentry: app.pyport: 8080
Quick Check: .thumper.yaml
App Metadata Fields
Top-level fields that identify the app and provide catalog metadata.
| Field | Type | Required | Description |
|---|---|---|---|
| thumper | integer | Yes | Schema version. Always 1 for current manifests. |
| id | string | Yes | Unique identifier. Lowercase, hyphens allowed (e.g., comfyui). |
| name | string | Yes | Human-readable display name shown in the catalog. |
| version | string | Yes | SemVer version string (e.g., 1.2.3). |
| description | string | Yes | Short description for the catalog card (1–2 sentences). |
| author | string | Yes | Author name or organization. |
| type | string | Yes | Must be app. Distinguishes from model/pack manifests. |
| area | string | No | Category: image, chat, audio, video, code. |
| tags | string[] | No | Searchable tags for the catalog (e.g., ["diffusion", "sdxl"]). |
| license | string | No | SPDX license identifier (e.g., MIT, GPL-3.0). |
Runtime Configuration
The runtime block controls how the app is launched, what port it listens on, and health-check behavior.
| Field | Type | Required | Description |
|---|---|---|---|
| runtime.type | string | Yes | One of python, docker, native, node. |
| runtime.entry | string | Yes | Entry point script or binary (e.g., main.py, ./app). |
| runtime.port | integer | Yes | Port the app listens on. Thumper-Run opens this in the WebView. |
| runtime.gpu_required | boolean | No | If true, shows a warning when no GPU is detected. Default: false. |
| runtime.health_check.path | string | No | HTTP path to poll until the app is ready (e.g., /api/health). Default: /. |
| runtime.health_check.timeout_secs | integer | No | Max seconds to wait for health check. Default: 120. |
| runtime.web.launch_in_browser | boolean | No | If true, opens in the system browser instead of the Tauri WebView. |
| runtime.args | string[] | No | Extra command-line arguments passed to the entry point. |
| runtime.env | map | No | Environment variables injected at launch (key-value pairs). |
| runtime.graceful_timeout_ms | integer | No | Milliseconds to wait for graceful shutdown before SIGKILL. Default: 5000. |
Patches
Patches modify configuration files after installation. They enable GPU-specific settings, environment injection, and pip dependency filtering.
| Field | Type | Required | Description |
|---|---|---|---|
| patches[].type | string | Yes | Patch type: string_replace, json_merge, yaml_merge, env_set, or file_copy. |
| patches[].condition.accelerator | string | No | Apply only when GPU matches: cuda, rocm, mps, cpu. |
| patches[].targets[].file | string | Yes | Relative path to the file to patch. |
| patches[].targets[].replacements[].old | string | Yes | Exact string to find in the target file. |
| patches[].targets[].replacements[].new | string | Yes | Replacement string. |
| patches[].description | string | No | Human-readable description of what this patch does. |
string_replace patch uses targets[].replacements[{old, new}] — not find/replace. Using the wrong field names silently does nothing.Model Integration
These fields connect an app to model packs, specifying which models are needed and how they should be served.
| Field | Type | Required | Description |
|---|---|---|---|
| pack_refs | string[] | No | References to external .pack.yaml manifests by ID. |
| model_refs | string[] | No | References to individual .model.yaml manifests by ID. |
| model_packs | object[] | No | Inline model pack definitions (embedded in the app manifest). |
| default_model_pack_id | string | No | ID of the pack to install by default for new users. |
| preferred_engine | string | No | LLM engine preference: ollama, llamacpp, openai. |
ollama as the preferred engine for chat apps — it auto-pulls models and manages serving. Use llamacpp when you need direct GGUF file access or custom sampling parameters.Model Manifest (.model.yaml)
A model manifest describes a single model weight file — its identity, format, source, and metadata. Model manifests are referenced by pack manifests or directly by app manifests.
Example
schema: thumper-model/v2id: sdxl-base-1.0name: Stable Diffusion XL Base 1.0kind: diffusion-unetformat: safetensorssource:hf_repo: stabilityai/stable-diffusion-xl-base-1.0hf_file: sd_xl_base_1.0.safetensorssha256: 31e35c80fc4829d14f90153f4c74cd59c90b779f6afe05a74cd6120b893f7e5b
Quick Check: .model.yaml
Model Core Fields
| Field | Type | Required | Description |
|---|---|---|---|
| schema | string | Yes | Must be model/v1. |
| id | string | Yes | Unique identifier for cross-referencing from packs. |
| name | string | Yes | Human-readable display name. |
| kind | ModelKind | Yes | The model architecture type (see Enums section below). |
| format | string | Yes | File format: safetensors, gguf, onnx, bin. |
| source | object | Yes | Download source with hf_repo, hf_file, and optional sha256. |
Pack Manifest (.pack.yaml)
A pack manifest bundles multiple model manifests into a single installable unit. Packs are the primary way users interact with models — they install a pack, not individual weights.
Example
schema: thumper-pack/v2id: sdxl-starterdisplay_name: SDXL Starter Packtask_category: image-generationmodels:- ref: sdxl-base-1.0- ref: sdxl-vae-fp16
Quick Check: .pack.yaml
Pack Core Fields
| Field | Type | Required | Description |
|---|---|---|---|
| schema | string | Yes | Must be pack/v1. |
| id | string | Yes | Unique pack identifier for app manifest pack_refs. |
| display_name | string | Yes | Human-readable name shown in the model pack selector. |
| models[].ref | string | Yes | Reference to a model manifest by its id field. |
| task_category | string | No | Category for filtering: image-generation, text-generation, audio-generation, etc. |
Enums & Constants
ModelKind (21 variants)
| Variant | Description |
|---|---|
| diffusion-unet | UNet denoiser for Stable Diffusion models |
| diffusion-transformer | DiT / MMDiT transformer for SD3, Flux, etc. |
| vae | Variational autoencoder (encoder/decoder) |
| text-encoder | CLIP or T5 text encoder |
| lora | Low-rank adaptation weights |
| controlnet | ControlNet conditioning model |
| ip-adapter | IP-Adapter image prompt model |
| upscaler | Super-resolution upscaler (ESRGAN, etc.) |
| inpainting | Inpainting-specific model variant |
| llm | Large language model (GPT, LLaMA, Qwen, etc.) |
| embedding | Text embedding model for RAG |
| tts | Text-to-speech model |
| stt | Speech-to-text / transcription model |
| voice-conversion | Voice cloning / conversion (OpenVoice, RVC) |
| music-generation | Music generation model (ACE-Step, MusicGen) |
| video-generation | Video generation model (LTX, AnimateDiff) |
| image-classification | Image classifier or tagger |
| object-detection | Object detection model (YOLO, etc.) |
| segmentation | Image segmentation (SAM, etc.) |
| speaker-embedding | Speaker embedding / voice fingerprint |
| other | Catch-all for uncategorized model types |
TaskCategory
Used in pack manifests to group packs by purpose.
| Value | Description |
|---|---|
| image-generation | Diffusion-based image generation |
| text-generation | LLM chat and text completion |
| audio-generation | Music and sound generation |
| video-generation | Video synthesis and animation |
| voice | TTS, STT, and voice conversion |
RuntimeType
| Value | Description |
|---|---|
| python | Python venv with pip install |
| docker | Docker container with compose |
| native | Native binary (AppImage, .exe, .app) |
| node | Node.js with npm install |
Complete Example
A full-featured app manifest showing metadata, runtime, patches, and model integration.
# .thumper.yaml — Full examplethumper: "1.0"id: my-image-genname: My Image Generatorversion: 1.0.0description: Generate images with Stable Diffusion XLauthor: thumper-communitytype: apparea: imagetags: [diffusion, sdxl, image]license: MIT# Runtime configurationruntime:type: pythonentry: main.pyport: 8188gpu_required: truehealth_check:path: /api/healthtimeout_secs: 180args: ["--listen", "0.0.0.0"]env:PYTHONUNBUFFERED: "1"graceful_timeout_ms: 10000# GPU-specific patchespatches:- type: string_replacecondition:accelerator: rocmdescription: Enable ROCm for AMD GPUstargets:- file: config.yamlreplacements:- old: "device: cuda"new: "device: rocm"# Model packspack_refs: [sdxl-starter]default_model_pack_id: sdxl-starterpreferred_engine: llamacpp
Key Takeaways
- Every manifest starts with a schema version (
thumper: "1.0"orschema: thumper-model/v2) - The
idfield must be unique across all manifests of the same type - Patches use
old/new— notfind/replace - Model packs bundle models into installable units — users install packs, not individual weights
- Use
pack_refsto reference external packs,model_packsto embed inline - The
kindfield uses the ModelKind enum with 21 variants
Advanced Reading
For the complete authoring guide with worked examples, see MODEL_MANIFEST_AUTHORING_GUIDE.md on GitHub (789 lines).