Skip to content

Model Configuration

Fabric uses a centralized model configuration system that determines which AI model handles each operation. This applies across all workflows, not just video generation.

Models are resolved with a 6-level priority chain. The first match wins:

  1. Per-run input override--input image_model="gemini-2.5-flash-image"
  2. Environment variableFABRIC_IMAGE_MODEL=gemini-2.5-flash-image
  3. Project config./models.yaml (walks up from cwd)
  4. Global config~/.fabric/models.yaml
  5. Quality profile--input quality=cheap
  6. Built-in defaults

Each pipeline stage maps to a named operation:

OperationDefault ModelDescription
textgemini-2.5-flashScript generation, LLM calls
imagegemini-3.1-flash-image-previewImage generation
image_fastimagen-4.0-fast-generate-001Fast image generation (thumbnails, stills)
videoveo-2.0-generate-001Video generation
brollfal-ai/veo3.1/fastB-roll video generation
broll_i2vfal-ai/kling-video/v3/pro/image-to-videoB-roll image-to-video
keyframe_gridimagen-4.0-fast-generate-001Keyframe grid generation
ttselevenlabs/eleven_multilingual_v2Text-to-speech
avatarfal-ai/kling-video/ai-avatar/v2/standardAI avatar / talking head
lipsyncveed/lipsyncLip synchronization
musicfal-ai/stable-audioBackground music
transcriptionfaster-whisper/large-v3Audio transcription
thumbnailgemini-3.1-flash-image-previewThumbnail generation

Create models.yaml in your project root or at ~/.fabric/models.yaml:

# Override individual operations
text: gemini-2.5-flash
image: gemini-3.1-flash-image-preview
tts: elevenlabs/eleven_multilingual_v2
broll: fal-ai/veo3.1/fast
keyframe_grid: imagen-4.0-fast-generate-001
# Define custom quality profiles
profiles:
my-custom:
tts: fal-ai/kokoro/american-english
broll: wan:1.3b
keyframe_grid: sdxl-turbo

Project-level config overrides global config. Top-level keys override profile keys.

Profiles bundle model selections for common use cases:

Budget-friendly with acceptable quality. Uses faster/cheaper model variants.

OperationModel
ttsfal-ai/kokoro/american-english
lipsyncfal-ai/lipsync
keyframe_gridskip

All other operations use defaults.

Full local pipeline with good quality. Requires 8+ GB VRAM.

OperationModel
textqwen3:8b (Ollama)
imagesdxl-turbo
videowan:1.3b
brollwan:1.3b
ttskokoro
avatarwav2lip
lipsyncwav2lip
musicmusicgen-small
keyframe_gridsdxl-turbo
broll_i2vskip

Setting any operation to "skip" disables it entirely. The pipeline gracefully handles skipped operations — for example, skipping broll means no b-roll videos are generated, and the final composition uses only talking-head segments.

Every operation maps to a FABRIC_<OPERATION>_MODEL environment variable:

Terminal window
export FABRIC_TEXT_MODEL=gemini-2.5-flash
export FABRIC_IMAGE_MODEL=sdxl-turbo
export FABRIC_TTS_MODEL=kokoro
export FABRIC_BROLL_MODEL=wan:1.3b
export FABRIC_KEYFRAME_GRID_MODEL=imagen-4.0-fast-generate-001

Override any model for a single run:

Terminal window
fabric run global/ai-shorts \
--input topic="AI productivity" \
--input quality=local \
--input tts_model=elevenlabs/eleven_turbo_v2_5 \
--input broll_model="fal-ai/veo3.1/fast"

Per-run overrides take highest priority and override both quality profiles and config files.

from fabric_workflow_sdk import get_model
# Resolves through the full priority chain
model = get_model(input, "text") # "gemini-2.5-flash"
model = get_model(input, "broll") # depends on quality profile
model = get_model(input, "keyframe_grid") # "skip" or an image model
# With fallback for unknown operations
model = get_model(input, "my_custom_op", fallback="gemini-2.5-flash")