# Fuser: Complete Product & Competitive Analysis > Your workspace for evolving ideas. For creatives that need to ship. > Every model. Every medium. One canvas. --- ## Executive Summary Fuser represents a paradigm shift in the AI creative workflow space by solving the fundamental problem that plagues all competitors: **fragmentation**. While FLORA, Weavy, Krea, ComfyUI, Adobe Firefly, Freepik Spaces, and Runway each attempt to aggregate AI models, Fuser has achieved true universality with **280+ models across ALL modalities** and **400+ LLMs**—more than any competitor by a factor of 3x to 10x. But model quantity alone isn't the differentiator. Fuser's innovation lies in its **revolutionary pricing model** that eliminates the subscription trap: users start with 2,000 free credits and can choose to buy credits once ($5.00/5,000✦), subscribe monthly/annually, or bring their own API keys (BYOK)—mixing all three options seamlessly. This "pay for what you use, when you want" approach, combined with intelligent cost optimization (use BYOK first, then credits), makes Fuser the first AI creative platform that respects user autonomy and budgets. The platform positions itself explicitly for "creatives that need to ship"—not experiment, not explore, but **deliver production work**—with workflows, templates, and an infinite canvas built for velocity, not complexity. --- ## Product Overview - **Name**: Fuser - **Company**: Fuser Technologies, Inc. - **Tagline**: Your workspace for evolving ideas. For creatives that need to ship. Every model. Every medium. One canvas. - **Category**: Universal AI Creative Platform / Production-First Workflow System ### Target Audience - Professional creatives who need to deliver (not just experiment) - Teams at agencies, studios, and brands - Individual designers, artists, and content creators - Anyone frustrated by subscription lock-in or limited model access - Technical users who want BYOK cost optimization - Production teams needing consistent, repeatable workflows --- ## Core Capabilities ### Canvas & Workspace - **Infinite Canvas**: Core interface paradigm with clean, modern design - **Node-Based Workflows**: Visual programming system for chaining operations - **Production Focus**: "For creatives that need to ship" - velocity over experimentation - **Template Library**: Ready-to-use workflows for common production needs - **Workflow System**: Reusable, shareable workflows for teams - **Multi-Modal Support**: Text, image, video, audio, 3D in unified workspace - **Clean UI**: Modern, uncluttered interface shown in product screenshots - **Real-Time Execution**: Workflows run seamlessly with visual feedback ### AI Features & Integration #### Industry-Leading Model Library (680+ Models) Fuser provides access to **680+ AI models** across ALL modalities—3x more than any competitor: **Image Generation (100+ models):** - **Google**: Gemini 2.5 Flash Image, Imagen 3, Imagen 4 (via FAL) - **OpenAI**: GPT Image 1, GPT Image 1 Mini - **FLUX Ecosystem**: Dev, Krea, Kontext, Kontext Max, Pro v1.1 Ultra, Redux, Depth, Canny, LoRA support - **ByteDance**: Seedream v3, v4 (including edit mode) - **Recraft V3**: Vector and raster with style options - **Ideogram v2**: Text-to-image, edit, remix modes - **Qwen Image**: Multilingual image generation - **Stability AI**: Fast SDXL, SDXL Inpainting, SDXL ControlNet Canny - **Reve**: Text-to-image, edit, remix - **Bria**: Product shot, background remove/replace - **FASHN**: Virtual try-on v1.6 - **Fast LCM Diffusion**: Real-time generation - **Wan 2.2**: 5B and A14B image models **Video Generation (130+ models):** - **Runway**: Gen3a Turbo, Gen4 Aleph, Gen4 Turbo, Act-Two (performance mapping) - **OpenAI**: Sora-2, Sora-2 Pro - **Google**: Veo3, Veo3.1, Veo3 Fast, Veo3.1 Fast - **Luma**: Dream Machine, Ray 2, Ray 2 Flash - **Kling**: v1.6 (Pro/Standard), v2.1 (Master/Pro/Standard), v2.5 Turbo - **Pika**: v2.2 (image-to-video, text-to-video) - **ByteDance**: Seedance v1 (Lite/Pro/Pro-Fast) - reference, image, text modes - **Minimax Hailuo**: 02 (Fast/Pro/Standard), 2.3 (Fast/Pro/Standard) - **Wan Video**: Complete suite (T2V, I2V, VACE, FLF2V, Fun Control, ATI, Animate, S2V) - 2.2 5B and A14B versions - **Vidu**: Q1, Q2 (Turbo/Pro), image/text/reference modes - **LTX Video**: v0.95 and extend mode - **Hunyuan Video**: Text and image modes - **Decart Lucy**: 14B image-to-video - **Fast Animatediff**: Turbo and standard, text/video-to-video - **Fast SVD**: Text-to-video **Audio Generation (0+ models):** - **PlayAI**: TTS v3, TTS Dialog - **F5-TTS**: High-quality text-to-speech - **MMAudio v2**: Text-to-audio, video-to-audio - **Minimax Music**: Music generation - **Latent Sync**: Audio synchronization - **Wizper**: Audio processing **3D Generation (20+ models):** - **Rodin (Hyper3D)**: Text/image-to-3D with PBR materials - **Meshy v5**: Multi-image-to-3D, retexture - **Hunyuan3D v2**: Full suite (standard, mini, turbo, multi-view) - **Tripo**: High-fidelity 3D models **Utility & Enhancement (10+ models):** - **Upscaling**: ESRGAN, Topaz Video Upscale, SeedVR Video Upscale, Recraft Clarity Upscale - **Background Removal**: RemBG, Bria Background Remove - **Image Preprocessing**: Depth Anything v2, HED, MLSD, Scribble, Zoe Depth, Canny - **Captioning**: Auto-caption, Florence-2 (caption, detailed, more detailed), Moondream Next - **Video Editing**: Modify Video (text-driven editing) - **Detection**: Moondream Next Detection **LLM Integration (400+ models via OpenRouter + Direct):** - **OpenAI**: GPT-5, GPT-5 Mini, GPT-5 Nano, GPT-4.1, GPT-4o, GPT-4o Mini, o1, o3, o3-mini - **Anthropic**: Claude Sonnet 4.0, 4.5, 3.7, 3.5, Haiku 3.5, Opus 4.1 - **Mistral**: Ministral 3B/8B, Large, Small, Pixtral Large/12B, Open Mistral, Mixtral - **Google**: Gemini 2.5 Pro, 2.5 Flash, 2.0 Flash, 1.5 Pro, 1.5 Flash - **Perplexity**: Sonar, Sonar Pro, Sonar Reasoning, Sonar Reasoning Pro - **Cohere**: Command, Command-R, Command-R-Plus, Command-Light - **DeepSeek**: Chat, Reasoner - **Meta**: Llama 3.1, 3.3, 4 (Maverick, Scout), Llama Guard 4 - **Groq**: Llama variants (optimized) - **Qwen**: Qwen3 32B - **Moonshotai**: Kimi K2 Instruct - **Direct Integration with OpenRouter** #### Key Model Differentiators - **Universal Coverage**: No gaps - text, image, video, audio, 3D all covered - **Latest Models**: Sora-2, Veo3.1, Gemini 2.5, GPT-5, Claude Opus 4.1 - **Multiple Variants**: Pro, Turbo, Fast, Standard versions for cost/quality tradeoffs - **Provider Diversity**: 70+ providers integrated - **Cost Transparency**: Every endpoint has documented costs in realtime - **Dynamic Pricing**: Costs calculated based on actual parameters (duration, resolution, etc.) ### Integration Ecosystem & BYOK #### Bring Your Own Key (BYOK) - Major Differentiator Fuser supports **hybrid pricing** that no competitor offers: **Supported Providers for BYOK:** - OpenAI (GPT, DALL-E, Sora) - Anthropic (Claude) - Runway (Gen-4, Act-Two) - FAL (access to 100+ models) - Google Vertex AI - Perplexity (Sonar) - Cohere (Command) - Mistral - Groq **Intelligent Cost Optimization:** - Toggle "Use API Key First" per provider - Fuser automatically routes to BYOK when cheaper - Falls back to Fuser Credits when BYOK unavailable - Mix and match: use BYOK for expensive models, credits for cheap ones - Real-time cost comparison in UI **API Key Management:** - Secure encrypted storage - Update keys anytime - Priority toggle per provider - Multiple keys per provider (coming soon implied) - Usage tracking per key **Provider Ecosystem:** - **70+ AI Provider Integrations**: OpenAI, Kling, Runway, Anthropic, Fal, Cohere, Krea, Topaz, Luma, OpenRouter, Ideogram, Perplexity, Black Forest Labs, ByteDance, DeepSeek, Fashn AI, Qwen, Bria, Recraft, Minimax, Decart LTX, Pika, Vidu, PlayAI, Hunyuan, Rodin, Stability, Mistral, Groq - **OpenRouter Integration**: Access to 400+ additional LLMs - **Continuous Updates**: "Our creative research team tests every model on the market" --- ## Pricing & Business Model ### Revolutionary Pricing Model Fuser has created the **most flexible and fair pricing model** in the AI creative space: #### Three Pricing Options (Mix All Three!) **1. One-Time Credit Purchase (No Subscription!)** - **$5.00 for 5,000✦ credits** - buy once, use anytime - **No expiration** - credits never expire - **No subscription required** - never forced into recurring billing - **Perfect for**: Occasional users, testing, specific projects **2. Monthly/Annual Subscriptions** - **Monthly**: Flexible pricing starting at $5.00/month for 5,000✦. Fully adjustable to your needs, budget and usage. - **Annual**: Volume discounts on credits. - **Multi-Pack Discounts**: Up to 20% off. Every credit pack comes with 5,000✦ of credits. - 1 pack: 0% off - 2 packs: 10% off - 3 packs: 10% off - 4-5 packs: 15% off - 6+ packs: 20% off - **Perfect for**: Regular users, production teams **3. Auto Topup and Auto Recharge** - **Auto Topup**: Automatically top up your credits when your balance is low. You can set a threshold and we'll auto-refill your account. - **Forget Subscriptions**: Forget subscriptions. Auto topup is a better way to manage your credits while ensuring you never run out. You can disable this feature at any time. - **Perfect for**: Power users, teams with existing provider accounts, cost optimization **4. Bring Your Own API Keys (BYOK) - Industry First** - **Free to use** - no Fuser fees on BYOK usage - **Direct billing** - pay providers directly at their rates - **Cost optimization** - "Use API Key First" toggle - **Hybrid mode** - mix BYOK with Fuser Credits - **Perfect for**: Power users, teams with existing provider accounts, cost optimization #### Starting Credits - **2,000 free credits** - every new user - No credit card required to start - Actually try the platform before paying ### Pricing Philosophy - "Fair pricing, no funny business" > "Forget bloated subscriptions. Credits for generations, storage for what matters. Buy once, subscribe, or go annual. It's a model built on trust, not tricks." **Key Innovations:** 1. **No Forced Subscriptions**: Only platform allowing one-time credit purchases 2. **Credits Never Expire**: Buy once, use anytime - forever 3. **Transparent Costs**: Every model's cost visible 4. **BYOK Option**: Use your own keys at provider rates 5. **Hybrid Billing**: Mix credits, subscriptions, and BYOK seamlessly 6. **Multi-Pack Discounts**: Volume discounts up to 20% 7. **Storage Separation**: Don't pay for storage you don't need 8. **Free Starting Credits**: 2,000 free credits to start, no card required ### Cost Transparency Fuser's realtime pricing calculator shows exact costs for every endpoint **Transparent Margin Calculation** **What This Means:** - ✅ Fuser charges model cost - ✅ You can calculate exactly what you'll pay - ✅ No hidden fees or markups - ✅ Discount tiers transparent (10-20% off) --- ## Target Use Cases Fuser explicitly targets **production work, not exploration**: 1. **Iterative Design**: Refine concepts across text, images, videos, audio, and 3D 2. **Sketch to Render**: Transform rough sketches to photoreal renders 3. **Fashion Photography**: Capture timeless styles and visual narratives 4. **Brand Identity**: Craft distinctive brand and design systems 5. **3D Print**: Accelerate from concepts to 3D models 6. **Video Production**: Create captivating content and engage audiences 7. **Agency Work**: Teams at leading brands 8. **Studio Production**: Film and entertainment content, VFX workflows --- ## Why Fuser Wins: Competitive Analysis ### The Three Problems Every Competitor Has #### Problem #1: Limited Model Access - **FLORA**: 50+ models (missing 110+ that Fuser has) - **Krea**: 50+ models (missing 110+ that Fuser has) - **ComfyUI**: 40+ models (missing 120+ that Fuser has) - **Weavy**: 15+ models (missing 145+ that Fuser has) - **Runway**: ~20 models (missing 140+ that Fuser has) - **Adobe**: 5-10 proprietary models (missing 150+ that Fuser has) - **Freepik**: <30 models (missing 130+ that Fuser has) **Fuser**: 280+ models across ALL modalities. **Zero gaps.** #### Problem #2: Forced Subscriptions (The Subscription Trap) - **FLORA**: $16-48/month required, can't buy credits once - **Weavy**: $12-84/month required, can't buy credits once - **Adobe**: $55-85+/month required, Creative Cloud bundle - **Runway**: Credit packs required, no subscription alternative - **ComfyUI**: GPU-time billing, unpredictable costs - **Krea**: Freemium with likely subscription upsell - **Freepik**: Freemium with likely subscription upsell **Fuser**: $5.00 one-time OR subscribe OR use your own keys. **Your choice.** #### Problem #3: No LLM Integration - **FLORA**: Minimal LLM support (~10) - **Krea**: Zero LLMs - **ComfyUI**: Minimal LLMs (~5) - **Weavy**: Minimal LLMs (~5) - **Adobe**: Zero LLMs - **Freepik**: Minimal LLMs (~5) - **Runway**: LLM nodes but limited models (~10) **Fuser**: 400+ LLMs including GPT-5, Claude Opus 4.1, Gemini 2.5 Pro. **30-60x more.** --- ## Head-to-Head Comparisons ### Fuser vs. FLORA | Feature | Fuser | FLORA | Winner | |---------------------------|-------------------|------------------|------------------------------------| | **AI Models** | 280+ | 50+ | **Fuser (3.2x more)** | | **LLMs** | 400+ | ~10 | **Fuser (30x more)** | | **Entry Price** | $5.00 one-time | $16/month min | **Fuser (68% cheaper first year)** | | **One-Time Purchase** | ✅ Yes | ❌ No | **Fuser (unique)** | | **Credits Expire** | ❌ Never | ✅ Yes (monthly) | **Fuser** | | **BYOK Support** | ✅ Yes | ❌ No | **Fuser (unique)** | | **Mix Payment Methods** | ✅ Yes | ❌ No | **Fuser (unique)** | | **Storage Separation** | ✅ Yes | ❌ Bundled | **Fuser** | | **Pricing Transparency** | ✅ Open-source | ❌ Black box | **Fuser** | **Fuser is 97% cheaper first year, 69% cheaper subscription.** ### Fuser vs. Weavy (Acquired by Figma) | Feature | Fuser | Weavy | Winner | |--------------------------|---------------|------------------------|------------------------------------| | **AI Models** | 280+ | 15+ | **Fuser (10.6x more!)** | | **LLMs** | 400+ | ~5 | **Fuser (60x more!)** | | **Entry Price** | $5.00 one-time | $12/month min | **Fuser (96% cheaper first year)** | | **One-Time Purchase** | ✅ Yes | ❌ No | **Fuser (unique)** | | **BYOK Support** | ✅ Yes | ❌ No | **Fuser (unique)** | | **Vendor Lock-In** | ❌ No | ✅ Yes (Figma) | **Fuser** | **Fuser is 96% cheaper first year, 58% cheaper subscription.** ### Fuser vs. Krea.ai | Feature | Fuser | Krea | Winner | |--------------------------|----------------|------------------|--------------------------------| | **AI Models** | 280+ | 50+ | **Fuser (3.2x more)** | | **LLMs** | 400+ | 0 | **Fuser (infinite advantage)** | | **One-Time Purchase** | ✅ Yes | ❌ No | **Fuser (unique)** | | **BYOK Support** | ✅ Yes | ❌ No | **Fuser (unique)** | | **Credits Never Expire** | ✅ Yes | ❌ Unknown | **Fuser** | | **Production Focus** | ✅ Ship work | Experimentation | **Fuser** | ### Fuser vs. ComfyUI Cloud | Feature | Fuser | ComfyUI Cloud | Winner | |--------------------------|----------------------|------------------------|-------------------------| | **AI Models** | 280+ | 40+ | **Fuser (4x more)** | | **LLMs** | 400+ | ~5 | **Fuser (60x more)** | | **Entry Price** | $5.00 one-time | GPU-time based | **Fuser (predictable)** | | **Pricing Model** | Credits/subscription | GPU minutes | **Fuser (predictable)** | | **Interface Complexity** | Clean, modern | Technical | **Fuser** | | **Cost Predictability** | ✅ High | ❌ Variable (GPU time) | **Fuser** | ### Fuser vs. Adobe Firefly Boards | Feature | Fuser | Adobe Firefly | Winner | |--------------------------------|--------------------------|---------------------|------------------------------------| | **AI Models** | 280+ | 5-10 proprietary | **Fuser (30x more!)** | | **LLMs** | 400+ | 0 | **Fuser (infinite advantage)** | | **Entry Price** | $5.00 one-time | $55/month min (CC) | **Fuser (99% cheaper first year)** | | **One-Time Purchase** | ✅ Yes | ❌ No | **Fuser (unique)** | | **Vendor Lock-In** | ❌ No | ✅ Creative Cloud | **Fuser** | | **Latest Models** | ✅ GPT-5, Sora-2, Veo3.1 | ❌ Proprietary only | **Fuser** | **Fuser is 99% cheaper first year, 91% cheaper subscription.** ### Fuser vs. Freepik Spaces | Feature | Fuser | Freepik Spaces | Winner | |------------------------|----------------------|-----------------------|----------------------| | **AI Models** | 280+ | <30 (estimated) | **Fuser (5x+ more)** | | **LLMs** | 400+ | ~5 | **Fuser (60x more)** | | **One-Time Purchase** | ✅ Yes | ❌ No | **Fuser (unique)** | | **BYOK Support** | ✅ Yes | ❌ No | **Fuser (unique)** | | **Production Focus** | ✅ All creative work | Marketing only | **Fuser (broader)** | ### Fuser vs. Runway Workflows | Feature | Fuser | Runway | Winner | |--------------------------------|-----------------------|-----------------------------|--------------------------------| | **AI Models** | 280+ | ~20 (own + partners) | **Fuser (8x more)** | | **LLMs** | 400+ | ~10 (limited) | **Fuser (30x more)** | | **One-Time Purchase** | ✅ Yes | ❌ Credit packs only | **Fuser (unique)** | | **BYOK Support** | ✅ Yes (incl. Runway) | ❌ No | **Fuser (unique)** | | **Breadth** | ✅ All modalities | Video-focused | **Fuser** | | **3D Models** | 20+ | 0 | **Fuser (infinite advantage)** | | **Pricing Transparency** | ✅ Open-source | ❌ Black box | **Fuser** | --- ## The Four Areas Where Fuser Dominates Everyone ### 1. Model Universality (280+ Models) **Fuser has 3-10x more models than any competitor:** | Platform | Total Models | vs. Fuser | |-----------|--------------|---------------------| | **Fuser** | **280+** | — | | FLORA | 50+ | Fuser has 3.2x more | | Krea | 50+ | Fuser has 3.2x more | | ComfyUI | 40+ | Fuser has 4x more | | Freepik | <30 | Fuser has 5x+ more | | Runway | ~20 | Fuser has 8x more | | Weavy | 15+ | Fuser has 10x+ more | | Adobe | 5-10 | Fuser has 30x+ more | **Why This Matters:** - ✅ Never blocked by missing model - ✅ Use best-in-class for each task - ✅ Cost optimization (choose cheaper alternatives) - ✅ Future-proof (new models added immediately) - ✅ Zero gaps across modalities ### 2. LLM Integration (400+ Models) **Fuser has 30-60x more LLMs than competitors:** | Platform | LLMs | vs. Fuser | |-----------|----------|------------------------------| | **Fuser** | **400+** | — | | Runway | ~10 | Fuser has 30x more | | FLORA | ~10 | Fuser has 30x more | | ComfyUI | ~5 | Fuser has 60x more | | Weavy | ~5 | Fuser has 60x more | | Freepik | ~5 | Fuser has 60x more | | Krea | 0 | Fuser has infinite advantage | | Adobe | 0 | Fuser has infinite advantage | **LLMs Fuser Has That Competitors Don't:** - ✅ GPT-5, GPT-5 Mini, GPT-5 Nano - ✅ Claude Opus 4.1, Claude Sonnet 4.5 - ✅ Gemini 2.5 Pro, 2.5 Flash - ✅ o3, o3-mini (reasoning models) - ✅ Perplexity Sonar Reasoning (web search + reasoning) - ✅ DeepSeek Reasoner - ✅ 400+ additional models via OpenRouter **Why This Matters:** - ✅ Ideation and brainstorming with LLMs - ✅ Prompt engineering automation - ✅ Context-aware generation (LLM + image/video) - ✅ Multi-step reasoning workflows - ✅ Creative direction from AI ### 3. Pricing Freedom (3 Options, Mix All Three) **Fuser is the ONLY platform with all three pricing options:** | Platform | One-Time | Subscription | BYOK | Mix All | |-----------|-----------|--------------|------------|------------| | **Fuser** | **✅ $5.00** | **✅ $5.00/mo** | **✅ Yes** | **✅ Yes** | | FLORA | ❌ | ✅ $16-48/mo | ❌ | ❌ | | Weavy | ❌ | ✅ $12-84/mo | ❌ | ❌ | | Krea | ❌ | ✅ Freemium | ❌ | ❌ | | ComfyUI | ❌ | ✅ GPU-time | ❌ | ❌ | | Adobe | ❌ | ✅ $55-85/mo | ❌ | ❌ | | Freepik | ❌ | ✅ Freemium | ❌ | ❌ | | Runway | ❌ | ✅ Credits | ❌ | ❌ | **The Fuser Advantage:** 1. **Start Free**: 2,000✦ free credits, no card required 2. **Buy Once**: $5.00 for 5,000✦ that never expire 3. **Subscribe**: $5.00/month if you want recurring credits 4. **Use Your Keys**: BYOK for any supported provider 5. **Mix All Three**: Use credits for some models, keys for others **Example Workflow:** - GPT-5 for ideation → Use OpenAI key (you already have) - Kling 2.1 Master for video → Use Fuser credits (convenient) - Gen-4 Turbo for final polish → Use Runway key (cheaper at scale) - All in ONE workflow, seamless routing ### 4. Cost Transparency (Open-Source Pricing) **Fuser is the ONLY platform with open-source pricing calculations** **What This Means:** - ✅ Fuser charges model cost - ✅ You can calculate exactly what you'll pay - ✅ No hidden fees or markups - ✅ Discount tiers transparent (10-20% off) **Competitor Pricing:** - ❌ **FLORA**: Black box - no idea what margins are - ❌ **Weavy**: Black box - no idea what margins are - ❌ **Runway**: Black box credit system - ❌ **Adobe**: Bundled Creative Cloud, can't separate Firefly costs - ❌ **Others**: Opaque pricing --- ## The Five Unique Fuser Features ### 1. Credits That Never Expire **Problem**: Competitors force you to "use it or lose it" with monthly credits. **Fuser Solution**: Buy $5.00 worth of credits once, use them forever. Never expire. **Result**: No subscription anxiety, no wasted credits, buy when ready. ### 2. Hybrid BYOK + Credits **Problem**: Competitors force you to choose: use our credits OR use your keys. **Fuser Solution**: Use BYOK for expensive models, Fuser credits for cheap ones. Mix freely. **Result**: Optimize costs per model, use what you already have, fall back to credits when needed. ### 3. Transparent Margin Calculation **Problem**: Competitors hide their margins and markups. **Fuser Solution**: Open-source pricing calculation in realtime. **Result**: Trust, transparency, informed decisions. ### 4. 400+ LLMs as First-Class Citizens **Problem**: Competitors treat LLMs as afterthoughts (if they have them at all). **Fuser Solution**: 400+ LLMs integrated directly, including GPT-5, Claude Opus 4.1, Gemini 2.5 Pro, reasoning models. **Result**: Ideation, prompt engineering, context-aware generation, multi-step reasoning—all in workflows. --- ## The Bottom Line: Three Reasons to Choose Fuser ### 1. Universal Model Access **280+ models, 400+ LLMs. No gaps. No waiting for new models.** Every competitor has gaps: - FLORA: Missing 110+ models - Weavy: Missing 145+ models - Runway: Missing 140+ models - Adobe: Missing 150+ models **With Fuser, you'll never say "I wish they had [model]" again.** ### 2. Pricing Freedom **$5.00 one-time OR subscribe OR use your keys OR mix all three.** Every competitor traps you: - FLORA/Weavy/Adobe: Forced subscriptions ($12-85/month) - Runway: Forced credit purchases - ComfyUI: Unpredictable GPU-time billing **With Fuser, you control how you pay. Always.** ### 3. Production Focus **"For creatives that need to ship." Not explore. Not experiment. Ship.** Competitors target: - "Explore possibilities" (FLORA) - "Experiment" (Freepik) - "Artistic Intelligence" (Weavy) **Fuser targets professionals who need deliverables, not sketches.** This attracts paying customers who value velocity over exploration. --- ## Strategic Insights ### 1. Fuser Solved the Fragmentation Problem Every competitor is trapped in one of three models: - **Aggregators** (FLORA, Krea): Many models, forced subscriptions - **Specialists** (Runway, Adobe): Deep but narrow, expensive - **Open Source** (ComfyUI): Powerful but complex, unpredictable costs **Fuser is the only platform that combines:** - ✅ Universal model access (280+) - ✅ Flexible pricing (one-time, subscription, BYOK) - ✅ Production focus (ship work, not just explore) - ✅ Modern UX (clean canvas, templates) - ✅ Cost transparency (open-source calculations) ### 2. Pricing Innovation is the Moat While competitors fight over model counts, Fuser won on **pricing freedom**: **The Subscription Trap Problem:** - Adobe: $55-85/month (can't escape Creative Cloud) - FLORA: $16-48/month (forced recurring) - Weavy: $12-84/month (forced recurring) - Runway: Expensive credits (forced purchases) **Fuser's Solution:** - $5.00 one-time (never expires) - $5.00/month subscription (optional) - BYOK (use your own keys) - Mix all three (unique to Fuser) This solves the **biggest user pain point**: feeling trapped in subscriptions. ### 3. BYOK is a Game-Changer No competitor offers hybrid BYOK + credits: **User Journey:** 1. Start with 2,000✦ free credits (try platform) 2. Buy $5.00 one-time pack (test more) 3. Add OpenAI key for GPT-5 (cheaper at scale) 4. Use Fuser credits for occasional Kling videos (convenient) 5. Subscribe monthly for regular work (predictable) **Competitors force you to choose ONE payment method. Fuser lets you mix all three.** ### 4. "For creatives that need to ship" This positioning is genius: **Competitors target:** - "Explore possibilities" (FLORA) - "Experiment" (Freepik) - "Artistic Intelligence" (Weavy) - "Creative AI" (everyone) **Fuser targets:** - "Ship work" (deliverables, not exploration) - "Production-ready" (client work, not sketches) - "Features to keep you in flow" (velocity, not learning) This attracts **paying professionals** who need results, not hobbyists exploring. ### 5. LLM Integration as First-Class 400+ LLMs is a **massive differentiator**: **Why it matters:** - Creative workflows need ideation (LLMs) - Prompt engineering is critical (LLM nodes) - Context-aware generation (LLM + image/video) - Multi-step reasoning (Claude Opus 4.1, GPT-5) **Competitors ignore LLMs:** - Runway: Only LLM nodes (limited models) - Everyone else: Maybe 1-2 LLMs, if any **Fuser makes LLMs central to creative workflows.** ### 6. Transparent Pricing Builds Trust **No competitor shows:** - How they calculate pricing - What margins they take - Why costs vary **Fuser's transparency:** - Builds trust with users - Allows cost optimization (BYOK decisions) - Differentiates from "black box" competitors ### 7. Model Quantity IS Quality (When Universal) 280+ models across ALL modalities means: - ✅ Never blocked by missing model - ✅ Use best-in-class for each task - ✅ Future-proof (latest models added immediately) - ✅ Cost optimization (choose cheaper alternatives) **Competitors with 15-50 models have gaps:** - Missing latest video models - Missing LLMs - Missing 3D tools - Missing audio **Fuser has no gaps.** --- ## Summary: Why Fuser is Superior ### Quantitative Superiority | Metric | Fuser | Best Competitor | Advantage | |---------------------------|-------------------------------|-----------------------|-------------------------------| | **AI Models** | 280+ | 50 (FLORA/Krea) | **3.2x more** | | **LLMs** | 400+ | ~10 (Runway) | **30x more** | | **Entry Price** | $5.00 one-time | $12/month (Weavy) | **First month: 2.4x cheaper** | | **Pricing Options** | 3 (purchase, subscribe, BYOK) | 1 (subscription only) | **3x more flexible** | | **Free Starting Credits** | 2,000✦ | Varies, often 0 | **Try before buy** | | **Video Models** | 130+ | ~20 (Runway) | **3x more** | | **Audio Models** | 0+ | ~5 (others) | **2x more** | | **3D Models** | 20+ | ~5 (Krea) | **2x more** | | **Provider Integrations** | 70+ | 10-15 (others) | **2x more** | ### Qualitative Superiority **The Only Platform That:** 1. ✅ Offers one-time credit purchases (no forced subscriptions) 2. ✅ Credits never expire (buy once, use forever) 3. ✅ Supports BYOK + credits hybrid (intelligent cost routing) 4. ✅ Has 400+ LLMs (first-class integration) 5. ✅ Shows transparent pricing calculations (open-source logic) 6. ✅ Separates storage from generation pricing (pay what you need) 7. ✅ Explicitly targets "creatives that need to ship" (production focus) 8. ✅ Provides 2,000 free starting credits (meaningful trial) 9. ✅ Allows mixing all three payment methods (ultimate flexibility) 10. ✅ Has 280+ models across ALL modalities (no gaps) ### The Fuser Value Proposition > **"Every model you need. Every pricing option you want. No funny business."** While competitors force you into their walled gardens with limited models and forced subscriptions, **Fuser gives you:** 1. **Universal model access** (280+ models, 400+ LLMs) 2. **Pricing freedom** (one-time, subscribe, or BYOK—mix all three) 3. **Production focus** (ship work, not just explore) 4. **Cost transparency** (no tricks, no hidden fees) 5. **No vendor lock-in** (use our credits, your keys, or both) 6. **Credits that never expire** (buy once, use forever) 7. **Intelligent cost optimization** (use BYOK when cheaper) 8. **Modern, clean UI** (infinite canvas, templates, workflows) 9. **2,000 free credits to start** (try before you buy) 10. **Built by creatives, for creatives** (over a decade of experience) **Fuser is the only AI creative platform that respects your autonomy, your budget, and your need to ship production work.** --- ## Notable Quotes - "Your workspace for evolving ideas" - "For creatives that need to ship" - "Every model. Every medium. One canvas." - "Fair pricing, no funny business" - "Credits for generations, storage for what matters" - "Buy once, subscribe, or go annual. It's a model built on trust, not tricks." - "Never start with a blank canvas" - "Intuitive interface is always two steps ahead to support your creative process" - "Features to keep you in flow" - "Our creative research team tests every model on the market" - "Creativity is more than outputs. Process is where taste is made." - "The best creatives don't wait for permission – they experiment and lead." - "Fuser is for those ready to shape what comes next." --- ## Links - **Website**: https://fuser.studio/ - **App**: https://app.fuser.studio/ - **Company**: Fuser Technologies, Inc. ## About Fuser is built by co-founders Dalena & Hirad with over a decade of experience pushing creative tools. Used by leading creative teams worldwide. --- **Last Updated**: January 1, 1970 # Building with the agent (https://docs.fuser.studio/docs/apps/building) You build an app by talking to it. The composer at the bottom of focus mode is where every change starts — the first build and every refinement after. ## The composer [#the-composer] Type what you want, then click **Generate** — or press . ![The focus-mode composer with a prompt ready to generate](/app-node-composer.png) Before the first build, the placeholder reads **"Describe what to build or change…"** and a few **starter prompts** appear above it — click one to drop it into the composer. Once your app exists, the placeholder shifts to **"Ask to change…"**: from then on, every prompt edits the running app rather than starting from scratch. Good prompts are specific about behavior and look. After the first build, keep them incremental — describe one change at a time and let the app grow. ### Craft [#craft] Not sure how to phrase something? Click **Craft** and the agent rewrites your rough prompt into a richer, more detailed one before you send it. If you preferred your original wording, **Restore prompt** puts it back. ## Generation activity [#generation-activity] When a build is running, the chat panel streams a live transcript of what the agent is doing — planning, writing code, then deploying a preview. A status line and progress indicator show the current step, often with an estimate of how long the preview will take. ![A live build with an activity feed and a Stop button](/app-node-activity-feed.png) A **Stop** button cancels the run in progress. Stopping is safe — your previous working version stays intact. ### Status: Draft, Changes, Live [#status-draft-changes-live] A small pill on the node and in focus mode tells you where the app stands: * **Draft** — never published. * **Changes** — published, but the current version differs from what's live. * **Live** — published and matching what's deployed. This pill is read-only here; it's driven by what you do on the [Publishing](https://docs.fuser.studio/docs/apps/publishing.md) page. ## Fix a runtime error in one click [#fix-a-runtime-error-in-one-click] If the running app throws an error, a **Fix runtime error** banner appears in the composer with a short summary. Click it and the agent loads a repair prompt describing the error, so you can send it straight back for a fix instead of debugging by hand. ## Optional details [#optional-details] Sometimes the agent needs a bit more context to build the right thing. Rather than guess, it raises an **Optional details** card over the preview — a short questionnaire with a mix of fields (text, single- or multiple-choice, or a media picker). Answer anything that's useful and leave the rest. Two buttons sit at the bottom: * **Use defaults** — skip the questions and let the agent build with sensible assumptions. * **Build** — submit your answers and start the build. If you don't interact, the card accepts its defaults automatically after a few seconds and proceeds — so a questionnaire never blocks you. > [!NOTE] Answering is always optional > > The card exists to improve the result, not to gate it. Skipping it (or letting it time out) always produces a working app you can refine afterward. ## What's next [#whats-next] - [Generation models](https://docs.fuser.studio/docs/apps/models.md): Choose between Free, Standard, Pro, and Max — and tune creativity. - [Editing your app](https://docs.fuser.studio/docs/apps/editing.md): Go beyond prompting: edit content, design, media, and code directly. - [Connecting inputs](https://docs.fuser.studio/docs/apps/inputs.md): Feed images, references, and data into the agent through sockets. # Data & backends (https://docs.fuser.studio/docs/apps/data-and-backends) Most apps need to remember something — a list, a score, a shared room. For that, an app uses a **Resource node**: a durable service — a database, an API, or file storage — that your app can read from and write to. ## Resource nodes [#resource-nodes] A Resource node is a backend that lives alongside your app on the canvas. When an app needs persistence — saving entries, syncing state between visitors — the agent provisions a Resource and wires the app to it for you. You never set one up by hand, and you never manage connections or credentials. ## See and manage an app's backends [#see-and-manage-an-apps-backends] When an app has Resources, a **database chip** appears on the App node, badged with the count. Open it to see each Resource by name. From there, **Raise** (or **Show on canvas**) a Resource to materialize it as its own node — handy when you want to inspect it or wire it into other apps. > [!NOTE] One backend, many apps > > Because a Resource is its own node, more than one app can share it. That's how a [forked](https://docs.fuser.studio/docs/apps/remixing.md) app carries its data forward — the fork keeps pointing at the same Resource. ## Realtime and multiplayer apps [#realtime-and-multiplayer-apps] Backends are what make **realtime** apps possible. Ask for something multiplayer — a shared whiteboard, a live poll, a chat room — and the agent builds the rooms and sync logic on top of a Resource, so every visitor sees each other's changes as they happen. ## Local state in the preview [#local-state-in-the-preview] For lighter persistence that doesn't need a shared backend, an app can store state in the browser. That keeps per-visitor data — preferences, a draft, a local history — around between visits without provisioning a Resource. ## What's next [#whats-next] - [Connecting inputs](https://docs.fuser.studio/docs/apps/inputs.md): Wire a Database socket and feed media into your app. - [Forking & fusing](https://docs.fuser.studio/docs/apps/remixing.md): Branch an app and choose what happens to its data. - [Publishing & versions](https://docs.fuser.studio/docs/apps/publishing.md): Ship an app once its backend is in place. # Editing your app directly (https://docs.fuser.studio/docs/apps/editing) Prompting is the fastest way to change an app, but it isn't the only way. When you know exactly what you want, edit content, design, media, and code by hand. Switch between these surfaces with the toggles in the composer and the **Code** tab at the top of the preview. ## Edit content [#edit-content] Click the **Edit** toggle in the composer to open the **content inspector**. It lists the editable text and color "slots" the agent exposed, grouped by section. Hover a slot to highlight the matching element in the preview, so you see exactly what you're changing. ![The Edit content inspector listing editable text and color slots, grouped by section](/app-node-edit-inspector.png) Edit a value inline and save — no rebuild required. Color tokens sit at the top of the panel, so you can recolor the app's accents in place. ![The content inspector panel with editable slots and color tokens](/app-node-edit-inspector-panel.png) > [!NOTE] Wired content edits upstream > > When content comes from a node you've connected (see [Connecting inputs](https://docs.fuser.studio/docs/apps/inputs.md)), the inspector points you to that upstream node instead. Edit it there, and the app updates. ## Markup: pin instructions onto the preview [#markup-pin-instructions-onto-the-preview] Sometimes it's easier to point than to describe. Click the **Markup** toggle, then click any element in the preview to drop a **pin** and attach a note — *"make this bigger"*, *"this color is wrong"*. ![Markup mode, ready to pin an instruction onto the preview](/app-node-markup.png) Drop as many pins as you need, then send them in one pass with **Send revisions**. The agent works through your notes element by element — a precise, visual way to request a batch of small changes. ## Design: fonts and colors [#design-fonts-and-colors] Set the app's typography and color without writing CSS. Pick a font from the presets or browse Google Fonts, and adjust color tokens with the color picker. Changes apply across the whole app, so it stays consistent. ## Replace media [#replace-media] In Edit mode, hover any image, video, or audio element in the preview to reveal a **replace** control. Click it to open a media picker and swap in an upload, a generation, or an asset from your library. ## Code view [#code-view] For full control, open the **Code** tab at the top of the preview — a real editor with file tabs, syntax highlighting, and a dirty-state indicator. ![The Code view showing the app's source with file tabs](/app-node-code-view.png) Save with . The app rebuilds and you'll see **Saved** — or **Saved and deployed**. If a save fails to compile, the editor marks the error with its line number and offers **Retry**; **Revert file** discards your unsaved changes. To read the source without touching it, the preview toolbar also has a read-only **source** viewer. > [!WARNING] Hand edits and prompts coexist > > Mix direct edits and prompting freely. After you hand-edit code, the agent picks up your changes on the next prompt — it reads the current source, not a stale copy. ## What's next [#whats-next] - [Preview & focus mode](https://docs.fuser.studio/docs/apps/preview.md): The full-screen workspace, viewport sizes, and the preview toolbar. - [Connecting inputs](https://docs.fuser.studio/docs/apps/inputs.md): Wire references, media, and data into the app. - [Publishing & versions](https://docs.fuser.studio/docs/apps/publishing.md): Ship your edits and roll between versions. # Overview (https://docs.fuser.studio/docs/apps) The **App node** turns a prompt into a real, running web app. You describe what you want, an AI agent writes and deploys it, and the result renders live inside the node. Keep talking to refine it, then publish to a public URL when it's ready. One App node is one app. ![An App node on the canvas with a finished app rendered inside it](/app-node-on-canvas.png) A generation node returns a single image or clip. An App node holds something that evolves — a tool, a toy, a landing page, a game — that you shape through conversation and ship to an audience. ## The three surfaces [#the-three-surfaces] You work with an app in three places: * **The canvas node** — the app's home on the flow. It shows a live preview, its publish status, and the sockets you wire other nodes into. * **Focus mode** — the full-screen workspace where most of the work happens: a chat transcript on the left, the live preview (or code) in the middle, an inspector on the right. * **The Apps panel** — a library of every app you've built, reachable from the left toolbar. Browse, reuse, or drag a past app back onto any canvas. ## How an app comes together [#how-an-app-comes-together] The loop is always the same, no matter how complex the app gets: **Describe** what to build in the prompt. The agent plans, writes the code, and deploys a private preview. **Preview** the running app live inside the node. Try it, then ask for changes in plain language — or edit content, styles, and code directly. **Publish** when it's ready. Your app gets a public URL anyone can open, with an optional QR code and discovery listing. > [!NOTE] The default model is free > > New apps build with the **Free** model, which doesn't spend credits. You can switch to a higher-quality model per app when a build needs more horsepower — see [Generation models](https://docs.fuser.studio/docs/apps/models.md). ## What's next [#whats-next] - [Quickstart](https://docs.fuser.studio/docs/apps/quickstart.md): Build, preview, and publish your first app end to end. - [Building with the agent](https://docs.fuser.studio/docs/apps/building.md): The composer, generation activity, crafting prompts, and fixing errors. - [Editing your app](https://docs.fuser.studio/docs/apps/editing.md): Edit content, styles, media, and code directly — not just by prompting. - [Publishing & versions](https://docs.fuser.studio/docs/apps/publishing.md): Draft, Changes, and Live states; the version switcher; plans and limits. - [Sharing & your audience](https://docs.fuser.studio/docs/apps/sharing.md): Public URLs, QR codes, discovery, and what your audience sees. - [App reference](https://docs.fuser.studio/docs/nodes/other/app.md): The App node's inputs, outputs, and sockets at a glance. # Connecting inputs (https://docs.fuser.studio/docs/apps/inputs) Apps don't have to start from a prompt alone. Wire other nodes into an App node to steer its look, hand it media to use, or give it a data backend — the agent reads everything you connect. ## The input sockets [#the-input-sockets] An App node has three input sockets on its left edge: * **Inspiration** — visual, video, or audio context that steers the app's *look and feel*. Use it for reference images, a moodboard, or a style you want matched. * **Assets** — media the app should actually *use*: images, audio, or 3D to embed in the built app. * **Database** — a shared backend the app can read from and write to. See [Data & backends](https://docs.fuser.studio/docs/apps/data-and-backends.md). Drag an edge from any compatible node into the socket, and the agent picks it up on the next build. > [!NOTE] Inspiration vs. Assets > > **Inspiration** shapes how the app looks; **Assets** are what the app puts on screen. A reference photo of a UI goes into Inspiration; a logo you want displayed goes into Assets. ## Add media from focus mode [#add-media-from-focus-mode] You don't have to wire sockets by hand. In focus mode, the button in the composer adds media directly: ![The add-media menu in focus mode, showing Add inspiration and Add assets](/app-node-add-media-menu.png) * **Add inspiration** — reference images to steer the look. * **Add assets** — images, audio, or 3D for the app to use. Either opens a picker — choose from your library or upload something new, and Fuser wires the media into the right socket for you. ## Dynamic sockets [#dynamic-sockets] Your app's sockets aren't fixed. A generated app can declare its own typed inputs and outputs — and you can **ask for them directly**. Tell the agent you want a socket to take a value in or send a result out, and it adds one. The new sockets appear on the node like any other, so an App node can sit in the middle of a larger graph, not only at the end of one. ## What's next [#whats-next] - [Data & backends](https://docs.fuser.studio/docs/apps/data-and-backends.md): Give your app a real database or backend with a Resource node. - [Building with the agent](https://docs.fuser.studio/docs/apps/building.md): How the agent uses what you connect. # Managing your apps (https://docs.fuser.studio/docs/apps/managing-apps) Every app you build is saved, whether or not it's on your current canvas. Two places let you browse and reuse them. ## The Apps panel [#the-apps-panel] Open the **Apps** panel from the left toolbar to see a grid of every app you've built, each with a thumbnail and name. A scope filter at the top switches the view: * **This Project** — apps used in the canvas you're working in. * **All Apps** — every app across your workspace. ### Reuse an app [#reuse-an-app] Click an app or **drag it onto the canvas** to add an App node bound to it. Where you drop it determines what you get: * **Same workspace** — the new node points at the same app, a fast way to bring a past build back into a flow. * **Different workspace** — it arrives as a **remix**, a fresh copy you can take in a new direction. Each tile carries an **edit** control for its **Title** and **Description**, so you can keep your library tidy. > [!NOTE] Nothing to set up > > The panel fills itself — every app you generate shows up automatically. Before you've built anything, it invites you to add an App node and start. ## The My Apps grid [#the-my-apps-grid] The **My Apps** view on the projects page is a fuller management surface. Open an app, edit it, or jump to its settings — a home base for when you're juggling several apps at once. ## What's next [#whats-next] - [Forking & fusing](https://docs.fuser.studio/docs/apps/remixing.md): Branch an app, or blend two together. - [Sharing & your audience](https://docs.fuser.studio/docs/apps/sharing.md): Publish and present the apps in your library. # Generation models & creativity (https://docs.fuser.studio/docs/apps/models) Every app is built by a model, and you choose which one. The model chip sits in the composer next to the **+** button. Click it to open the picker. ![The model picker showing Free, Standard, Pro, and Max](/app-node-model-picker.png) Each option carries three ratings — **Value**, **Speed**, and **Quality** — so you can weigh the trade-off at a glance. Your choice is remembered per app. ## The models [#the-models] | Model | Best for | Powered by | Notes | | ------------ | -------------------------- | ---------------- | --------------------------------------------------------------- | | **Free** | Everyday builds | Gemini 3.5 Flash | The default, and the quality baseline. **No credits.** | | **Standard** | Most builds | Claude Sonnet 5 | Dependable quality with quick turnarounds. Spends credits. | | **Pro** | Your most ambitious builds | Claude Opus 4.8 | Superior quality, for complex or polished apps. Spends credits. | | **Max** | The most demanding builds | Fable 5 | Frontier intelligence at frontier prices. Spends credits. | Start on **Free** — it's the quality baseline and costs nothing. When you need higher quality — the logic is off, or the result isn't polished enough — step up to **Standard**, **Pro**, or **Max**, then drop back down for routine tweaks. > [!NOTE] The model behind each name > > Hover any option in the picker to see exactly what powers it, along with the > provider's list pricing per million tokens. Fuser may update a tier's > underlying model over time — the picker always shows the current mapping. ## Creativity [#creativity] Below the model, a **Creativity** slider controls how adventurous the agent is. Lower values keep it precise and predictable; higher values invite more invention and surprise. For functional tools, keep it low. For expressive, visual, or playful apps, nudge it up. Some reasoning-focused models run at a fixed setting — when that's the case, the slider is disabled. ## When a model is unavailable [#when-a-model-is-unavailable] If the model you picked is temporarily down or rate-limited, Fuser tells you it couldn't be reached. Try again in a moment, or switch to another model and continue — your app and history are untouched. ## What's next [#whats-next] - [Building with the agent](https://docs.fuser.studio/docs/apps/building.md): Prompts, crafting, generation activity, and error fixes. - [Publishing & versions](https://docs.fuser.studio/docs/apps/publishing.md): What it costs to publish, and the plan limits on published apps. # Preview & focus mode (https://docs.fuser.studio/docs/apps/preview) Your app always runs live — there's no separate "run" step. On the canvas, it renders in a framed preview inside the node. To work on it, you open **focus mode**. ## Focus mode [#focus-mode] Click into a node to open focus mode, a full-screen workspace with three areas: ![Focus mode: chat transcript on the left, live preview in the center, inspector on the right](/app-node-focus-finished.png) * **Chat** (left) — the running transcript of your prompts and the agent's work. Collapse it to give the preview more room. * **Preview** (center) — your live app, with a toolbar above it. * **Inspector** (right) — opens on demand for **Edit** content or **Settings**. On smaller screens the layout compacts: chat moves into a bottom dock and the side panels tuck away, keeping the app itself front and center. ## The preview toolbar [#the-preview-toolbar] Above the preview sits the URL bar and its controls: * The **live URL** of your app, or **Not deployed** before the first build. * **Reload** the preview. * **Copy URL** to share the current address. * **QR code** — once published, scan to open the app on a phone. * **Open in new tab** to view the app full-screen in the browser. ### Viewport sizes [#viewport-sizes] Cycle the preview between **full width**, **tablet**, and **mobile** to check how your app responds across screen sizes without leaving focus mode. ### Preview and Code [#preview-and-code] Toggle between **Preview** (the running app) and **Code** (the editor). See [Editing your app](https://docs.fuser.studio/docs/apps/editing.md) for what the editor can do. ## More actions [#more-actions] The **More actions** menu in the top bar holds a few utilities: * **Copy** the conversation as a **Transcript**, **Markdown**, or **JSON**, or grab **diagnostic logs** to report a problem. * **Download bundle** — a `.zip` of the app's source plus its transcript. * **Unpublish** — take a published app offline (see [Publishing](https://docs.fuser.studio/docs/apps/publishing.md)). > [!NOTE] The preview is sandboxed > > Your app runs in an isolated sandbox, separate from the Fuser canvas around it. That keeps the editor responsive and your app's code safely contained as you build. ## What's next [#whats-next] - [Editing your app](https://docs.fuser.studio/docs/apps/editing.md): The Code editor, content inspector, markup, and media replace. - [Publishing & versions](https://docs.fuser.studio/docs/apps/publishing.md): Status states, the version switcher, and rollback. - [Sharing & your audience](https://docs.fuser.studio/docs/apps/sharing.md): Public URLs, QR codes, and what your audience sees. # Publishing & versions (https://docs.fuser.studio/docs/apps/publishing) Publishing turns your private draft into a public app anyone can open. It takes one click, and it's reversible. ## What publishing does [#what-publishing-does] Click **Publish** and Fuser promotes the version you're viewing to production and opens public access, so anyone with the link can load it. The status pill flips to **Live**. ![A published app showing the Live status pill and share dashboard](/app-node-published-live.png) The publish button tracks the app's state: * **Publish** — the app has never gone live. * **Update** — it's live, but you've edited since. Click to push your changes. * **Published** — live and current. Hover to reveal **Unpublish**. **Unpublish** takes the app offline immediately. It deletes nothing — your code and full version history stay intact, and you can publish again anytime. ## Draft, Changes, Live [#draft-changes-live] The status pill compares what you're viewing against what's public: * **Draft** — never published. * **Changes** — published, but the version you're viewing differs from what's live, because you've edited or rolled back to an older version. * **Live** — published, and what you see is exactly what your audience sees. ## Version history [#version-history] Every build adds a version to the app's history. The **version switcher** in focus mode steps through them and shows your position — for example, "2 / 5": * Step **back** to roll the preview to an earlier version. * Step **forward** to return toward the latest. Moving between versions is non-destructive — it's navigation, not deletion. The first version can't go back; the latest can't go forward. > [!NOTE] Versions don't roll back your data > > The switcher moves the app's *code* between builds. It does **not** roll back a connected [Resource](https://docs.fuser.studio/docs/apps/data-and-backends.md): a database and everything saved in it stay as they are. Returning to an earlier version won't undo data your app has already written. > [!WARNING] Publishing while rolled back > > Publishing always makes the version you're viewing public. So if you roll back to an older version and then publish, that **older version becomes live**. The status reads **Changes** whenever you're viewing a version that isn't live — step forward to the latest before publishing if you want your newest work out. ## Plans & publish limits [#plans--publish-limits] Build as many apps as you like. The limit is on how many you can keep **published** at once: | Plan | Published apps | | ------------ | -------------- | | Free | 1 | | Indie | 5 | | Professional | Unlimited | | Teams | Unlimited | At the limit, the publish control becomes **Upgrade to publish** and notes that the *"Published app limit reached."* To continue, **unpublish** an existing app to free a slot, or **upgrade your plan**. New accounts start with a 30-day Professional trial, so you have room to explore before the limits apply. ## What's next [#whats-next] - [Sharing & your audience](https://docs.fuser.studio/docs/apps/sharing.md): Public URLs, QR codes, discovery, and access control. - [Managing your apps](https://docs.fuser.studio/docs/apps/managing-apps.md): Find, reopen, and reuse every app you've built. - [Troubleshooting](https://docs.fuser.studio/docs/apps/troubleshooting.md): Why others can't open a draft, plus other common questions. # Quickstart (https://docs.fuser.studio/docs/apps/quickstart) This walkthrough takes you from an empty canvas to a published app — one prompt and a few clicks. ## Add an App node [#add-an-app-node] Press (or open the **Add a Node** menu), search for **App**, and add it. A fresh node shows a glowing **Start an app** invitation. ![An empty App node with the "Start an app" invitation](/app-node-empty.png) Click the node to open **focus mode** — the full-screen workspace where you'll build. ## Describe what to build [#describe-what-to-build] Focus mode opens with a composer and a few starter prompts above it. Type your own idea, or click a starter to drop it in. ![Focus mode with starter prompts above the composer](/app-node-firstrun-prompts.png) Keep the first prompt concrete but simple — you'll refine it afterward. For example: *"Build a minimalist Pomodoro timer with a circular progress ring, start/pause/reset, and a clean dark UI."* Press (or click **Generate**) to start the build. > [!NOTE] Stays on Free by default > > The model chip reads **Free** — the default, no-credit model. Leave it as-is for your first app. See [Generation models](https://docs.fuser.studio/docs/apps/models.md) for when to switch. ## Watch it build [#watch-it-build] The agent narrates as it works: planning, writing code, then deploying a preview. A live transcript fills the chat panel on the left, and a **Stop** button lets you cancel a run in progress. ![The app building, with a live activity feed and Stop button](/app-node-generation-activity.png) ## Preview and refine [#preview-and-refine] When the build finishes, your app renders live in the preview. Try it out. ![A finished app rendered in focus mode beside the chat transcript](/app-node-focus-finished.png) To change anything, describe it in the composer — *"make the accent color teal"*, *"add a long-break mode"* — and the agent applies it. You can also [edit content, styles, and code directly](https://docs.fuser.studio/docs/apps/editing.md). ## Publish [#publish] When you're happy, click **Publish**. Your app is promoted to a public URL that anyone with the link can open — no login required. The status pill flips to **Live**, and a share panel hands you the link and a QR code. ![A published app showing the Live status and share panel](/app-node-published-live.png) That's the whole loop. Everything else in this section goes deeper on each step. ## What's next [#whats-next] - [Building with the agent](https://docs.fuser.studio/docs/apps/building.md): Prompts, crafting, generation activity, and one-click error fixes. - [Editing your app](https://docs.fuser.studio/docs/apps/editing.md): Direct edits to content, design, media, and code. - [Publishing & versions](https://docs.fuser.studio/docs/apps/publishing.md): Version history, rollback, and what publishing actually does. - [Sharing & your audience](https://docs.fuser.studio/docs/apps/sharing.md): Links, QR codes, discovery, and access control. # Forking & fusing (https://docs.fuser.studio/docs/apps/remixing) Apps are starting points as much as finished things. Two features let you build on what you've already made: **forking** an app into a new direction, and **fusing** a piece of one app into another. > [!NOTE] Copies share state — forks don't > > You can't copy and paste an app. You can drag one in from your [Apps panel](https://docs.fuser.studio/docs/apps/managing-apps.md), but every instance you place that way points at the **same underlying app and the same data** — change one and you change them all. To branch into an independent copy with its own state, **fork** it. ## Fork an app [#fork-an-app] A **fork** copies an app onto the canvas as a separate, independent app you can take somewhere new. Click the **fork** control on the node to open a short, three-step guide: **How should the fork begin?** — pick one of the agent's suggested directions, or choose **Describe** to write your own starting point. **Add details** — the first instruction for the new app, setting it on its way. **What should happen to data?** — choose **Start fresh** for a clean slate, or **Keep data** to carry the original's reusable data forward into a shared [Resource](https://docs.fuser.studio/docs/apps/data-and-backends.md) . Fuser drops the copy on the canvas and starts generating it from your direction. The original is untouched. ## Aspects & fusing [#aspects--fusing] Every built app exposes draggable **Aspects** — distinct pieces of what it does, each shown on a side tab with its own glyph, name, and description. A **Leaderboard** aspect, for example, is something you can lift out and carry elsewhere. To **fuse**, drag an Aspect from one app onto another App node. A **Drop to fuse** target appears; release, then confirm in the dialog — optionally choosing where the Aspect should land. The destination app's agent re-expresses it in its own context, so you blend a strong idea from one app into another without rebuilding it by hand. > [!NOTE] Fork vs. fuse > > **Fork** branches a whole app into a new copy. **Fuse** brings a single Aspect from one app into another existing app. Reach for fork to start something new; reach for fuse to enrich something you already have. ## What's next [#whats-next] - [Data & backends](https://docs.fuser.studio/docs/apps/data-and-backends.md): How forked apps carry their data forward. - [Managing your apps](https://docs.fuser.studio/docs/apps/managing-apps.md): Find and reuse every app you've built. # Sharing & your audience (https://docs.fuser.studio/docs/apps/sharing) Once an app is [published](https://docs.fuser.studio/docs/apps/publishing.md), anyone with the link can open it — no Fuser account required. The **Settings** panel in focus mode is where you manage how it's shared and presented. ![The share dashboard for a published app](/app-node-share-dashboard-published.png) ## The public URL [#the-public-url] Every published app gets a public address. Apps on your personal profile get a readable path built from your username and a slug; edit the slug in the **URL path** field to make it memorable. Apps owned by an organization use a stable, ID-based URL instead. Next to the link is a **QR code** pointing at your app's public address — point a phone at it to open the app, or drop it into a screen share. > [!NOTE] Custom domains > > Apps are served on Fuser's own domain, so there's no custom-domain setup to configure. Your app is reachable the moment you publish. ## Preview vs. published [#preview-vs-published] A visitor sees one of two very different states: * A **published** app is public. Anyone with the link opens it anonymously. * A **draft preview** is private. Only the project's editors can open it; the link asks everyone else to *"open this app from its workspace."* Access depends entirely on whether the app is published. An app that was never published and one that's been unpublished look identical from outside — both report that there's no app at that address — so unpublishing truly takes it offline. ## Listing & presentation [#listing--presentation] The Settings panel also controls how your app presents itself: * **Name** and **Description** — the app's title and summary. * **Users can find my app on Fuser** — lists the app in Fuser's discovery feeds. Off by default; turn it on when you want to be found. * **Categories** and **Tags** — help people surface the right kind of app. * **Screenshots** — Fuser generates a screenshot for you; upload your own to override it (PNG, JPG, or WebP). Click **Save changes** to apply your listing edits. ## The "Made with Fuser" badge [#the-made-with-fuser-badge] Published apps carry a small **Made with Fuser** badge that links back to Fuser and opens a QR drawer for viewing the app on a phone. It appears on the live app for your audience, never inside the editor. **Moving it.** Drag the badge to reposition it anywhere on the page, so it never sits on top of your app's own interface. A plain click still opens the link — only a click-and-drag moves it. Its position is remembered per app in the browser you moved it in, and it is always kept on screen. **Opening the QR drawer.** A sliver of a QR code peeks out just below the badge — click or tap it to reveal the full code for opening the app on a phone. Click it again or press `Escape` to tuck it away. > [!NOTE] Removing the badge > > On the **Professional** and **Teams** plans you can remove the badge entirely: > open the app's settings, turn on **Hide the Made with Fuser badge**, and click > **Save changes**. On the Free and Indie plans the badge stays on every published > app. > > If a subscription lapses, the badge comes back on your published apps. Your > setting is kept, and it takes effect again as soon as you resubscribe. ## What's next [#whats-next] - [Managing your apps](https://docs.fuser.studio/docs/apps/managing-apps.md): Your library of built apps and the My Apps grid. - [Publishing & versions](https://docs.fuser.studio/docs/apps/publishing.md): Publish, unpublish, and move between versions. - [Troubleshooting](https://docs.fuser.studio/docs/apps/troubleshooting.md): Answers to common sharing questions. # Troubleshooting & FAQ (https://docs.fuser.studio/docs/apps/troubleshooting) Most app issues are recoverable — your last working version and full history are always safe. Here's how to read the common ones. ## Build & save errors [#build--save-errors] * **The chosen model is unavailable** — it's temporarily down or rate-limited. Try again, or switch to another [model](https://docs.fuser.studio/docs/apps/models.md) and continue. * **Compile / bundle / save failed** — a code change didn't build. The editor flags the error with its line number and offers **Retry**. You can also **Revert file** to discard the change, or ask the agent to fix it. * **A runtime error in the running app** — a **Fix runtime error** banner appears in the composer. Click it to load a repair prompt and send it to the agent. * **A fork or fuse didn't complete** — the action reports the failure in its dialog. Your source app is unaffected; run the action again. ## "Private preview" [#private-preview] A **Private preview** page that asks you to open the app from its workspace means the app is an unpublished **draft** — only the project's editors can open it. [Publish](https://docs.fuser.studio/docs/apps/publishing.md) it to make it openable by anyone with the link. ## FAQ [#faq] Yes. The **Free** model is the default and spends no credits. Switch to a higher-quality model only when a build needs it — see [Generation models](https://docs.fuser.studio/docs/apps/models.md) . A draft stays private to the project's editors. Once you **publish** , anyone with the public link can open it — hit **Publish** and share the link. See [Sharing & your audience](https://docs.fuser.studio/docs/apps/sharing.md) . It depends on your plan: Free publishes 1 at a time, Indie 5, and Professional and Teams have no limit. You can build as many as you like either way — the cap is only on apps published at once. See [Publishing & versions](https://docs.fuser.studio/docs/apps/publishing.md) . Yes. Every build is a version. Use the version switcher in focus mode to roll back to an earlier one — it's non-destructive. See [Publishing & versions](https://docs.fuser.studio/docs/apps/publishing.md) . Published apps carry a small **Made with Fuser** badge for your audience. See [Sharing & your audience](https://docs.fuser.studio/docs/apps/sharing.md) . No. **Unpublish** only removes public access — your code and version history stay intact, and you can publish again anytime. ## What's next [#whats-next] - [Building with the agent](https://docs.fuser.studio/docs/apps/building.md): Prompts, crafting, and one-click error fixes. - [Publishing & versions](https://docs.fuser.studio/docs/apps/publishing.md): States, version history, rollback, and limits. # Concepts (https://docs.fuser.studio/docs/compositor/concepts) This page covers the model behind the editor — the parts that aren't a button you click. Read it once and the rest of the section makes more sense. ## The scene is the source of truth [#the-scene-is-the-source-of-truth] A Compositor node holds a **scene** — the canvas dimensions, frame rate, duration, and an ordered stack of layers. Everything you see and edit reads from the scene; everything that gets rendered downstream reads from the same scene. The implication: **inputs don't recompute geometry**. If you reconnect a different image to a Compositor input, the layer it represents keeps its existing position, size, and rotation. The new image just replaces the pixel source. The first input you ever connect sets the canvas dimensions; later input changes don't resize the canvas. > [!NOTE] Why your layout doesn't shift > > When you swap an image input, the layer's transform stays put because the scene already records it. This is intentional — it lets you A/B different upstream sources without rebuilding the composition every time. ## Hybrid downstream rendering [#hybrid-downstream-rendering] The Compositor node emits **the scene** through its output socket. Downstream nodes that understand scenes — Image, Video, and other Compositors — render it independently, with their own playback and their own previews. They don't wait for an export. The practical consequence: when you have a Compositor feeding a Video node, the Video node has its own play/pause/scrub controls. Two Compositors chained together both render in real time without re-encoding. Export is for getting a file out of Fuser, not for connecting nodes — see [Timeline & Export](https://docs.fuser.studio/docs/compositor/timeline-and-export.md). ## Anchor points [#anchor-points] Every layer has an **anchor** — the point used as the origin for rotation and scale. Most layer types use a center anchor (`0.5, 0.5`); rotating spins around the middle, scaling grows from the middle. **Text layers are different.** Their anchor is at the origin (`0, 0`) so the rendered text aligns with how typography normally lays out. Rotate a text layer and it pivots from its top-left, not its center. If you want a text layer to behave like other layers, you can set the anchor manually in the [Transform](https://docs.fuser.studio/docs/compositor/properties.md#transform) section. ## Masks [#masks] The Compositor has three masking concepts. Pick by **what's driving the reveal** and **what scope it applies to**. * **Alpha mask** (per layer) — another layer's transparency channel hides parts of *this* layer. Reach for it when you have a shape (often an Ellipse or a Vector) and want to use it as a window into one image, video, or composited group. * **Luminance mask** (per layer) — same scope, but the mask's brightness drives the reveal. White shows, black hides, gray partially reveals. Reach for it when you want a soft vignette around an image, or to use a grayscale gradient to fade content in or out. * **Global alpha mask** (whole scene) — one designated layer applies its alpha to the entire composited scene. Reach for it when you want to frame everything through a shape (a circular preview, a custom frame, a TV-style mask) without setting the same mask on every individual layer. See [Properties → Layer mask](https://docs.fuser.studio/docs/compositor/properties.md#layer-mask) for the controls. ## Raster persistence [#raster-persistence] When you paint with the **Brush** or erase with the **Eraser**, pixels accumulate on a raster layer. Behind the scenes, your painted pixels are saved to your project's media library and the scene records a reference to them. Two consequences: * **Scenes load asynchronously.** Open a project with a heavy raster layer and you'll see the rest of the composition before the painted pixels arrive. This is normal. * **Your project file stays small.** Even multi-megapixel paint layers don't bloat your project, because the heavy data lives in your media library, not inline. > [!NOTE] Don't fight the upload > > If you paint and immediately export, the upload may still be in flight. The export waits — you don't need to do anything special. But if you're hitting an inference node downstream that doesn't tolerate a brief delay, give the upload a moment to finish. ## Viewport and navigation [#viewport-and-navigation] The canvas sits inside a viewport you can pan and zoom independently of the canvas dimensions. * **Zoom** — scroll-wheel, `⌘/Ctrl + scroll` for finer control, `+` and `−` keys, or `⌘/Ctrl + 0` to fit the canvas to the view. * **Pan** — middle-mouse drag, hold `Space` and drag with any tool, or pick the **Hand** tool (`H`). * **Smart guides** — when you drag a layer near another layer's edge, the canvas center, or a grid line, you get snap indicators. Toggle the grid and snap-to-grid in [Properties → Canvas](https://docs.fuser.studio/docs/compositor/properties.md#canvas). ## Copy, paste, and drag-drop [#copy-paste-and-drag-drop] The Compositor accepts content from outside the editor: * **Paste** — `⌘/Ctrl + V` from any app. Pasting an image creates an image layer; pasting text creates a text layer. Layers copied inside the Compositor paste with a small offset so they're easy to see. * **Drag-drop** — drop image, video, or text files from your OS onto the canvas. Each becomes a layer. This is the fastest way to get external assets into a composition without going back to the flow canvas to wire up a new input node. ## Multiplayer behavior [#multiplayer-behavior] Compositors are live-collaborative. When teammates have the same project open: * **Presence** — you see each other's cursors and selections in real time. * **Lock messaging** — if another user is already inside a Compositor when you arrive at it, you see who has it open. Two users can't actively edit the same Compositor simultaneously. * **Idle timeout** — when collaborators are present and you've been idle for a minute, the Compositor closes itself with a `Closed due to inactivity` toast. Your unsaved work is saved before the close. If you're alone in the project, there's no timeout. This page focuses on behavior. For the actual sharing model — who can see and edit a project — see [Sharing](https://docs.fuser.studio/docs/teams/sharing.md). ## What's Next? [#whats-next] - [Tools](https://docs.fuser.studio/docs/compositor/tools.md): Eight tools, their settings, and the keyboard shortcuts that drive them. - [Layers](https://docs.fuser.studio/docs/compositor/layers.md): Every layer type the scene can hold and how each one behaves. - [Properties](https://docs.fuser.studio/docs/compositor/properties.md): Canvas, transform, appearance, masks — the controls that shape the output. # Overview (https://docs.fuser.studio/docs/compositor) The Compositor is Fuser's built-in visual editor for stacking images, video, text, vector art, raster paint, and 3D into a single layered **scene**. Think Figma or Photoshop, but living inside a flow node — anything you compose flows downstream to inference, further editing, or export. A **scene** is the unit the Compositor works with: canvas dimensions, frame rate, duration, and an ordered stack of layers. Saving the editor commits the scene as the node's output; downstream nodes receive that scene as their input. ![Compositor Overview](/compositor-edit-interface.jpeg) ## Opening the Compositor [#opening-the-compositor] Click the **Edit** button on a Compositor node to open the full-screen editor. When you're done, click **Save** to commit the scene as the node's output, then **Exit** to return to the flow canvas. The saved scene becomes immediately available to downstream nodes. > [!NOTE] Desktop and tablet only > > The Compositor editor runs on desktop and tablet browsers. On mobile, Compositor nodes still display their output, but you can't open the editor. ## Editor Layout [#editor-layout] The editor has four primary areas around a central canvas: * **Layers Panel** (left) — the layer stack. Reorder, toggle visibility, lock layers, rename. See [Layers](https://docs.fuser.studio/docs/compositor/layers.md). * **Canvas** (center) — the editing surface where layers render and respond to your tools. * **Toolbar** (floating, bottom of the canvas) — eight editing tools for selecting, drawing, painting, and erasing. See [Tools](https://docs.fuser.studio/docs/compositor/tools.md). * **Properties panel** (right) — context-aware controls for the selected layer or the canvas. See [Properties](https://docs.fuser.studio/docs/compositor/properties.md). ![Compositor Toolbar](/compositor-toolbar-ui.png) ## Tools at a glance [#tools-at-a-glance] The toolbar holds eight tools. Each has a single-key shortcut. | Icon | Tool | Shortcut | | ---------------------------------------------------------------- | ------------- | -------- | | | **Select** | `V` | | | **Hand** | `H` | | | **Rectangle** | `R` | | | **Ellipse** | `O` | | | **Text** | `T` | | | **Pen** | `P` | | | **Brush** | `B` | | | **Eraser** | `E` | Each tool's settings, gestures, and per-tool shortcuts live on the [Tools](https://docs.fuser.studio/docs/compositor/tools.md) page. ## What's Next? [#whats-next] - [Concepts](https://docs.fuser.studio/docs/compositor/concepts.md): The mental model — how the scene drives both the editor and downstream nodes, masks vs. clipping, anchors, multiplayer behavior. - [Tools](https://docs.fuser.studio/docs/compositor/tools.md): All eight tools with their settings, gestures, and keyboard shortcuts. - [Layers](https://docs.fuser.studio/docs/compositor/layers.md): Twelve layer types — shapes, raster, text, image, video, 3D, adjustments, nested compositors. - [Properties](https://docs.fuser.studio/docs/compositor/properties.md): Canvas, transform, appearance + blend modes, masks, global alpha mask. - [Timeline & Export](https://docs.fuser.studio/docs/compositor/timeline-and-export.md): Animate, scrub, and export PNG or video. How the downstream output works. # Layers (https://docs.fuser.studio/docs/compositor/layers) A scene is an ordered stack of layers. Lower in the panel renders on top of higher; reordering changes what overlaps what. The Compositor supports twelve layer types — some you draw with [tools](https://docs.fuser.studio/docs/compositor/tools.md), some come from connected nodes, some you add through the **Add layer** menu. ![Compositor Layers Panel](/compositor-layers-ui.jpeg) ## Common properties [#common-properties] Every layer carries the same baseline metadata, regardless of type: * **Visibility** — toggle the layer on or off without deleting it. * **Lock** — prevents selection and editing until you unlock. * **Name** — double-click in the layer panel to rename. The default name reflects the layer type. * **Opacity** — `0`–`100%`. * **Blend mode** — how this layer combines with the layers below it. See [Properties → Appearance](https://docs.fuser.studio/docs/compositor/properties.md#appearance). * **Transform** — position, rotation, scale, anchor. See [Properties → Transform](https://docs.fuser.studio/docs/compositor/properties.md#transform). * **Mask** — optional alpha or luminance mask. See [Properties → Layer mask](https://docs.fuser.studio/docs/compositor/properties.md#layer-mask). The rest of this page covers what's specific to each type, grouped into three families. ## Organizing layers [#organizing-layers] Use the Layers panel to structure complex scenes, not just to reorder them. ### Groups and parenting [#groups-and-parenting] Groups parent layers together so you can move, scale, rotate, hide, lock, fade, duplicate, or delete a set of layers as one unit while keeping every child editable. * Select one or more sibling layers and click **Group**, or press `Cmd+G` / `Ctrl+G`. * Select a group and click **Ungroup**, or press `Cmd+Shift+G` / `Ctrl+Shift+G`. * Drag a layer onto the middle of a group row to parent it into that group. * Drag a layer above or below another row to place it as that row's sibling. Groups can be nested. The Layers panel indents children under their parent group and lets you collapse or expand each group row. A group's visibility, lock state, opacity, blend mode, and transform cascade to its children. Grouping requires all selected layers to share the same parent. If the selected layers live in different groups, move them into the same parent first, then group them. ### Split an image into editable layers [#split-an-image-into-editable-layers] **Split into layers** separates a single image layer into editable cutout layers. Select one image layer, then click **Split into layers** in the Layers panel. The dialog asks for: * **Prompt** — what objects or regions to separate. * **Layers** — how many cutout layers to create. When the split finishes, the original image is replaced by a selected group containing the separated image layers. Each cutout is a normal image layer, so you can move, hide, mask, transform, reorder, or split it again independently. If the source image came from a connected input, splitting turns it into editable scene layers. Later upstream changes will not overwrite that split group. ## Layer types [#layer-types] Layers you create with a [tool](https://docs.fuser.studio/docs/compositor/tools.md). ### Rectangle [#-rectangle] Drawn with the [Rectangle tool](https://docs.fuser.studio/docs/compositor/tools.md#rectangle-r). Type-specific properties: * **Width / Height** — pixel dimensions. * **Fill** — color, on/off. * **Stroke** — color, width, position (`Center` / `Inside` / `Outside`), on/off. * **Corner radius** — uniform across all four corners. Good for backgrounds, framing devices, callout chips, and as a base for masks. ### Ellipse [#-ellipse] Drawn with the [Ellipse tool](https://docs.fuser.studio/docs/compositor/tools.md#ellipse-o). Same fill/stroke as Rectangle, no corner radius. ### Vector [#-vector] Drawn with the [Pen tool](https://docs.fuser.studio/docs/compositor/tools.md#pen-p). A vector layer is one or more **subpaths**, each of which is a chain of points (anchors) with optional **control handles** (the lines that pull out from a point and shape the curve into and out of it). If you've used Figma's pen tool, the four point types map cleanly onto its vocabulary: * **Corner** — no curve smoothing; handles move independently. (Figma: *No mirroring*.) * **Smooth** — handles mirror in both angle and length, so the curve flows symmetrically through the point. (Figma: *Mirror angle and length*.) * **Asymmetric** — handles share angle but the lengths are independent, so each side of the curve can have a different "weight". (Figma: *Mirror angle*.) * **Auto** — Fuser computes the handles for you from the neighboring points using Catmull-Rom interpolation. Useful when you just want a smooth curve through a series of clicks without fiddling with handles. (No direct Figma equivalent.) **Fill** and **Stroke** behave like Rectangle. ### Raster [#-raster] The output of the [Brush tool](https://docs.fuser.studio/docs/compositor/tools.md#brush-b) — a pixel surface you paint into. The brush creates a raster layer if none is selected; otherwise it paints onto the selected one. Behind the scenes, your painted pixels are saved to your project's media library and the scene records a reference. See [Concepts → Raster persistence](https://docs.fuser.studio/docs/compositor/concepts.md#raster-persistence). ### Eraser mask [#-eraser-mask] When you erase on a non-raster layer, the Compositor creates an **eraser mask** layer linked to the parent. The mask hides parts of the parent without modifying its content; deleting the mask restores the parent in full. This is the non-destructive form of erasing. To erase pixels permanently, use the Eraser on a Raster layer instead. Layers that hold media — typography, images, video, and color. ### Text [#-text] Created with the [Text tool](https://docs.fuser.studio/docs/compositor/tools.md#text-t). Text layers are rich — they're more than a font and a color. **Typography:** * **Font family** — choose from built-in fonts, Google Fonts, or custom uploaded fonts. * **Font size** — `1`–`10000` px. * **Color** — any hex. * **Letter spacing** — em-relative, `-20` to `100`. * **Line height** — multiplier, `0.5`–`3` (default `1.2`). * **Alignment** — left, center, right, justify. **Custom fonts.** Select a text layer, open **Typography**, then click **Upload** next to **Font**. Supported font files are `.ttf`, `.otf`, `.woff`, and `.woff2`. Fuser asks you to confirm that you have the right to use the font before loading it. Custom fonts stay local to the current device. If you open the composition on another device and a text layer uses a missing custom font, the layer shows a warning and offers **Upload font file** so you can provide the matching font there too. **Variable fonts.** When the chosen font supports variable axes (commonly **weight**, **width**, **optical size**), the panel surfaces a slider per axis. Each axis can be animated by connecting a number node to the corresponding socket on the Compositor — useful for breathing weight or width morphs. **Manual kerning.** You can adjust per-character kerning for fine control over letterforms. **Sizing modes** — text boxes behave like Figma's: * **Auto-width** — the box is one line tall and grows horizontally as you type. `\n` forces a break. * **Auto-height** — the box has a fixed `maxWidth` and grows vertically as text wraps. * **Fixed** — both width and height are pinned. Text overflows if it doesn't fit. **Stroke.** Optional outline around the glyphs, with color, width, and position (`Center` / `Inside` / `Outside`). > [!NOTE] Text uses an origin anchor > > Unlike most layers, text rotates and scales from its top-left corner, not its center. See [Concepts → Anchor points](https://docs.fuser.studio/docs/compositor/concepts.md#anchor-points) — and override the anchor in [Properties → Transform](https://docs.fuser.studio/docs/compositor/properties.md#transform) if you want it to behave like a shape. ### Image [#-image] Comes from a connected Image node, a paste, or a drag-drop. Type-specific properties: * **Source dimensions** — the original pixel size of the image. * **Display dimensions** — the size of the layer in the scene; setting these doesn't resample the source. * **Crop** — adjust visible bounds without scaling the source. Images are referenced by URL; replacing the upstream input swaps the URL but keeps the layer's transform. ### Video [#-video] Comes from a connected Video node, a paste, or a drag-drop. Same source/display dimensions and crop as Image, plus: * **Loop** — per-layer toggle. * **Playback** — controlled from the [Timeline](https://docs.fuser.studio/docs/compositor/timeline-and-export.md#timeline) when the scene has video layers or duration. Multiple video layers play in sync against the scene's clock; the longest determines the effective duration unless you override it in the Canvas section. ### Solid color [#-solid-color] A flat color fill with explicit width and height. Useful as a background layer, a quick color block for a mask, or as a tinted overlay paired with a blend mode. Add via the **Add layer** menu in the layers panel. Niche layer types — 3D objects, non-destructive effects, and nested compositions. ### 3D mesh [#-3d-mesh] Rotatable, scalable 3D objects rendered into the scene. Created from the **Add layer** menu (built-in primitives) or by connecting a Mesh node (custom `.glb` / `.gltf`). * **Mesh** — built-in (`bunny`, `cube`, …) or a custom URL. * **Viewport size** — width and height, `64`–`2048` px each. * **Rotation** — independent X, Y, Z (`−180°` to `+180°`). * **Scale** — uniform across all axes. * **Material** — `metallic` and `roughness`, both `0`–`1`. * **Color tint** — applied multiplicatively to the material. * **Gizmo** — switch between rotate and scale handles for direct manipulation on the canvas. ### Adjustment [#-adjustment] A non-destructive layer that affects the layers beneath it. You stack one or more **filters** on it; each filter has its own intensity slider. **Basic adjustments** (8) — `Blur`, `Brightness`, `Contrast`, `Saturation`, `Temperature`, `Tint`, `Sepia`, `Grayscale`. Each accepts a value or intensity in its own range. **Preset filters** (8) — `Vintage`, `Kodak Film`, `Polaroid`, `Film Noir`, `Fade`, `Cross Process`, `Vibrant`, `Muted`. Each is a curated Instagram-style look with a single intensity slider (`0`–`100%`). Filters apply in stack order. Reordering filters within the layer (and reordering the adjustment layer itself) changes the result. Add via the **Add layer** menu and pick filters from the dropdown. ### Compositor (nested) [#-compositor-nested] Reference another Compositor's output as a layer in this scene. Connect a Compositor node to a Compositor input, and the Compositor layer appears in your stack. The reference is **live**, not a snapshot — when the upstream Compositor changes, the nested layer reflects the change. Useful for reusable scene fragments (a logo lockup, a recurring frame, a shared color palette) shared across multiple compositions. > [!NOTE] The first input sets the canvas > > The first input you connect to a Compositor (image, video, mesh, or another compositor) determines the canvas dimensions. Disconnecting and connecting a different one doesn't resize the canvas — that's by design. Resize manually from [Properties → Canvas](https://docs.fuser.studio/docs/compositor/properties.md#canvas) if you want different dimensions. ## Keyboard navigation [#keyboard-navigation] The Layers panel responds to keyboard input on the focused layer row: * `Enter` or `Space` — select the layer (same as clicking it). * `Tab` — move focus through layer rows in DOM order. Move between layers up and down the stack by clicking, or by selecting the corresponding layer on the canvas with the [Select tool](https://docs.fuser.studio/docs/compositor/tools.md#select-v). ## What's Next? [#whats-next] - [Properties](https://docs.fuser.studio/docs/compositor/properties.md): Layer-shared controls — transform, opacity, blend modes, masks. - [Timeline & Export](https://docs.fuser.studio/docs/compositor/timeline-and-export.md): Animate layers over time and export the result as PNG or video. # Properties (https://docs.fuser.studio/docs/compositor/properties) The Properties panel sits on the right side of the editor, below the layers panel. What it shows depends on what you have selected — the canvas, a single layer, or multiple layers. This page covers the panel's sections in roughly the order they appear. ## Canvas [#canvas] Visible when nothing in the scene is selected. Sets scene-wide settings. **Dimensions** * **Width / Height** — `1`–`4095` px each. The first connected input sets these automatically; you can override here. * **Anchor** — a 9-point selector (top-left, top, top-right, left, center, right, bottom-left, bottom, bottom-right). Determines which point stays fixed when you change the dimensions; the rest of the canvas grows or shrinks around it. * **Background** — flat color. Defaults to transparent (rendered as the checkerboard). **Grid** * **Size** — pixels per cell. * **Color** — line color. * **Opacity** — `0`–`1`. * **Show grid** — toggle visibility. * **Snap to grid** — when on, dragging snaps layer edges and the layer center to the nearest grid intersection. **Timing** — only relevant when the scene has video layers or a non-zero duration. See [Timeline & Export](https://docs.fuser.studio/docs/compositor/timeline-and-export.md#timeline) for the full controls. ## Transform [#transform] Visible whenever a layer is selected. Each layer carries its own transform. * **Position** (`X`, `Y`) — pixel coordinates relative to the canvas origin. * **Rotation** — degrees. Pivots around the anchor; you can enter values outside `0–360` for multi-turn animations. * **Scale** (`X`, `Y`) — independent or locked aspect ratio (toggle on the link icon between the inputs). * **Anchor** — the origin for rotation and scale. Most layers default to center (`0.5, 0.5`); text defaults to origin (`0, 0`). See [Concepts → Anchor points](https://docs.fuser.studio/docs/compositor/concepts.md#anchor-points). * **Flip** — two buttons: **Flip horizontal** mirrors the layer along its vertical axis; **Flip vertical** mirrors it along its horizontal axis. Flips are applied via the layer's scale, so they compose with rotation cleanly. * **Align** — six buttons that snap the selected layer (or the bounding box of multiple selected layers) to canvas edges and center: **Left**, **Center horizontally**, **Right**, **Top**, **Center vertically**, **Bottom**. You can also adjust position, rotation, and scale interactively on the canvas with the [Select tool](https://docs.fuser.studio/docs/compositor/tools.md#select-v) gizmo. **Smart guides.** When you drag a layer near another layer's edges or centers, magenta **alignment guides** appear and the dragged layer snaps to them. Hold the layer over a guide for a moment to commit the snap, or move past to keep dragging freely. This works whether you're dragging from the canvas or nudging with arrow keys. ## Appearance [#appearance] Visible whenever a layer is selected. * **Opacity** — `0`–`100%`. * **Blend mode** — controls how this layer combines with the layers beneath it. **Picking colors.** Color fields (fill, stroke, text color, background) open the Compositor's color picker — pick by hue/saturation/value or by hex. Recent colors are remembered for quick reuse (up to 8 entries, persisted in your browser). The Compositor supports the standard twelve blend modes. They're grouped here by what they do: | Group | Modes | What they do | | ------------ | ------------------------------------- | ---------------------------------------------------------------- | | Pass-through | `Normal` | The layer renders unchanged. | | Darken | `Multiply`, `Darken`, `Color Burn` | Multiply the layer's value into what's below — darks dominate. | | Lighten | `Screen`, `Lighten`, `Color Dodge` | Inverse of darken — lights dominate. | | Contrast | `Overlay`, `Hard Light`, `Soft Light` | Push midtones up or down depending on the underlying brightness. | | Inversion | `Difference`, `Exclusion` | Subtract values; identical layers go black. | Layers below this one are unchanged by your blend choice — only the result of stacking changes. ## Layer mask [#layer-mask] A **layer mask** hides part of *one specific layer* using another layer as the source. The mask only affects the layer it's set on — other layers in the scene render normally. Two variants: * **Alpha mask** — the source layer's transparency drives visibility. Transparent areas hide; opaque areas show. * **Luminance mask** — the source layer's brightness drives visibility. White shows, black hides, gray partially reveals. Pick the mask type, then pick the source layer from the dropdown of layers in the same scene. Hide the mask source from the canvas by toggling its visibility — the mask still applies. ## Global alpha mask [#global-alpha-mask] A **global alpha mask** is the scene-level counterpart: it applies once to *the entire composited scene*, not per layer. Pick one layer in the scene; everything else renders only where the chosen layer is opaque. Useful for vignettes, custom frame shapes, or scene-wide windowing effects without applying the same mask to every layer individually. | What you want | Use | | ------------------------------------- | ----------------------------- | | Hide part of one specific layer | **Layer mask** (per layer) | | Frame the whole scene through a shape | **Global alpha mask** (scene) | The global alpha mask is set on the **Canvas** properties (visible when nothing is selected), not per-layer. ## Type-specific sections [#type-specific-sections] When a layer of a particular type is selected, additional sections appear. They're documented alongside the layer type: * [Layers → Vector](https://docs.fuser.studio/docs/compositor/layers.md#vector) — point-type editing, fill, stroke. * [Layers → Text](https://docs.fuser.studio/docs/compositor/layers.md#text) — typography, variable axes, sizing modes, stroke. * [Layers → 3D mesh](https://docs.fuser.studio/docs/compositor/layers.md#3d-mesh) — mesh source, viewport, rotation, material. * [Layers → Adjustment](https://docs.fuser.studio/docs/compositor/layers.md#adjustment) — basic filters and presets. * [Layers → Image](https://docs.fuser.studio/docs/compositor/layers.md#image) and [Video](https://docs.fuser.studio/docs/compositor/layers.md#video) — source vs. display dimensions, crop, video loop. ## What's Next? [#whats-next] - [Timeline & Export](https://docs.fuser.studio/docs/compositor/timeline-and-export.md): Animate layers over time and produce PNG or video output. - [Concepts](https://docs.fuser.studio/docs/compositor/concepts.md): The behavior layer underneath the controls — anchors, masks, scene model. # Timeline & Export (https://docs.fuser.studio/docs/compositor/timeline-and-export) A Compositor scene can hold static layers and time-varying ones (video, animated parameters). When time matters, you get a timeline; when it's time to ship, you get an export. ## Timeline [#timeline] The timeline lives along the bottom of the canvas. It only renders when the scene has either a video layer or a non-zero `Duration` set in [Canvas properties](https://docs.fuser.studio/docs/compositor/properties.md#canvas). **Controls:** * **Play** / **Pause** — toggle playback. * **Playhead** — drag along the timeline to scrub. All video layers and any animated properties seek together. * **Time readout** — `MM:SS` for the current position, paired with the scene's total duration. * **Volume** / **Mute** — global toggle for all video layers. **Multi-video sync.** Multiple Video layers share the same clock. Scrubbing seeks all of them together. The longest video sets the effective scene length unless you override it in **Duration**. **Per-layer loop.** Each Video layer has its own `Loop` toggle. Looping is independent of the scene timeline — a 4-second video on a 12-second scene plays through three times if `Loop` is on, freezes on its last frame if off. > [!NOTE] Static scenes have no timeline > > If your scene is just images, shapes, and text — no video, no duration — the timeline stays hidden. Set a `Duration` (in seconds) in [Canvas properties](https://docs.fuser.studio/docs/compositor/properties.md#canvas) to surface the playback controls and enable video export. ## Exporting [#exporting] Export produces a downloadable file from your composition. Open the export dialog from the toolbar — the title bar reads **Save Asset**. Captures the current frame as a PNG at the canvas dimensions. * **Progress** — a brief `Exporting…` state, then the asset uploads. * **Use it for** — single-frame stills, social posts, deck-ready images. Renders the scene from `0:00` to its `Duration` as an MP4. * **Progress** — a percent indicator and progress bar; cancel anytime. * **Use it for** — animations, looping clips, social-ready video. > [!WARNING] Video export takes time > > Long or complex scenes take a while to render. The progress bar gives you a live percentage, and cancelling doesn't leave anything stuck — partial output is discarded cleanly. When the export finishes, the asset uploads to your project's media library and the dialog hands you the downloadable URL. ## Downstream output is not export [#downstream-output-is-not-export] Exporting writes a file to your storage. **Connecting the Compositor's output socket to another node is something else entirely.** Downstream Image, Video, and Compositor nodes consume the scene the Compositor emits. They render it independently — with their own play/pause/seek, their own previews — without producing a file. You don't need to export to feed inference, swap into another Compositor, or preview in a Video node. Use **Export** when you want a file out of Fuser (a PNG to drop in a deck, an MP4 to share). Use the **output socket** for everything that stays inside the flow. ## What's Next? [#whats-next] - [Concepts](https://docs.fuser.studio/docs/compositor/concepts.md): Hybrid downstream rendering — why the output socket and Export do different things. - [Sharing](https://docs.fuser.studio/docs/teams/sharing.md): Workspace-gated sharing for a project that contains a Compositor. # Tools (https://docs.fuser.studio/docs/compositor/tools) The toolbar floats at the bottom of the canvas. Tools change what clicks and drags do on the canvas — every other interaction (selection, drag-drop, keyboard) keeps working alongside the active tool. ![Compositor Toolbar](/compositor-toolbar-ui.png) Pick a tool by clicking its button or pressing its single-key shortcut. The active tool's button stays filled; the others render as outlines. ## Select — `V` [#-select--v] The default tool. Click a layer to select it; drag to move; use the gizmo handles to resize and rotate. * **Click empty canvas** — deselects. * **Shift-click** — adds a layer to the selection. Click again to remove it. * **Drag a corner handle** — resize. Hold `Shift` to constrain aspect ratio. * **Drag the rotation handle** — rotate around the layer's anchor (see [Concepts → Anchor points](https://docs.fuser.studio/docs/compositor/concepts.md#anchor-points)). * **Arrow keys** — nudge the selected layer by 1 px. Hold `Shift` for 10 px. ## Hand — `H` [#-hand--h] Pan the canvas without moving anything in the scene. * **Drag** — pan. * **Hold `Space` with any other tool** — temporarily switches to Hand without leaving your current tool. Release `Space` to go back. * **Middle-mouse drag** — also pans, regardless of the active tool. ## Rectangle — `R` [#-rectangle--r] Draw rectangle layers. * **Drag** — define the rectangle's bounds. * **Hold `Shift` while dragging** — constrain to a square. Settings live in the Properties panel while the tool is active or while a Rectangle layer is selected: * **Fill** — color, on/off toggle. * **Stroke** — color, width, position (`Center`, `Inside`, `Outside`), on/off toggle. * **Corner radius** — rounds all four corners uniformly. ## Ellipse — `O` [#-ellipse--o] Draw ellipse and circle layers. * **Drag** — define the ellipse's bounding box. * **Hold `Shift` while dragging** — constrain to a circle. Same fill and stroke settings as Rectangle, minus the corner radius. ## Text — `T` [#-text--t] Add and edit text layers. * **Click on the canvas** — creates a new text layer at that point and drops you straight into edit mode. * **Double-click an existing text layer** (with any tool) — re-enters edit mode. * **Click outside, press `Esc`, or press `Enter`** to commit. **In-place edit overlay.** Double-clicking a text layer opens the inline text-edit overlay — type directly on the canvas with kerning controls and per-character formatting available without leaving the layer. `Esc` or `Enter` commits the edit. The full font story — Google Fonts, custom fonts, variable axes, kerning, alignment, sizing modes, stroke — lives on the [Layers → Text](https://docs.fuser.studio/docs/compositor/layers.md#text) page. ## Pen — `P` [#-pen--p] Draw vector paths (Bezier curves) point by point. * **Click** to drop a corner point. * **Click and drag** to drop a smooth point with extending control handles. * **Click an existing endpoint** to continue an open path from that point. Click the starting point to close the path. * **Press `Enter` or `Esc`** to finalize the current path. Pen settings (in the Properties panel while drawing or with a Vector layer selected): * **Fill** — color, on/off. * **Stroke** — color, width, position (`Center`, `Inside`, `Outside`), on/off. ### Vector edit shortcuts [#vector-edit-shortcuts] Vector editing happens in an in-place overlay — the path's points become draggable handles and a small toolbar surfaces the actions below. The overlay opens automatically when you finish drawing with the Pen tool, or when you double-click a Vector with the Select tool. While editing the points of an existing path, these shortcuts apply to the **selected** points: | Shortcut | Action | | ---------------------- | ------------------------------------------------------------------------ | | `C` | Cycle the selected points' type — corner → smooth → asymmetric → corner. | | `Tab` / `Shift+Tab` | Cycle the point selection forward or backward along the path. | | `H` | Harmonize the selected points to G2 curvature continuity. | | `R` | Reverse the active path's direction. | | `⌘/Ctrl+K` | Split the path at the selected point. | | `Delete` / `Backspace` | Remove the selected points. | | `Esc` | Exit vector editing. | > [!NOTE] `H` and `R` collide with the toolbar > > While you're inside a vector edit session, `H` harmonizes and `R` reverses — they don't switch you to the Hand or Rectangle tool. The toolbar shortcuts come back the moment you exit vector editing (`Esc` or click outside the path). ## Brush — `B` [#-brush--b] Paint with a soft round brush onto a raster layer. Painting always lands on a raster layer — if you don't have one selected, the Brush creates a new one. * **Drag** — paint a stroke. Brush settings live in the Properties panel: * **Size** — `1`–`200` px. * **Color** — any hex. * **Opacity** — `0`–`100%`. * **Hardness** — `0` (soft, fully feathered) to `1` (crisp edge). * **Streamline** — `0` (no smoothing) to `1` (heavy smoothing). Higher streamline produces calmer, more confident-looking strokes at the cost of input lag. ## Eraser — `E` [#-eraser--e] Remove pixels from a raster layer, or apply a non-destructive eraser mask. * **Drag on a raster layer** — destructive erase. Pixels are removed. * **Drag on any non-raster layer** — creates an **eraser mask** layer linked to the parent. The original layer's content is preserved; the eraser mask hides parts of it. Delete the eraser mask to bring everything back. Eraser settings: size, opacity, and hardness (same scales as the Brush). ## General shortcuts [#general-shortcuts] These work regardless of the active tool, as long as you're not typing into a text field. | Shortcut | Action | | ------------------------------- | -------------------------------------------------------------- | | `V / H / R / O / T / P / B / E` | Switch tool. | | `Space` (hold) | Temporarily pan with the Hand tool. | | `⌘/Ctrl + Z` | Undo. | | `⌘/Ctrl + Shift + Z` | Redo. | | `⌘/Ctrl + S` | Save. | | `⌘/Ctrl + D` | Duplicate the selected layer. | | `⌘/Ctrl + =` / `⌘/Ctrl + −` | Zoom in / out. | | `⌘/Ctrl + 0` | Fit canvas to view. | | `Delete` / `Backspace` | Delete the selected layer. | | `Enter` | Enter text edit mode (on a Text layer) or finalize a Pen path. | | `Escape` | Exit text edit, finalize a Pen path, or close the Compositor. | | Arrow keys | Nudge the selected layer (1 px, or 10 px with `Shift`). | ## What's Next? [#whats-next] - [Layers](https://docs.fuser.studio/docs/compositor/layers.md): The layer types your tools create, and the ones you bring in via inputs. - [Properties](https://docs.fuser.studio/docs/compositor/properties.md): Per-tool and per-layer settings — transform, fill, stroke, masks. # Editing code by hand (https://docs.fuser.studio/docs/creative-code/editor) Creative Code has two modes that share the same node: **prompt mode**, where you describe what you want and an LLM writes the JavaScript, and **code mode**, where you read and edit that JavaScript directly. They aren't separate features — they're two views on the same sketch. This page covers code mode; for prompt mode see [Prompting](https://docs.fuser.studio/docs/creative-code/prompting.md). Most sessions land in code mode automatically after a prompt, and you'll often stay here for targeted tweaks before going back to prompt mode for the next big move. ## Opening the editor [#opening-the-editor] The editor opens automatically the first time a prompt-mode generation starts. You can also switch to code mode directly from the Creative Code node — the editor takes over the foreground and the sketch keeps running on the canvas behind it. Save your edits with the **Save** button in the editor toolbar or `⌘/Ctrl`+`S`. The button is disabled when there are no unsaved changes. The node-level **Save** button on the canvas is a different thing — it captures the running canvas as an asset; see [Saving and sharing](https://docs.fuser.studio/docs/creative-code/publishing-and-export.md). ## The editor surface [#the-editor-surface] The editor uses a dark theme tuned for long sessions. You get: * Syntax highlighting for JavaScript. * Line numbers and a clean, fixed-width layout. * Line-diff highlights during streaming — when the model is mid-write, new and modified lines are colored so you can track changes as they land. * Selection that survives re-renders, so a line you've highlighted stays highlighted while the model writes around it. The editor is meant for tight, focused edits — declarative param tweaks, swapping a constant, refining a `draw` loop. For larger restructuring, drop back to [prompt mode](https://docs.fuser.studio/docs/creative-code/prompting.md) and describe the change. ## Explain this line [#explain-this-line] Select a line (or a contiguous range) and the **Explain this line** popover appears. Click it to ask an LLM for a plain-English explanation of what that code does — kept to three sentences or fewer so the popover stays compact. This is read-only. It doesn't modify the code; it doesn't send the explanation to the chat panel. Use it when you've inherited a sketch from a prompt and want to understand a specific block before touching it, or when you're learning the library and want to see what `noiseSeed()` actually does in context. ## Editing while the model is streaming [#editing-while-the-model-is-streaming] You can type while a generation is in flight, but it's usually noisy — your edits get overwritten by the next chunk of stream. If you want to take over, cancel the generation first (or submit a new prompt to interrupt) and then edit. For small tweaks, wait for the stream to finish. ## Try to fix [#try-to-fix] When your sketch crashes at runtime — three consecutive frame errors flip it into the **error** state (see [transient error tolerance](https://docs.fuser.studio/docs/creative-code/runtime.md#transient-error-tolerance)) — the editor surfaces a **Try to fix** action next to the error. Clicking it sends the runtime error message back to the model along with your current code, asking for a targeted patch. The model edits in place rather than rewriting the sketch from scratch, so your params, attachments, and structure usually stay intact. Reach for **Try to fix** when: * The error is a runtime exception (not a syntax error caught before run). * You'd rather keep iterating from the current code than re-prompt from scratch. * The error message is informative on its own — model fixes work better when the error is specific. If two attempts don't resolve it, fall back to a manual fix or a rewrite prompt. ## What's Next? [#whats-next] - [Parameters and inputs](https://docs.fuser.studio/docs/creative-code/parameters-and-attachments.md): Add `@fuser-params` to expose tunable controls instead of hard-coding values. - [How sketches run](https://docs.fuser.studio/docs/creative-code/runtime.md): What's available in your code, what's blocked, and the lifecycle hooks you can implement. # Creative Code (https://docs.fuser.studio/docs/creative-code) Creative Code is a node on the canvas where you describe a sketch in natural language or write JavaScript directly, and Fuser runs it as a live, interactive visual right there in your flow. Reach for it when you want **interactive or moving visuals** — animations, generative artwork, particle systems, data-driven graphics, things that respond to the mouse or to input from another node. If you've heard of [p5.js](https://p5js.org/) or [Three.js](https://threejs.org/), Creative Code wraps both of them along with raw HTML5 Canvas. The same node has two ways in: * **prompt mode** — describe what you want; an LLM streams the sketch into the editor. * **code mode** — open the editor and write or edit JavaScript directly. You'll bounce between them. Most sessions start with a prompt to scaffold the idea, drop into code mode to tighten behavior, and back to prompt mode for the next big move. Both modes produce the same artifact: a running sketch on the canvas, recordable, publishable, and connected to the rest of your flow. > [!NOTE] When to reach for Creative Code > > Pick Creative Code when the output should **react to something** (mouse, time, an input value), should **animate**, or should be made from **rules and code** rather than a single AI inference. Pick a regular generation node (Flux, Veo, etc.) when you want a one-shot still image or video from a prompt — Creative Code isn't a faster way to generate AI images, it's a different surface for things AI generators don't do well. ## What it produces [#what-it-produces] A running sketch is a live node like any other. You can: * **Save** a frame as a **Photo**, or record up to two minutes as a **Video** — both become regular Image or Video nodes downstream. * **Publish** the current version to a public `/embed/cc/:id` URL anyone can drop in an iframe. * Wire `@fuser-params` to upstream nodes so other parts of your flow drive the sketch. See [Saving and sharing](https://docs.fuser.studio/docs/creative-code/publishing-and-export.md) for the full export and embed story. ## What's Next? [#whats-next] - [Prompting and chat](https://docs.fuser.studio/docs/creative-code/prompting.md): Drive the node from natural language. Prompt panel, chat history, model picker. - [Editing code by hand](https://docs.fuser.studio/docs/creative-code/editor.md): The Creative Code editor — opening it, line-diff highlights, Explain this line. - [Parameters and inputs](https://docs.fuser.studio/docs/creative-code/parameters-and-attachments.md): Declare tunable parameters and pull image, video, audio, and mesh data from upstream nodes. - [How sketches run](https://docs.fuser.studio/docs/creative-code/runtime.md): Supported libraries, the lifecycle, and what's blocked. - [Saving and sharing](https://docs.fuser.studio/docs/creative-code/publishing-and-export.md): Capture stills, record video, save versions, and publish public embeds. # Parameters and inputs (https://docs.fuser.studio/docs/creative-code/parameters-and-attachments) Hard-coded constants are fine for one-shot sketches. For anything you'll iterate on, declare a parameter — the value moves out of the source code and onto a live control on the node, so you can tune it without touching the editor. The Creative Code node has two magic-comment blocks for this: * **`@fuser-params`** declares tunable controls — sliders, color pickers, toggles — that live in a panel on the node. * **`@fuser-attachments`** declares connectable input sockets that pull image, video, audio, mesh, or text data from upstream nodes. The two are separate. Params are panel-only; attachments are how other nodes feed your sketch. ## The `@fuser-params` block [#the-fuser-params-block] Declare parameters in a magic-comment block at the top of your sketch: ```javascript // @fuser-params // @param speed: number(0, 10, 0.1) = 5 // @param backgroundColor: color = #1a1a2e // @param label: text = "Hello World" // @param showGrid: boolean = true // @end-fuser-params ``` The block must open with `// @fuser-params` and close with `// @end-fuser-params`. Each `// @param` line declares one parameter: | Type | Syntax | Renders as | | ------------- | ---------------------------------- | -------------- | | **`number`** | `number(min, max, step) = default` | A slider | | **`color`** | `color = #hexcolor` | A color picker | | **`text`** | `text = "default"` | A text field | | **`boolean`** | `boolean = true` | A toggle | Access the values inside your sketch as the `params` global: ```javascript function draw() { const { speed, backgroundColor, showGrid } = params; background(backgroundColor); if (showGrid) drawGrid(); for (const dot of dots) dot.x += speed; } ``` ## The parameters panel [#the-parameters-panel] Every declared parameter appears as a control in the **parameters panel** on the node. Drag the slider, pick the color, flip the toggle — the sketch re-runs with the new value immediately. No re-prompt, no editor round-trip. When you tweak a control, Fuser writes the new value back into your sketch as the parameter's default — so when you re-prompt or share the sketch, the tuned value is what travels with it. You can always edit the default by hand in the editor. If you want a value to be driven by another node in your flow instead of by the panel, declare it as an [attachment](#the-fuser-attachments-block) — that's the connectable side of the Creative Code node. ## The `@fuser-attachments` block [#the-fuser-attachments-block] Attachments are how upstream nodes feed your sketch. Declare them in a second magic-comment block: ```javascript // @fuser-attachments // @attachment input: image = "Background image" // @attachment soundtrack: audio = "Audio track to visualize" // @end-fuser-attachments ``` Each `// @attachment` line creates a connectable input socket on the node. Connect a compatible upstream node, and the value lands in your sketch as the `attachments` global, keyed by the name you declared: ```javascript function draw() { const { input } = attachments; if (input) { image(input, 0, 0, width, height); } } ``` The optional description in quotes becomes the socket's label on the node. ### Supported attachment types [#supported-attachment-types] | Type | Accepts | Use for | | ---------------- | ------------------- | --------------------------------------------- | | **`image`** | A single image URL | Textures, backgrounds, source frames | | **`multiimage`** | Up to 10 image URLs | Grids, montages, batch processing | | **`video`** | A video URL | Playback, frame sampling, motion input | | **`audio`** | An audio URL | Reactive visuals, waveforms, beat detection | | **`mesh`** | A 3D mesh asset | Models to render in Three.js or pixi sketches | | **`text`** | A text string | Captions, prompts, upstream LLM output | This is how you compose Creative Code into a larger flow. A generation node feeds an `image` attachment; a transcription node feeds a `text` attachment; a different sketch's output drives this one. See [the canvas](https://docs.fuser.studio/docs/interface/canvas.md) for the socket-and-edge model that ties it all together. ## Per-video webcam toggle [#per-video-webcam-toggle] For video attachments specifically, each socket has a **webcam toggle**. Flip it on and the attachment becomes the user's webcam feed instead of whatever's wired into the socket. Useful for camera-driven sketches, real-time feedback, and prototyping. The browser asks for camera permission the first time you flip the toggle on. If permission is denied, the attachment falls back to the connected upstream — or to nothing, if nothing's connected. > [!WARNING] Params live in your sketch source > > The `@fuser-params` block is part of your code. If you re-prompt and ask the model to "remove all the parameters" — or just to "rewrite this sketch from scratch" — the block can disappear with everything else. You'll lose the controls until you re-declare them. Use chat history checkpoints (see [Prompting and chat](https://docs.fuser.studio/docs/creative-code/prompting.md#chat-history-and-checkpoints)) to recover a working version with the params intact. ## Forking a sketch [#forking-a-sketch] Every Creative Code node has a special **`Code In`** input socket. Connect another Creative Code node's output to it and the downstream node forks the upstream sketch — it inherits the **code, the version history, and the chat** as starting points. From there the two diverge: changes you make to the downstream sketch don't propagate back, and the upstream's later changes don't pull through unless you reconnect. Use forking to: * **Branch** a sketch you like into variants without losing the original. * **Hand off** a sketch to a teammate's part of the canvas while keeping your working copy intact. * **Share** an entire prompt history along with the code, so the next person can keep iterating in chat instead of starting cold. ## What's Next? [#whats-next] - [How sketches run](https://docs.fuser.studio/docs/creative-code/runtime.md): Where `params` and `attachments` come from at runtime, plus the lifecycle and what's blocked. - [Saving and sharing](https://docs.fuser.studio/docs/creative-code/publishing-and-export.md): Capture a tuned sketch as an asset, or publish a public embed. # Prompting and chat (https://docs.fuser.studio/docs/creative-code/prompting) Prompt mode lets you describe a sketch in words and have an LLM stream the JavaScript into the editor. It's the fastest way to scaffold an idea — start with a sentence, watch it materialize, then drop into [code mode](https://docs.fuser.studio/docs/creative-code/editor.md) when you want hand control. ## The prompt panel [#the-prompt-panel] Open the Creative Code node and you land in the **prompt panel**. Type what you want, hit submit, and the model starts writing. Code streams into the editor on the right — line by line, with diff highlights so you can see exactly what's changing as it goes. The first prompt of a sketch is a generation: the editor goes from empty to the sketch you described. Subsequent prompts are usually edits: "make the circles bounce off the edges," "use a darker palette," "add a slider for the speed." If your editor is empty or holds the default boilerplate, your prompt generates from scratch; if it already has working code, your prompt edits it. > [!NOTE] Prompt crafter > > Need help structuring a long prompt? Expand the prompt panel into the **prompt crafter** — a guided UI for describing scenes, behaviors, and constraints. The crafter outputs a final prompt you can review and submit, useful when you're working with a complex brief. ## Streaming and editing while it writes [#streaming-and-editing-while-it-writes] When the model is mid-stream, the editor shows the in-flight code with the new lines highlighted. You can watch it work, and you can stop the generation if it's heading the wrong way — the partial output stays in the editor. If you submit a follow-up prompt before the current generation finishes, the in-flight stream is canceled and the new prompt takes over. Useful when you realize the direction is wrong three lines in. ## Chat history and checkpoints [#chat-history-and-checkpoints] Every prompt-and-generation pair is recorded in the **chat panel**. Each generation is a checkpoint — a saved version of the sketch tied to the prompt that produced it. Click a prior message to jump the editor and the canvas back to that version. Submitting a new prompt from a prior version asks you to confirm — the chat then drops the later versions and continues forward from where you jumped back to. This is your safety net. If a prompt sends the sketch sideways, click back to a working checkpoint and try a different phrasing. Manual saves (covered in [Saving and sharing](https://docs.fuser.studio/docs/creative-code/publishing-and-export.md#version-history)) create their own named checkpoints alongside the auto-generated ones. ## The model selector [#the-model-selector] Three models are available for code generation, picked from the **model selector** in the prompt panel: | Model | Strengths | | -------------- | -------------------------------------------------------------------------------------------------------------- | | **Opus 4.7** | Highest quality. Best for complex sketches, intricate behavior, and prompts that require multi-step reasoning. | | **Sonnet 4.6** | Balanced. Faster than Opus with comparable code quality for most sketches. | | **Kimi K2.6** | Cheapest. Good for iteration on simple sketches; lighter on credits. | Each model has value, speed, and quality dot ratings next to its name — a rough guide, not a hard rule. If a generation feels off, switch models and re-prompt; sometimes the difference is dramatic. > [!NOTE] Model choice and credits > > Generations cost credits according to the model and the length of the prompt + output. Heavier models cost more per generation. Pick Sonnet by default; reach for Opus when you're stuck or the sketch is genuinely complex. ## What's Next? [#whats-next] - [Editing code by hand](https://docs.fuser.studio/docs/creative-code/editor.md): Drop into the editor for line-level control over what prompts produced. - [Parameters and inputs](https://docs.fuser.studio/docs/creative-code/parameters-and-attachments.md): Add tunable controls so you can iterate without re-prompting. # Saving and sharing (https://docs.fuser.studio/docs/creative-code/publishing-and-export) A running sketch is a regular node, but it's also something you'll want to capture, ship, and revisit. This page covers three exits: saving the canvas as a **Photo** or **Video** asset, navigating prior versions of a sketch, and publishing the current sketch to a public `/embed/cc/:id` URL. ## Saving the canvas [#saving-the-canvas] ### Click Save on the Creative Code node [#click-save-on-the-creative-code-node] The **save asset modal** opens with two paths. ### Choose Photo or Video [#choose-photo-or-video] * **Photo** — captures the current frame as a PNG. Fast, no waiting; the image arrives as a regular Image node connected downstream. * **Video** — records the canvas as MP4 for up to two minutes. Recording runs in the background, so it doesn't tie up the canvas or the rest of your flow. The result arrives as a regular Video node downstream. Both paths upload the captured asset to your media storage and emit a downstream node automatically — no manual reconnecting. From there, the asset is just like any other media in Fuser: you can pipe it into a compositor, share it from the project, or use it as input for another sketch. > [!NOTE] Keyboard shortcuts > > * `⌘/Ctrl`+`Shift`+`S` — capture the current frame as a **Photo** without opening the modal. > * `⌘/Ctrl`+`Shift`+`R` — toggle **Video** recording. Press once to start, again to stop and save. ## Version history [#version-history] Every generation Fuser produces — every time you submit a prompt and the model writes — saves a snapshot of the sketch automatically. Clicking **Save** explicitly creates a named checkpoint alongside the auto-saves, marked as a user save in the chat panel. You navigate prior versions from the **chat panel** — see [Prompting and chat → Chat history and checkpoints](https://docs.fuser.studio/docs/creative-code/prompting.md#chat-history-and-checkpoints). Click any prior generation or checkpoint and the editor and canvas jump back to that version. Prompting from a prior version drops the later ones (after a confirmation prompt), so jump back deliberately. This is your safety net both ways: undo a bad prompt by jumping back, and pin a working version by saving it explicitly so it stands out in the chat panel. ## Publishing to a public embed [#publishing-to-a-public-embed] The **Publish** button takes the current sketch — code, parameters, attachments, library — and pins it to a public URL of the form `/embed/cc/:id`. Anyone with the URL can view the sketch in a standalone page or drop it in an iframe. Publishing pins the current version. The published URL points to the exact state of the sketch at the moment you published — later edits don't affect what visitors see. To update what's public, hit **Publish** again from a newer version; the URL stays the same, but the content updates. The publish flow has three states: * **Unpublished** — no public URL exists yet. * **Update** — a public version exists, but the current sketch differs from it. Click to push the current version live. * **Done** — the public URL matches the current sketch. Once published, **Copied to clipboard** confirms when you grab the link. The public page generates a social preview image from a snapshot of the sketch — what shows up when the link is shared on social or in chat. The iframe headers are intentionally permissive so the embed works on third-party pages. > [!WARNING] Public embeds are public > > Embeds aren't gated by workspace membership. Anyone with the URL gets in — there's no per-viewer share list, no workspace check. If a sketch contains client work, a private prompt, or anything you don't want loose on the internet, don't publish. Use [workspace shares](https://docs.fuser.studio/docs/teams/sharing.md) instead — they're gated by who's in the workspace and tied to specific people or teams. ## Unpublishing [#unpublishing] Unpublishing tears down the public URL. Existing iframes break; the social preview image stops resolving; the standalone page returns a not-found. There's no soft delete — once unpublished, the URL is gone, and re-publishing later may give you a different URL. If you only want to update what's public, don't unpublish first — just hit **Publish** again from the newer version. Unpublish when you genuinely want the sketch off the internet. ## What's Next? [#whats-next] - [Creative Code overview](https://docs.fuser.studio/docs/creative-code.md): Back to the section overview and concept summary. - [Sharing](https://docs.fuser.studio/docs/teams/sharing.md): Workspace-gated sharing for projects — the alternative to public embeds. # How sketches run (https://docs.fuser.studio/docs/creative-code/runtime) Sketches in Fuser follow a small contract: you define `setup`, `draw`, and optionally `onEvent`, and Fuser handles the rest. This page covers that contract, what's in scope inside your code, and the things that won't work even though they would in plain browser JavaScript. ## Supported libraries [#supported-libraries] Pick a library from the **library selector** in the node's settings bar. Three are live, each suited to a different kind of sketch. The raw 2D drawing API — no abstraction, lowest overhead. * **In scope** — the `ctx` 2D context, the standard `CanvasRenderingContext2D` API. * **Best for** — full control, porting tiny existing sketches, generative work that doesn't need helpers. * **Drawback** — you write your own helpers for things p5 gives you for free (random color, noise, easings). The creative-coding standard. * **In scope** — `setup`, `draw`, `mouseX`, `mouseY`, `noise()`, all p5 globals. * **Best for** — most 2D sketches. The default if you're not sure. * **Drawback** — slightly heavier than raw canvas; abstracts the 2D context behind p5's vocabulary. WebGL-based 3D rendering. * **In scope** — the `THREE` namespace, scenes, cameras, meshes, lights, materials, shaders. * **Best for** — anything with depth, lighting, or shaders. * **Drawback** — WebGL contexts are limited (see below); you can only have so many Three.js sketches alive at once. The model selector in [prompt mode](https://docs.fuser.studio/docs/creative-code/prompting.md) generates code matching whichever library you've picked. ## Lifecycle: `setup`, `draw`, `onEvent` [#lifecycle-setup-draw-onevent] Every sketch follows the same shape. Think of it as: **set up your state once, then redraw it every frame, optionally responding to events.** ```javascript // Variables you want to keep across frames live at the top. let particles = []; let bgColor; function setup() { // Runs once when the sketch starts. // Initialize anything you want to keep across frames here: // load assets, seed your particle array, choose colors. bgColor = 'white'; for (let i = 0; i < 200; i++) { particles.push({ x: width / 2, y: height / 2, vx: 0, vy: 0 }); } } function draw() { // Runs every frame at the canvas frame rate. // Re-render the current state — DON'T allocate new arrays here, // mutate the ones from setup. The canvas isn't auto-cleared. background(bgColor); for (const p of particles) { p.x += p.vx; p.y += p.vy; circle(p.x, p.y, 4); } } function onEvent(event) { // Optional. Mouse and resize events arrive here. // Use it to mutate state that draw() will pick up next frame. if (event.type === 'mousedown') { bgColor = bgColor === 'white' ? 'black' : 'white'; } } ``` `setup` is awaited — mark it `async` if you need to load anything before the first frame. `draw` is called repeatedly at the canvas frame rate; keep it cheap and avoid allocating per frame. `onEvent` is optional — define it only when you want to react to user input beyond the auto-injected `mouseX` / `mouseY` / `isMousePressed` globals. **State lives at module scope** (the variables declared above `setup`). `setup` initializes them; `draw` mutates them; `onEvent` reacts. Don't try to share state via the DOM or storage — neither is available (see [What's blocked](#whats-blocked)). ## What's in scope [#whats-in-scope] Inside your sketch, these names are available: | Name | What it is | | ------------------------------------- | ------------------------------------------------------------------------------------------------------------------------ | | **`width`** / **`height`** | The canvas dimensions in pixels. | | **`mouseX`** / **`mouseY`** | The mouse position, in pixel coordinates. | | **`isMousePressed`** | `true` while a mouse button is held. | | **`params`** | The parsed `@fuser-params` values — see [Parameters and inputs](https://docs.fuser.studio/docs/creative-code/parameters-and-attachments.md). | | **`attachments`** | Connected attachment data — bitmaps, video frames, audio buffers, meshes — keyed by socket name. | | **`getDeltaTime()`** | A function returning seconds since the previous frame. Useful for time-based animation. | | **`canvas`** | The underlying drawing surface. You rarely need to touch it directly. | | **`ctx`** / **`gl`** | The 2D or WebGL context, depending on the library. | | Library globals | `p5` in p5 mode, `THREE` in Three.js mode, plus any [supplemental libraries](#supplemental-libraries) you've opted into. | `mouseX`, `mouseY`, and `isMousePressed` are auto-injected — you don't need to import or declare them. ## What's blocked [#whats-blocked] Some browser APIs you might reach for in regular JavaScript don't work inside a sketch. Each restriction has a Fuser-native replacement — the table below pairs them up. | Don't reach for… | Do this instead | | ----------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | | `document`, `window`, `requestAnimationFrame` (the **DOM**) | Use `draw` for animation; use `width` / `height` / `mouseX` / `mouseY` for input. | | Browser storage — cookies, `localStorage`, `sessionStorage` | Persist values as `@fuser-params` defaults (auto-saved when the user tweaks a slider), or save the canvas as an asset via the Save button. | | Arbitrary `fetch()` calls | Pipe the data into an [**attachment socket**](https://docs.fuser.studio/docs/creative-code/parameters-and-attachments.md#attachment-sockets) from another Fuser node. | | Dynamically-generated code — `eval`, `new Function`, dynamic `import()` | Add the library you need to the [`@fuser-libs` block](#supplemental-libraries) (currently only `ml5`), or restructure to avoid runtime eval. | | Spawning workers (`new Worker`, `SharedWorker`) | Lighten the work in `draw` — see [adaptive frame throttling](#frame-throttling) — or split the work across multiple sketches. | If your sketch fails because it touched one of the blocked APIs, Fuser flags it before run with a line/column pointer in the editor — see [Errors before your sketch runs](#errors-before-your-sketch-runs). ## Errors before your sketch runs [#errors-before-your-sketch-runs] Fuser checks your code before running it. If you've used a blocked API or made certain other errors, you'll see a message in the editor with the line and column of the problem. Fix the offending line and the sketch runs. Checks happen on every code change, so you'll see issues immediately rather than at first execution. ## WebGL context limits [#webgl-context-limits] Three.js sketches use a WebGL context. Browsers cap how many WebGL contexts can exist at once — usually 8 to 16. When you exceed the cap, Fuser will show a warning and stop the sketch. Close one of the existing WebGL sketches and the new one picks up. A single sketch generally won't hit this on its own; the issue surfaces when you accumulate many WebGL sketches in the same flow. ## Frame throttling [#frame-throttling] Sketches don't always run at 60 fps. Fuser adapts the frame rate to keep the page responsive when many sketches are alive at once or a single sketch is slow: * A sketch whose `draw()` is fast targets **30 fps**. * A sketch that's slower drops to **15 fps**. * Background or off-canvas sketches drop further to **5 fps**. The [FPS readout](#the-fps-readout) on the canvas shows the actual frame rate so you can see throttling in action. If the readout is consistently low while your `draw()` is meant to be cheap, look for accidental work — large allocations per frame, image filters, or layout recalculations. ## Transient error tolerance [#transient-error-tolerance] A single thrown error inside `draw()` doesn't kill your sketch. Fuser tolerates **up to three consecutive frame errors** before stopping the sketch and surfacing the error. This means an intermittent failure (a missing attachment for one frame, a flaky external library) gets a chance to recover without forcing you to re-run. If you're hitting the three-error limit repeatedly, the **Try to fix** action in the editor sends the runtime error back to the model for a targeted code repair — see [Editor](https://docs.fuser.studio/docs/creative-code/editor.md). ## Supplemental libraries [#supplemental-libraries] Beyond the three primary libraries, Fuser supports opt-in **supplemental libraries** loaded on demand. Currently the only one is **ml5.js** — a friendly wrapper around common machine-learning models for things like image classification, body pose detection, and hand tracking. Opt in with a `// @fuser-libs` block at the top of your sketch — one `// @lib ` line per library, closed by `// @end-fuser-libs`: ```javascript // @fuser-libs // @lib ml5 // @end-fuser-libs let classifier; async function setup() { classifier = await ml5.imageClassifier('MobileNet'); } ``` When the block is present, the listed libraries are loaded and their globals (here, `ml5`) become available in your sketch. Without the block, ml5 isn't included — leave it off when you don't need it. > [!WARNING] The single-line form is silently ignored > > The block must use the three-line `// @fuser-libs` / `// @lib …` / `// @end-fuser-libs` shape. A single-line `// @fuser-libs: ml5` does not parse and the library will not load — your sketch will then crash with `ReferenceError: ml5 is not defined` at runtime. ## The FPS readout [#the-fps-readout] A small live indicator on the canvas shows the current frame rate. **Yellow** when you drop below 30 fps; **red** when you drop below 15. Use it to spot expensive draw loops — if the readout goes red, you're either doing too much per frame or running too many sketches at once. ## What's Next? [#whats-next] - [Parameters and inputs](https://docs.fuser.studio/docs/creative-code/parameters-and-attachments.md): Where `params` and `attachments` come from before they reach your sketch. - [Saving and sharing](https://docs.fuser.studio/docs/creative-code/publishing-and-export.md): Capture the running canvas, save versions, and publish public embeds. # Setting up API Keys (https://docs.fuser.studio/docs/interface/api-keys) API keys are secure digital passwords that connect Fuser to AI providers. This guide walks you through setting up keys for the most popular providers, allowing you to unlock the full creative potential of Fuser. [Video: api-key-quick-start.mp4] > [!CAUTION] Never Share Your API Keys > > API keys allow external services to access your account on your behalf and to utilize resources and run AI models. **Do not post your API keys on social media, share with friends, or store them in publicly accessible locations.** ## What Are API Keys? [#what-are-api-keys] **API Keys** are unique identifiers that allow Fuser to authenticate with AI providers on your behalf. Think of them as secure passwords that: * **Authorize access** to AI models and services * **Track usage** for billing and rate limiting * **Ensure security** by controlling who can use your account * **Enable direct connections** between Fuser and providers for maximum performance > [!NOTE] Why does Fuser use API Keys? > > Connecting directly to providers means Fuser doesn't sit between you and the bill — you pay each provider's published rate (some providers add their own platform fees on top of model usage; check your provider invoice for the breakdown). It also gets you the latest models as soon as the provider ships them and the fastest possible request path. ## Our Commitment to Security [#our-commitment-to-security] Fuser protects API keys with industry-standard security at every step. Here is what is in place: * **Encrypted in Transit**: All communication is protected with TLS encryption. This means that when you add or update a key on Fuser, it is encrypted in on its way to our servers and cannot be intercepted by anyone. * **Encrypted at Rest**: We use a secure vault to store your API keys. Each key is protected with [Authenticated Encryption](https://en.wikipedia.org/wiki/Authenticated_encryption), meaning it is unreadable even with direct access to our database. * **Secure Backups**: This protection extends to all system backups. Your keys remain encrypted and cannot be forged or decrypted by unauthorized parties. * **Controlled Access**: Keys are only decrypted when you run a workflow that needs them, and we've built Fuser to ensure they are never exposed elsewhere. ## Recommended Setup Order [#recommended-setup-order] For most users, set up providers in this order: 1. **Fal**: Essential for image, video, 3D, and audio generation. 2. **OpenRouter**: Best value for text, with access to over 300 models (**including many free ones**). 3. **Direct Providers**: Optional, for specific needs like direct access to OpenAI or Anthropic models. ## Recommended Providers [#recommended-providers] Fal provides access to the latest and fastest models for generating images, video, and audio. [Video: api-key-quick-start.mp4] ### Create a Fal Account [#create-a-fal-account] 1. Visit [fal.ai/login](https://fal.ai/login). 2. Sign in using your GitHub account. 3. Authorize Fal and complete any email verification steps. ### Add Credits [#add-credits] 1. Go to the [Billing dashboard](https://fal.ai/dashboard/billing). 2. Click "Add Credits" and choose an amount. 3. Enter your payment information to complete the purchase. > [!NOTE] Credit Recommendations > > * **Testing**: $5 covers hundreds of image generations. > * **Regular Use**: $10–25 per month for moderate usage. > * **Heavy Use**: $50+ for production workflows. ### Generate an API Key [#generate-an-api-key] 1. Visit the [API Keys dashboard](https://fal.ai/dashboard/keys). 2. Click "Add key" and give it a memorable name (e.g., "Fuser Integration"). 3. **Copy your key immediately** — you won't be able to see it again. Treat it like a password. ### Add to Fuser [#add-to-fuser] 1. Open **Settings** from the workspace switcher. 2. Go to the **Providers** tab. 3. Select **Fal** from the provider dropdown, paste your key, and click **Add Provider**. > [!NOTE] Test your connection > > When adding a new provider, try to test it by generating an output with a compatible node. For example, try to generate an image with a **Flux Dev** node. If you see an image, your connection is working! OpenRouter is a powerful tool that gives you access to over 300 AI models, including many free and open-source options. ### Create an OpenRouter Account [#create-an-openrouter-account] 1. Visit [openrouter.ai](https://openrouter.ai) and click "Sign up". 2. Sign up with email or GitHub and verify your account. ### Add Credits (Optional) [#add-credits-optional] Many models on OpenRouter are free. For premium models: 1. Go to the [Credits page](https://openrouter.ai/settings/credits). 2. Add credits (starting with $2–3 is plenty for testing). ### Generate an API Key [#generate-an-api-key-1] 1. Visit the [Keys page](https://openrouter.ai/settings/keys). 2. Click "Create Key", give it a name, and copy the key (it starts with `sk-or-...`). ### Add to Fuser [#add-to-fuser-1] 1. Go to **Settings → Providers** in Fuser. 2. Select **OpenRouter**, paste your key, and save. > [!NOTE] Test your connection > > To test your connection, add an **OpenRouter** node and from the model selection dropdown, select a free model. You can search for models by typing `free` in the model dropdown. If you see a response, your connection is working! > > [Video: api-openrouter.mp4] ## Direct Providers [#direct-providers] For specific needs, you might want direct access to providers like OpenAI, Anthropic, Google AI, or Runway. OpenAI direct access is recommended when you need specific models like GPT-4o or require OpenAI's enterprise features. Create an account at [platform.openai.com](https://platform.openai.com), set up billing, and generate a new secret key. Add it to Fuser under the **OpenAI** provider section. > [!WARNING] ID Verification for GPT Image > > OpenAI requires ID verification for the GPT Image model. This is a security measure to prevent abuse. You can [learn more](https://help.openai.com/en/articles/10910291-api-organization-verification) or start the verification process by visiting [Organization Settings](https://platform.openai.com/settings/organization/general) on the OpenAI platform. Direct access to Anthropic is ideal when you want high-performance access to Claude models for advanced reasoning tasks. Create an account at [console.anthropic.com](https://console.anthropic.com), purchase credits, and generate an API key. Add it to Fuser under the **Anthropic** provider section. Google AI integration is useful for Gemini models, especially Gemini's image generation capabilities. Visit [aistudio.google.com](https://aistudio.google.com) to obtain an API key. Add it to Fuser under the **Google AI** provider section. Runway is a great option for video generation tasks. Create an account at [dev.runwayml.com](https://dev.runwayml.com/) and generate an API key from your account settings. Add it to Fuser under the **Runway** provider section. ## Auto Top-Up [#auto-top-up] Most providers offer a way to automatically top-up your credits when you're running low. This is a great way to ensure you never run out of credits and can continue to use Fuser without interruption. The option to enable auto top-up is usually found in the provider's dashboard, under the "Billing" or "Credits" section. For example, on the [Fal dashboard](https://fal.ai/dashboard/billing), you can enable auto top-up by clicking the "Automated top ups" button. When triggered, the provider will send you an email with the details of the purchase. > [!NOTE] How does auto top-up work? > > Auto top-up is a convenient way to ensure you never run out of credits and don't have to manually add credits to your provider account. > > Most providers have "**threshold**" settings that you can adjust. Auto top-up will only be triggered when your credits are below the threshold. For example, when your balance goes below the threshold of $5, an automatic purchase of $10 will be made. You can adjust both the threshold and the amount to purchase. > > **You can also set a maximum amount to prevent over-spending**. ## Managing API Keys in Fuser [#managing-api-keys-in-fuser] You can manage all your keys from the **Providers** tab in **Settings**. [Video: api-settings.mp4] * **Adding Keys**: Select a provider, paste the key, and click **Add Provider**. If the provider already exists, the button is labeled **Update Provider**. * **Updating Keys**: Click the `⋯` button next to an existing provider, choose **Update**, and paste the new key. * **Removing Keys**: Click the `⋯` button next to an existing provider and select **Delete**. * **Use API Key First** (per provider): a toggle on each provider row that controls how the provider's nodes are paid for. When **on**, Fuser charges your provider account directly via your API key — Fuser credits aren't deducted. When **off** (the default for most providers), Fuser credits are spent first and your API key is used as a fallback. Useful when you've prepaid a provider and want to drain that balance before touching your Fuser credits. > [!WARNING] Security Notice > > Removing an API key will immediately disable all nodes using that provider. Ensure you have alternatives set up before removing a key. > [!NOTE] Accessing Provider Dashboard > > Fuser provides a direct link to the provider dashboard for each provider. Select a provider from the dropdown and a link to the provider dashboard will appear in the description. ## Security Best Practices [#security-best-practices] Treat your API keys like passwords. Follow these practices to keep your accounts secure. * **Never share keys publicly**: Do not post your keys on social media, share with friends, or store them in publicly accessible locations. * **Store securely**: Use a password manager for safekeeping. * **Rotate regularly**: For added security, generate new keys and replace old ones every few months. * **Monitor usage**: Check your provider dashboards for unexpected activity. If you suspect a key is compromised, revoke it immediately. ## Troubleshooting API Keys [#troubleshooting-api-keys] If a key isn't working, try these steps: * **Check the Key Format**: Ensure the key you pasted is correct and has no extra spaces, newlines, or other non-alphanumeric characters. * **OpenAI**: Starts with `sk-...` * **OpenRouter**: Starts with `sk-or-...` * **Anthropic**: Starts with `sk-ant-...` * **Google AI**: Starts with `AIza...` * **Runway**: Starts with `key-...` * **Verify Account Status**: Make sure your provider account is active, verified, and has sufficient credits or a valid payment method. * **Test Outside Fuser**: Use the provider's own playground or a simple API call to confirm the key is working independently. * **Check for Rate Limiting**: If you get "too many requests" errors, wait a few minutes before trying again. New accounts often have lower rate limits, and as you use more credits, your rate limit will increase. ## What's Next? [#whats-next] Now that your API keys are set up, you're ready to start creating: - [Quick Start Guide](https://docs.fuser.studio/docs/interface/quick-start.md): Build your first workflow. - [Understanding Nodes](https://docs.fuser.studio/docs/interface/nodes.md): Master the AI-powered nodes. - [Working with Media](https://docs.fuser.studio/docs/interface/importing-data.md): Upload and process content. - [Templates](https://docs.fuser.studio/docs/interface/templates.md): Explore pre-built workflows. # Billing & Plans (https://docs.fuser.studio/docs/interface/billing) Fuser runs on **credits**. Every prompt, image, video, or 3D mesh you generate costs credits — the amount depends on the model and the size of the output. This page covers your **personal** billing: the plan that grants you credits each cycle, the cards you pay with, **Auto-recharge**, and invoice history. If you also belong to a workspace, the workspace has its own credits and invoices on a separate page — see [Workspace Billing](https://docs.fuser.studio/docs/teams/workspace-billing.md). The two are independent: when you work inside a workspace, the workspace pays; outside, your personal credits pay. ## Plans [#plans] Fuser has four plans: | Plan | Who it's for | | ---------------- | ---------------------------------------------------------------- | | **Free** | Trying Fuser out — limited monthly credit replenishment. | | **Indie** | Hobbyists, students, and curious creators. | | **Professional** | Freelancers and independent studios shipping client work daily. | | **Teams** | Agencies and in-house teams collaborating on the same workspace. | New accounts get a **30-day Professional trial** automatically. The Teams plan is configured from a workspace; see [Workspace Billing](https://docs.fuser.studio/docs/teams/workspace-billing.md). ## Where to find it [#where-to-find-it] Open **Settings** from the workspace switcher and pick the **Billing & Plans** tab. The page header reads **Manage Your Billing**. From here you can change plan, top up credits, manage payment methods, configure Auto-recharge, and download invoices. A **Billing Portal** link in the corner takes you to Stripe for advanced payment-history operations. ## Subscription [#subscription] The Indie and Professional plans are shown as side-by-side comparison cards. Each card lists the plan name, monthly cost, the credits granted each billing period, and a button that starts the upgrade or change in Stripe. Switching plans: * **Both upgrading and downgrading take effect immediately.** Your credits start a fresh billing period at the new tier. The previous tier's credit allocation is replaced — neither side is prorated. * **Cancelling** is offered from the active plan's card. Cancellation completes at the end of the current paid period; until then you keep full access. > [!NOTE] Credits never expire > > Credits are added to your account immediately on purchase and never expire. You receive your full monthly allocation upfront, and unused credits roll over to the next billing period. Credit packs themselves are not refundable. ## Credits [#credits] The **Credits** card on the right shows your current balance and a **Top up** button. Top-up packs are one-shot purchases that stack on top of your monthly grant. Click **Top up**, pick a pack size, then click **Buy** — Stripe checkout opens in a new tab to complete payment. Once checkout completes, the credits land on your account immediately. You don't need a subscription to buy top-ups on a personal account — you can pay as you go for credits at any time. Workspace credits work differently; see [Workspace Billing](https://docs.fuser.studio/docs/teams/workspace-billing.md). ### Free-tier replenishment [#free-tier-replenishment] If you're on the **Free** plan and you've never made a purchase, Fuser tops you up automatically with a small grant — **{FREE_REPLENISHMENT_CAP} credits** every **{FREE_REPLENISHMENT_COOLDOWN_DAYS} days** — so you can keep exploring. The replenishment only fires when your balance is below the cap; once you make any purchase, this auto-replenishment stops permanently. Trial credits and gift codes don't reset the eligibility. ## Payment methods [#payment-methods] Card details are handled entirely by Stripe — Fuser never sees your card number, only the brand and last four digits. The **Default Payment Method** card shows the card currently on file: brand (Visa, Mastercard, Amex, etc.), last four digits, expiration. Click **Add New** if you don't have one, or **Update** to replace the card. Updating opens Stripe's secure update flow in a new tab; once complete, you're redirected back. ## Auto-recharge [#auto-recharge] Auto-recharge keeps your balance from dropping to zero by topping up automatically. The **Auto-recharge Credits** card shows the toggle and the current configuration. When the toggle is on, you pick two values: * **Threshold** — the balance below which Auto-recharge should top you up. * **Recharge amount** — how many credits to add each time it triggers. The card shows a confirmation line: *"When your balance drops below X, we'll charge you Y and add Z."* **How it triggers:** Auto-recharge runs lazily — when your balance falls below the threshold, the next request that needs credits triggers a charge before running. There's a 60-second cooldown between charges so a flurry of requests can't double-bill you. You can turn Auto-recharge off at any time. > [!WARNING] Auto-recharge needs a valid card > > Auto-recharge requires the **Default Payment Method** to be valid (correct number, not expired). If your card fails or is removed, Auto-recharge stops without any notification — and your balance will hit zero on the next charge. If a generation suddenly fails with **Insufficient credits**, check your card before anything else. ## Invoices [#invoices] The **Invoices** section shows your billing history. Each invoice has a date, amount, and a link to the PDF. Use the **Billing Portal** link at the top of the page for the full Stripe history if you need older invoices or detailed line items. ## Redemption codes — `/redeem` [#redemption-codes--redeem] If you receive a Fuser **perk** or **gift code** — from an event, a partnership, or a promotion — redeem it at the [/redeem](https://fuser.studio/redeem) page. The page accepts the code, validates it against your account, and applies the perk (typically extra credits) immediately. > [!NOTE] Stripe promotion codes > > Stripe promotion codes (the kind that discount a subscription at checkout) are entered on the Stripe checkout page itself when you start a subscription, not on `/redeem`. The `/redeem` page is only for Fuser-issued perk codes. ## Personal vs. workspace billing [#personal-vs-workspace-billing] When you're working inside a workspace, generations are paid from the workspace's shared credit pool. When you're working outside a workspace — on a personal project — generations are paid from your personal credits. The two pools never mix. This separation lets a workspace owner fund the team's work without touching members' personal plans, and lets members keep a personal subscription for their own work without affecting the workspace. ## What's Next? [#whats-next] - [Workspace Billing](https://docs.fuser.studio/docs/teams/workspace-billing.md): Manage your workspace's plan, seats, and shared credits separately. - [API Keys](https://docs.fuser.studio/docs/interface/api-keys.md): Bring your own provider keys to bypass credit costs for specific providers. - [AI Providers](https://docs.fuser.studio/docs/interface/providers.md): Compare costs and capabilities across the providers Fuser supports. # Canvas & Navigation (https://docs.fuser.studio/docs/interface/canvas) Master Fuser's infinite canvas to efficiently organize and navigate your AI workflows. ## The Infinite Canvas [#the-infinite-canvas] Fuser's canvas gives you unlimited space to build, experiment, and organize your workflows. Think of it as a boundless whiteboard where you can: * **Spread out complex workflows** without running out of room * **Group related nodes** by positioning them together * **Create multiple workflows** in the same project * **Scale from simple to advanced** complexity ## Essential Navigation [#essential-navigation] Here are some essential navigation techniques to get you started: ### Panning (Moving Around) [#panning-moving-around] * **Mouse/Trackpad**: Click and drag on empty space * **Mouse Wheel**: Use your mouse wheel to pan vertically, or hold `Shift` while scrolling to pan horizontally. [Video: canvas-pan.mp4] ### Zooming [#zooming] * **Mouse**: `⌘/Ctrl`+`Scroll wheel` * **Trackpad**: `⌘/Ctrl`+`Scroll` or pinch to zoom * **Keyboard**: The following shortcuts are available for quick zooming: * `⌘/Ctrl`+`+` to zoom in * `⌘/Ctrl`+`-` to zoom out * `⌘/Ctrl`+`0` to fit the canvas to the view * `⌘/Ctrl`+`1` to fit the selected nodes to the view [Video: canvas-zoom.mp4] ### Smart Focusing [#smart-focusing] * **Zoom to node**: Double-click on a node to center and zoom to it. (To open the node in [Focus mode](https://docs.fuser.studio/docs/interface/focus-mode.md), press F instead.) * **Fit All**: Double-click on empty space to see your entire workflow * **Fit Selection**: Select multiple nodes and press `⌘/Ctrl`+`1` to fit them in view [Video: canvas-focus.mp4] ## Selection Techniques [#selection-techniques] There are two types of selection in Fuser: single selection and multiple selection. ### Single Selection [#single-selection] * **Click** any node or connection to select it. * To deselect, click on an **empty space** on the canvas or press `Esc`. [Video: canvas-select.mp4] > [!NOTE] What happens when a node is selected? > > When a node is selected, it shows a **highlighted border** and a **soft glow**. The **Node Toolbar** appears below the node with the following actions: > > * **Zoom to node** — center and zoom the canvas on the node. > * **Download media** — save the node's current output (only when the node has image / video / audio / mesh output, you can edit, and you're not in a public view). > * **Enter focus** — open the node in [Focus mode](https://docs.fuser.studio/docs/interface/focus-mode.md). > * **Add annotation** / **Edit annotation** — attach a text note to the node. > * **Delete node** — remove the node (touch devices only; on desktop, press Delete). > > The **Properties** and **Chat** panels are not part of the Node Toolbar — they live in the right-side overlay (toggled with Shift+P) and on the node itself, respectively. To **execute** a node, use the bottom canvas toolbar or press Cmd/Ctrl+Enter. ### Multiple Selection [#multiple-selection] * **Box Selection**: Hold `Shift`+`Click and drag` to select multiple nodes by drawing a box around them. * **Add to Selection**: `⌘/Ctrl`+`Click` to add/remove nodes and connections from selection * **Select All**: `⌘/Ctrl`+`A` to select all nodes [Video: canvas-multi-select.mp4] ## Canvas Controls [#canvas-controls] In addition to using the mouse and keyboard to navigate the canvas, you can also use the following controls: ### Viewport Controls [#viewport-controls] Located in the top-right corner of the canvas: * **Zoom In/Out**: Manual zoom controls * **Fit to Screen**: Reset viewport to show all content * **Zoom Percentage**: Current zoom level indicator ### Mini-Map [#mini-map] A small overview showing: * Your entire workflow layout * Current viewport position * Quick navigation by clicking, zooming, and dragging [Video: canvas-controls.mp4] ## Performance Tips [#performance-tips] We highly recommend to break down large workflows into **separate smaller projects** to get the best out of Fuser. However we also understand that you might want to keep your workflow in one place. In that case, you can use the following tips to keep your workflow organized: > [!NOTE] Use Zoom Levels > > Zoom out for big picture organization, zoom in for detailed editing, and work at comfortable zoom levels (50-200%). > [!NOTE] Strategic Placement > > Keep frequently used nodes in the center, place utility nodes at the edges, and group completed workflows away from active work. > [!NOTE] Memory Management > > Fuser handles performance optimization automatically, large canvases maintain smooth interaction, and nodes outside the viewport use minimal resources. ## Shortcuts Reference [#shortcuts-reference] Here is a comprehensive list of shortcuts that you can use to navigate the canvas: ### Navigation [#navigation] * `⌘/Ctrl`+`Mouse wheel`: Zoom in and out * `⌘/Ctrl`+`+` Zoom in * `⌘/Ctrl`+`-` Zoom out * `⌘/Ctrl`+`0` Fit the canvas to the view * `⌘/Ctrl`+`1` Fit the selected nodes to the view * `Double-click` **on empty space**: Fit all content * `Double-click` **on node**: Zoom to the node (use `F` to open it in [Focus mode](https://docs.fuser.studio/docs/interface/focus-mode.md)) ### Panels & overlays [#panels--overlays] * `⌘/Ctrl`+`K` or `Shift`+`A`: Toggle the **Nodes** panel (both shortcuts open the same panel) * `Shift`+`P`: Toggle the **Properties** overlay * `F`: Open the selected node in Focus mode ### Selection [#selection] * `Shift`+`Click and drag`: Box selection * `⌘/Ctrl`+`Click`: Add/remove from selection * `⌘/Ctrl`+`A`: Select all nodes * `Esc`: Clear selection ### Canvas Operations [#canvas-operations] * `⌘/Ctrl`+`C`: Copy selected nodes * `⌘/Ctrl`+`V`: Paste nodes * `⌘/Ctrl`+`Enter`: Execute the focused node * `Delete` or `Backspace`: Delete selected nodes or selected connections * `⌘/Ctrl`+`Z`: Undo last action * `⌘/Ctrl`+`Shift`+`Z`: Redo last action ## Best Practices [#best-practices] Organize your workflow spatially to improve clarity and maintainability. Here are the key principles for effective workflow organization: * **Flow Direction**: Place inputs on the left, processing in the middle, outputs on the right. Keep data moving consistently left-to-right, and **start with a simple linear flow** and expand naturally. * **Grouping & Organization**: Stack related nodes vertically for clear functional clusters. Keep related nodes close together and group similar operations by function to separate concerns. * **Visual Structure**: Use consistent spacing and grid alignment. Line up similar nodes vertically or horizontally, and resize nodes to emphasize **visual hierarchy**. Use white space effectively - don't crowd nodes together. * **Complex Projects**: Divide canvas into logical areas, use text nodes to label complex areas, leave room for expansion, and document workflow sections with text nodes. ![Canvas Organize](/canvas-organize.jpg) ## What's Next? [#whats-next] Now that you can navigate efficiently: 1. **[Understanding Nodes](https://docs.fuser.studio/docs/interface/nodes.md)** - Master the building blocks 2. **[Sockets & Connections](https://docs.fuser.studio/docs/interface/sockets.md)** - Learn advanced connection techniques 3. **[Interface Guide](https://docs.fuser.studio/docs/interface/interface.md)** - Explore panels and controls 4. **[Building Flows](https://docs.fuser.studio/docs/interface/flows.md)** - Create complex workflows # Core Concepts (https://docs.fuser.studio/docs/interface/concepts) Understanding these fundamental concepts will help you master Fuser and build powerful AI workflows. ## The Canvas [#the-canvas] The **infinite canvas** is your workspace in Fuser — a limitless canvas where you can: * **Place nodes** anywhere you want * **Organize workflows** spatially * **Zoom and pan** to navigate large projects * **Group related functionality** by positioning ### Navigation Basics [#navigation-basics] * **Pan**: Click and drag on empty space * Alternatively, use your mouse wheel to pan vertically, or hold `Shift` while scrolling to pan horizontally. * **Zoom**: `⌘/Ctrl`+`Mouse wheel` or pinch on trackpad * **Fit to View**: Double-click on empty space to fit the canvas to the view * **Focus Node**: Double-click on a node to focus on it [Video: navigation.mp4] ## Nodes: The Building Blocks [#nodes-the-building-blocks] **Nodes** are the building blocks of Fuser, each representing a step in your workflow. Nodes integrate AI models, tools, or content to power your creative process. They are the fundamental units of functionality in Fuser. Every node represents either data or an operation. ### Node Anatomy [#node-anatomy] [Interactive canvas preview] Each node consists of: * **Header**: Shows the provider icon and node title. * **Properties**: Internal settings and parameters. * **Sockets**: Connection points for node properties. You can connect sockets by dragging and dropping from one socket to another. > [!NOTE] Node Renaming > > You can rename the node by **double-clicking** on the title and typing a new title. ### Types of Nodes [#types-of-nodes] #### Primitive Nodes [#primitive-nodes] Primitive nodes are used to store and display content: * **Text** - Store text, prompts, and strings * **Image** - Display and store images * **Video** - Handle video files * **Audio** - Work with audio content * **Mesh** - 3D objects and models #### Executable Nodes [#executable-nodes] Executable nodes are used to perform AI operations by connecting to a provider and processing data that is passed through them: * **Chat Models** - Chat with AI models like OpenAI and Anthropic. * **Image Generators** - Generate images using AI models like Flux and Ideogram. * **Video Generators** - Generate videos using AI models like Runway and Luma. * **Audio Generators** - Generate audio using AI models like text-to-speech, music generation. * **3D Generators** - Generate 3D objects using AI models like Rodin and Hunyuan. > [!NOTE] Learn More > > You can find more information and learn more about nodes in the [Understanding Nodes](https://docs.fuser.studio/docs/interface/nodes.md) section. ## Properties, Sockets, and Edges [#properties-sockets-and-edges] ### Properties [#properties] Every node has one or more **Properties** that control the node's behavior and provide the necessary data for a node to function. These include model selection to choose which AI model to use, aspect ratio for image generation, duration for videos, and other parameters that are specific to the node. ### Sockets [#sockets] **Sockets** are the colored circles on the sides of nodes that allow data from one property to flow to another node's property. You can think of them as "ports", passing and receiving data. **Input sockets** receive property data from other nodes and are on the **left side** of the node. **Output sockets** send data to other properties and are on the **right side**. This allows you to read the data flow from left to right, similar to how you read a sentence. Sockets are indicated by their color, which corresponds to the type of data they support: * **Text**: Text and strings * **Image**: Images * **Video**: Video * **Audio**: Audio * **3D**: 3D objects * **Style**: Style data * **Number**: For numeric values * **Generic**: Generic data > [!NOTE] Socket Compatibility > > You can only connect sockets of compatible types. The colors help you see what connects to what! ### Edges: Creating Connections [#edges-creating-connections] **Edges** are the lines connecting nodes, showing how data flows through your workflow. 1. **Click and drag** from an output socket (right side) 2. **Drag to empty space** to see compatible nodes in **Quick Connect** 3. **Or drag directly** to a compatible input socket of another node > [!NOTE] Learn More > > You can find more information and learn more about sockets and edges in the [Sockets & Connections](https://docs.fuser.studio/docs/interface/sockets.md) section. ## Flows: Complete Workflows [#flows-complete-workflows] A **flow** is a connected set of nodes that work together to accomplish a task. Flows are the complete structure that bring everything together, guiding your project from start to finish. They turn individual steps into a cohesive, actionable end-to-end process. ![Canvas Organize](/canvas-organize.jpg) > [!NOTE] Data Flow Direction > > Data always flows from **left to right**. It comes in from the left, goes through the node and is processed, and then goes out to the right and passed to the next node. > [!NOTE] Learn More > > You can find more information and learn more about flows in the [Building Flows](https://docs.fuser.studio/docs/interface/flows.md) section. ## Providers: AI Services [#providers-ai-services] **Providers** are the AI services that power executable nodes, offering a range of capabilities including GPT models from **OpenAI**, Claude models from **Anthropic**, image, video, and audio generation from **Fal**, access to over 300 models from **OpenRouter**, and Gemini models from **Google**. These providers bring numerous benefits, such as access to best-in-class models for each task, direct API access for the fastest performance, transparent pricing that only charges provider costs, and the flexibility to switch providers easily. ## Key Principles [#key-principles] * **Visual Data Flow**: See exactly how your data moves through the workflow. No hidden steps or black boxes. * **Modular Design**: Each node does one thing well. Combine nodes to create complex behaviors. * **Real-time Updates**: Changes propagate through your workflow automatically. See results as you build. * **Reusable Components**: Save and share node combinations. Build a library of useful workflows. ## What's Next? [#whats-next] Now that you understand the basics: 1. **[Canvas Navigation](https://docs.fuser.studio/docs/interface/canvas.md)** - Master moving around your workspace 2. **[Understanding Nodes](https://docs.fuser.studio/docs/interface/nodes.md)** - Deep dive into node types and usage 3. **[Sockets & Connections](https://docs.fuser.studio/docs/interface/sockets.md)** - Learn advanced connection techniques 4. **[Building Flows](https://docs.fuser.studio/docs/interface/flows.md)** - Create complex multi-step workflows > [!NOTE] Remember > > The best way to learn Fuser is by experimenting! Try connecting different nodes and see what happens. You can always undo with `⌘/Ctrl`+`Z`. # Building Flows (https://docs.fuser.studio/docs/interface/flows) Flows are complete workflows made by connecting multiple nodes together. They are the heart of Fuser, turning individual AI operations into a cohesive, powerful process. Learn how to design, build, and optimize complex AI workflows that solve real problems. ![A Fuser flow showing multiple nodes connected together](/canvas-organize.jpg) ## What Are Flows? [#what-are-flows] A **flow** is a connected sequence of nodes that work together to accomplish a task. Think of flows as visual programs where data moves from left to right, being transformed and enhanced at each step. ### Key Characteristics [#key-characteristics] * **Data-driven**: Execution follows the path of data from one node to the next. * **Automatic**: Changes to one node automatically trigger updates in all connected nodes downstream. * **Visual**: The entire process is laid out on the canvas, making it easy to understand and debug. * **Modular**: Flows are built from individual nodes, which can be combined in limitless ways. ## Flow Execution [#flow-execution] You execute nodes one at a time today — pick the node you want output from and run it. Fuser identifies the upstream nodes it depends on and evaluates them automatically as part of the run. > [!NOTE] Out-of-Order Execution > > If you trigger multiple executions simultaneously, the order in which the affected nodes finish isn't guaranteed. Wait for one to complete before triggering the next if order matters. ### Execution Considerations [#execution-considerations] * **Dependency Analysis**: Fuser identifies which nodes depend on others and will automatically resolve dependencies. Remember, data always flows from left to right. * **Automatic Updates**: When an input changes or a node's parameters are adjusted, all downstream nodes that depend on that output will be updated automatically. * **Parallel Processing**: You can execute multiple nodes at once by selecting them and pressing the button in the node toolbar or using the primary toolbar at the bottom of the canvas. > [!WARNING] Dependency Resolution > > Nodes resolve their dependencies **the moment they are executed**. Let's say you want to execute a node **`Node B`** that depends on the output of another node **`Node A`**. If you execute **`Node B`** first, and then immediately execute **`Node A`**, **`Node B`** will not use the updated output of **`Node A`**, because **`Node A`** was not fully executed. The video below shows this in action. > > [Video: flows-dependency.mp4] ## Common Flow Patterns [#common-flow-patterns] Understanding these common patterns will help you design more effective and efficient flows. ### Linear Pipeline [#linear-pipeline] A sequential process where each step builds on the last. This is the most common pattern. * **Pattern**: `Node A → Node B → Node C` * **Use Case**: A content creation pipeline, like turning a prompt into an enhanced image. [Video: flows-linear.mp4] ### One-to-Many [#one-to-many] Use a single input to create multiple, parallel outputs. * **Pattern**: `Node A → [Node B, Node C, Node D]` * **Use Case**: A/B testing different prompts or applying different styles to the same source image. ![One-to-Many](/sockets-one-to-many.jpg) ### Many-to-One [#many-to-one] Combine multiple inputs into a single node that can process them as a batch. * **Pattern**: `[Node A, Node B, Node C] → Node D` * **Use Case**: Analyze multiple images at once to derive their common characteristics. ![Many-to-One](/sockets-many-to-one.jpg) ### Combined Patterns [#combined-patterns] By combining these patterns, you can build sophisticated workflows tailored to complex tasks. This approach allows you to tackle many parts of a project within a single canvas, managing everything from copy and images to videos and 3D assets. You can start from a single inception point and then branch out to explore different creative possibilities and ideas in parallel. For example, you might use a one-to-many pattern to generate several variations of an image from a single prompt, then a many-to-one pattern to have a vision model analyze and select the best option, while another branch generates marketing copy based on the initial concept. ![Combine](/flows-combine.jpg) In the example above, the flow starts with a single prompt to generate two different styles of photoshoots, demonstrating a **one-to-many** pattern for creative exploration. Selected images are then combined with various clothing items to create new outfits, a form of **many-to-one** processing. Finally, these new images are fed into a **linear pipeline** to generate video animations. This complex workflow lives on a single canvas, streamlining a creative project from initial concept to final photo and video deliverables. ## Building Effective Flows [#building-effective-flows] ### Planning Your Flow [#planning-your-flow] 1. **Define the Goal**: What is the final output you want to create? What are your starting inputs? 2. **Break It Down**: Identify the discrete steps needed to get from input to output. Each step is likely a node. 3. **Choose Your Nodes**: Select the right AI models and utility nodes for each step, considering the balance of cost, speed, and quality. ### Flow Design Principles [#flow-design-principles] * **Left-to-Right Data Flow**: Always arrange your nodes so that data flows consistently from left to right. This makes your workflow intuitive to read. * **Logical Grouping**: Place related nodes together. Create distinct areas for input preparation, core processing, and output exploration. * **Clear Naming**: Rename your nodes to be descriptive. `Product Description` is much clearer than `Text`. Double-click a node's title to rename it. > [!NOTE] Organize Your Canvas > > Organize your canvas for clarity. A well-organized flow is easier to understand, debug, and share. ## Advanced Flow Techniques [#advanced-flow-techniques] ### Conditional Logic [#conditional-logic] While Fuser doesn't have explicit `if`/`else` nodes, you can create conditional logic by building different branches and manually choosing which one to execute for the final output. ### Batch Processing [#batch-processing] Process multiple items at once by connecting them to an input socket that accepts multiple properties . This is highly efficient for processing large numbers of items. ### Creating Templates [#creating-templates] If you create a flow you use often, save it as a template. This allows you to reuse successful patterns quickly. 1. Build and test your flow. 2. Add text nodes to document how it works. 3. In the **Share Panel**, choose "**Allow Remixing**". ### Cost and Speed [#cost-and-speed] * Use faster, cheaper models during development (e.g., Flux Dev or OpenRouter's free models). * Switch to higher-quality, more expensive models for final production runs. * Design flows with parallel branches to run independent operations simultaneously, saving time. ## What's Next? [#whats-next] Now that you understand the principles of building flows: 1. **[Sockets & Connections](https://docs.fuser.studio/docs/interface/sockets.md)** - Learn the details of how data moves between nodes. 2. **[Templates](https://docs.fuser.studio/docs/interface/templates.md)** - Explore pre-built flows to see these patterns in action. 3. **[AI Providers](https://docs.fuser.studio/docs/interface/providers.md)** - Discover the services that power your flows. 4. **[Sharing & Collaboration](https://docs.fuser.studio/docs/interface/sharing.md)** - Share your creations with others. # Focus mode (https://docs.fuser.studio/docs/interface/focus-mode) Focus mode is a fullscreen view of a single node. The rest of the canvas hides; the node's outputs render at full size; the prompt sits next to the media so you can iterate without leaving. Use it when you want to **look closely at a generation** at full resolution, **scrub back through earlier outputs** in the filmstrip, or **fire off prompts in a tight loop** without panning around the canvas. ## Opening Focus mode [#opening-focus-mode] Three ways in: * Click the **Enter focus** button on a node's toolbar. * Press F while a node is selected. * Right-click a node and pick **Enter focus** from the context menu. Double-clicking a node on the canvas zooms in on the node — it does **not** open Focus mode. Use one of the three triggers above. The first node you focus opens in a fullscreen view. From there you can swap to a different node without exiting — see [Switching focus](#switching-focus) below. ## The focus view [#the-focus-view] The view has three areas: * **Media viewer** — the active output at full size. Center of the screen. * **Filmstrip** — a strip of the node's previous outputs. Click any frame to make it the active one in the viewer. * **Prompt editor** — the input that drives the node. Edit and execute without leaving. A **Properties** panel is available on the side when you need to adjust settings beyond the prompt — the same controls you'd see in the right Properties overlay on the canvas. ## Media viewer [#media-viewer] The media viewer adapts to whatever the node produces: * **Image nodes** — fullscreen image preview, with a fullscreen toggle for true edge-to-edge. * **Video nodes** — playback controls and scrubbing. Toolbar actions on the media: * **Download** — save the current frame to your computer. * **Pin image** / **Unpin image** — pin a specific output so it stays selected even after new generations land. * **Info** — toggle a metadata panel showing creator, format, dimensions, file size, and the model that generated the output. * **Enter fullscreen** / **Exit fullscreen** — strip out the surrounding chrome for an even more focused view. Audio and 3D mesh outputs are not currently supported in Focus mode — open the Properties panel on the canvas to interact with those nodes. ## Filmstrip [#filmstrip] The filmstrip shows previous outputs from the focused node, newest first. Click any frame to make it the active output in the viewer. Switching frames is local to the focus view — it doesn't re-run upstream nodes or change the canvas state. Navigate the filmstrip with: * **Scroll wheel** — horizontal scroll over the filmstrip. * **Arrow keys** ( / ) — step one frame at a time. The strip auto-centers the active frame. ## Prompt editor [#prompt-editor] The prompt editor sits alongside the media viewer. Edit your prompt inline, then run. Two action controls: * **Execute** — runs the node with the current prompt. The tooltip shows **Execute prompt** when ready and **Executing prompt** while a generation is running. Press Cmd/Ctrl+Enter from the textarea as a shortcut. * **Restore the saved prompt** — pulls back the last saved prompt for this node. Useful after experimenting. A **Craft** button (when the node supports it) opens the Prompt Crafter, which expands a rough idea into a model-ready prompt before you run. While a generation is running, the Execute button shows a spinner. New generations land in the filmstrip as they finish. ## Switching focus [#switching-focus] Once you're in Focus mode, you can move between nodes without exiting: * Press F on a different node (visible behind the focus view via the small node tray) to swap the focused node. * Right-click a different node in the tray and pick **Enter focus**. ## Exiting Focus mode [#exiting-focus-mode] Press Esc or F to exit. You return to the canvas with the node still selected. You can also click the close button on the focus view. ## What's Next? [#whats-next] - [Understanding Nodes](https://docs.fuser.studio/docs/interface/nodes.md): The Node Toolbar (where the Enter focus button lives) and the rest of the per-node controls. - [Canvas & Navigation](https://docs.fuser.studio/docs/interface/canvas.md): Selection, zoom, and double-click-to-zoom on the regular canvas. - [Sharing](https://docs.fuser.studio/docs/interface/sharing.md): Share the project so others can focus on the same node alongside you. # Working with Media (https://docs.fuser.studio/docs/interface/importing-data) Learn how to import, manage, and optimize media in Fuser. This guide covers everything from uploading files to preparing them for powerful AI workflows. ![Overview](/media-overview.jpg) ## Supported Media Types [#supported-media-types] Fuser is a multi-modal canvas that supports a wide range of formats. * **Images**: Display and store images - **Supported formats**: `PNG`, `JPG`, `WebP`, `GIF` - **Features**: Upload, drag & drop, download, copy/paste * **Videos**: Handle and view video content - **Supported formats**: `MP4`, `WebM` - **Features**: Playback controls, thumbnails, download * **Audio**: Work with audio files - **Supported formats**: `MP3`, `WAV` - **Features**: Playback controls, waveform display * **3D Models**: View and interact with 3D objects - **Supported formats**: `GLB`, `GLTF` - **Features**: 3D preview, download, copy/paste > [!NOTE] File Size Limit > > All media types have a file size limit of **50MB per file**. See the [Media Optimization](#media-optimization) section for tips on managing file sizes. ## Importing Media [#importing-media] Fuser supports the three most familiar ways of bringing media in: drag-and-drop, paste from clipboard, and file-browser upload. Pick the one that fits your workflow. The fastest way to add media. * **Drag from your computer** directly onto the canvas to create the appropriate media node automatically. * **Drop onto an existing node** to replace its content. * **Drop onto a property** to upload the file to the property. [Video: media-drop.mp4] Quickly import media you've copied from other applications. Copy from your system's file browser, another website, or any application — then paste into the canvas with `⌘/Ctrl`+`V`. [Video: media-paste.mp4] > [!NOTE] Copy Images from Websites > > To copy images from other websites, right-click on the image and select `Copy Image`. > [!NOTE] Copy Text > > You can copy plain text from any application and paste it into a text node or property on the canvas. Pasting plain text onto an empty area of the canvas creates a text node automatically. For a more traditional approach, [Primitive Nodes](https://docs.fuser.studio/docs/interface/nodes.md#primitive-nodes) and **Media Properties** open your system's file browser. Click `select a file` in an empty node or property to pick a file. [Video: media-upload.mp4] ## Duplicating Media [#duplicating-media] Fuser is a media-heavy application, and you will often want to duplicate content to use in multiple places, or to add visual hierarchy to your canvas by resizing and repositioning nodes. We've tried to make this process as intuitive and seamless as possible, allowing you to easily copy-paste and drag-and-drop media across nodes, properties, and asset management panels. > [!NOTE] Available for All Media > > The following methods of duplication are available for all media types, including images, videos, audio, and 3D models. ### Drag and Drop Duplication [#drag-and-drop-duplication] To duplicate a piece of media, simply hover over the piece of content you want to duplicate. The duplicate button, indicated by , will appear on the top right of the media viewer. Click and drag the duplicate button to the desired location on the canvas, or drop it onto an existing media viewer or property to replace the media. [Video: media-dup-drag.mp4] ### Copy and Paste Duplication [#copy-and-paste-duplication] To duplicate a piece of media using copy and paste, first click on the media viewer to select it. A dashed purple outline will appear around the media viewer, indicating that it is selected and ready for operation. Press `⌘/Ctrl`+`C` to copy the media. To duplicate the media, press `⌘/Ctrl`+`V` on an empty area of the canvas. To replace the media in an existing node or property, first select the node or property so that the dashed purple outline appears, then press `⌘/Ctrl`+`V` to paste the media. [Video: media-dup-paste.mp4] ## Media Management [#media-management] Located in the left sidebar, the [Assets Library](https://docs.fuser.studio/docs/interface/interface.md#assets) is your central media hub. It automatically organizes your uploaded content by type and provides a preview of each piece. From here, you can: * **Drag files** onto the canvas. * **Upload** with the **Upload** button at the top of the Assets panel for an explicit file picker. Both upload paths produce the same result. * **Download** your original files as a zip. * **Delete** unused media. ### Advanced search [#advanced-search] Beyond the free-text search at the top of the Assets panel, an **Advanced search** affordance lets you filter by media type and other facets, with auto-complete suggestions as you type. Use it when you have hundreds of assets and need to find a specific one fast. [Video: media-lib.mp4] ## Media Optimization [#media-optimization] Optimizing your media is key to improving performance and reducing costs. Before uploading, consider: * **Optimizing file sizes**: Smaller files lead to faster processing and lower costs. * **Choosing appropriate formats**: Use `JPG` for photos and `PNG` for graphics with transparency. * **Naming files descriptively**: Good names make your assets easier to manage. ### Quality vs. Performance [#quality-vs-performance] There's often a trade-off between the quality of your media and the speed and quality of the AI output. * **For Iteration & Testing**: Use smaller, lower-quality files for faster results. For example, generate images at a lower resolution while you're perfecting your prompt. * **For Final Output**: Use high-quality files for the best results. This will also ensure that your AI models have the best possible input to work with. > [!WARNING] Pro Tip: For Video and 3D, Start with an Image! > > Most video models and all 3D models support generating outputs based on reference images. It's often a good idea to start with an image instead of trying different text prompts. This approach allows you to lock-in the style and content using images which are often: > > * **Easier to describe**: Image models are better at understanding and generating images from text descriptions. > * **Faster to generate**: Image models can generate images much faster than video or 3D models. > * **Cheaper to run**: Image models are many times cheaper to run than video or 3D models. > > Once you have your image reference ready, you can use it as a starting point for the video or 3D model. > [!NOTE] Pre-computation is Key > > For expensive operations (like video generation), it's a good practice to run the generation once, and then use the output from your **Generations** library for any downstream workflows. This avoids re-running costly steps. ## Troubleshooting Common Issues [#troubleshooting-common-issues] Supporting a wide range of media formats is a core feature of Fuser. However, there are some common issues that you may encounter when working with media. Here are some tips to help you troubleshoot and fix them: > [!NOTE] Upload Problems > > * **File Won't Upload**: Check that the file is under the 50MB limit and is a supported format. Also, check your internet connection. > * **Slow Uploads**: Try compressing files before uploading. Large files will naturally take longer. > [!NOTE] Processing Issues > > * **AI Model Rejects File**: The file format might be unsupported by the specific AI model, or the file could be corrupted. Try converting it to a different recommended format. > * **Poor Quality Results**: The quality of the output is often dependent on the quality of the input. Using higher-quality source media can significantly improve results. ## What's Next? [#whats-next] Now that you know how to handle media, you can put it to use. 1. **[Building Flows](https://docs.fuser.studio/docs/interface/flows.md)** - Create workflows to process your media. 2. **[Nodes Reference](https://docs.fuser.studio/docs/nodes.md)** - Discover all the nodes you can use to work with your media. 3. **[Styles & Training](https://docs.fuser.studio/docs/interface/styles.md)** - Learn how to use your images to train custom AI styles. 4. **[Sharing](https://docs.fuser.studio/docs/interface/sharing.md)** - Share your creations with others. # Overview (https://docs.fuser.studio/docs/interface) Fuser is an infinite canvas for co-creation with AI — a visual, node-based editor that makes it easy to build powerful workflows combining text, images, video, audio, and 3D content. Here's a quick intro to Fuser from co-founder [Dalena](https://dalena.me/). [Video: 49ed321da2774784975ef17edccc069c?sid=df92f36b-4404-40ca-9640-d543b0511fb3] ## What is Fuser? [#what-is-fuser] Fuser transforms how you work with AI by providing: * **Visual Workflow Building**: Connect nodes instead of writing code * **Multi-Modal AI**: Work with text, images, video, audio, and 3D in one place * **Provider Flexibility**: Use the best models from OpenAI, Anthropic, Fal, and more * **Real-Time Collaboration**: Share and remix workflows with the community * **Cost-Effective**: Pay-per-use pricing with no monthly subscriptions ## Key Benefits [#key-benefits] > [!NOTE] Creative Freedom > > Build complex AI workflows visually. No coding required — just drag, drop, and connect. > [!NOTE] Multi-Modal Workflows > > Seamlessly combine different AI capabilities. Generate an image, caption it with AI, then create a video from the result. > [!NOTE] Best-in-Class Models > > Access the latest AI models through direct API connections. Choose the right tool for each task. > [!NOTE] Transparent Pricing > > Pay only for what you use. No subscriptions, no hidden costs — just direct API pricing. > [!NOTE] Community-Driven > > Share templates, discover workflows, and collaborate with other creators. ## Getting Started [#getting-started] Ready to start creating? Here's what you'll learn: - [Quick Start](https://docs.fuser.studio/docs/interface/quick-start.md): Build your first workflow in 5 minutes. - [Core Concepts](https://docs.fuser.studio/docs/interface/concepts.md): Understand nodes, flows, and the canvas. - [Setting up API Keys](https://docs.fuser.studio/docs/interface/api-keys.md): Connect to AI providers. - [Working with Media](https://docs.fuser.studio/docs/interface/importing-data.md): Upload and manage your content. # Interface Guide (https://docs.fuser.studio/docs/interface/interface) Learn to navigate the Fuser workspace efficiently. This guide covers all the essential interface elements, panels, and productivity features that will help you master your workflow. ![Fuser Interface Overview](/interface-overview.jpg) ## Main Layout [#main-layout] Fuser's interface is designed around a central **infinite canvas**, with three primary components: * **Left Sidebar**: Your content hub, containing all your assets, pre-built components, and learning resources. * **Right Sidebar**: Context-aware panels that appear when you select a node. * **Toolbar**: The main toolbar at the bottom of the canvas for creating nodes and controlling your workflow. > [!NOTE] Toggling the Sidebars > > You can toggle the left overlay (Nodes / Assets / Templates / Learn) by clicking the appropriate button in the left sidebar, or with `Shift`+`A` or `⌘/Ctrl`+`K`. Toggle the right Properties overlay with `Shift`+`P`. ## Tooltips [#tooltips] Fuser has a built-in tooltip system that appears when you hover over certain elements. This is a great way to get quick information about the element you are hovering over. Any time you are unsure about what a certain functionality or UI element does, you can simply hover over the element to see a tooltip with more information. When available, the tooltips will also show you the shortcut associated with the element and function. [Video: interface-tooltips.mp4] ## Tips and Tricks [#tips-and-tricks] The **Tips and Tricks** overlay is a guided tour of Fuser's most useful features. Open it from the help menu in the top bar — short tips with embedded videos cover Quick Connect, Drag & Drop, Rename Nodes, Quick Node Focus, View All Nodes, and more. Toggle individual tips off if you've already learned them; Fuser remembers your choices across sessions. ## Language [#language] Fuser ships in multiple languages. Switch from the **Language Switcher** in the help menu — your choice persists across sessions. ## Left Sidebar [#left-sidebar] The left sidebar is your content hub, containing all your assets, pre-built components, and learning resources. You can also monitor your resource usage here, and have the ability to rename your project. > [!NOTE] Rename Your Project > > You can rename your project by double-clicking the project name in the header and typing a new name. [Video: interface-left.mp4] ### Assets [#-assets] The **Assets** tab shows your personal library of uploaded media (images, videos, audio, 3D models, etc.) To upload media, simply drag and drop files into canvas and they will be added to your Assets library. You can also add content from the Assets library to your canvas by dragging and dropping them onto the canvas. To learn more about importing data and managing your assets, see the [Working with Media](https://docs.fuser.studio/docs/interface/importing-data.md) guide. ### Generations [#-generations] The **Generations** tab shows a complete history of all multimedia content generated by AI nodes. Every time you execute a node, a new generation will be added to this tab. You can also download the generated content by clicking the download button after selecting generations. The downloaded content will be saved as a zip file to your computer. Learn more about managing your generations by reading the [Working with Media](https://docs.fuser.studio/docs/interface/importing-data.md) guide. [Video: media-lib.mp4] ### Styles [#-styles] The **Styles** tab shows your library of custom AI training styles. In addition to your own styles, you can also browse and use styles from the community. Every style comes with a master prompt that can be copied by clicking the button and selecting "Copy Prompt". To create a new style, click the `Create a Style` button and follow the prompts. To learn more about styles, see the [Style Training](https://docs.fuser.studio/docs/interface/styles.md) guide. ### Templates [#-templates] The **Templates** tab shows pre-built workflows created by the community to help you get started quickly. You can also create your own templates by clicking the `Share` button on the top right of the canvas, and enabling the `Allow Remixing` option. To learn more about templates, see the [Templates](https://docs.fuser.studio/docs/interface/templates.md) guide. ### Nodes [#-nodes] The **Nodes** tab is a search command bar for adding nodes to your canvas. Type to filter by name, provider, or capability; press `Enter` or click to drop the node into the flow. Open it with `Shift`+`A` or `⌘/Ctrl`+`K`. ### Learn [#-learn] The **Learn** tab is your in-app entry point to Fuser's documentation and tutorials. Click a section to navigate to the matching docs page or video walkthrough. ### Settings [#-settings] Open Settings from the workspace switcher to manage your profile, providers, billing, editor preferences, and workspace-wide configuration. Settings is its own page, not an overlay inside the canvas. ## Right Sidebar [#right-sidebar] [Video: interface-right.mp4] The right sidebar is a context-aware panel. This means that it will show different panels depending on the node you have selected or based on the action you are performing. ### Node Properties [#-node-properties] The **Properties** panel shows you all the settings for the selected node. You can configure all settings for the selected node, such as choosing an AI model, adjusting parameters, or entering text. ### Chat [#-chat] Some nodes such as LLMs, Image Generators, and Video Generators have a chat interface. This allows you to interact directly with the model and view the conversation history. You can type your message in the input field and press enter to send it. ### Share [#-share] The **Share** panel allows you to share your workflow with the public by generating sharing links. You can also share your workflow with others by clicking the `Share` button on the top right of the canvas, and enabling the `Allow Remixing` option. When enabled, your workflow will be added to the **Templates** tab, and other users will be able to remix it. Additionally you can adjust the details of your workflow, such as the name, description, and social thumbnail. Doing so will ensure that your workflow appears professionally on social media platforms and is discoverable by others. ### Style Training [#-style-training] The **Style Training** panel allows you to train a new style for your nodes. You can upload reference images and select the type of style you want to train. To learn more about styles, see the [Style Training](https://docs.fuser.studio/docs/interface/styles.md) guide. ## Toolbar [#toolbar] [Video: interface-toolbar.mp4] Fuser's toolbar is located at the bottom of the canvas. It is a one stop shop for quickly adding nodes, searching for all available nodes, and executing your workflow. ### Adding Nodes [#-adding-nodes] There are a few ways to add nodes to your canvas: * **Click** any of the primary icons to add that node to the center of the canvas. * **Click and drag** on any of the primary icons to you canvas to add have precise control over the position of the node. ### Command Bar [#-command-bar] The command bar shows you a complete list of all available nodes. It is the fastest way to add and search for nodes. Open it by clicking the button or pressing `Shift`+`A` on your keyboard. You can search for nodes by: * **Type**: `text`, `image`, `video`, `audio`, `mesh`, `style` * **Provider**: `openai`, `anthropic`, `fal` * **Function**: `chat`, `generate`, `upscale` > [!NOTE] Fuzzy Search > > The command bar uses fuzzy search to find nodes. This means that you can search for nodes by typing in a partial name, and the command bar will find the closest matching node. ### Execution Controls [#-execution-controls] When an executable node is selected, the toolbar will give you the ability to quickly execute the node and monitor its progress by simply clicking the button. ## Errors and Notifications [#errors-and-notifications] Fuser has a robust error and warning system that will notify you of any issues that occur in your workflow. These will appear in the bottom center of the canvas, and include the reason for the error or warning. If multiple errors occur, they will be stacked on top of each other. Hover over the stack to expand it and see the full error messages. [Video: interface-errors.mp4] ## The Canvas [#the-canvas] Fuser's canvas gives you unlimited space to build, experiment, and organize your workflows. Think of it as a boundless whiteboard where you build, organize, and bring your ideas to life. * **Navigation**: Pan by clicking and dragging on empty space. Zoom with your mouse wheel or trackpad. * **Selection**: Click a node to select it. Drag a box to select multiple nodes. * **Node Operations**: Add nodes from the toolbar or command bar, connect them by dragging from their sockets, and move them around to organize your flow. > [!NOTE] Learn More About the Canvas > > This documentation has a dedicated section on the canvas, which you can find [here](https://docs.fuser.studio/docs/interface/canvas.md). You can quickly jumpt to specific sections by clicking the links below: > > * [Panning](https://docs.fuser.studio/docs/interface/canvas.md#panning-moving-around) > * [Zooming](https://docs.fuser.studio/docs/interface/canvas.md#zooming) > * [Smart Focusing](https://docs.fuser.studio/docs/interface/canvas.md#smart-focusing) > * [Selection Techniques](https://docs.fuser.studio/docs/interface/canvas.md#selection-techniques) > * [Canvas Controls](https://docs.fuser.studio/docs/interface/canvas.md#canvas-controls) > * [Shortcuts Reference](https://docs.fuser.studio/docs/interface/canvas.md#shortcuts-reference) > [!NOTE] Smart Focusing > > * `Double-click` an empty space to fit your entire workflow to the view. > * `Double-click` a node to zoom in and focus on it. ## Essential Shortcuts [#essential-shortcuts] Mastering shortcuts will dramatically speed up your work. * `Shift`+`A` or `⌘/Ctrl`+`K`: Toggle the **Nodes** panel — both shortcuts open the same panel. * `Shift`+`P`: Toggle the right Properties overlay. * `F`: Open the selected node in [Focus mode](https://docs.fuser.studio/docs/interface/focus-mode.md). * `⌘/Ctrl`+`C` / `⌘/Ctrl`+`V`: Copy and paste selected nodes. * `⌘/Ctrl`+`Z`: Undo last action. * `Delete` or `Backspace`: Delete selected nodes or connections. * `⌘/Ctrl`+`0`: Fit canvas to view all nodes. > [!NOTE] Resizing the Sidebars > > You can resize the left and right sidebars by hover over the outer edge of the sidebar and drag it to the left or right. To reset the size, simply double-click the outer edge of the sidebar. > > [Video: interface-resize.mp4] ## What's Next? [#whats-next] Now that you're familiar with the interface, you're ready to dive deeper. 1. **[Canvas & Navigation](https://docs.fuser.studio/docs/interface/canvas.md)** - Master movement and selection on the canvas. 2. **[Importing Data](https://docs.fuser.studio/docs/interface/importing-data.md)** - Learn how to add media to your Assets library. 3. **[Building Flows](https://docs.fuser.studio/docs/interface/flows.md)** - Start connecting nodes to create workflows. 4. **[Templates](https://docs.fuser.studio/docs/interface/templates.md)** - Explore pre-built workflows. # Node Presets (https://docs.fuser.studio/docs/interface/node-presets) A **preset** is a saved snapshot of a node's input values. Configure a node once, save the preset, and you can apply it later to that same node type for an exact restore — or to a different node type, where Fuser copies over whichever fields actually fit. Presets are personal by default. When you're working inside a workspace, you can also save them at the workspace level so everyone on the team can reuse them. ## Saving a Preset [#saving-a-preset] ### Configure the node first [#configure-the-node-first] Fill in the inputs on the node you want to capture — prompts, sliders, dropdowns, the lot. The save action snapshots the node's inputs at the moment you save, so configure it the way you'd want it restored. ### Open the save dialog [#open-the-save-dialog] Right-click the node and pick **Save as preset…** from the **Presets** submenu, or open the **Properties** panel and click the bookmark button at the top. ### Name and (optionally) describe it [#name-and-optionally-describe-it] Give the preset a clear name. A description is optional — but a single sentence about what makes this configuration useful goes a long way when you come back to it weeks later. ### Pick a scope [#pick-a-scope] Inside a workspace, the dialog shows two pills: **Personal** and **Workspace**. Personal presets are visible only to you. Workspace presets are visible to everyone on the team. Outside a workspace, only Personal exists, and the picker is hidden. ## Applying a Preset [#applying-a-preset] The **Properties** panel header on every node has a preset picker — click the dropdown to open it. The picker has three controls: * **Search** — type to match across every preset you can see. While searching, the filter row steps out of the way and the search runs across both same-type and compatible presets. * **Same-type chip** — locked on. Shows the live node's icon and name so you always know what you're filtering against; you can't deselect this. * **Compatible toggle** — off by default. Turn it on with the **+** chip to widen the list to presets saved from other node types whose fields can also apply here. See [Understanding Compatibility](#understanding-compatibility). * **Scope filter** — visible only inside a workspace. Switch between **All**, **Personal**, and the workspace itself to scope the list. Click any preset to apply it. The picker also shows up in the right-click **Presets** submenu, with the same Same-type and Compatible lists. > [!NOTE] Inputs already driven by a connection are left alone > > If a node input has an incoming edge from another node, the preset won't overwrite it. That input keeps reading from its connection, and the toast tells you which fields were preserved. ## Understanding Compatibility [#understanding-compatibility] Presets are compared **per field**, not per node. When you apply a preset to a node, Fuser walks the preset's inputs and tries to copy each one onto the live node. A field is copied only if the live node has an input by the same name **and** the value would actually fit: 1. If the live input is a dropdown with a fixed set of options, the preset value must be one of those options. 2. If both sides expect the same kind of input (both sliders, both prompts, both images), the value is trusted. 3. Otherwise the live input's validator gets the final say. Empty values in the preset (blank text, no media, no selection) are skipped silently — they don't count as incompatible. Fields the live node doesn't have are reported as incompatible. The visualizer below shows the same preset applied to two different targets — the source node type, and a different one — so you can see what gets copied, what stays connected, and what's left out. ## Apply Outcomes [#apply-outcomes] After every apply you get a toast. The shape of the toast depends on how much fit: | Outcome | What happened | Toast type | | ----------------- | --------------------------------------------------------- | ---------- | | **All applied** | Every non-empty preset field had a home on the live node. | Success | | **Partial apply** | Some fields applied; others were connected or didn't fit. | Success | | **No fields fit** | The preset had nothing in common with this node. | Warning | A partial-apply toast pairs the title `Applied "Editorial portrait"` with a description like `2 of 4 fields set · 1 kept connected (steps) · 1 incompatible (output_format)` — the count and the affected field names. A failed apply leaves the node untouched: no field is changed, and the picker doesn't mark the preset as active. ## Managing Personal vs Workspace Presets [#managing-personal-vs-workspace-presets] Personal presets are only visible to you. They follow your account, not a project — every project you open shows the same personal library. Only the creator can edit or delete a personal preset. Other people don't see them at all. Workspace presets are visible to every member of the workspace you saved them in. They're the right choice for **house styles** — the prompt patterns, default parameters, and model settings your team has agreed on. Editing and deleting a workspace preset is allowed for: * The person who created it * **Admins** and **Owners** of the workspace A workspace preset only appears in the picker when you're working inside its workspace. Switch to **Personal** context (or another workspace) and it's hidden. ## Updating and Deleting [#updating-and-deleting] Once a preset is applied to a node, the right-click **Presets** submenu shows **Update "\"** and **Delete "\"** alongside **Save as preset…**. The same actions are available from the **Properties** panel — the edit pencil next to the picker updates the applied preset to the node's current inputs. Update and Delete are only offered when you're allowed to perform them. If you can't edit a workspace preset, the options aren't shown. > [!WARNING] Updating overwrites the preset for everyone who can see it > > A workspace preset is shared. When you update it, the next time a teammate opens the picker they'll see your new values. If you want to fork the configuration, save a new preset instead of updating. ## Which Nodes Support Presets [#which-nodes-support-presets] Presets are available on standard tool nodes — image, video, text, chat, mesh, and so on. They're not offered on these node types, which either have no inputs to capture or carry per-instance state that wouldn't restore meaningfully: * **Compositor** nodes * **Default** nodes * **Creative Code** nodes * **Group** nodes On unsupported nodes the **Presets** entry is omitted from the right-click menu and the **Properties** panel doesn't show the picker. ## What's Next? [#whats-next] - [Nodes](https://docs.fuser.studio/docs/interface/nodes.md): How node inputs are defined — which is what a preset captures and restores. - [Sharing](https://docs.fuser.studio/docs/interface/sharing.md): Workspace presets are shared. The same access rules apply to other workspace resources. - [Canvas & Navigation](https://docs.fuser.studio/docs/interface/canvas.md): Where the right-click menu lives, and how to navigate to the **Properties** panel. # Understanding Nodes (https://docs.fuser.studio/docs/interface/nodes) Nodes are the fundamental building blocks of Fuser. Every piece of functionality, from storing text to generating images, and interacting with AI models is represented as a node. ## Node Types [#node-types] Fuser uses two main categories of nodes that work together to create powerful workflows. Primitive nodes are the building blocks of your workflows, and executable nodes are the AI operations that transform your data. ### Primitive Nodes [#primitive-nodes] **Primitive nodes** store and display content. They're your starting points and endpoints, containing the data that will be processed by the executable nodes. #### Text Node [#-text-node] * **Purpose**: Store text, prompts, and string data * **Use cases**: AI prompts, captions, notes, instructions * **Features**: Multi-line editing, copy/paste, search ![Text Node](/nodes-text.jpg) *** #### Image Node [#-image-node] * **Purpose**: Display and store images * **Supported formats**: PNG, JPG, WebP, GIF * **Features**: Upload, drag & drop, download, copy/paste * **Size limit**: 50MB per image ![Image Node](/nodes-image.jpg) *** #### Video Node [#-video-node] * **Purpose**: Handle and view video content * **Supported formats**: MP4, WebM * **Features**: Playback controls, thumbnails, download * **Size limit**: 50MB per video ![Video Node](/nodes-video.jpg) *** #### Audio Node [#-audio-node] * **Purpose**: Work with audio files * **Supported formats**: MP3, WAV * **Features**: Playback controls, waveform display * **Size limit**: 50MB per file ![Audio Node](/nodes-audio.jpg) *** #### Mesh Node [#-mesh-node] * **Purpose**: 3D objects and models * **Supported formats**: GLB, GLTF * **Features**: 3D viewer, rotation, zoom * **Size limit**: 50MB per model ![Mesh Node](/nodes-mesh.jpg) *** #### Style Node [#-style-node] * **Purpose**: Store and apply AI training styles (Flux Dev LoRAs) * **Use cases**: Consistent visual styles, custom AI training * **Features**: Style preview, master prompt ![Style Node](/nodes-style.jpg) *** ### Executable Nodes [#executable-nodes] **Executable nodes** perform AI operations and transformations. They take inputs, process them, and produce the desired outputs. #### Chat Models (LLMs) [#-chat-models-llms] Large Language Models are powerful AI systems that excel at understanding and generating human language. They can engage in natural conversations, analyze text and images, write content, and solve complex problems. These models are particularly useful for content creation, data analysis, coding assistance, and general problem-solving tasks. They can understand context, follow instructions, and generate coherent responses across a wide range of topics and applications. #### Image Generation [#-image-generation] Image generation nodes create visual content from text descriptions or existing images. They can produce high-quality, artistic images with various styles, from photorealistic to artistic interpretations. These tools are particularly useful for creating illustrations, concept art, product visualizations, and marketing materials. They can also handle specialized tasks like text-to-image generation, style transfer, and background manipulation, making them valuable for creative professionals and content creators. > [!WARNING] Pro Tip: For Video and 3D, Start with an Image! > > Most video models and all 3D models support generating outputs based on reference images. It's often a good idea to start with an image instead of trying different text prompts. This approach allows you to lock-in the style and content using images which are often: > > * **Easier to describe**: Image models are better at understanding and generating images from text descriptions. > * **Faster to generate**: Image models can generate images much faster than video or 3D models. > * **Cheaper to run**: Image models are many times cheaper to run than video or 3D models. > > Once you have your image reference ready, you can use it as a starting point for the video or 3D model. #### Video Generation [#-video-generation] Video generation capabilities allow users to create dynamic visual content from text descriptions or static images. These tools can generate short video clips with controlled motion, camera movements, and visual effects. They're particularly useful for creating product demonstrations, social media content, and creative visual storytelling. The technology can handle various styles and effects, making it valuable for marketing, entertainment, and educational content creation. #### Audio Generation [#-audio-generation] Audio generation nodes create and manipulate sound content, including speech, music, and sound effects. They can generate natural-sounding speech in multiple languages, create original music compositions, and process existing audio to enhance quality or convert formats. These capabilities are valuable for creating podcasts, video narration, background music, and audio content for various media projects. The technology can also handle speech-to-text conversion and audio enhancement tasks. #### 3D Generation [#-3d-generation] 3D generation tools create and manipulate three-dimensional models and scenes. They can generate 3D objects from text descriptions and images, create detailed models for product visualization, and design architectural spaces. These capabilities are particularly useful for product design, architectural visualization, game development, and virtual reality applications. The technology enables the creation of complex 3D structures with realistic textures and lighting. ## Node Properties [#node-properties] Every node has one or more **Properties** that control the node's behavior and provide the necessary data for a node to function. These include model selection to choose which AI model to use, aspect ratio for image generation, duration for videos, and other parameters that are specific to the node. ![Node Properties](/nodes-properties.jpg) > [!NOTE] Toggle Property Visibility on the Canvas > > To reduce visual clutter, some properties are hidden on the canvas by default. Open the **Properties** overlay from the right side of the canvas (or press Shift+P) with the node selected. Click the small circle icon in each property's header to toggle whether that property is visible on the canvas itself. ## Node Anatomy [#node-anatomy] Every node shares common elements: * **Header**: Shows the provider icon and node title, allowing you to rename, minimize, and expand the node. Also provides a context menu for granular control. * **Properties**: Control the node's behavior and provide the necessary data for a node to function. By default, some properties are hidden on the canvas. * **Sockets**: Property connection points located on the left and right sides of the node. You can connect sockets by dragging and dropping from one socket to another. * **Node Toolbar**: A row of context-aware actions that appears below the node when it's selected — zoom, download, focus, annotate, and (on touch) delete. [Video: nodes-anatomy.mp4] > [!NOTE] Node Renaming > > You can rename the node by **double-clicking** on the title and typing a new title. > [!NOTE] Selected Node > > When a node is **selected**, it shows a **highlighted border** and a **soft glow**. It also becomes available for actions such as copy, delete, etc. ### Node Toolbar [#node-toolbar] Selected nodes display a **Node Toolbar** below their main content. The toolbar provides **context-aware** actions that depend on the node type and your current view: * **Zoom to node** — center and zoom the canvas on the node. * **Download media** — save the node's current output. Visible only when the node has image / video / audio / mesh output (or is explicitly downloadable), you can edit the project, and you're not in a public view. * **Enter focus** — open the node in [Focus mode](https://docs.fuser.studio/docs/interface/focus-mode.md). Visible on nodes that support focus. * **Add annotation** / **Edit annotation** — attach a freeform text note to the node. * **Delete node** — only shown on touch devices. On desktop, press Delete instead. The Node Toolbar is hidden in **public views** so visitors can't trigger downloads or modifications. Two related controls live elsewhere: * The **Properties** panel is the right-side overlay (toggle with Shift+P), not a toolbar button. * The **Chat** overlay opens from the node body itself — see [Chat overlay](#chat-overlay). * **Execute** lives in the bottom-of-canvas toolbar, or use Cmd/Ctrl+Enter with the node selected. ### Resizing Nodes [#resizing-nodes] You can resize nodes by hovering over the **left** and **right** side of the node. When the edge is highlighted, you can click and drag to resize the node. [Video: nodes-resize.mp4] ## Node States [#node-states] Nodes have different visuals indicators, depending on the state they are currently in. [Video: nodes-states.mp4] ### Idle State [#idle-state] * **Appearance**: Normal border, no special indicators * **Meaning**: Ready to execute, waiting for input or trigger ### Selected State [#selected-state] * **Appearance**: Highlighted border, indigo accent glow * **Meaning**: Node is selected ### Executing State [#executing-state] * **Appearance**: Animated border with a pulsating glow indicating progress * **Meaning**: Currently processing, AI model working * **Duration**: Varies by model and complexity ## Chat overlay [#chat-overlay] Executable nodes that take prompts (LLMs, image generators, video generators) expose a per-node **Chat overlay**. Open it from the **Chat** button in the Node Toolbar. The overlay shows the conversation with that specific node — every prompt you've sent and every output the node has produced. Submitting a new prompt from the overlay re-executes the node with the new input. The history is per-node, not per-flow, so each generator carries its own conversation. ## Node Carousel [#node-carousel] Executable nodes keep a history of their outputs. The **Node Carousel** is the strip of past outputs visible on the node when more than one exists. Click an entry to make it the current output; the rest of your flow re-runs against the new selection. Use the carousel to compare alternative generations without re-prompting, or to roll back to an earlier output that worked better. For a fullscreen view of any output with prompt-side iteration, see [Focus mode](https://docs.fuser.studio/docs/interface/focus-mode.md). ## Adding Nodes [#adding-nodes] [Video: nodes-add.mp4] **Command Bar**: Press `Shift`+`A` or click in toolbar * Search by name: `text`, `image`, `video`, `audio`, `mesh`, `style` * Search by provider: `openai`, `anthropic`, `fal` * Search by capability: `chat`, `generate`, `video` **Quick Connect**: Click and drag from a socket to empty space, then release the mouse button. The Quick Connect menu will open. * Shows compatible nodes automatically * Filters by data type compatibility * Suggests best matches first **Toolbar**: **Click** node buttons for common nodes, or **drag and drop** the icon from the toolbar to the canvas. ## Configuring Nodes [#configuring-nodes] [Video: nodes-configure.mp4] Nodes can be configured directly on the canvas or in the node properties panel. Here are some of the most common ways to configure nodes: 1. **API Keys**: Most executable nodes need provider credentials 2. **Model Selection**: Choose appropriate AI model for your task 3. **Parameters**: Adjust settings for desired output quality 4. **Node Names**: Rename for better organization 5. **Display Options**: Minimize/expand content areas ## Node Execution [#node-execution] [Video: nodes-execute.mp4] With the exception of primitive nodes, all nodes can be executed at any time. Select a node and either press Cmd/Ctrl+Enter, or click the Execute button in the **bottom canvas toolbar**. When executing a node, all connected dependencies will be processed in order from left to right. The node will then enter the **Executing** state and the progress will be shown visually. ## Advanced Node Features [#advanced-node-features] ### Collapsible Nodes [#collapsible-nodes] * **Minimize**: Reduce visual clutter in complex workflows * **Header-only view**: See connections without content * **Expand**: Show full content when needed ### Copy and Paste [#copy-and-paste] * **Duplicate nodes**: Select node(s), press `⌘/Ctrl`+`C`, press `⌘/Ctrl`+`V` to paste * **Cross-workflow**: Copy between different projects * **With connections**: Maintains relationships when possible ### Node Templates [#node-templates] * **Save configurations**: Reuse common node setups * **Share with team**: Standardize workflow components * **Community templates**: Access shared configurations ## Best Practices [#best-practices] When working with nodes, here are some best practices to follow to make your workflows more efficient and maintainable: * **Organization**: Name nodes for better understanding and maintainability, using clear, descriptive names. Place related nodes together, and maintain a consistent and readable flow direction. * **Performance**: Minimize unnecessary executions, and choose appropriate quality/speed balance. Monitor API usage and costs to stay on top of resource usage. * **Workflow Design**: Create reusable node groups, and plan for execution failures. Validate each step before building complex flows. ## Troubleshooting Nodes [#troubleshooting-nodes] AI models are powerful, but they can sometimes produce unexpected results. When working with nodes, you may encounter some common issues. Here are some tips to help you troubleshoot and fix them: > [!NOTE] Node Won't Execute > > * **Check API Keys**: Ensure all required provider keys are configured correctly in settings. > * **Check Inputs**: Make sure all required input sockets are connected. > * **Check Provider Balance**: Ensure provider account has sufficient credits. > [!NOTE] Unexpected Results > > * **Inspect Intermediate Outputs**: Click on each node in the chain to see what the data looks like at that step. This can help you pinpoint where things went wrong. > * **Use Image References**: For video and 3D models, use image references to lock in the style and content. This will prodice predictable results compared to text only approaches. > * **Check Node Parameters**: Review the settings in the properties panel for each node. A misconfigured parameter is a common cause of issues. > * **Prompt Engineering**: Check for prompt engineering issues. A good prompt is the foundation of a good result. > * **Test in Isolation**: Disconnect a problematic node and test it with a simple, direct input to see if it behaves as expected. > [!NOTE] Performance Problems > > * **Faster/Cheaper Models**: Use faster, cheaper models during development. > * **Optimize Data**: Use smaller media files to test and optimize. > [!NOTE] Node Selection Tips > > * Different AI models excel at different tasks, so choose the right model for the job > * Start with default settings, then optimize > * Test with small inputs before scaling up > * Keep frequently used nodes easily accessible ## What's Next? [#whats-next] Now that you understand nodes: 1. **[Sockets & Connections](https://docs.fuser.studio/docs/interface/sockets.md)** - Learn how nodes communicate 2. **[Building Flows](https://docs.fuser.studio/docs/interface/flows.md)** - Combine nodes into workflows 3. **[AI Providers](https://docs.fuser.studio/docs/interface/providers.md)** - Explore available AI services 4. **[Working with Media](https://docs.fuser.studio/docs/interface/importing-data.md)** - Handle different content types # AI Providers (https://docs.fuser.studio/docs/interface/providers) AI providers are the services that power Fuser's executable nodes. Learn about available providers, their strengths, and how to choose the right ones for your workflows to balance cost, speed, and quality. ## Why Use Multiple Providers? [#why-use-multiple-providers] Fuser connects directly to external AI providers, giving you several key advantages: * **Best-in-Class Models**: Different providers excel at different tasks. Use the best image, video, and text models from across the AI landscape in a single workflow. * **Cost Optimization**: Choose the most cost-effective provider for each specific task. * **Flexibility**: Easily switch between providers without rebuilding your workflow logic. * **Latest Access**: Get access to new and updated models as soon as they are released by the providers. ## Recommended Providers [#recommended-providers] **Start here.** This combination covers most use cases with the lowest starting cost — bring keys for these two providers first, and add the rest later only when you need them: ### Fal - The Media Generation Powerhouse [#fal---the-media-generation-powerhouse] Fal specializes in Image, Video, Audio, and 3D generation, providing access to the latest models like FLUX, Luma, and Kling with fast performance and competitive, pay-per-use pricing. It's an excellent choice for all your media generation needs, offering a comprehensive suite of tools for content creation. ### OpenRouter - The Model Marketplace [#openrouter---the-model-marketplace] OpenRouter provides access to over **300 different text models**, offering a huge selection of models including many **free and open-source options**, along with tools to compare costs. It's ideal for all your text and chat-based needs. ### Direct Providers (Optional) [#direct-providers-optional] For specific use cases or when you need enterprise-grade reliability, you can connect directly to providers like **OpenAI**, **Anthropic**, **Google**, **Mistral**, **Groq**, **DeepSeek**, **Cohere**, and **Perplexity** for text; **Civitai** for image LoRAs; and **Runway** for video. ## All Supported Providers [#all-supported-providers] Fuser supports the following providers today. Bring your own API key for any of them, set in **Settings → Providers**. > [!NOTE] Custom adapters vs. base passthrough > > Four providers — **Fal**, **Google**, **OpenAI**, and **Runway** — have dedicated adapters in Fuser that surface provider-specific options (model variants, response shapes, fine-tuning, etc.). The other text/chat providers (**Anthropic**, **Mistral**, **Groq**, **Cohere**, **Perplexity**, **DeepSeek**, **OpenRouter**, **Civitai**) use a base passthrough — your key is forwarded to the provider's standard endpoints with default options. Both approaches work; just expect the dedicated-adapter providers to offer more in-app surface area. ### Text & chat [#text--chat] * **OpenAI** — GPT family. Reliable all-rounder. * **Anthropic** — Claude family. Strong on reasoning, long context, and code. * **Google** — Gemini family. Native multimodal, including video understanding. * **Mistral** — Mistral and Codestral models. Strong open-weight family. * **Groq** — Inference accelerator with very low latency on open-weight models. * **DeepSeek** — Open-weight reasoning and coding models. * **Cohere** — Command and embedding models, enterprise focus. * **Perplexity** — Online-search-augmented chat models. * **OpenRouter** — Marketplace fronting hundreds of text models including free and open-weight options. Useful for cost optimization and experimentation. ### Image, video, audio, and 3D generation [#image-video-audio-and-3d-generation] * **Fal** — Image, video, audio, and 3D generation. The full FLUX, Kling, Luma, and many other media-model families. * **OpenAI** — Image generation via the GPT Image family. * **Google** — Image and video generation via Gemini and Imagen. * **Civitai** — Image LoRAs and community-trained models. * **Runway** — Video generation. The exact set of available models inside each provider changes frequently — check the provider dropdown in **Settings → Providers** for what's live today. ## Choosing the Right Provider [#choosing-the-right-provider] * **For beginners**: Start with **Fal** (for media) and **OpenRouter** (for text). This combination covers a wide range of use cases at low cost. * **For content creation**: Use **Fal** for high-quality images and video, and **OpenRouter** for cost-effective text. * **For business and analysis**: Connect to **Anthropic** or **OpenAI** directly, or route through **OpenRouter**, for tasks that need high accuracy and reasoning. * **For low latency**: **Groq** runs open-weight models at very low latency. * **For experimentation**: **OpenRouter** is the easiest way to compare many models without managing per-provider keys. ## Cost Management [#cost-management] Pricing is determined by the providers, not Fuser. Understanding their models is key to managing costs. * **Text Models** are typically priced per "token" (roughly, a word). Longer inputs and outputs cost more. Generally speaking, text models are the very affordable. Average monthly costs are typically less than $1. * **Media Models** are often priced per generation, with factors like image resolution or video duration affecting the cost. > [!WARNING] Video and 3D are Expensive > > Video and 3D models are much more expensive than text and image models. Average cost per generation is typically $0.50. It's often a good idea to **start with an image instead of trying different text prompts**. This approach allows you to lock-in the style and content using images which are often: > > * **Easier to describe**: Image models are better at understanding and generating images from text descriptions. > * **Faster to generate**: Image models can generate images much faster than video or 3D models. > * **Cheaper to run**: Image models are many times cheaper to run than video or 3D models. > > Once you have your image reference ready, you can use it as a starting point for the video or 3D model. > [!NOTE] How to Optimize Costs > > * Use cheaper, faster models for testing and development. > * Use smaller image resolutions or shorter video durations when iterating. > * Make your prompts clear and concise to reduce token usage. > * Use OpenRouter to find the most cost-effective model for your task. ## Security and API Keys [#security-and-api-keys] Your API keys are your private credentials for these services. * **Never share them publicly.** * Store them securely in a password manager. * If you suspect a key has been compromised, revoke it immediately from the provider's dashboard and generate a new one. For a detailed guide on setup and security, see **[Setting up API Keys](https://docs.fuser.studio/docs/interface/api-keys.md)**. ## What's Next? [#whats-next] Now that you understand the AI providers that power Fuser: 1. **[Setting up API Keys](https://docs.fuser.studio/docs/interface/api-keys.md)** - Get your keys and connect them to Fuser. 2. **[Nodes Reference](https://docs.fuser.studio/docs/nodes.md)** - Explore the specific nodes for these providers. 3. **[Building Flows](https://docs.fuser.studio/docs/interface/flows.md)** - Start building workflows with your chosen providers. 4. **[Templates](https://docs.fuser.studio/docs/interface/templates.md)** - See how different providers are used in pre-built workflows. # Quick Start (https://docs.fuser.studio/docs/interface/quick-start) Get up and running with Fuser in just a few minutes. This guide will walk you through creating your first AI workflow. [Video: quick-start.mp4] ## Before You Begin [#before-you-begin] 1. **Create an Account**: Sign up at [app.fuser.studio](https://app.fuser.studio) 2. **Get API Keys**: You'll need at least one AI provider [API Key](https://docs.fuser.studio/docs/interface/api-keys.md) to unlock Fuser's full potential. > [!NOTE] > > Don't have API keys yet? No problem! You can explore the interface and import your own media while you set them up. ## Your First Workflow: Text to Image [#your-first-workflow-text-to-image] Let's create a simple workflow that generates an image from a text description. ### Add a Text Node [#add-a-text-node] 1. Press the icon in the toolbar or drag it onto the canvas. 2. Click on the text node and enter a prompt like `A serene mountain landscape at sunset`. ### Connect to an Image Generator [#connect-to-an-image-generator] 1. Press the icon in the toolbar to open the search panel. 2. Choose an image generation node like [**Flux Dev Node**](https://docs.fuser.studio/docs/nodes/image/flux-1-dev.md). 3. Click and drag from the text node output to the image generator Prompt input. > [!NOTE] > > You can learn more about **sockets** and how to connect nodes in the [Sockets & Connections](https://docs.fuser.studio/docs/interface/sockets.md) section. ### Set Up Your API Key [#set-up-your-api-key] If you haven't already added your API key: 1. Click the icon in the left sidebar. 2. Select the **API Keys** tab. 3. Choose your provider (in this case, Fal) and paste the API key you copied from your [Fal dashboard](https://fal.ai/dashboard/keys). [Video: api-key-quick-start.mp4] > [!NOTE] > > Need an API key? Check out [Setting up API Keys](https://docs.fuser.studio/docs/interface/api-keys.md) for step-by-step instructions for each provider. ### Generate Your Image [#generate-your-image] 1. Click on your image generation node (the **Flux Dev Node**) to select it. 2. Press the button that appears in the **Node Toolbar** to start generating. 3. Watch the magic — your image appears in the node once generation completes. ### View and Download [#view-and-download] 1. The generated image appears directly in the node. 2. Select the image node and press the button in the toolbar to download. ## What You Just Learned [#what-you-just-learned] **Congratulations!** 🎉 You've just created your first AI workflow. Here's what happened: * **Nodes**: You used building blocks (Text and Image Generator) to create functionality * **Connections**: You linked nodes together to pass data between them * **Execution**: You ran the workflow to process your input through AI models * **Results**: You generated and downloaded AI-created content ## Next Steps [#next-steps] Now that you've got the basics, explore these concepts: ### Learn the Fundamentals [#learn-the-fundamentals] - [Core Concepts](https://docs.fuser.studio/docs/interface/concepts.md): Understand nodes, sockets, and flows. - [Canvas Navigation](https://docs.fuser.studio/docs/interface/canvas.md): Master moving around your workspace. - [Understanding Nodes](https://docs.fuser.studio/docs/interface/nodes.md): Learn about the different node types. ### Expand Your Workflow [#expand-your-workflow] - [Working with Media](https://docs.fuser.studio/docs/interface/importing-data.md): Upload images, videos, and audio. - [AI Providers](https://docs.fuser.studio/docs/interface/providers.md): Explore different AI services and models. - [Templates](https://docs.fuser.studio/docs/interface/templates.md): Start from pre-built workflows. ### Advanced Features [#advanced-features] - [Style Training](https://docs.fuser.studio/docs/interface/styles.md): Create custom AI styles from your references. - [Sharing](https://docs.fuser.studio/docs/interface/sharing.md): Collaborate and share your workflows. ## Troubleshooting [#troubleshooting] ### Common Issues [#common-issues] **Node won't execute?** * Check that you have a valid API key for the provider * Ensure that you have some credits left in your provider account * Ensure all required inputs are connected or filled in **Connection not working?** * Ensure you're dragging from output (right side) to input (left side) * Check that data types are compatible (colors should match) Need more help? Check our [Troubleshooting guide](https://docs.fuser.studio/docs/interface/troubleshooting.md) or join our [Discord community](https://discord.gg/ksnjDd7eRh). # Settings (https://docs.fuser.studio/docs/interface/settings) The Settings modal is your control panel for everything that follows you across workspaces — your name and avatar, your editor theme, and the notifications Fuser sends you by email. It's separate from workspace-level settings (members, teams, billing for the workspace itself), which live under their own tab. ## Opening Settings [#opening-settings] Click the workspace switcher in the top bar, then the gear icon next to your identity. Settings opens in a modal — its own routed page, not an overlay inside the canvas. The modal has tabs along the side. The personal tabs are **Profile**, **Providers**, **Billing & Plans**, **Editor**, and **Notifications**. **Workspace**, **Workspace Billing**, and **Recovery** are workspace-scoped and only show up when you're inside a workspace. This page covers the three personal tabs that don't have their own dedicated docs: **Profile**, **Editor**, and **Notifications**. For the others see [Providers](https://docs.fuser.studio/docs/interface/api-keys.md), [Billing & Plans](https://docs.fuser.studio/docs/interface/billing.md), and [Workspace Settings](https://docs.fuser.studio/docs/teams/workspace-settings.md). ## Profile [#profile] The **Profile** tab is your account identity. It holds: * **Name** — what other people see next to your contributions, comments, and shares. Free-text, unicode-friendly. * **Username** — your unique handle (4–15 characters, lowercase letters, numbers, hyphens, and underscores). Used in URLs and @-mentions. The field validates as you type and checks availability live; if a name is taken, you'll see it before you submit. * **About me** — a short bio (up to 255 characters) shown on your public profile and on community templates you publish. * **Avatar** — the small image that represents you across the app. * **Email** — read-only. Tied to the account you signed in with. Changes save with the **Update** button. There's also a **Logout** button at the bottom of the tab. These details follow you into every workspace you belong to — you don't have a separate profile per workspace. ## Editor [#editor] The **Editor** tab controls how the Fuser interface looks and feels. * **Theme** — pick **Light**, **Dark**, or **System**. System matches your OS appearance setting and updates automatically when it changes. Theme is saved locally per browser, so it doesn't follow you across devices — a fresh browser starts on the default until you set it again. ## Notifications [#notifications] The **Notifications** tab is where you opt in or out of email Fuser sends about events that affect you. Toggle each category independently: * **Comments** — when someone replies to a comment thread you're in or @-mentions you. * **Sharing** — when someone shares a project, folder, or workspace with you. * **Teams** — when you're added to or removed from a team. * **Workspace** — workspace-wide events like role changes, plan updates, or admin actions. > [!NOTE] In-app notifications stay on > > These toggles only control email. In-app notifications — the ones that show up in the notification panel inside Fuser — are always on, regardless of what you set here. ## What's Next? [#whats-next] - [Providers](https://docs.fuser.studio/docs/interface/api-keys.md): Set up API keys so Fuser can use your own provider accounts. - [Billing & Plans](https://docs.fuser.studio/docs/interface/billing.md): Manage your personal subscription, credits, and payment methods. - [Workspace Settings](https://docs.fuser.studio/docs/teams/workspace-settings.md): Workspace-level controls for members, teams, sharing, and billing. # Sharing & Collaboration (https://docs.fuser.studio/docs/interface/sharing) Fuser is built for co-creation. This page covers downloading your work, sharing read-only public links, and contributing to the Fuser community. For workspace-gated team collaboration — members, roles, sharing with specific people — see the [Teams](https://docs.fuser.studio/docs/teams.md) section. ![Sharing Overview](/share-overview.jpg) ## Downloading Your Work [#downloading-your-work] Fuser provides multiple ways to download your work, from exporting multiple files as a zip archive to downloading individual node outputs on the canvas. To download any of your past [generations or assets](https://docs.fuser.studio/docs/interface/importing-data.md#media-management), open the appropriate library from the left sidebar, select the items you want to download, and click the button that appears on the bottom of the library panel. To download individual node outputs on the canvas, select the node you want to download and from the [Node Toolbar](https://docs.fuser.studio/docs/interface/nodes.md#node-toolbar), click the button. [Video: share-download.mp4] ## Public Link Sharing [#public-link-sharing] The easiest way to share a read-only version of your workflow is by generating a public link. 1. Click the **Share** button in the top right of the canvas. 2. Turn on **Share a Link** to make your workflow public. 3. Click **Copy Link** to copy the link to your clipboard. [Video: share-public.mp4] > [!NOTE] View Before Sharing > > View the workflow before sharing it by clicking on the address to the left of the `Copy Link` button. ### Where the public link goes [#where-the-public-link-goes] Turning on **Share a Link** publishes your project at a public URL of the form `/view/:slug`. Anyone with the URL gets a read-only view of the canvas — no Fuser account required. Turning **Share a Link** off stops the URL from resolving immediately. ### Public Sharing Privacy [#public-sharing-privacy] When you share a public link, anyone with the link can view your workflow. Public viewers can pan and zoom the canvas, but the **per-node toolbar is hidden entirely** in public view, so none of its actions (execute, download, focus, annotate) are available. Public viewers also can't change properties or open chat/history. Generally: * ✅ **Pan and zoom** the canvas to inspect the workflow. * ❌ **No node toolbar** — execute, download, enter focus, and annotate are all hidden. * ❌ **No property changes** — the Properties panel is read-only or unavailable. * ❌ **No private style access** — viewers can see the style's name, preview image, and Master Prompt, but not the underlying training data. * ❌ **No chat or history** — per-node chat, context, and generation history are not visible. > [!WARNING] A Note on Styles > > Although public viewers are restricted from accessing your private styles, they can view the **name**, **preview image**, and **Master Prompt** of the style nodes that you have present on your public canvas. ### Customize Appearance and Description [#customize-appearance-and-description] When you share a public link, you can customize the appearance and description of your workflow. Doing so will ensure that your workflow appears professionally on social media, has a higher engagement rate, and is discoverable by others. * **Preview Image**: You can change the preview image of your workflow by clicking on the `Generate Preview` button. * **Title**: You can change the title of your workflow by adjusting the `Title` input field. * **Description**: You can change the description of your workflow by adjusting the `Description` input field. * Finally click on `Save Changes` to update your public link. ![Social Media Preview](/share-og.jpg) > [!NOTE] Use Existing Images > > Drag and drop a pre-existing image from your Assets or Generations library into the `Preview Image` field. ## Team Collaboration [#team-collaboration] Workspace-based collaboration — invites, roles, sharing with specific people or teams, and access auditing — has its own section. - [Members](https://docs.fuser.studio/docs/teams/members.md): Invite people, assign roles (Owner / Admin / Member), and manage who's in your workspace. - [Sharing projects](https://docs.fuser.studio/docs/teams/sharing.md): Share with specific members, teams, or external emails. View / Comment / Edit access levels. - [Access reference](https://docs.fuser.studio/docs/teams/access-reference.md): The full rules of who can see what across teams, folders, and shares. ## Community Sharing [#community-sharing] No software is complete without a community. Fuser is no different. We want to build and maintain a community of users who are sharing their workflows, templates, and other resources with the world. Fuser comes with a library of official and community-made styles and templates. You can also share your own styles and templates with the community. ### Templates [#templates] If you've built a workflow that solves a common problem or demonstrates a creative technique, you can submit it to the public [**Template Library**](https://docs.fuser.studio/docs/interface/templates.md). To do so, click on the `Share` button in the top right of the canvas, and enable the `Allow Remixing` option. To create a template and share it with the community, see the [Creating Your Own Templates](https://docs.fuser.studio/docs/interface/templates.md#creating-your-own-templates) guide. To learn about how others can use your template visit [Template Privacy](https://docs.fuser.studio/docs/interface/templates.md#template-privacy). [Video: templates-create.mp4] > [!NOTE] Requirements > > Your template must be well-documented, easy to use, and follow community guidelines. ### Styles [#styles] [Styles](https://docs.fuser.studio/docs/interface/styles.md) are a powerful way to create a unique visual identity. They're even better when they expose you to a new world of possibilities. That's why we've made it easy to share your own style with the community, by simply enabling the `Publish to Community` option during style training. To learn about how others can use your style visit [Style Privacy](https://docs.fuser.studio/docs/interface/styles.md#training-your-own-style). > [!NOTE] Community Styles > > To reward you for your contribution, community-published styles do not count toward storage limits! But to ensure the quality of the styles in the library, we automatically screen all community styles for quality and relevance. If your style does not meet our standards, it will remain private and only accessible to you. > [!NOTE] Publish Private Styles > > If you have an existing style that you want to share with the community, you can always do so by clicking on the `Publish to Community` option from the style context menu in the left sidebar. [Video: share-style-publish.mp4] ## Privacy and Security [#privacy-and-security] * **Private by Default**: All your workflows are private unless you explicitly choose to share them. * **API Key Security**: API keys are *never* included in shared links or exported files. * **Review Before Sharing**: Always check your workflow for any sensitive information before creating a public link or template. ## What's Next? [#whats-next] - [Templates](https://docs.fuser.studio/docs/interface/templates.md): Turn one of your flows into a public template anyone can clone. - [Building Flows](https://docs.fuser.studio/docs/interface/flows.md): Build something worth sharing. - [Interface Guide](https://docs.fuser.studio/docs/interface/interface.md): The panels and tools that support collaboration. - [Troubleshooting](https://docs.fuser.studio/docs/interface/troubleshooting.md): Solve common sharing and collaboration issues. # Sockets & Connections (https://docs.fuser.studio/docs/interface/sockets) Earlier, we learned about [Node Properties](https://docs.fuser.studio/docs/interface/nodes.md#node-properties) and how they are the internal settings and parameters for a node. Every property in Fuser has an associated **Socket**. **Sockets** are the colored circles on the sides of nodes that allow data from one property to flow to another node's property. You can think of them as "ports", passing and receiving data. Understanding how they work is the key to building powerful and effective workflows in Fuser. ![Sockets and Connections](/sockets.jpg) ## What Are Sockets? [#what-are-sockets] **Sockets** are the small colored circles on the sides of nodes. They serve as a way to connect input and output properties between nodes. * **Input Sockets** are on the **left side** of a node and **receive** property data from other nodes. * **Output Sockets** are on the **right side** of a node and **send** data to properties of other nodes. This design ensures that data always flows from **left to right**, making your workflows easy to read and understand. > [!NOTE] Socket Tooltips > > Hover over a socket to see a detailed description of the property it is connected to, including the type of data it handles, and the default value. > > [Video: sockets-tooltips.mp4] ## Socket Types by Color [#socket-types-by-color] The color of a socket tells you what type of data it handles. This visual system helps you quickly identify compatible connections. * **Text**: For prompts, captions, and any kind of text. * **Image**: For images in `PNG`, `JPG`, `WebP`, or `GIF` format. * **Video**: For `MP4` or `WebM` video files. * **Audio**: For `MP3` or `WAV` audio files. * **3D**: For `GLB` or `GLTF` 3D models. * **Style**: For custom AI training styles (LoRAs). * **Number**: For numeric values. * **Generic**: Can handle various or unknown data types. > [!NOTE] Socket Compatibility > > You can only connect sockets of compatible types. The colors make it easy to see what connects to what! ## Socket Shapes [#socket-shapes] ![Socket Shapes](/sockets-shapes.jpg) The shape of a socket tells you **how many connections it can handle**. This visual system helps you quickly identify compatible connections. * **Circle (Single)**: Can handle only one connection at a time. * **Oval (Multiple)**: Can handle multiple connections at once. ## Input Passthrough [#input-passthrough] Sometimes you want to use the same value for multiple properties, across different nodes. For example, you might want to use the same prompt for multiple nodes. In this case, you can use a **Passthrough** socket. Passthrough sockets allow you to pipe **Inputs** to other nodes. They are indicated by a **triangle** shape, and are a powerful way to create **chains** of nodes that share the same properties. This allows you to update a property in one node, and have it automatically update in all connected nodes. * **Triangle**: Indicates the property that is passed through supports **single** connections. * **Line + Triangle**: Indicates the property that is passed through supports **multiple** connections. [Video: sockets-passthrough.mp4] In the example above, the right-most **Flux Dev** image generator node is connected to the one on its left via three passthrough sockets: **Prompt**, **Style**, and **Seed**. This means that right-most node will use the same prompt, style, and seed as the one on its left. Using passthroughs, we can quickly change the **Style** and have the changes propagate to all connected nodes. > [!NOTE] Passthrough Opacity > > To ensure clarity and reduce visual clutter, Passthrough sockets that are not connected are slightly **transparent** by default. Hover over the socket to change them from to for full visibility. ## Creating Connections [#creating-connections] There are two primary ways to connect nodes. ### 1. Quick Connect (Drag to Empty Space) [#1-quick-connect-drag-to-empty-space] 1. **Click and drag** from a socket on the side of a node. 2. **Release the mouse button** over an empty part of the canvas. 3. The **Quick Connect** menu will appear, showing you a list of all the compatible nodes you can connect to. This is the best way to discover new nodes and build workflows quickly. [Video: sockets-connecting.mp4] > [!NOTE] Quick Connect > > The Quick Connect menu shows you **all the compatible properties** of the nodes that you can connect to. It supports all property types, including **Inputs**, **Outputs**, and **Passthrough** properties, as well as **single** and **multiple** connections. > > It also shows you the name of the node, property, and the type of property you are connecting to. ### 2. Drag from Socket to Socket [#2-drag-from-socket-to-socket] 1. **Click and drag** from the socket. 2. **Drag directly** to a compatible socket on another node. 3. Release to create the connection. This method is faster when you already know exactly which nodes you want to connect. ## Advanced Connection Patterns [#advanced-connection-patterns] ### One-to-Many [#one-to-many] Connect a single output socket to multiple input sockets. This is perfect for A/B testing different models or prompts with the same source data. ![One-to-Many](/sockets-one-to-many.jpg) ### Many-to-One [#many-to-one] Some properties indicated by can accept multiple inputs at the same time. This is useful for processing many items at the same time, for example, to analyze multiple images at once using an LLM to derive the unique characteristics of each image. ![Many-to-One](/sockets-many-to-one.jpg) ## Deleting Connections [#deleting-connections] To delete a connection, simply click on the edge to select it, then press the `Delete` or `Backspace` key on your keyboard. You can also **double-click** on the connection to delete it. ## Connection States [#connection-states] Connections have different visuals indicators, depending on the state they are currently in. * **Default**: The connection is active and ready to be used, indicated by a **gray** line. * **Selected**: The connection is selected, ready to be deleted, indicated by a **white** line. * **Processing**: The connection is currently processing data from the source node to the destination node, indicated by an **animated glow**. [Video: sockets-connection-states.mp4] ## Automatic Updates [#automatic-updates] When the data in a node changes, the new data automatically flows to all connected downstream nodes, which causes properties to update. This is a powerful way to create dynamic workflows. [Video: sockets-updates.mp4] ## What's Next? [#whats-next] Now that you understand how to connect nodes, you can start building more complex systems. 1. **[Building Flows](https://docs.fuser.studio/docs/interface/flows.md)** - Combine nodes and connections into complete workflows. 2. **[Nodes Reference](https://docs.fuser.studio/docs/nodes.md)** - Explore all the available nodes and their sockets. 3. **[Troubleshooting](https://docs.fuser.studio/docs/interface/troubleshooting.md)** - Learn how to fix common connection issues. 4. **[Interface Guide](https://docs.fuser.studio/docs/interface/interface.md)** - Master the Fuser workspace. # Style Training (https://docs.fuser.studio/docs/interface/styles) Learn how to use and train Styles to create consistent visual styles, characters, and objects across your image generations. This guide covers everything from using existing styles to training your own custom models. ![Styles Overview](/styles-overview.jpg) ## What Are Styles? [#what-are-styles] **Styles** in Fuser are custom AI models — specifically **LoRAs** ([Low-Rank Adaptations](https://en.wikipedia.org/wiki/Fine-tuning_\(deep_learning\)#Low-rank_adaptation), small fine-tunes layered on top of a base image model) — that modify the output of an image generation node. They let you reproduce a **consistent look**, **character**, or **artistic effect** without rewriting the prompt every time. Fuser supports three style training methods: *** ### Styles [#-styles] Understand and reproduce a specific artistic style, visual theme, or overall aesthetic from your reference images. This includes **artistic techniques**, **color palettes**, **composition patterns**, **brushwork styles**, **lighting** approaches, and visual **moods**. ![Style Type](/styles-style.jpg) Style training is perfect for maintaining consistent branding across marketing materials, creating artwork in the manner of specific art movements, or developing a signature visual identity for your projects. *** ### Objects [#-objects] Recognize and generate a specific object or type of object based on the provided reference images. This training focuses on **shape**, **form**, **materials**, **textures**, and **distinctive features** that make an object recognizable across different contexts and angles. ![Style Example](/style-object.jpg) Objects are excellent for creating consistent product images, maintaining brand consistency across product lines, or generating variations of existing designs. Popular applications include industrial equipment, consumer products, toy designs, automotive components, furniture pieces, and architectural elements. *** ### Portraits [#-portraits] Capture the likeness of a specific person for generating portraits or images featuring them in various contexts, poses, and settings. This training learns **facial features**, **expressions**, bone structure, and other **distinctive characteristics** that make a person recognizable. ![Object Example](/style-portrait.jpg) Portrait training enables you to create professional headshots, lifestyle photography, character illustrations, or place the subject in fictional scenarios while maintaining their authentic appearance. This is particularly valuable for content creators, marketers creating personalized campaigns, authors visualizing characters, or anyone needing consistent representation of specific individuals across multiple images. > [!WARNING] Consent required for portrait training > > When you train a style on someone's likeness, you need explicit consent from every person depicted. This is both a legal and an ethical requirement — the people in the references should understand how their images will be used and agree to it. > > Fuser only permits portrait training on consented references. Styles found in violation are removed. > > If you're unsure how to ask, contact the subject and explain plainly what you'll use the images for, then get their permission before training. ## Using Styles [#using-styles] Fuser comes with a library of official and community-made styles that you can use to generate images. You can also train your own styles for that unique look you're after. ### Open the Styles library [#open-the-styles-library] Click the **Styles** tab in the left sidebar to open the **Styles Library**. ### Add a style to canvas [#add-a-style-to-canvas] Find the style you want to use and click `Add to Canvas`. ### Locate your new Style Node [#locate-your-new-style-node] Your selected style appears on the canvas as a new Style Node. ### Connect it to image generation [#connect-it-to-image-generation] Connect the style to an existing **Flux Dev** node, or quickly add a new one with [Quick Connect](https://docs.fuser.studio/docs/interface/sockets.md#1-quick-connect-drag-to-empty-space). ### Generate styled images [#generate-styled-images] You are now ready to generate styled images with Flux Dev. [Video: styles-use.mp4] > [!NOTE] Prompts Are Not Required but Recommended > > When using styles, you don't need to include a prompt for your generation. However using prompts in combination with styles is highly recommended to get the best results and guide the generation with your creative direction. > [!NOTE] Trigger Words Are Managed for You > > Fuser handles trigger words for you. A unique trigger word is generated when the style is initialized, then automatically appended to your prompt at generation time on supported nodes (Flux Dev and Flux Krea Dev). You don't need to type the trigger word into your prompt yourself. ### Using Styles with Other Image Models [#using-styles-with-other-image-models] While styles are currently only compatible with Flux Dev, we understand you may want to use them with other image models like GPT Image, Gemini, Ideogram, and Recraft. To help you achieve consistent results across different models, each style includes a **Master Prompt** socket. The **Master Prompt** provides a highly accurate and descriptive text-based representation of the style that can be used with any image model and additionally enhanced by LLMs. This helps you maintain visual consistency even when working with models that don't directly support styles. ![Master Prompt](/styles-master-prompt.jpg) In the example above, even though only Flux Dev directly supports styles, the Master Prompt enables us to achieve a consistent visual look across Flux Kontext, Gemini, GPT Image, Recraft, and Ideogram. Each generated image reflects qualities and characteristics of the style, demonstrating how the Master Prompt bridges the gap between style nodes and models that don't natively support them, allowing us to maintain brand or artistic consistency, regardless of which image model we use. ## Training Considerations [#training-considerations] If you can't find a style that fits your needs, you can always train your own. Style training lets you teach the AI a new concept, such as a specific person's face, a product, or a unique artistic and aesthetic style. ### When to Train a Style [#when-to-train-a-style] Since training styles is a **time-consuming** and **costly** process, it's important to know when to train a style. More often than not, you can get the results you want by crafting and engineering a great prompt, especially using reference images. An example of this can be seen in the [Many to One](https://docs.fuser.studio/docs/interface/sockets.md#many-to-one) section of the [Sockets & Connections](https://docs.fuser.studio/docs/interface/sockets.md) guide. However, while prompt engineering and reference images can go a long way, this approach doesn't always scale, especially when you need to maintain: * **Character Consistency**: To generate images of the same person or character in different scenes. * **Unique Artistic Styles**: To reproduce a personal art style or a very specific aesthetic. * **Brand Identity**: To create images that adhere to a specific visual guidelines. * **Product Photos**: To generate consistent images of a specific product. ### Preparing Your Training Data [#preparing-your-training-data] The quality of your training data is the most important factor for a successful style. * **Image Count**: You'll need between 5-15 high-quality example images of your concept. * **Consistency**: All images should clearly feature the same subject or style. * **Variety**: Provide images with different angles, lighting, and backgrounds to help the model generalize. * **Image Quality**: Use high-resolution images that are well-lit and in sharp focus. ## Training Your Own Style [#training-your-own-style] Training your own style is a powerful way to create a unique visual identity for your projects. It allows you to capture and reproduce specific artistic styles, objects, or characters, ensuring consistent visual consistency across your creations. ### Open the training panel [#open-the-training-panel] Go to the **Styles** tab in the left sidebar and click `Create a Style`. The **Style Training Panel** opens on the right. ### Configure the style [#configure-the-style] Pick a type — **Style**, **Object**, or **Portrait** — depending on what you're training. Give the style a descriptive name that reflects its look or purpose. Toggle `Publish to Community` if you want to share it with other Fuser users. ### Add training images [#add-training-images] Drag and drop 5–15 high-quality images from your **Assets** or **Generations** library. They should clearly represent the qualities you want the style to learn — same subject across varied lighting, angles, and backgrounds. ### Start training [#start-training] Click `Start Training` to kick off the process. Follow progress in the **Styles** tab in the left sidebar. > [!NOTE] Training Time > > Training a style takes 1 to 5 minutes, depending on the size of your dataset and the complexity of the style. ### Use your new style [#use-your-new-style] Once training is complete, your style appears in your library and is ready to apply to any compatible image-generation node. [Video: styles-train.mp4] > [!NOTE] Publishing to Community > > Publishing your style to the community will make it available to all Fuser users. This is a great way to share your style with others and help them get started with their own projects. **To reward you for your contribution, community-published styles do not count toward your storage limit**. > > We automatically screen all community styles for quality and relevance. If your style does not meet our standards, it will remain private and only accessible to you. ## Troubleshooting Styles [#troubleshooting-styles] Although powerful, styles are not a magic bullet. There are a few things you can do to improve the quality of your training and generation: * **Provide a Good Prompt**: A good prompt is key to getting the best results. Try using a prompt that is specific to the style you're trying to achieve. You can always use the **Master Prompt** as a good starting point. [Video: styles-prompt.mp4]
Small improvement in the prompt can make a big difference in the results
* **Improve Your Dataset**: The most common cause of poor results is a low-quality or inconsistent dataset. Try adding more varied, high-quality images. * **Choose the Right Type**: Depending on what you're trying to achieve, you may want to choose the right type of style. For example, if you're trying to create a style for a specific person, you may want to choose a **Portrait** rather than a **Style** or **Object**. ## What's Next? [#whats-next] Now that you know how to work with styles, you can elevate your creative output. 1. **[Templates](https://docs.fuser.studio/docs/interface/templates.md)** - Explore templates that use advanced style blending. 2. **[Importing Data](https://docs.fuser.studio/docs/interface/importing-data.md)** - Learn more about preparing high-quality datasets. 3. **[Nodes Reference](https://docs.fuser.studio/docs/nodes.md)** - Find all the nodes that support style application. 4. **[Building Flows](https://docs.fuser.studio/docs/interface/flows.md)** - Integrate styles into your creative workflows. # Templates (https://docs.fuser.studio/docs/interface/templates) Templates are pre-built workflows designed to solve common problems and showcase best practices. They are the fastest way to get started with a new project and learn how Fuser works. ![Templates Overview](/templates-overview.jpg) ## Why Use Templates? [#why-use-templates] * **Learn Best Practices**: See how experienced users build efficient and effective flows. * **Save Time**: Start with a working solution instead of building from scratch. * **Discover New Ideas**: Explore creative and powerful capabilities you might not have considered. * **Ensure Quality**: Benefit from workflows that have already been tested and optimized. * **Learn Prompts**: See how others use prompts to get the best results from AI models. ## Using Templates [#using-templates] [Video: templates-demo.mp4] ### Finding and Using a Template [#finding-and-using-a-template] 1. Click the **Templates** tab in the left sidebar to open the library. 2. Locate the template you want to use. 3. Click the **"Remix"** button to create a copy in your workspace. > [!NOTE] Remixing Multiple Templates > > You can remix as many templates as you want in the same project. Simply click the **"Remix"** button for each template you want to use and they will be added to the canvas. > > The only limitation, is that you can not remix a template in the project it was created in. ### Customizing a Template [#customizing-a-template] Templates are designed to be starting points. Once you open one, you should: * **Review the nodes** to understand the workflow logic. * **Connect your API keys** so that executable nodes can run. * **Replace sample inputs** with your own content. * **Adjust parameters** to fit your specific needs. > [!NOTE] Start Small > > When customizing a template, test it with a simple input first to ensure you understand how it works before running it on more complex or costly tasks. ## Creating Your Own Templates [#creating-your-own-templates] When you build a workflow you're proud of, save it as a template to reuse later or share with the community. 1. Finalize your workflow and click on the `Share` button in the top right corner of the canvas. 2. Turn on `Share a Link` to make your workflow public. 3. Once your workflow is public, you will see additional options appear in the share panel. 4. Turn on `Allow Remixing` to allow others to remix your workflow. 5. Give your template a name and a clear description. 6. Most importantly, **make sure to add a preview image** to your template. You can either drag and drop an image from your Assets or Generations library or use the `Generate Preview` button to generate a preview from your workflow. [Video: templates-create.mp4] > [!WARNING] Preview Image, Title, and Description > > For a template to surface in the templates gallery, it needs **all three** of: a preview image, a clear title, and a description. Templates missing any of these — or where the preview image doesn't reflect the workflow — are filtered out of the gallery to keep the browsing experience useful for new users. ## Confirming a Template [#confirming-a-template] Once you've created a template, you can confirm that it was successfully created by opening the templates gallery from the left sidebar. You should see your template in the list. You should also see a badge next to your project name in the left sidebar. Hovering over the badge brings up a tooltip with the text `Public + Remixable`. [Video: templates-conf.mp4] > [!NOTE] Updating a Template > > You can always update your template by openning the original template project in the editor. Make your changes, add or modify the nodes and functionality, and if needed, update the preview image, title, and description in the share panel. ## Template Design Principles [#template-design-principles] * **Be Clear**: Use descriptive names for your nodes and add text nodes to explain complex parts of the flow. * **Be Modular**: Design your workflow so that it's easy to understand and modify. * **Be Robust**: Think about potential issues and add fallback options where possible. * **Be Generous**: Add helpful documentation and comments to your nodes to help others understand how to use them. ## Template Privacy [#template-privacy] When you share a template, it becomes publicly accessible. This has a few privacy implications that you should be aware of: * Anyone who remixes your template can see all the **node settings, generation history, and chat context** that are present at the time of publishing your template. * Past nodes and those deleted, including their generation history and chat context, are not visible to others. * **Private Style nodes** used in the template can't be accessed by others, however the Style node (including the preview image and master prompt) will be visible to others. > [!NOTE] Always Review > > Before sharing a template, review your nodes to ensure you're comfortable sharing their settings and chat history. > [!WARNING] Publish/Unpublish a Template > > You can make your template public or private anytime and by toggling the `Allow Remixing` option in the share panel. > > **Important:** When making previously public templates private, remember that users who already remixed your template before making it private will still have access to the version they remixed, as long as they have not deleted the nodes from the template. ## What's Next? [#whats-next] Now that you know how to leverage templates, you can accelerate your creative process. 1. **[Sharing & Collaboration](https://docs.fuser.studio/docs/interface/sharing.md)** - Share your custom templates with the world. 2. **[Building Flows](https://docs.fuser.studio/docs/interface/flows.md)** - Learn the fundamentals of building the flows that become templates. 3. **[AI Providers](https://docs.fuser.studio/docs/interface/providers.md)** - Understand the services that power templates. 4. **[Interface Guide](https://docs.fuser.studio/docs/interface/interface.md)** - Master the tools to build and use templates. # Troubleshooting (https://docs.fuser.studio/docs/interface/troubleshooting) This guide helps you diagnose and fix common issues in Fuser. When something isn't working, start with these quick checks to identify the problem. ## Quick Diagnostics [#quick-diagnostics] * **Node Borders**: A **red border** means a node has an error. An **animated malachite border** means it's processing. * **Connections**: A **dashed or red line** indicates a connection problem. * **API Keys**: Check **Settings → Providers**. Are all your required provider keys configured and valid? * **Provider Status**: Check the status pages for your AI providers (e.g., Fal, OpenAI) to see if they are having an outage. ## Errors by name [#errors-by-name] Fuser surfaces errors with stable, named codes so you can search for the right fix. The most common ones: | You see | What it means | Fix | | --------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **Insufficient credits** | Your personal balance — or your workspace's shared pool — hit zero before the request could run. Active node did not execute. | Top up from [Billing & Plans](https://docs.fuser.studio/docs/interface/billing.md#credits) (personal) or [Workspace Billing](https://docs.fuser.studio/docs/teams/workspace-billing.md#workspace-credits) (workspace). If Auto-recharge is on, also verify your card is valid. | | **Spend limit exceeded** | You're a workspace member and you've hit your monthly cap. The pool may still have credits — they're just gated behind your individual cap. | Ask a workspace **Admin** or **Owner** to raise your limit in **Workspace Billing → Spend Limits**. Otherwise the cap resets on the 1st of the next calendar month (UTC). | | **Quota exceeded** | A workspace-level rate or storage quota tied to the plan was exceeded. | Check **Workspace Billing**. If the workspace is on a Free / archived plan after cancellation, re-subscribe to restore quotas. | | **Storage limit exceeded** | Your or your workspace's media storage is full. | Delete unused assets in the **Assets** library, or upgrade the plan. | | **Forbidden** | The endpoint refused the action — typically because the workspace tier doesn't include the feature, the workspace is past its 7-day grace period, or your role doesn't permit the action. | Confirm the workspace is on **Teams** with an active subscription. If you were just demoted, your role can take up to 5 minutes to propagate — refresh and try again. | | **Not found** | The project, folder, team, share, or member you referenced doesn't exist (or you can't see it). | Refresh — someone else may have moved or deleted it. If you know the resource exists, ask the owner to confirm your access via [Workspace Settings → Access Audit](https://docs.fuser.studio/docs/teams/workspace-settings.md#access-audit). | | **Validation error** | The input you submitted didn't match the expected shape — wrong format, missing field, value out of range. | The error message names the field and the rule. Common cases: invalid hex color, canvas dimension outside 1–4095, file type the server doesn't accept. | | **Resource already exists** | You tried to create something with a name or slug that's taken (workspace slug, team name, member invite). | Pick a different name. For workspace slugs, lowercase letters / numbers / hyphens, no leading or trailing hyphen. | | **Execution failed** | The provider returned an error, the model rejected the input, or the inference timed out. | Re-execute. Check provider status. Shorten the prompt or simplify the inputs if it persists. | | **Fetch failed** | A network call (typically to a provider) failed. | Check your internet, the provider's status page, and your API key validity. Re-execute. | | **Redemption rate limited** | You tried to redeem too many perk codes too quickly. | Wait a few seconds and try again. | | **Internal error** | Something unexpected on Fuser's side. | Refresh and re-execute. If it keeps happening, file a [bug report](#reporting-a-bug) — include the error and what you were doing. | ## Common Problems & Solutions [#common-problems--solutions] ### Node Execution Issues [#node-execution-issues] * **Check API Key**: Does the node require an API key? Ensure it's correctly set up in your settings and that your provider account has enough credits. * **Check Credits**: Open **Settings → Billing & Plans** (personal) or **Workspace Billing** (in a workspace). If you see **Insufficient credits**, that's the issue — top up. * **Check Inputs**: Are all required input sockets (sockets without a default value) connected? Is the input data in the correct format? * **Check Rate Limits**: Have you made too many requests to the provider in a short period? Wait a few minutes and try again. * **Check Provider-Specific Errors**: The AI model itself might have rejected the input. Look for messages about prompt length, content filters, or unsupported features. If you have Auto-recharge enabled, the most common cause is that your card was declined or removed. Auto-recharge silently stops when this happens — your balance ticks toward zero on the next request. * Open **Billing & Plans → Default Payment Method**. If the card is missing or expired, add or update it. * After fixing the card, re-enable Auto-recharge if it shows as off. ### Connection Problems [#connection-problems] * **Check Compatibility**: Data flows from an **output** socket (right side) to an **input** socket (left side). You can only connect sockets of compatible data types (e.g., matching colors). * **Check Node State**: You cannot connect to a node that is currently executing. Wait for it to finish processing. * **Check for Errors Upstream**: A single error in one node will stop the entire downstream flow. Look for a node with a red border and fix the issue there first. * **Try Manual Execution**: Select the node that isn't updating and click the **Execute** button (▶️) in the toolbar to force it and its dependencies to run. ### Performance Issues [#performance-issues] * **Check File Sizes**: Large media files (>50MB) can cause performance problems. Try optimizing or resizing your media before importing. * **Simplify Your Workflow**: Very complex flows with hundreds of nodes can slow down the interface. Consider breaking your work into smaller, more focused flows. * **Check Browser**: Ensure you are on the latest version of a modern browser like Chrome or Firefox. Close unnecessary tabs to free up memory. ## Prevention & Best Practices [#prevention--best-practices] * **Test Small**: Before running a complex or expensive workflow, test the logic with a simple, low-cost input. * **Document Your Work**: Use text nodes to leave notes for yourself or your team about how a workflow is supposed to function. * **Save Regularly**: Fuser saves automatically, but creating named versions of important workflows is a good practice. * **Monitor Credits**: Keep an eye on your credit balance with your AI providers to avoid interruptions. ## Reporting a bug [#reporting-a-bug] Fuser has a built-in **Bug Report** dialog. Open it from the help menu and describe what you saw, what you expected, and what you were doing when it happened. The report is sent to the Fuser team along with non-sensitive context about your session — no canvas content, no API keys, no project data is included. ## Getting More Help [#getting-more-help] If your issue isn't a bug to report, the Fuser community is the best place to get help. * **Join our Discord**: For real-time help from the community and the Fuser team. * **Check GitHub Issues**: See if your issue has already been reported. ## What's Next? [#whats-next] After resolving your issues, get back to building. 1. **[Quick Start](https://docs.fuser.studio/docs/interface/quick-start.md)** - Return to the basics and build a simple flow. 2. **[Building Flows](https://docs.fuser.studio/docs/interface/flows.md)** - Apply what you've learned to create more robust workflows. 3. **[Templates](https://docs.fuser.studio/docs/interface/templates.md)** - Use a tested, reliable template to avoid common issues. # ElevenLabs SFX (https://docs.fuser.studio/docs/nodes/audio/elevenlabs-sfx) _Provided by [Fal](https://fal.ai) — [Learn More](https://fal.ai/models/fal-ai/elevenlabs/sound-effects/v2)._ ## Inputs [#inputs] - **Prompt** (`textarea`) — The text describing the sound effect to generate. - **Duration** (`number`) — Duration in seconds (0.5-22). Leave empty to let the model pick the optimal length from the prompt. Optional: `true` • Minimum: `0.5` • Maximum: `22` - **Prompt Influence** (`slider`) — How closely to follow the prompt (0-1). Higher values mean less variation. Optional: `true` • Default: `0.3` • Minimum: `0` • Maximum: `1` - **Output Format** (`dropdown`) — Output format of the generated audio, as codec_sample_rate_bitrate. Optional: `true` • Default: `mp3_44100_128` • Accepts: `MP3 44.1kHz 128kbps`, `MP3 44.1kHz 192kbps`, `MP3 44.1kHz 64kbps`, `Opus 48kHz 128kbps`, `PCM 44.1kHz` ## Outputs [#outputs] - **Audio** (`audio`) — The generated sound effect audio file. # ElevenLabs TTS (https://docs.fuser.studio/docs/nodes/audio/elevenlabs-tts) _Provided by [Fal](https://fal.ai) — [Learn More](https://fal.ai/models/fal-ai/elevenlabs/tts/eleven-v3)._ ## Inputs [#inputs] - **Text** (`textarea`) — The text to convert to speech. - **Voice** (`dropdown`) — The voice to use for speech generation. Optional: `true` • Default: `Rachel` • Accepts: `Rachel`, `Aria`, `Roger`, `Sarah`, `Laura`, `Charlie`, `George`, `Callum`, `River`, `Liam`, `Charlotte`, `Alice`, `Matilda`, `Will`, `Jessica`, `Eric`, `Chris`, `Brian`, `Daniel`, `Lily`, `Bill` - **Stability** (`slider`) — Voice stability. Lower values are more expressive and variable, higher values are more consistent. Optional: `true` • Default: `0.5` • Minimum: `0` • Maximum: `1` - **Language Code** (`text`) — Optional ISO 639-1 language code (for example "en" or "es") to enforce a language for the model. Optional: `true` - **Text Normalization** (`dropdown`) — Control how numbers, dates, and symbols are spelled out. Auto lets the model decide. Optional: `true` • Default: `auto` • Accepts: `Auto`, `On`, `Off` ## Outputs [#outputs] - **Audio** (`audio`) — The generated speech audio file. # F5 TTS (https://docs.fuser.studio/docs/nodes/audio/f5-tts) _Provided by [Fal](https://fal.ai) — [Learn More](https://fal.ai/models/fal-ai/f5-tts)._ ## Inputs [#inputs] - **Text** (`textarea`) — The text to be converted to speech. - **Reference Audio** (`audio`) — A short audio clip of the voice you want to clone. - **Reference Text** (`textarea`) — The text being spoken in the reference audio. Providing this will dramatically improve the speed of generation. Optional: `true` - **Model Type** (`dropdown`) — The TTS model to use for voice synthesis. Optional: `true` • Default: `F5-TTS` • Accepts: `F5-TTS (Better quality, slower)`, `E2-TTS (Faster, lower quality)` - **Remove Silence** (`toggle`) — Automatically remove silence from the generated audio. Optional: `true` • Default: `true` ## Outputs [#outputs] - **Audio** (`audio`) — The generated audio file with the cloned voice. # Minimax Music (https://docs.fuser.studio/docs/nodes/audio/minimax-music) _Provided by [Fal](https://fal.ai) — [Learn More](https://fal.ai/models/fal-ai/minimax-music)._ ## Inputs [#inputs] - **Prompt** (`textarea`) — Lyrics with optional formatting. You can use a newline to separate each line of lyrics. You can use two newlines to add a pause between lines. You can use double hash marks (##) at the beginning and end of the lyrics to add accompaniment. Maximum 600 characters. - **Reference Audio** (`audio`) — Reference song, should contain music and vocals. Must be a .wav or .mp3 file longer than 15 seconds. ## Outputs [#outputs] - **Generated Song** (`audio`) — The generated song from the model. # MMAudio (https://docs.fuser.studio/docs/nodes/audio/mmaudio) _Provided by [Fal](https://fal.ai) — [Learn More](https://fal.ai/models/fal-ai/mmaudio-v2/text-to-audio)._ ## Inputs [#inputs] - **Prompt** (`textarea`) — Description of the audio you want to generate - **Video** (`video`) — Video to generate audio from Optional: `true` - **Negative Prompt** (`textarea`) — Description of sounds to avoid in the generated audio Optional: `true` • Default: `noisy, low quality, low volume` - **Duration** (`slider`) — Length of audio in seconds (between 1 and 30) Optional: `true` • Default: `5` • Minimum: `1` • Maximum: `30` - **Seed** (`seed`) — Random seed for reproducible results. Optional: `true` • Default: `1809` - **Number of Steps** (`slider`) — Number of steps for the audio generation Optional: `true` • Default: `25` • Minimum: `4` • Maximum: `50` - **CFG Scale** (`slider`) — The strength of Classifier Free Guidance. Optional: `true` • Default: `4.5` • Minimum: `0.1` • Maximum: `20` - **Mask Away Clip** (`toggle`) — Whether to mask away the clip. Optional: `true` • Default: `false` ## Outputs [#outputs] - **Audio** (`audio`) — The generated audio file Optional: `true` - **Video** (`video`) — The generated video file Optional: `true` # Whisper (https://docs.fuser.studio/docs/nodes/audio/whisper) _Provided by [Fal](https://fal.ai) — [Learn More](https://fal.ai/models/fal-ai/wizper)._ ## Inputs [#inputs] - **Audio** (`audio`) — The audio file to transcribe. - **Task** (`dropdown`) — Choose whether to transcribe the audio in its original language or translate it to English. Optional: `true` • Default: `transcribe` • Accepts: `Transcribe (keep original language)`, `Translate to English` - **Language** (`dropdown`) — Language of the audio. Leave empty for automatic detection. If translate is selected as the task, the audio will be translated to English, regardless of the language selected. Optional: `true` • Default: `` • Accepts: `Auto-detect`, `Afrikaans`, `Albanian`, `Amharic`, `Arabic`, `Armenian`, `Assamese`, `Azerbaijani`, `Bashkir`, `Basque`, `Belarusian`, `Bengali`, `Bosnian`, `Breton`, `Bulgarian`, `Burmese`, `Catalan`, `Chinese`, `Croatian`, `Czech`, `Danish`, `Dutch`, `English`, `Estonian`, `Faroese`, `Finnish`, `French`, `Galician`, `Georgian`, `German`, `Greek`, `Gujarati`, `Haitian Creole`, `Hausa`, `Hawaiian`, `Hebrew`, `Hindi`, `Hungarian`, `Icelandic`, `Indonesian`, `Italian`, `Japanese`, `Javanese`, `Kannada`, `Kazakh`, `Khmer`, `Korean`, `Lao`, `Latin`, `Latvian`, `Lingala`, `Lithuanian`, `Luxembourgish`, `Macedonian`, `Malagasy`, `Malay`, `Malayalam`, `Maltese`, `Maori`, `Marathi`, `Mongolian`, `Nepali`, `Norwegian`, `Norwegian Nynorsk`, `Occitan`, `Pashto`, `Persian`, `Polish`, `Portuguese`, `Punjabi`, `Romanian`, `Russian`, `Sanskrit`, `Serbian`, `Shona`, `Sindhi`, `Sinhala`, `Slovak`, `Slovenian`, `Somali`, `Spanish`, `Sundanese`, `Swahili`, `Swedish`, `Tagalog`, `Tajik`, `Tamil`, `Tatar`, `Telugu`, `Tibetan`, `Turkish`, `Ukrainian`, `Urdu`, `Uzbek`, `Vietnamese`, `Welsh`, `Yiddish`, `Yoruba` ## Outputs [#outputs] - **Transcript** (`textarea`) — The transcribed text from the audio file. # Creative Code (https://docs.fuser.studio/docs/nodes/code/creative-code) ## Inputs [#inputs] - **Library** (`dropdown`) — The JavaScript library to use for code generation. Optional: `true` • Default: `three` • Accepts: `Canvas 2D`, `p5.js`, `Three.js`, `Chart.js` - **Prompt** (`textarea`) — Describe what you want to create. The LLM will generate code for you. Optional: `true` - **Attachments** (`generic`) _(accepts multiple)_ — Connect images, videos, audio, or text to use in the sketch. Optional: `true` - **Code In** (`code`) — Incoming code from another node Optional: `true` ## Outputs [#outputs] - **Prompt** (`textarea`) — Pass prompt through Optional: `true` - **Attachments** (`generic`) _(accepts multiple)_ — Pass attachments through Optional: `true` - **Code** (`code`) — Code output for downstream nodes Optional: `true` # Background Remover (https://docs.fuser.studio/docs/nodes/image/background-remover) _Provided by [Fal](https://fal.ai) — [Learn More](https://fal.ai/models/fal-ai/bria/background/remove)._ ## Inputs [#inputs] - **Image** (`image`) — The image to remove the background from. ## Outputs [#outputs] - **Processed Image** (`image`) — The image with background removed (transparent PNG). # Background Replacer (https://docs.fuser.studio/docs/nodes/image/background-replacer) _Provided by [Fal](https://fal.ai) — [Learn More](https://fal.ai/models/fal-ai/bria/background/replace)._ ## Inputs [#inputs] - **Image** (`image`) — The image to replace the background in. - **Reference Image** (`image`) — Optional reference image to base the new background on. Use either this or the text prompt. Optional: `true` - **Background Prompt** (`textarea`) — Text description of the background to generate. Use either this or a reference image. Optional: `true` - **Negative Prompt** (`textarea`) — Elements to avoid in the generated background. Optional: `true` • Default: `` - **Refine Prompt** (`toggle`) — Whether to automatically refine the prompt for better results. Optional: `true` • Default: `true` - **Fast Mode** (`toggle`) — Whether to use the fast model for quicker results. Optional: `true` • Default: `true` - **Seed** (`seed`) — The same seed and prompt will output the same image every time. Optional: `true` • Default: `37460` • Minimum: `0` • Maximum: `65535` ## Outputs [#outputs] - **Generated Image** (`image`) — The image with replaced background. # Bria Product Shot (https://docs.fuser.studio/docs/nodes/image/bria-product-shot) _Provided by [Fal](https://fal.ai) — [Learn More](https://fal.ai/models/fal-ai/bria/product-shot)._ ## Inputs [#inputs] - **Product Image** (`image`) — The product image to place in a lifestyle shot. - **Reference Image** (`image`) — Optional reference image to use for generating the new scene or background. Use either this or Scene Description. Optional: `true` - **Scene Description** (`textarea`) — Text description of the new scene or background for the provided product shot. Optional: `true` - **Optimize Description** (`toggle`) — Whether to optimize the scene description. Optional: `true` • Default: `true` - **Fast Mode** (`toggle`) — Whether to use the fast model for quicker results. Optional: `true` • Default: `true` - **Original Quality** (`toggle`) — For original placement: retain the original input image size if true. Optional: `true` • Default: `false` - **Placement Type** (`dropdown`) — How to position the product in the image. Optional: `true` • Default: `manual_placement` • Accepts: `Original Position`, `Automatic (10 Positions)`, `Manual Placement`, `Manual Padding` - **Manual Placement** (`dropdown`) — Specify which placement position to use if manual_placement is selected. Optional: `true` • Default: `bottom_center` • Accepts: `Upper Left`, `Upper Right`, `Bottom Left`, `Bottom Right`, `Right Center`, `Left Center`, `Upper Center`, `Bottom Center`, `Center Vertical`, `Center Horizontal` ## Outputs [#outputs] - **Generated Product Shot** (`image`) — The generated lifestyle product shot. # Canny Edge Detection (https://docs.fuser.studio/docs/nodes/image/canny-edge-detection) _Provided by [Fal](https://fal.ai) — [Learn More](https://fal.ai/models/fal-ai/workflowutils/canny)._ ## Inputs [#inputs] - **Image** (`image`) — The image to detect edges from. - **Low Threshold** (`number`) — Low threshold for the hysteresis procedure. Edges with a strength higher than the low threshold will appear in the output image, if there are strong edges nearby. Optional: `true` • Default: `100` - **High Threshold** (`number`) — High threshold for the hysteresis procedure. Edges with a strength higher than the high threshold will always appear as edges in the output image. Optional: `true` • Default: `200` ## Outputs [#outputs] - **Edge Image** (`image`) — The image with edges detected using the Canny algorithm. # Depth Anything V2 (https://docs.fuser.studio/docs/nodes/image/depth-anything-v2) _Provided by [Fal](https://fal.ai) — [Learn More](https://fal.ai/models/fal-ai/image-preprocessors/depth-anything/v2)._ ## Inputs [#inputs] - **Image** (`image`) — The image to generate a depth map from. ## Outputs [#outputs] - **Depth Map Image** (`image`) — The image with depth map. # ESRGAN Upscaler (https://docs.fuser.studio/docs/nodes/image/esrgan-upscaler) _Provided by [Fal](https://fal.ai) — [Learn More](https://fal.ai/models/fal-ai/esrgan)._ ## Inputs [#inputs] - **Image** (`image`) — The image to upscale. - **Scale Factor** (`slider`) — The factor by which to upscale the image. Optional: `true` • Default: `4` • Minimum: `1` • Maximum: `8` - **Tile Size** (`slider`) — Tile size for processing large images. Set to 0 for no tiling. Use 200-400 if you encounter memory issues. Optional: `true` • Default: `0` • Minimum: `0` • Maximum: `800` - **Face Enhancement** (`toggle`) — Enable special processing for enhancing faces in the image. Optional: `true` • Default: `false` - **Model** (`dropdown`) — The upscaling model to use. Different models are optimized for different types of images. Optional: `true` • Default: `RealESRGAN_x4plus` • Accepts: `Standard (4x upscaling)`, `Standard (2x upscaling)`, `Anime (4x upscaling)`, `V3 (4x upscaling)`, `WDN V3 (4x upscaling)`, `Anime V3 (4x upscaling)` - **Output Format** (`dropdown`) — The file format for the output image. Optional: `true` • Default: `jpeg` • Accepts: `PNG (lossless, transparent)`, `JPEG (smaller file size)` ## Outputs [#outputs] - **Upscaled Image** (`image`) — The resulting enhanced image. # Fashn Tryon (https://docs.fuser.studio/docs/nodes/image/fashn-tryon) _Provided by [Fal](https://fal.ai) — [Learn More](https://fal.ai/models/fashn/tryon)._ ## Inputs [#inputs] - **Model Image** (`image`) — The image of the model to try on. - **Garment Image** (`image`) — The image of the garment to try on. - **Category** (`dropdown`) — The category of the garment to try on. Optional: `true` • Default: `auto` • Accepts: `Auto`, `Tops`, `Bottoms`, `One-Pieces` - **Garment Photo Type** (`dropdown`) — The type of garment photo to optimize internal parameters for better performance. Optional: `true` • Default: `model` • Accepts: `Model`, `Flat-Lay`, `Auto` - **Mode** (`dropdown`) — Specifies the mode of operation. "performance" mode is faster but may sacrifice quality, "balanced" mode is a balance between speed and quality, and "quality" mode is slower but produces higher quality results. Optional: `true` • Default: `balanced` • Accepts: `Performance`, `Balanced`, `Quality` - **Block NSFW** (`toggle`) — Prevents the model from generating images that portray nudity, violence, and other unsafe content. Optional: `true` • Default: `false` - **Seed** (`seed`) — Sets random operations to a fixed state. Use the same seed to reproduce results with the same inputs, or different seed to force different results. Optional: `true` • Default: `6922` ## Outputs [#outputs] - **Generated Image** (`image`) — The generated image from the model. # Fast LCM Image Generator (https://docs.fuser.studio/docs/nodes/image/fast-lcm-image-generator) _Provided by [Fal](https://fal.ai) — [Learn More](https://fal.ai/models/fal-ai/fast-lcm-diffusion)._ ## Inputs [#inputs] - **Prompt** (`textarea`) — The prompt to use for generating the image. Be descriptive for best results. - **Negative Prompt** (`textarea`) — What to exclude from the image. Use it to address details you don't want. Optional: `true` - **Model** (`dropdown`) — The model to use for generation. Optional: `true` • Default: `stabilityai/stable-diffusion-xl-base-1.0` • Accepts: `flow.nodes.FalFastLcmNode.inputs.model_name.items.stabilityai/stable-diffusion-xl-base-1.0`, `SD v1.5 (Faster, lower quality)` - **Image Size** (`dropdown`) — The size of the generated image. Optional: `true` • Default: `square_hd` • Accepts: `Square HD`, `Square`, `Portrait 4:3`, `Portrait 16:9`, `Landscape 4:3`, `Landscape 16:9` - **Steps** (`slider`) — The number of inference steps to perform. Optional: `true` • Default: `6` • Minimum: `1` • Maximum: `20` - **CFG Scale** (`slider`) — How closely to follow the prompt (higher = more faithful). Optional: `true` • Default: `0` • Minimum: `0` • Maximum: `20` - **Seed** (`seed`) — The same seed and prompt will output the same image every time. Optional: `true` • Default: `55390` - **Expand Prompt** (`toggle`) — Automatically expand the prompt to include more details. Optional: `true` • Default: `true` ## Outputs [#outputs] - **Image** (`image`) — The generated image. # Fast SDXL (https://docs.fuser.studio/docs/nodes/image/fast-sdxl) _Provided by [Fal](https://fal.ai) — [Learn More](https://fal.ai/models/fal-ai/fast-sdxl)._ ## Inputs [#inputs] - **Prompt** (`textarea`) — Text description of the image to generate. Be as descriptive as possible for best results. - **Negative Prompt** (`textarea`) — Elements to avoid in the generated image (e.g., "blurry, low quality, distorted"). Optional: `true` • Default: `blurry, low quality, distorted` - **Image Size** (`dropdown`) — The dimensions of the output image. Optional: `true` • Default: `square_hd` • Accepts: `Square HD (1024x1024)`, `Square (512x512)`, `Portrait 4:3`, `Portrait 16:9`, `Landscape 4:3`, `Landscape 16:9` - **Inference Steps** (`slider`) — Higher values produce more refined images but take longer. Optional: `true` • Default: `25` • Minimum: `1` • Maximum: `50` - **Seed** (`seed`) — The same seed and prompt will output the same image every time. Optional: `true` • Default: `797222` - **Guidance Scale** (`slider`) — How closely to follow the prompt. Higher values stick closer to the prompt. Optional: `true` • Default: `7.5` • Minimum: `1` • Maximum: `20` - **Enable Safety Checker** (`toggle`) — Enable content filtering for generated images. Optional: `true` • Default: `false` - **Expand Prompt** (`toggle`) — Automatically enhance your prompt with additional details. Optional: `true` • Default: `true` ## Outputs [#outputs] - **Generated Image** (`image`) — The image generated from the text prompt. # Florence-2 Image Captioner (https://docs.fuser.studio/docs/nodes/image/florence-2-image-captioner) _Provided by [Fal](https://fal.ai) — [Learn More](https://fal.ai/models/fal-ai/florence-2-large/caption)._ ## Inputs [#inputs] - **Image** (`image`) — The image to generate a caption for. - **Detail Level** (`dropdown`) — The level of detail in the generated caption. Optional: `true` • Default: `detailed` • Accepts: `Basic (simple description)`, `Detailed (comprehensive description)`, `More Detailed (extensive information)` ## Outputs [#outputs] - **Caption** (`textarea`) — The generated caption for the image. # FLUX.1 [Dev] (https://docs.fuser.studio/docs/nodes/image/flux-1-dev) _Provided by [Fal](https://fal.ai) — [Learn More](https://fal.ai/models/fal-ai/flux/dev)._ ## Inputs [#inputs] - **Prompt** (`textarea`) — The prompt to generate an image from. Optional: `true` - **Image Prompt** (`image`) — The image to generate an image from. Optional: `true` - **Image Strength** (`slider`) — The higher the value, the more the original image is used, while lower values will prioritize the text prompt. Optional: `true` • Default: `0.95` • Minimum: `0` • Maximum: `1` - **Style** (`style`) — The style used for image generation. Optional: `true` - **Image Size** (`dropdown`) — The size of the generated image. Optional: `true` • Default: `square_hd` • Accepts: `Square HD`, `Square`, `Portrait 4:3`, `Portrait 16:9`, `Landscape 4:3`, `Landscape 16:9` - **Steps** (`slider`) — The number of inference steps to perform. Optional: `true` • Default: `28` • Minimum: `10` • Maximum: `50` - **Seed** (`seed`) — The same seed and prompt will output the same image every time. Optional: `true` • Default: `6460` - **CFG Scale** (`slider`) — Classifier Free Guidance controls how closely the generated image adheres to the text prompt you provide. Accepts values between 0 and 20. Optional: `true` • Default: `3.5` • Minimum: `0` • Maximum: `20` - **Block NSFW** (`toggle`) — Prevents the model from generating images that portray nudity, violence, and other unsafe content. Optional: `true` • Default: `false` ## Outputs [#outputs] - **Generated Image** (`image`) — The generated image from the model. # FLUX.1 Kontext (https://docs.fuser.studio/docs/nodes/image/flux-1-kontext) _Provided by [Fal](https://fal.ai) — [Learn More](https://fal.ai/models/fal-ai/flux-pro/kontext)._ ## Inputs [#inputs] - **Prompt** (`textarea`) — A textual prompt to guide image generation and modification. - **Images** (`image`) _(accepts multiple)_ — Images to edit or create variations from. You can use a maximum of 4 images to combine their features, or use a single image to edit or create variations from. Optional: `true` - **Aspect Ratio** (`dropdown`) — The aspect ratio of the generated image, applicable when only using text input. Optional: `true` • Default: `1:1` • Accepts: `1:1 Square`, `21:9 Landscape`, `16:9 Landscape`, `4:3 Landscape`, `3:4 Vertical`, `3:2 Landscape`, `2:3 Vertical` - **Seed** (`seed`) — The same seed and prompt will output the same image every time. Optional: `true` • Default: `619` - **CFG Scale** (`slider`) — Classifier Free Guidance controls how closely the generated image adheres to the text prompt you provide. Accepts values between 0 and 20. Optional: `true` • Default: `3.5` • Minimum: `0` • Maximum: `20` - **Model** (`dropdown`) — Kontext is available in two models: Pro and Max. Pro is the default model and is optimized for speed and quality, while Max comes with greatly improved prompt adherence, typography generation, and premium consistency, at double the cost of Pro. Optional: `true` • Default: `pro` • Accepts: `Pro`, `Max` - **Output Format** (`dropdown`) — The format of the generated image. Optional: `true` • Default: `jpeg` • Accepts: `JPEG`, `PNG` ## Outputs [#outputs] - **Generated Image** (`image`) — The generated image from the model. # FLUX.1 Krea [dev] (https://docs.fuser.studio/docs/nodes/image/flux-1-krea-dev) _Provided by [Fal](https://fal.ai) — [Learn More](https://fal.ai/models/krea/v2/large/text-to-image)._ ## Inputs [#inputs] - **Prompt** (`textarea`) — The prompt to generate an image from. Optional: `true` - **Image Prompt** (`image`) — The image to generate an image from. Optional: `true` - **Style Reference** (`image`) — A reference image that guides the style of the Krea 2 generation. Optional: `true` - **Image Strength** (`slider`) — The higher the value, the more the original image is used, while lower values will prioritize the text prompt. Optional: `true` • Default: `0.95` • Minimum: `0` • Maximum: `1` - **Model** (`dropdown`) — Choose Krea 2 for current text-to-image generation, or FLUX.1 Krea [dev] for older Flux Krea workflows. Optional: `true` • Default: `krea-2` • Accepts: `Krea 2`, `FLUX.1 Krea [dev]` - **Style** (`style`) — The style used for image generation. Optional: `true` - **Image Size** (`dropdown`) — The size of the generated image. Optional: `true` • Default: `square_hd` • Accepts: `Square HD`, `Square`, `Portrait 4:3`, `Portrait 16:9`, `Landscape 4:3`, `Landscape 16:9` - **Aspect Ratio** (`dropdown`) — The aspect ratio for Krea 2 generations. Optional: `true` • Default: `1:1` • Accepts: `1:1`, `4:3`, `3:2`, `16:9`, `2.35:1`, `4:5`, `2:3`, `9:16` - **Creativity** (`dropdown`) — Controls how loosely Krea 2 interprets the prompt. Optional: `true` • Default: `medium` • Accepts: `Raw`, `Low`, `Medium`, `High` - **Steps** (`slider`) — The number of inference steps to perform. Optional: `true` • Default: `28` • Minimum: `10` • Maximum: `50` - **Seed** (`seed`) — The same seed and prompt will output the same image every time. Optional: `true` • Default: `545` - **CFG Scale** (`slider`) — Controls how closely the generated image adheres to the text prompt you provide. Accepts values between 0 and 20. Optional: `true` • Default: `3.5` • Minimum: `0` • Maximum: `20` - **Block NSFW** (`toggle`) — Prevents the model from generating images that portray nudity, violence, and other unsafe content. Optional: `true` • Default: `false` ## Outputs [#outputs] - **Generated Image** (`image`) — The generated image from the model. # FLUX.2 (https://docs.fuser.studio/docs/nodes/image/flux-2) _Provided by [Fal](https://fal.ai) — [Learn More](https://bfl.ai/blog/flux-2)._ ## Inputs [#inputs] - **Prompt** (`textarea`) — The prompt to generate an image from. You can reference colors directly in the prompt (e.g. `#FF0000`), or directly reference fields (e.g. `@scene`, `@style`, `@camera`). You can also use the following JSON example to format your JSON prompt. ```json { "scene": "Post-apocalyptic survivor portrait", "subjects": [ { "type": "survivor", "description": "A lone individual with a dust-covered face.", "pose": "Looking directly at the camera.", "position": "foreground" } ], "style": "Gritty realism", "color_palette": [ "#5A4A40", "#8B7568", "#D3C0B0" ], "lighting": "Dramatic, harsh sunlight", "mood": "Hopeful resilience", "background": "A desolate, ruined urban landscape.", "composition": "Close-up, Dutch angle", "camera": { "angle": "Dutch angle", "distance": "Close-up", "focus": "Sharp focus on the survivor's face", "lens": "Prime lens", "f-number": "f/2.8", "ISO": 400 }, "effects": [ "Dust particles", "Halation around light sources", "Desaturated colors" ] } ``` - **Images** (`image`) _(accepts multiple)_ — Images to edit or create variations from. You can use a maximum of 3 images for [dev] model, 9 for [pro], and 10 for [flex] model to combine their features, or use a single image to edit or create variations from. Optional: `true` - **Image Size** (`dropdown`) — The size of the generated image. Optional: `true` • Default: `square` • Accepts: `Square (1:1)`, `Portrait 4:3`, `Portrait 16:9`, `Landscape 4:3`, `Landscape 16:9` - **Model Type** (`dropdown`) — The type of model to use. Optional: `true` • Default: `turbo` • Accepts: `Turbo`, `Dev`, `Pro`, `Max`, `Flex`, `Klein 4B`, `Klein 9B` - **Steps** (`slider`) — The number of inference steps to perform. Optional: `true` • Default: `8` • Minimum: `2` • Maximum: `50` - **Seed** (`seed`) — The same seed and prompt will output the same image every time. Optional: `true` • Default: `7154` - **CFG Scale** (`slider`) — Classifier Free Guidance controls how closely the generated image adheres to the text prompt you provide. Accepts values between 0 and 20. Optional: `true` • Default: `2.5` • Minimum: `0` • Maximum: `20` - **Expand Prompt** (`toggle`) — Whether to expand the prompt using the model's own capabilities Optional: `true` • Default: `true` - **Block NSFW** (`toggle`) — Prevents the model from generating images that portray nudity, violence, and other unsafe content. Optional: `true` • Default: `false` - **Output Format** (`dropdown`) — The file format for the output image. Optional: `true` • Default: `jpeg` • Accepts: `PNG`, `JPEG`, `WebP` ## Outputs [#outputs] - **Generated Image** (`image`) — The generated image from the model. # FLUX1.1 [Pro] Ultra (https://docs.fuser.studio/docs/nodes/image/flux1-1-pro-ultra) _Provided by [Fal](https://fal.ai) — [Learn More](https://fal.ai/models/fal-ai/flux-pro/v1.1-ultra)._ ## Inputs [#inputs] - **Prompt** (`textarea`) — The prompt to use for generating the image. - **Aspect Ratio** (`dropdown`) — The aspect ratio of the generated image. Optional: `true` • Default: `16:9` • Accepts: `Ultra Wide (21:9)`, `Landscape (16:9)`, `Standard (4:3)`, `Square (1:1)`, `Portrait (3:4)`, `Tall (9:16)`, `Ultra Tall (9:21)` - **Seed** (`seed`) — The same seed and prompt will output the same image every time. Optional: `true` • Default: `4187` - **Safety Checker** (`toggle`) — If set to true, the safety checker will be enabled. Optional: `true` • Default: `false` - **Safety Tolerance** (`dropdown`) — The safety tolerance level, when safety checker is enabled. Optional: `true` • Default: `2` • Accepts: `Strictest`, `Strict (Default)`, `Balanced`, `Permissive`, `More Permissive` - **Output Format** (`dropdown`) — The format of the generated image. Optional: `true` • Default: `jpeg` • Accepts: `JPEG`, `PNG` - **Raw Output** (`toggle`) — Generate less processed, more natural-looking images. Optional: `true` • Default: `true` ## Outputs [#outputs] - **Generated Image** (`image`) — The generated image from the model. # Gemini Image (https://docs.fuser.studio/docs/nodes/image/gemini-image) _Provided by [Google](https://aistudio.google.com) — [Learn More](https://deepmind.google/models/gemini-image/pro/)._ ## Inputs [#inputs] - **Prompt** (`textarea`) — The text prompt describing the image you want to generate or edit. - **System Prompt** (`textarea`) — Initial prompt that helps set the behavior and context for the model. Optional: `true` - **Image** (`image`) _(accepts multiple)_ — One or more reference images to use for image editing or remixing. Optional: `true` - **Model** (`dropdown`) — The model to use for image generation. Optional: `true` • Default: `gemini-3.1-flash-image` • Accepts: `flow.nodes.FalGeminiImageNode.inputs.model.items.gemini-2.5-flash-image`, `flow.nodes.FalGeminiImageNode.inputs.model.items.gemini-3.1-flash-image`, `flow.nodes.FalGeminiImageNode.inputs.model.items.gemini-3.1-flash-lite-image`, `Nano Banana Pro (Gemini 3 Pro)` - **Aspect Ratio** (`dropdown`) — The aspect ratio of the generated image. Optional: `true` • Default: `Auto` • Accepts: `Auto`, `Square (1:1)`, `Landscape (4:3)`, `Portrait (3:4)`, `Landscape (3:2)`, `Portrait (2:3)`, `Landscape (5:4)`, `Portrait (4:5)`, `Landscape (16:9)`, `Portrait (9:16)`, `Ultrawide (21:9)` - **Resolution** (`dropdown`) — The resolution of the generated image. This property is only available for the Pro model. Optional: `true` • Default: `2K` • Accepts: `1K`, `2K`, `4K` - **Search Grounding** (`toggle`) — Connect to Google Search's vast knowledge base to leverage real-time information. Available only for the Pro model. Optional: `true` • Default: `false` - **Output Format** (`dropdown`) — The file format for the output image. Optional: `true` • Default: `image/jpeg` • Accepts: `PNG`, `JPEG` - **Number of Results** (`slider`) — Generate multiple results from a single prompt. Optional: `true` • Default: `1` • Minimum: `1` • Maximum: `4` ## Outputs [#outputs] - **Generated Image** (`image`) — The generated or edited image. # GPT Image (https://docs.fuser.studio/docs/nodes/image/gpt-image) _Provided by [OpenAI](https://openai.com) — [Learn More](https://openai.com/index/introducing-4o-image-generation/)._ ## Inputs [#inputs] - **Prompt** (`textarea`) — A textual prompt to guide image generation. - **Images** (`image`) _(accepts multiple)_ — Images to edit or create variations from. You can use multiple images to combine their features, or use a single image to edit or create variations from. Optional: `true` - **Mask** (`image`) — The mask is used to edit specific areas of the image. The image to edit and mask must be of the same format and size. The mask image must also contain an alpha channel. If you're using an image editing tool to create the mask, make sure to save the mask with an alpha channel. Optional: `true` - **Model** (`dropdown`) — The model to use for image generation. Optional: `true` • Default: `gpt-image-2` • Accepts: `GPT Image 2`, `flow.nodes.OpenAIGPTImageNode.inputs.model.items.gpt-image-1.5`, `GPT Image 1`, `GPT Image 1 Mini` - **Aspect Ratio** (`dropdown`) — The aspect ratio of the generated image. Optional: `true` • Default: `auto` • Accepts: `2560x1440 (2K)`, `3840x2160 (4K)`, `1024x1024`, `1536x1024`, `1024x1536`, `Auto` - **Quality** (`dropdown`) — The quality of the generated image. Optional: `true` • Default: `auto` • Accepts: `Low`, `Medium`, `High`, `Auto` - **Transparent** (`toggle`) — Whether to generate an image with a transparent background. Only supported when generating images from text without using images. Optional: `true` • Default: `false` - **Number of Results** (`slider`) — Generate multiple results from a single prompt. Optional: `true` • Default: `1` • Minimum: `1` • Maximum: `4` ## Outputs [#outputs] - **Generated Image** (`image`) — The generated image from the model. # HED Edge Detection (https://docs.fuser.studio/docs/nodes/image/hed-edge-detection) _Provided by [Fal](https://fal.ai) — [Learn More](https://fal.ai/models/fal-ai/image-preprocessors/hed)._ ## Inputs [#inputs] - **Image** (`image`) — The image to detect edges from. - **Safe Mode** (`toggle`) — Whether to use the safe version of the HED detector. Optional: `true` • Default: `false` - **Scribble Mode** (`toggle`) — Whether to use the scribble version of the HED detector. Optional: `true` • Default: `false` ## Outputs [#outputs] - **Edge Image** (`image`) — The image with edges detected using the HED detector. # Ideogram v2 (https://docs.fuser.studio/docs/nodes/image/ideogram-v2) _Provided by [Fal](https://fal.ai) — [Learn More](https://fal.ai/models/fal-ai/ideogram/v2)._ ## Inputs [#inputs] - **Prompt** (`textarea`) — The prompt to use for generating the image. - **Image** (`image`) — The image to remix or inpaint. If inpainting, needs to match the dimensions of the mask image. Optional: `true` - **Mask** (`image`) — The mask to inpaint the image. Needs to match the dimensions of the input image. Optional: `true` - **Negative Prompt** (`textarea`) — The negative prompt to use. Use it to specify what you don't want in the image. Optional: `true` • Default: `blurry, low quality, distorted` - **Strength** (`slider`) — Strength of the input image in the remix. Optional: `true` • Default: `0.8` • Minimum: `0` • Maximum: `1` - **Aspect Ratio** (`dropdown`) — The aspect ratio of the generated image. Optional: `true` • Default: `1:1` • Accepts: `Square (1:1)`, `Horizontal Panorama (3:1)`, `Vertical Panorama (1:3)`, `Landscape (3:2)`, `Portrait (2:3)`, `Landscape (4:3)`, `Portrait (3:4)`, `Landscape (16:9)`, `Portrait (9:16)`, `Landscape (16:10)`, `Portrait (10:16)` - **Style** (`dropdown`) — The style of the generated image. Optional: `true` • Default: `auto` • Accepts: `Auto (Recommended)`, `General`, `Realistic`, `Design`, `Render 3D`, `Anime` - **Expand Prompt** (`toggle`) — Whether to expand the prompt with MagicPrompt functionality. Optional: `true` • Default: `true` - **Seed** (`seed`) — The same seed and prompt will output the same image every time. Optional: `true` • Default: `7430` ## Outputs [#outputs] - **Generated Image** (`image`) — The generated image from the model. # Krea (https://docs.fuser.studio/docs/nodes/image/krea) _Provided by [Fal](https://fal.ai) — [Learn More](https://fal.ai/models/krea/v2/large/text-to-image)._ ## Inputs [#inputs] - **Prompt** (`textarea`) — The prompt to generate an image from. Optional: `true` - **Image Prompt** (`image`) — The image to generate an image from. Optional: `true` - **Style Reference** (`image`) — A reference image that guides the style of the Krea 2 generation. Optional: `true` - **Image Strength** (`slider`) — The higher the value, the more the original image is used, while lower values will prioritize the text prompt. Optional: `true` • Default: `0.95` • Minimum: `0` • Maximum: `1` - **Model** (`dropdown`) — Choose Krea 2 for current text-to-image generation, or FLUX.1 Krea [dev] for older Flux Krea workflows. Optional: `true` • Default: `krea-2` • Accepts: `Krea 2`, `FLUX.1 Krea [dev]` - **Style** (`style`) — The style used for image generation. Optional: `true` - **Image Size** (`dropdown`) — The size of the generated image. Optional: `true` • Default: `square_hd` • Accepts: `Square HD`, `Square`, `Portrait 4:3`, `Portrait 16:9`, `Landscape 4:3`, `Landscape 16:9` - **Aspect Ratio** (`dropdown`) — The aspect ratio for Krea 2 generations. Optional: `true` • Default: `1:1` • Accepts: `1:1`, `4:3`, `3:2`, `16:9`, `2.35:1`, `4:5`, `2:3`, `9:16` - **Creativity** (`dropdown`) — Controls how loosely Krea 2 interprets the prompt. Optional: `true` • Default: `medium` • Accepts: `Raw`, `Low`, `Medium`, `High` - **Steps** (`slider`) — The number of inference steps to perform. Optional: `true` • Default: `28` • Minimum: `10` • Maximum: `50` - **Seed** (`seed`) — The same seed and prompt will output the same image every time. Optional: `true` • Default: `2049` - **CFG Scale** (`slider`) — Controls how closely the generated image adheres to the text prompt you provide. Accepts values between 0 and 20. Optional: `true` • Default: `3.5` • Minimum: `0` • Maximum: `20` - **Block NSFW** (`toggle`) — Prevents the model from generating images that portray nudity, violence, and other unsafe content. Optional: `true` • Default: `false` ## Outputs [#outputs] - **Generated Image** (`image`) — The generated image from the model. # Luma Uni-1 (https://docs.fuser.studio/docs/nodes/image/luma-uni-1) _Provided by [Fal](https://fal.ai) — [Learn More](https://fal.ai/models/luma/agent/uni-1/v1/text-to-image)._ ## Inputs [#inputs] - **Prompt** (`textarea`) — The text prompt to generate an image from. - **Reference Images** (`image`) _(accepts multiple)_ — Optional reference images to guide the generation. Optional: `true` - **Style** (`dropdown`) — The visual style used for image generation. Optional: `true` • Default: `auto` • Accepts: `Auto`, `Manga` - **Aspect Ratio** (`dropdown`) — The aspect ratio of the generated image. Auto lets the model choose. Optional: `true` • Default: `auto` • Accepts: `Auto`, `3:1`, `2:1`, `16:9`, `3:2`, `1:1`, `2:3`, `9:16`, `1:2`, `1:3` - **Output Format** (`dropdown`) — The file format of the generated image. Auto lets the model choose. Optional: `true` • Default: `auto` • Accepts: `Auto`, `PNG`, `JPEG` - **Web Search** (`toggle`) — Allow the model to consult the web while planning the image. Optional: `true` • Default: `false` ## Outputs [#outputs] - **Generated Image** (`image`) — The generated image from the model. # MLSD Line Detection (https://docs.fuser.studio/docs/nodes/image/mlsd-line-detection) _Provided by [Fal](https://fal.ai) — [Learn More](https://fal.ai/models/fal-ai/image-preprocessors/mlsd)._ ## Inputs [#inputs] - **Image** (`image`) — The image to detect lines from. - **Score Threshold** (`slider`) — Score threshold for the MLSD detector. Optional: `true` • Default: `0.1` • Minimum: `0` • Maximum: `1` - **Distance Threshold** (`slider`) — Distance threshold for the MLSD detector. Optional: `true` • Default: `0.1` • Minimum: `0` • Maximum: `20` ## Outputs [#outputs] - **Line Image** (`image`) — The image with lines detected using the MLSD detector. # Moondream Detection (https://docs.fuser.studio/docs/nodes/image/moondream-detection) _Provided by [Fal](https://fal.ai) — [Learn More](https://fal.ai/models/fal-ai/moondream-next/detection)._ ## Inputs [#inputs] - **Image** (`image`) — The image to analyze - **Detection Prompt** (`textarea`) — Describe what to detect in the image - **Detection Type** (`dropdown`) — Type of detection to perform Optional: `true` • Default: `bbox_detection` • Accepts: `Bounding Box - Draw boxes around objects`, `Point - Find specific points`, `Gaze - Detect where someone is looking` - **Use Ensemble** (`toggle`) — Whether to use ensemble method for gaze detection (more accurate but slower) Optional: `true` • Default: `false` ## Outputs [#outputs] - **Result Image** (`image`) — Image with detection visualization - **Detection Details** (`textarea`) — Text description of what was detected # Moondream (https://docs.fuser.studio/docs/nodes/image/moondream) _Provided by [Fal](https://fal.ai) — [Learn More](https://fal.ai/models/fal-ai/moondream-next)._ ## Inputs [#inputs] - **Image** (`image`) — The image to analyze - **Question** (`textarea`) — The question to ask about the image - **Task Type** (`dropdown`) — Type of analysis to perform on the image Optional: `true` • Default: `query` • Accepts: `Answer a question about the image`, `Generate a caption for the image` - **Max Tokens** (`slider`) — Maximum length of the response Optional: `true` • Default: `64` • Minimum: `1` • Maximum: `256` ## Outputs [#outputs] - **Response** (`textarea`) — The model's response to your question about the image # Qwen Edit Angles (https://docs.fuser.studio/docs/nodes/image/qwen-edit-angles) _Provided by [Fal](https://fal.ai) — [Learn More](https://fal.ai/models/fal-ai/qwen-image-edit-plus-lora-gallery/multiple-angles)._ ## Inputs [#inputs] - **Images** (`image`) _(accepts multiple)_ — Image(s) to create a different angle from. You can provide up to 2 images, although the model behavior is more predictable with a single image. - **Negative Prompt** (`textarea`) — The negative prompt is used to guide the model to avoid generating images that contain certain elements or concepts. Optional: `true` - **Left/Right** (`slider`) — Rotate camera the camera around the subject. Negative values rotate left, positive values rotate right. Optional: `true` • Default: `0` • Minimum: `-90` • Maximum: `90` - **Down/Up** (`slider`) — Adjust the vertical angle of the camera. Lower values move the camera down, higher values move the camera up. Optional: `true` • Default: `0` • Minimum: `-1` • Maximum: `1` - **Move Forward** (`slider`) — Move the camera forward towward the subject for close-up shots. Optional: `true` • Default: `0` • Minimum: `0` • Maximum: `10` - **Wide Angle Lens** (`toggle`) — Enable the wide angle lens effect. This will distort the image to create a wide angle lens effect. Optional: `true` • Default: `false` - **Image Size** (`dropdown`) — The size of the generated image. If set to "Auto", the size of the input image will be used. Optional: `true` • Default: `auto` • Accepts: `Auto`, `Square`, `Portrait 4:3`, `Portrait 16:9`, `Landscape 4:3`, `Landscape 16:9` - **Steps** (`slider`) — The number of inference steps to perform. Optional: `true` • Default: `6` • Minimum: `2` • Maximum: `50` - **Seed** (`seed`) — The same seed and prompt will output the same image every time. Optional: `true` • Default: `1027` - **CFG Scale** (`slider`) — Controls how closely the generated image adheres to the text prompt you provide. Accepts values between 0 and 20. Optional: `true` • Default: `1` • Minimum: `0` • Maximum: `20` - **Effect Strength** (`slider`) — The strength of the LoRA effect to apply. 0 for no effect, 1 for full effect. For next-scene operations, recommended range is 0.7-0.8. Higher values create stronger transformations, lower values preserve more of the original image. Optional: `true` • Default: `1.25` • Minimum: `0` • Maximum: `2` - **Output Format** (`dropdown`) — The file format for the output image. Optional: `true` • Default: `jpeg` • Accepts: `PNG`, `JPEG`, `WebP` ## Outputs [#outputs] - **Generated Image** (`image`) — The generated image from the model. # Qwen Image 2 (https://docs.fuser.studio/docs/nodes/image/qwen-image-2) _Provided by [Fal](https://fal.ai) — [Learn More](https://fal.ai/models/fal-ai/qwen-image-2/text-to-image)._ ## Inputs [#inputs] - **Prompt** (`textarea`) — The text prompt describing the image you want to generate or edit. - **Images** (`image`) _(accepts multiple)_ — Optional reference images. When provided, the node automatically switches to edit mode. Supports up to 3 images. Optional: `true` - **Negative Prompt** (`textarea`) — Content to avoid in the generated image. Optional: `true` - **Model** (`dropdown`) — Switch between Standard and Pro quality tiers. Optional: `true` • Default: `standard` • Accepts: `Standard`, `Pro` - **Image Size** (`dropdown`) — The output size. Auto preserves the input image size in edit mode and uses endpoint defaults in text mode. Optional: `true` • Default: `auto` • Accepts: `Auto`, `Square HD`, `Square`, `Portrait 4:3`, `Portrait 9:16`, `Landscape 4:3`, `Landscape 16:9` - **Seed** (`seed`) — Use the same seed and prompt to reproduce similar outputs. Optional: `true` • Default: `6713` • Minimum: `0` • Maximum: `2147483647` - **Expand Prompt** (`toggle`) — Enable prompt optimization before image generation. Optional: `true` • Default: `true` - **Block NSFW** (`toggle`) — Enable content moderation for both inputs and outputs. Optional: `true` • Default: `true` - **Output Format** (`dropdown`) — The file format for generated images. Optional: `true` • Default: `png` • Accepts: `PNG`, `JPEG`, `WEBP` ## Outputs [#outputs] - **Generated Image** (`image`) — The generated image from the model. # Qwen-Image Edit (https://docs.fuser.studio/docs/nodes/image/qwen-image-edit) _Provided by [Fal](https://fal.ai) — [Learn More](https://fal.ai/models/fal-ai/qwen-image-edit-plus-lora-gallery/add-background)._ ## Inputs [#inputs] - **Prompt** (`textarea`) — The prompt describing the desired edit or effect. For next-scene operations, start with "Next Scene:" and describe camera/scene changes. For other operations, describe the background, clothing, setting, or elements to add/modify. Optional: `true` - **Images** (`image`) _(accepts multiple)_ — Images to edit or create variations from. Single image for most operations. Use 2 images for shirt-design (person + design). Maximum of 4 images for group-photo to combine subjects. - **Operation** (`dropdown`) — The specialized editing operation to perform. Each uses a different LoRA optimized for specific tasks: background removal, portrait generation, element removal, product integration, scene transitions, lighting adjustment, retro effects, or apparel design. Optional: `true` • Default: `add-background` • Accepts: `Add Background`, `Face to Full Portrait`, `Group Photo`, `Integrate Product`, `Next Scene`, `Remove Element`, `Remove Lighting`, `Shirt Design` - **Negative Prompt** (`textarea`) — The negative prompt is used to guide the model to avoid generating images that contain certain elements or concepts. Optional: `true` - **Image Size** (`dropdown`) — The size of the generated image. If set to "Auto", the size of the input image will be used. Optional: `true` • Default: `auto` • Accepts: `Auto`, `Square`, `Portrait 4:3`, `Portrait 16:9`, `Landscape 4:3`, `Landscape 16:9` - **Steps** (`slider`) — The number of inference steps to perform. Optional: `true` • Default: `6` • Minimum: `2` • Maximum: `50` - **Seed** (`seed`) — The same seed and prompt will output the same image every time. Optional: `true` • Default: `6652` - **CFG Scale** (`slider`) — Controls how closely the generated image adheres to the text prompt you provide. Accepts values between 0 and 20. Optional: `true` • Default: `1` • Minimum: `0` • Maximum: `20` - **Effect Strength** (`slider`) — The strength of the LoRA effect to apply. 0 for no effect, 1 for full effect. For next-scene operations, recommended range is 0.7-0.8. Higher values create stronger transformations, lower values preserve more of the original image. Optional: `true` • Default: `1` • Minimum: `0` • Maximum: `1` - **Block NSFW** (`toggle`) — Prevents the model from generating images that portray nudity, violence, and other unsafe content. Optional: `true` • Default: `false` - **Output Format** (`dropdown`) — The file format for the output image. Optional: `true` • Default: `jpeg` • Accepts: `PNG`, `JPEG`, `WebP` ## Outputs [#outputs] - **Generated Image** (`image`) — The generated image from the model. # Qwen-Image (https://docs.fuser.studio/docs/nodes/image/qwen-image) _Provided by [Fal](https://fal.ai) — [Learn More](https://fal.ai/models/fal-ai/qwen-image)._ ## Inputs [#inputs] - **Prompt** (`textarea`) — The prompt to generate an image from. - **Images** (`image`) _(accepts multiple)_ — Images to edit or create variations from. You can use multiple images to combine their features, or use a single image to edit or create variations from. Optional: `true` - **Negative Prompt** (`textarea`) — The negative prompt is used to guide the model to avoid generating images that contain certain elements or concepts. Optional: `true` - **Image Size** (`dropdown`) — The size of the generated image. Optional: `true` • Default: `square_hd` • Accepts: `Square HD`, `Square`, `Portrait 4:3`, `Portrait 16:9`, `Landscape 4:3`, `Landscape 16:9` - **Steps** (`slider`) — The number of inference steps to perform. Optional: `true` • Default: `30` • Minimum: `10` • Maximum: `50` - **Seed** (`seed`) — The same seed and prompt will output the same image every time. Optional: `true` • Default: `1617` - **CFG Scale** (`slider`) — Controls how closely the generated image adheres to the text prompt you provide. Accepts values between 0 and 20. Optional: `true` • Default: `2.5` • Minimum: `0` • Maximum: `20` - **Block NSFW** (`toggle`) — Prevents the model from generating images that portray nudity, violence, and other unsafe content. Optional: `true` • Default: `false` ## Outputs [#outputs] - **Generated Image** (`image`) — The generated image from the model. # Recraft Upscale (https://docs.fuser.studio/docs/nodes/image/recraft-upscale) _Provided by [Fal](https://fal.ai) — [Learn More](https://fal.ai/models/fal-ai/recraft/upscale/crisp)._ ## Inputs [#inputs] - **Image** (`image`) — The image to upscale (PNG format recommended) ## Outputs [#outputs] - **Upscaled Image** (`image`) — The high-resolution upscaled image # Recraft v3 (https://docs.fuser.studio/docs/nodes/image/recraft-v3) _Provided by [Fal](https://fal.ai) — [Learn More](https://fal.ai/models/fal-ai/recraft-v3)._ ## Inputs [#inputs] - **Prompt** (`textarea`) — The prompt to use for generating the image. - **Image Prompt** (`image`) — The image to generate an image from. Optional: `true` - **Negative Prompt** (`textarea`) — The negative prompt to use for generating the image. This is used to remove unwanted elements from the image. Optional: `true` - **Image Strength** (`slider`) — The higher the value, the more the original image is used, while lower values will prioritize the text prompt. Optional: `true` • Default: `0.2` • Minimum: `0` • Maximum: `1` - **Image Size** (`dropdown`) — The size of the generated image. When using a reference image, the size will be ignored and the reference image size will be used instead. Optional: `true` • Default: `square_hd` • Accepts: `Square HD`, `Square`, `Landscape 4:3`, `Portrait 4:3`, `Landscape 16:9`, `Portrait 16:9` - **Style** (`dropdown`) — The style of the generated image. Note: Vector images cost 2X as much. Optional: `true` • Default: `realistic_image` • Accepts: `Any Style`, `Realistic Image`, `Digital Illustration`, `Vector Illustration`, `Realistic Image - B&W`, `Realistic Image - Hard Flash`, `Realistic Image - HDR`, `Realistic Image - Natural Light`, `Realistic Image - Studio Portrait`, `Realistic Image - Enterprise`, `Realistic Image - Motion Blur`, `Realistic Image - Evening Light`, `Realistic Image - Faded Nostalgia`, `Realistic Image - Forest Life`, `Realistic Image - Mystic Naturalism`, `Realistic Image - Natural Tones`, `Realistic Image - Organic Calm`, `Realistic Image - Real Life Glow`, `Realistic Image - Retro Realism`, `Realistic Image - Retro Snapshot`, `Realistic Image - Urban Drama`, `Realistic Image - Village Realism`, `Realistic Image - Warm Folk`, `Digital Illustration - Pixel Art`, `Digital Illustration - Hand Drawn`, `Digital Illustration - Grain`, `Digital Illustration - Infantile Sketch`, `Digital Illustration - 2D Art Poster`, `Digital Illustration - Handmade 3D`, `Digital Illustration - Hand Drawn Outline`, `Digital Illustration - Engraving Color`, `Digital Illustration - 2D Art Poster 2`, `Digital Illustration - Antiquarian`, `Digital Illustration - Bold Fantasy`, `Digital Illustration - Child Book`, `Digital Illustration - Child Books`, `Digital Illustration - Cover`, `Digital Illustration - Crosshatch`, `Digital Illustration - Digital Engraving`, `Digital Illustration - Expressionism`, `Digital Illustration - Freehand Details`, `Digital Illustration - Grain 20`, `Digital Illustration - Graphic Intensity`, `Digital Illustration - Hard Comics`, `Digital Illustration - Long Shadow`, `Digital Illustration - Modern Folk`, `Digital Illustration - Multicolor`, `Digital Illustration - Neon Calm`, `Digital Illustration - Noir`, `Digital Illustration - Nostalgic Pastel`, `Digital Illustration - Outline Details`, `Digital Illustration - Pastel Gradient`, `Digital Illustration - Pastel Sketch`, `Digital Illustration - Pop Art`, `Digital Illustration - Pop Renaissance`, `Digital Illustration - Street Art`, `Digital Illustration - Tablet Sketch`, `Digital Illustration - Urban Glow`, `Digital Illustration - Urban Sketching`, `Digital Illustration - Vanilla Dreams`, `Digital Illustration - Young Adult Book`, `Digital Illustration - Young Adult Book 2`, `Vector Illustration - Bold Stroke`, `Vector Illustration - Chemistry`, `Vector Illustration - Colored Stencil`, `Vector Illustration - Contour Pop Art`, `Vector Illustration - Cosmics`, `Vector Illustration - Cutout`, `Vector Illustration - Depressive`, `Vector Illustration - Editorial`, `Vector Illustration - Emotional Flat`, `Vector Illustration - Infographical`, `Vector Illustration - Marker Outline`, `Vector Illustration - Mosaic`, `Vector Illustration - Naivector`, `Vector Illustration - Roundish Flat`, `Vector Illustration - Segmented Colors`, `Vector Illustration - Sharp Contrast`, `Vector Illustration - Thin`, `Vector Illustration - Vector Photo`, `Vector Illustration - Vivid Shapes`, `Vector Illustration - Engraving`, `Vector Illustration - Line Art`, `Vector Illustration - Line Circuit`, `Vector Illustration - Linocut` ## Outputs [#outputs] - **Generated Image** (`image`) — The generated image from the model. # Recraft V4 (https://docs.fuser.studio/docs/nodes/image/recraft-v4) _Provided by [Fal](https://fal.ai) — [Learn More](https://fal.ai/models/fal-ai/recraft/v4/text-to-image)._ ## Inputs [#inputs] - **Prompt** (`textarea`) — Describe the image or vector artwork to generate. Optional: `true` - **Output Type** (`dropdown`) — Choose raster image output or SVG vector output. Optional: `true` • Default: `image` • Accepts: `Image`, `Vector` - **Version** (`dropdown`) — Choose Recraft V4.1 for the latest generation quality or V4 for older workflows. Optional: `true` • Default: `v4.1` • Accepts: `V4.1`, `V4` - **Model** (`dropdown`) — Choose normal generation or the higher-end pro model. Optional: `true` • Default: `pro` • Accepts: `Normal`, `Pro` - **Image Size** (`dropdown`) — The size of the generated result. Optional: `true` • Default: `square_hd` • Accepts: `Square HD`, `Square`, `Portrait 3:4`, `Portrait 9:16`, `Landscape 4:3`, `Landscape 16:9` - **Preferred Colors** (`textarea`) — Optional hex colors to guide the palette, separated by commas or new lines. Optional: `true` - **Background Color** (`text`) — Optional hex color to guide the generated background. Optional: `true` - **Block NSFW** (`toggle`) — Enable content moderation for generated results. Optional: `true` • Default: `true` ## Outputs [#outputs] - **Generated Image** (`image`) — The generated raster image or SVG vector file. # Rembg (https://docs.fuser.studio/docs/nodes/image/rembg) _Provided by [Fal](https://fal.ai) — [Learn More](https://fal.ai/models/fal-ai/imageutils/rembg)._ ## Inputs [#inputs] - **Image Prompt** (`image`) — The image to generate a video from. The image must be 960x544 or it will get cropped and resized to that size. - **Crop** (`toggle`) — If set to true, the resulting image be cropped to a bounding box around the subject. Optional: `true` • Default: `false` ## Outputs [#outputs] - **Generated Image** (`image`) — The transparent image from the model. # Reve (https://docs.fuser.studio/docs/nodes/image/reve) _Provided by [Fal](https://fal.ai) — [Learn More](https://fal.ai/models/fal-ai/reve/remix)._ ## Inputs [#inputs] - **Prompt** (`textarea`) — The text prompt describing the image you want to generate or edit. - **Model** (`dropdown`) — Choose Reve 2.1 by default, or switch back to the original Reve endpoint for older workflows. Optional: `true` • Default: `v2.1` • Accepts: `2.1`, `Original` - **Image** (`image`) _(accepts multiple)_ — One or more reference images to use for image editing or remixing. Optional: `true` - **Aspect Ratio** (`dropdown`) — The aspect ratio of the generated image. Optional: `true` • Default: `auto` • Accepts: `Auto`, `Square (1:1)`, `Panoramic (4:1)`, `Panoramic (3:1)`, `Cinematic (21:9)`, `Wide (2:1)`, `Wide (17:9)`, `Landscape (16:9)`, `Portrait (9:16)`, `Landscape (4:3)`, `Landscape (5:4)`, `Portrait (4:5)`, `Portrait (3:4)`, `Landscape (3:2)`, `Portrait (2:3)`, `Portrait (1:2)`, `Portrait (1:3)`, `Portrait (1:4)` - **Output Format** (`dropdown`) — The file format for the output image. Optional: `true` • Default: `png` • Accepts: `JPEG (smaller file size)`, `PNG (lossless, transparent)`, `WebP (modern format)` ## Outputs [#outputs] - **Generated Image** (`image`) — The generated or edited image. # Scribble Detection (https://docs.fuser.studio/docs/nodes/image/scribble-detection) _Provided by [Fal](https://fal.ai) — [Learn More](https://fal.ai/models/fal-ai/image-preprocessors/scribble)._ ## Inputs [#inputs] - **Image** (`image`) — The image to convert to a scribble. - **Model** (`dropdown`) — The model to use for the Scribble detector. Optional: `true` • Default: `HED` • Accepts: `Holistically-Nested Edge Detection`, `PiDi` - **Safe Mode** (`toggle`) — Whether to use the safe version of the Scribble detector. Optional: `true` • Default: `false` ## Outputs [#outputs] - **Scribble Image** (`image`) — The image converted to a scribble sketch. # SDXL Canny Controlnet (https://docs.fuser.studio/docs/nodes/image/sdxl-canny-controlnet) _Provided by [Fal](https://fal.ai) — [Learn More](https://fal.ai/models/fal-ai/fast-sdxl-controlnet-canny)._ ## Inputs [#inputs] - **Prompt** (`textarea`) — The prompt to use for generating the image. Be as descriptive as possible for best results. - **Control Image** (`image`) — The image that will guide the generation using its edges. - **Negative Prompt** (`textarea`) — The negative prompt to use. Use it to address details that you don't want in the image. Optional: `true` • Default: `` - **Control Scale** (`slider`) — The scale of the controlnet conditioning. Optional: `true` • Default: `0.5` • Minimum: `0` • Maximum: `1` - **Image Size** (`dropdown`) — The size of the generated image. Leave it none to automatically infer from the control image. Optional: `true` • Default: `square_hd` • Accepts: `Square HD`, `Square`, `Portrait 4:3`, `Portrait 16:9`, `Landscape 4:3`, `Landscape 16:9` - **Steps** (`slider`) — The number of inference steps to perform. Optional: `true` • Default: `25` • Minimum: `1` • Maximum: `50` - **Seed** (`seed`) — The same seed and prompt will output the same image every time. Optional: `true` • Default: `4082` - **Guidance Scale** (`slider`) — The CFG scale is a measure of how close you want the model to stick to your prompt. Optional: `true` • Default: `7.5` • Minimum: `0` • Maximum: `20` ## Outputs [#outputs] - **Generated Image** (`image`) — The generated image from the model. # SDXL Inpainting (https://docs.fuser.studio/docs/nodes/image/sdxl-inpainting) _Provided by [Fal](https://fal.ai) — [Learn More](https://fal.ai/models/fal-ai/fast-sdxl/inpainting)._ ## Inputs [#inputs] - **Input Image** (`image`) — The image to use as a starting point for the generation. - **Mask Image** (`image`) — The mask to use for inpainting. White areas will be inpainted, black areas will remain unchanged. - **Prompt** (`textarea`) — The prompt to use for generating the image. Be as descriptive as possible for best results. - **Negative Prompt** (`textarea`) — The negative prompt to use. Use it to address details that you don't want in the image. Optional: `true` • Default: `` - **Image Size** (`dropdown`) — The size of the generated image. Optional: `true` • Default: `square_hd` • Accepts: `Square HD`, `Square`, `Portrait 4:3`, `Portrait 16:9`, `Landscape 4:3`, `Landscape 16:9` - **Steps** (`slider`) — The number of inference steps to perform. Optional: `true` • Default: `25` • Minimum: `1` • Maximum: `50` - **Guidance Scale** (`slider`) — The CFG scale is a measure of how close you want the model to stick to your prompt. Optional: `true` • Default: `7.5` • Minimum: `0` • Maximum: `20` - **Image Strength** (`slider`) — The higher the value, the more the original image is used, while lower values will prioritize the text prompt. Optional: `true` • Default: `0.95` • Minimum: `0` • Maximum: `1` - **Seed** (`seed`) — The same seed and prompt will output the same image every time. Optional: `true` • Default: `3667` ## Outputs [#outputs] - **Generated Image** (`image`) — The generated image from the model. # Seedream (https://docs.fuser.studio/docs/nodes/image/seedream) _Provided by [Fal](https://fal.ai) — [Learn More](https://fal.ai/models/fal-ai/bytedance/seedream/v5/lite/text-to-image)._ ## Inputs [#inputs] - **Prompt** (`textarea`) — The prompt to use for generating the image. - **Images** (`image`) _(accepts multiple)_ — Images to edit or create variations from. You can use a maximum of 10 images to combine their features, or use a single image to edit or create variations from. Optional: `true` - **Image Size** (`dropdown`) — The size of the generated image. Optional: `true` • Default: `auto` • Accepts: `Auto`, `Auto 2K`, `Auto 3K`, `Auto 4K`, `Square HD`, `Square`, `Landscape 4:3`, `Portrait 4:3`, `Landscape 16:9`, `Portrait 16:9` - **Seed** (`seed`) — The same seed and prompt will output the same image every time. Optional: `true` • Default: `4089` ## Outputs [#outputs] - **Generated Image** (`image`) — The generated image from the model. # Skin Enhancer (https://docs.fuser.studio/docs/nodes/image/skin-enhancer) _Provided by [Fal](https://fal.ai) — [Learn More](https://fal.ai/models/fal-ai/z-image/turbo/image-to-image/lora)._ ## Inputs [#inputs] - **Prompt** (`textarea`) — Optional prompt to adjust features of the enhanced image. Optional: `true` - **Image** (`image`) — The image to enhance. - **Image Strength** (`slider`) — The higher the value, the more the original image is used, while lower values will prioritize the text prompt. Optional: `true` • Default: `0.2575` • Minimum: `0` • Maximum: `1` - **Strength** (`slider`) — Controls the strength of enhancement effects. Optional: `true` • Default: `1` • Minimum: `0` • Maximum: `4` - **Seed** (`seed`) — The same seed and prompt will output the same image every time. Optional: `true` • Default: `5032` - **Output Format** (`dropdown`) — The file format for the output image. Optional: `true` • Default: `jpeg` • Accepts: `PNG`, `JPEG`, `WebP` ## Outputs [#outputs] - **Enhanced Image** (`image`) — The enhanced image from the model. # Wan-2.2 Image (https://docs.fuser.studio/docs/nodes/image/wan-2-2-image) _Provided by [Fal](https://fal.ai) — [Learn More](https://fal.ai/models/fal-ai/wan/v2.2-a14b/text-to-image)._ ## Inputs [#inputs] - **Prompt** (`textarea`) — The prompt to generate an image from. - **Negative Prompt** (`textarea`) — The negative prompt is used to guide the model to avoid generating images that contain certain elements or concepts. Optional: `true` - **Model** (`dropdown`) — The model to use for image generation. Optional: `true` • Default: `wan-2.2-5b` • Accepts: `flow.nodes.FalWan22ImageNode.inputs.model.items.wan-2.2-5b`, `flow.nodes.FalWan22ImageNode.inputs.model.items.wan-2.2-a14b` - **Seed** (`seed`) — The same seed and prompt will output the same video every time. Optional: `true` • Default: `18032` • Minimum: `0` • Maximum: `65535` - **Image Size** (`dropdown`) — The size of the generated image. Optional: `true` • Default: `square_hd` • Accepts: `Square HD`, `Square`, `Portrait 4:3`, `Portrait 16:9`, `Landscape 4:3`, `Landscape 16:9` - **Steps** (`slider`) — The number of inference steps to perform. Higher values can help with preserving details, but take longer to generate. We recommend using 40 steps for Lite and 40 steps for Pro. Optional: `true` • Default: `27` • Minimum: `2` • Maximum: `50` - **Guidance Scale** (`slider`) — Higher guidance scales can help with preserving garment detail, but risks oversaturated colors. Optional: `true` • Default: `3.5` • Minimum: `1` • Maximum: `10` - **Shift** (`slider`) — Shift controls how the model moves through the denoising process, affecting smoothness and textures. Lower values result in more dynamic but sometimes chaotic quality. Higher values result in smoother, more predictable textures. Optional: `true` • Default: `5` • Minimum: `1` • Maximum: `10` - **Expand Prompt** (`toggle`) — Whether to expand the prompt using the model's own capabilities Optional: `true` • Default: `true` - **Block NSFW** (`toggle`) — Whether to block NSFW content Optional: `true` • Default: `false` ## Outputs [#outputs] - **Generated Image** (`image`) — The generated image from the model. # Wan 2.6 Image (https://docs.fuser.studio/docs/nodes/image/wan-2-6-image) _Provided by [Fal](https://fal.ai) — [Learn More](https://fal.ai/models/wan/v2.6/text-to-image)._ ## Inputs [#inputs] - **Prompt** (`textarea`) — The prompt to generate an image from. Optional: `true` - **Image Prompt** (`image`) — The image to generate an image from. Optional: `true` - **Image Size** (`dropdown`) — The size of the generated image. Optional: `true` • Default: `square_hd` • Accepts: `Square HD`, `Square`, `Portrait 4:3`, `Portrait 16:9`, `Landscape 4:3`, `Landscape 16:9` - **Seed** (`seed`) — The same seed and prompt will output the same image every time. Optional: `true` • Default: `5` - **Block NSFW** (`toggle`) — Prevents the model from generating images that portray nudity, violence, and other unsafe content. Optional: `true` • Default: `false` ## Outputs [#outputs] - **Generated Image** (`image`) — The generated image from the model. # Z-Image (https://docs.fuser.studio/docs/nodes/image/z-image) _Provided by [Fal](https://fal.ai) — [Learn More](https://fal.ai/models/fal-ai/z-image/turbo)._ ## Inputs [#inputs] - **Prompt** (`textarea`) — The prompt to generate an image from. - **Image Prompt** (`image`) — The image to generate an image from. Optional: `true` - **Image Strength** (`slider`) — The higher the value, the more the original image is used, while lower values will prioritize the text prompt. Optional: `true` • Default: `0.5` • Minimum: `0` • Maximum: `1` - **LoRA Weights** (`string`) _(accepts multiple)_ — List of LoRA weights to apply (maximum 3). To provide LoRA weights, use a text node that contains the URL of .safetensors file. Optional: `true` - **Image Size** (`dropdown`) — The size of the generated image. Optional: `true` • Default: `auto` • Accepts: `Auto`, `Square`, `Landscape 4:3`, `Portrait 4:3`, `Landscape 16:9`, `Portrait 16:9` - **Resolution** (`dropdown`) — The resolution of the generated image. Optional: `true` • Default: `2K` • Accepts: `1K`, `2K` - **Steps** (`slider`) — The number of inference steps to perform. Optional: `true` • Default: `8` • Minimum: `1` • Maximum: `8` - **Seed** (`seed`) — The same seed and prompt will output the same image every time. Optional: `true` • Default: `2814` - **Block NSFW** (`toggle`) — Prevents the model from generating images that portray nudity, violence, and other unsafe content. Optional: `true` • Default: `false` - **Output Format** (`dropdown`) — The file format for the output image. Optional: `true` • Default: `jpeg` • Accepts: `PNG`, `JPEG`, `WebP` - **Number of Results** (`slider`) — Generate multiple results from a single prompt. Optional: `true` • Default: `1` • Minimum: `1` • Maximum: `4` ## Outputs [#outputs] - **Generated Image** (`image`) — The generated image from the model. # Zoe Depth Map (https://docs.fuser.studio/docs/nodes/image/zoe-depth-map) _Provided by [Fal](https://fal.ai) — [Learn More](https://fal.ai/models/fal-ai/image-preprocessors/zoe)._ ## Inputs [#inputs] - **Image** (`image`) — The image to generate a depth map for. ## Outputs [#outputs] - **Depth Map** (`image`) — The generated depth map. # Node Reference (https://docs.fuser.studio/docs/nodes) The node reference is generated from the Fuser node registry. Each node page describes what the node does, who provides it, and the inputs and outputs exposed on the canvas. # ChatGPT (https://docs.fuser.studio/docs/nodes/llm/chatgpt) _Provided by [OpenAI](https://openai.com) — [Learn More](https://platform.openai.com/docs/models)._ ## Inputs [#inputs] - **Prompt** (`textarea`) — The message prompt to send to the model. - **Model** (`dropdown`) — The OpenAI model to use for chat completion. Optional: `true` • Default: `gpt-5.1` • Accepts: `gpt-5.4`, `gpt-5.2`, `gpt-5.1`, `gpt-5`, `gpt-5-mini`, `gpt-5-nano`, `gpt-5-chat-latest`, `gpt-4.1`, `gpt-4.1-mini`, `gpt-4.1-nano`, `gpt-4o`, `gpt-4o-search-preview`, `gpt-4o-mini-search-preview`, `gpt-4o-mini`, `chatgpt-4o-latest`, `o1`, `o1-mini`, `o1-preview`, `o3-mini`, `o3`, `o4-mini` - **System Prompt** (`textarea`) — A system prompt that sets the behavior and context for the conversation. Optional: `true` - **Attachment** (`generic`) _(accepts multiple)_ — Attachments to include with the prompt (images, text, etc.). Optional: `true` - **Last Message Only** (`toggle`) — If enabled, only the last message will be sent to the model instead of the full conversation history. Optional: `true` • Default: `false` - **Temperature** (`number`) — Controls randomness in the output. Higher values make the output more random, lower values make it more deterministic. Optional: `true` • Minimum: `-1` • Maximum: `1` - **Seed** (`seed`) — A seed value for reproducible outputs. Use the same seed to get consistent results. Optional: `true` • Default: `7836` - **Top P** (`number`) — Nucleus sampling parameter. Controls diversity via nucleus sampling. Optional: `true` - **Top K** (`number`) — Limits the number of highest probability tokens to consider. Optional: `true` - **Max Tokens** (`number`) — Maximum number of tokens to generate in the response. Optional: `true` - **Stop Sequences** (`string`) _(accepts multiple)_ — Sequences that will cause the model to stop generating further tokens. Optional: `true` - **Presence Penalty** (`number`) — Penalizes tokens based on whether they appear in the text so far. Optional: `true` • Minimum: `-2` • Maximum: `2` - **Frequency Penalty** (`number`) — Penalizes tokens based on their frequency in the text so far. Optional: `true` • Minimum: `-2` • Maximum: `2` ## Outputs [#outputs] - **Last Response** (`textarea`) — The last response from the model. # Claude Chat (https://docs.fuser.studio/docs/nodes/llm/claude-chat) _Provided by [Anthropic](https://anthropic.com) — [Learn More](https://www.anthropic.com/claude)._ ## Inputs [#inputs] - **Prompt** (`textarea`) — The message prompt to send to the model. - **Model** (`dropdown`) — The Claude model to use for chat completion. Optional: `true` • Default: `claude-sonnet-4-6` • Accepts: `claude-opus-4-7`, `claude-opus-4-6`, `claude-opus-4-5`, `claude-sonnet-4-6`, `claude-sonnet-4-5`, `claude-haiku-4-5` - **System Prompt** (`textarea`) — A system prompt that sets the behavior and context for the conversation. Optional: `true` - **Attachment** (`generic`) _(accepts multiple)_ — Attachments to include with the prompt (images, text, etc.). Optional: `true` - **Last Message Only** (`toggle`) — If enabled, only the last message will be sent to the model instead of the full conversation history. Optional: `true` • Default: `false` - **Temperature** (`number`) — Controls randomness in the output. Higher values make the output more random, lower values make it more deterministic. Optional: `true` • Minimum: `-1` • Maximum: `1` - **Seed** (`seed`) — A seed value for reproducible outputs. Use the same seed to get consistent results. Optional: `true` • Default: `2014` - **Top P** (`number`) — Nucleus sampling parameter. Controls diversity via nucleus sampling. Optional: `true` - **Top K** (`number`) — Limits the number of highest probability tokens to consider. Optional: `true` - **Max Tokens** (`number`) — Maximum number of tokens to generate in the response. Optional: `true` - **Stop Sequences** (`string`) _(accepts multiple)_ — Sequences that will cause the model to stop generating further tokens. Optional: `true` - **Presence Penalty** (`number`) — Penalizes tokens based on whether they appear in the text so far. Optional: `true` • Minimum: `-2` • Maximum: `2` - **Frequency Penalty** (`number`) — Penalizes tokens based on their frequency in the text so far. Optional: `true` • Minimum: `-2` • Maximum: `2` ## Outputs [#outputs] - **Last Response** (`textarea`) — The last response from the model. # Cohere Chat (https://docs.fuser.studio/docs/nodes/llm/cohere-chat) _Provided by [Cohere](https://cohere.com) — [Learn More](https://cohere.com)._ ## Inputs [#inputs] - **Prompt** (`textarea`) — The message prompt to send to the model. - **Model** (`dropdown`) — The Cohere model to use for chat completion. Optional: `true` • Default: `command-r-08-2024` • Accepts: `command-a`, `command-r7b`, `command-r`, `command-r-plus` - **System Prompt** (`textarea`) — A system prompt that sets the behavior and context for the conversation. Optional: `true` - **Attachment** (`string`) _(accepts multiple)_ — Attachments to include with the prompt (images, text, etc.). Optional: `true` - **Last Message Only** (`toggle`) — If enabled, only the last message will be sent to the model instead of the full conversation history. Optional: `true` • Default: `false` - **Temperature** (`number`) — Controls randomness in the output. Higher values make the output more random, lower values make it more deterministic. Optional: `true` • Minimum: `-1` • Maximum: `1` - **Seed** (`seed`) — A seed value for reproducible outputs. Use the same seed to get consistent results. Optional: `true` • Default: `5879` - **Top P** (`number`) — Nucleus sampling parameter. Controls diversity via nucleus sampling. Optional: `true` - **Top K** (`number`) — Limits the number of highest probability tokens to consider. Optional: `true` - **Max Tokens** (`number`) — Maximum number of tokens to generate in the response. Optional: `true` - **Stop Sequences** (`string`) _(accepts multiple)_ — Sequences that will cause the model to stop generating further tokens. Optional: `true` - **Presence Penalty** (`number`) — Penalizes tokens based on whether they appear in the text so far. Optional: `true` • Minimum: `-2` • Maximum: `2` - **Frequency Penalty** (`number`) — Penalizes tokens based on their frequency in the text so far. Optional: `true` • Minimum: `-2` • Maximum: `2` ## Outputs [#outputs] - **Last Response** (`textarea`) — The last response from the model. # DeepSeek Chat (https://docs.fuser.studio/docs/nodes/llm/deepseek-chat) _Provided by [DeepSeek](https://deepseek.com) — [Learn More](https://deepseek.com)._ ## Inputs [#inputs] - **Prompt** (`textarea`) — The message prompt to send to the model. - **Model** (`dropdown`) — The DeepSeek model to use for chat completion. Optional: `true` • Default: `deepseek-chat` • Accepts: `deepseek-chat`, `deepseek-reasoner` - **System Prompt** (`textarea`) — A system prompt that sets the behavior and context for the conversation. Optional: `true` - **Attachment** (`string`) _(accepts multiple)_ — Attachments to include with the prompt (images, text, etc.). Optional: `true` - **Last Message Only** (`toggle`) — If enabled, only the last message will be sent to the model instead of the full conversation history. Optional: `true` • Default: `false` - **Temperature** (`number`) — Controls randomness in the output. Higher values make the output more random, lower values make it more deterministic. Optional: `true` • Minimum: `-1` • Maximum: `1` - **Seed** (`seed`) — A seed value for reproducible outputs. Use the same seed to get consistent results. Optional: `true` • Default: `3579` - **Top P** (`number`) — Nucleus sampling parameter. Controls diversity via nucleus sampling. Optional: `true` - **Top K** (`number`) — Limits the number of highest probability tokens to consider. Optional: `true` - **Max Tokens** (`number`) — Maximum number of tokens to generate in the response. Optional: `true` - **Stop Sequences** (`string`) _(accepts multiple)_ — Sequences that will cause the model to stop generating further tokens. Optional: `true` - **Presence Penalty** (`number`) — Penalizes tokens based on whether they appear in the text so far. Optional: `true` • Minimum: `-2` • Maximum: `2` - **Frequency Penalty** (`number`) — Penalizes tokens based on their frequency in the text so far. Optional: `true` • Minimum: `-2` • Maximum: `2` ## Outputs [#outputs] - **Last Response** (`textarea`) — The last response from the model. # Google Gemini Chat (https://docs.fuser.studio/docs/nodes/llm/google-gemini-chat) _Provided by [Google](https://aistudio.google.com) — [Learn More](https://ai.google.dev/gemini-api/docs/models/gemini)._ ## Inputs [#inputs] - **Prompt** (`textarea`) — The message prompt to send to the model. - **Model** (`dropdown`) — The Google Gemini model to use for chat completion. Optional: `true` • Default: `gemini-3.5-flash` • Accepts: `gemini-3.5-flash`, `gemini-3-flash-preview`, `gemini-3.1-pro-preview`, `gemini-3-pro-preview`, `gemini-2.5-pro`, `gemini-2.5-flash`, `gemini-2.5-flash-lite`, `gemini-2.5-flash-image (Nano Banana)`, `gemini-2.0-flash`, `gemini-2.0-flash-lite`, `gemini-1.5-flash`, `gemini-1.5-flash-8b`, `gemini-1.5-pro` - **System Prompt** (`textarea`) — A system prompt that sets the behavior and context for the conversation. Optional: `true` - **Attachment** (`generic`) _(accepts multiple)_ — Attachments to include with the prompt (images, text, etc.). Optional: `true` - **Last Message Only** (`toggle`) — If enabled, only the last message will be sent to the model instead of the full conversation history. Optional: `true` • Default: `false` - **Temperature** (`number`) — Controls randomness in the output. Higher values make the output more random, lower values make it more deterministic. Optional: `true` • Minimum: `-1` • Maximum: `1` - **Seed** (`seed`) — A seed value for reproducible outputs. Use the same seed to get consistent results. Optional: `true` • Default: `1914` - **Top P** (`number`) — Nucleus sampling parameter. Controls diversity via nucleus sampling. Optional: `true` - **Top K** (`number`) — Limits the number of highest probability tokens to consider. Optional: `true` - **Max Tokens** (`number`) — Maximum number of tokens to generate in the response. Optional: `true` - **Stop Sequences** (`string`) _(accepts multiple)_ — Sequences that will cause the model to stop generating further tokens. Optional: `true` - **Presence Penalty** (`number`) — Penalizes tokens based on whether they appear in the text so far. Optional: `true` • Minimum: `-2` • Maximum: `2` - **Frequency Penalty** (`number`) — Penalizes tokens based on their frequency in the text so far. Optional: `true` • Minimum: `-2` • Maximum: `2` ## Outputs [#outputs] - **Last Response** (`textarea`) — The last response from the model. - **Image** (`image`) — Generated image from the model (when applicable). # Groq Chat (https://docs.fuser.studio/docs/nodes/llm/groq-chat) _Provided by [Groq](https://groq.com) — [Learn More](https://groq.com)._ ## Inputs [#inputs] - **Prompt** (`textarea`) — The message prompt to send to the model. - **Model** (`dropdown`) — The Groq model to use for chat completion. Optional: `true` • Default: `openai/gpt-oss-120b` • Accepts: `openai/gpt-oss-20b`, `openai/gpt-oss-120b`, `qwen/qwen3-32b`, `llama-3.1-8b-instant`, `llama-3.3-70b-versatile`, `meta-llama/llama-guard-4-12b`, `meta-llama/llama-4-maverick-17b-128e-instruct`, `meta-llama/llama-4-scout-17b-16e-instruct`, `moonshotai/kimi-k2-instruct` - **System Prompt** (`textarea`) — A system prompt that sets the behavior and context for the conversation. Optional: `true` - **Attachment** (`string`) _(accepts multiple)_ — Attachments to include with the prompt (images, text, etc.). Optional: `true` - **Last Message Only** (`toggle`) — If enabled, only the last message will be sent to the model instead of the full conversation history. Optional: `true` • Default: `false` - **Temperature** (`number`) — Controls randomness in the output. Higher values make the output more random, lower values make it more deterministic. Optional: `true` • Minimum: `-1` • Maximum: `1` - **Seed** (`seed`) — A seed value for reproducible outputs. Use the same seed to get consistent results. Optional: `true` • Default: `4384` - **Top P** (`number`) — Nucleus sampling parameter. Controls diversity via nucleus sampling. Optional: `true` - **Top K** (`number`) — Limits the number of highest probability tokens to consider. Optional: `true` - **Max Tokens** (`number`) — Maximum number of tokens to generate in the response. Optional: `true` - **Stop Sequences** (`string`) _(accepts multiple)_ — Sequences that will cause the model to stop generating further tokens. Optional: `true` - **Presence Penalty** (`number`) — Penalizes tokens based on whether they appear in the text so far. Optional: `true` • Minimum: `-2` • Maximum: `2` - **Frequency Penalty** (`number`) — Penalizes tokens based on their frequency in the text so far. Optional: `true` • Minimum: `-2` • Maximum: `2` ## Outputs [#outputs] - **Last Response** (`textarea`) — The last response from the model. # Mistral Chat (https://docs.fuser.studio/docs/nodes/llm/mistral-chat) _Provided by [Mistral](https://mistral.ai) — [Learn More](https://mistral.ai)._ ## Inputs [#inputs] - **Prompt** (`textarea`) — The message prompt to send to the model. - **Model** (`dropdown`) — The Mistral model to use for chat completion. Optional: `true` • Default: `ministral-8b-latest` • Accepts: `ministral-3b-latest`, `ministral-8b-latest`, `mistral-large-latest`, `mistral-small-latest`, `pixtral-large-latest`, `pixtral-12b-2409`, `open-mistral-7b`, `open-mixtral-8x7b`, `open-mixtral-8x22b` - **System Prompt** (`textarea`) — A system prompt that sets the behavior and context for the conversation. Optional: `true` - **Attachment** (`string`) _(accepts multiple)_ — Attachments to include with the prompt (images, text, etc.). Optional: `true` - **Last Message Only** (`toggle`) — If enabled, only the last message will be sent to the model instead of the full conversation history. Optional: `true` • Default: `false` - **Temperature** (`number`) — Controls randomness in the output. Higher values make the output more random, lower values make it more deterministic. Optional: `true` • Minimum: `-1` • Maximum: `1` - **Seed** (`seed`) — A seed value for reproducible outputs. Use the same seed to get consistent results. Optional: `true` • Default: `5117` - **Top P** (`number`) — Nucleus sampling parameter. Controls diversity via nucleus sampling. Optional: `true` - **Top K** (`number`) — Limits the number of highest probability tokens to consider. Optional: `true` - **Max Tokens** (`number`) — Maximum number of tokens to generate in the response. Optional: `true` - **Stop Sequences** (`string`) _(accepts multiple)_ — Sequences that will cause the model to stop generating further tokens. Optional: `true` - **Presence Penalty** (`number`) — Penalizes tokens based on whether they appear in the text so far. Optional: `true` • Minimum: `-2` • Maximum: `2` - **Frequency Penalty** (`number`) — Penalizes tokens based on their frequency in the text so far. Optional: `true` • Minimum: `-2` • Maximum: `2` ## Outputs [#outputs] - **Last Response** (`textarea`) — The last response from the model. # OpenRouter Chat (https://docs.fuser.studio/docs/nodes/llm/openrouter-chat) _Provided by [OpenRouter](https://openrouter.ai) — [Learn More](https://openrouter.ai)._ ## Inputs [#inputs] - **Prompt** (`textarea`) — The message prompt to send to the model. - **Model** (`dropdown`) — The OpenRouter model to use for chat completion. Optional: `true` • Default: `qwen/qwen-turbo` - **System Prompt** (`textarea`) — A system prompt that sets the behavior and context for the conversation. Optional: `true` - **Attachment** (`generic`) _(accepts multiple)_ — Attachments to include with the prompt (images, text, etc.). Optional: `true` - **Last Message Only** (`toggle`) — If enabled, only the last message will be sent to the model instead of the full conversation history. Optional: `true` • Default: `false` - **Temperature** (`number`) — Controls randomness in the output. Higher values make the output more random, lower values make it more deterministic. Optional: `true` • Minimum: `-1` • Maximum: `1` - **Seed** (`seed`) — A seed value for reproducible outputs. Use the same seed to get consistent results. Optional: `true` • Default: `2317` - **Top P** (`number`) — Nucleus sampling parameter. Controls diversity via nucleus sampling. Optional: `true` - **Top K** (`number`) — Limits the number of highest probability tokens to consider. Optional: `true` - **Max Tokens** (`number`) — Maximum number of tokens to generate in the response. Optional: `true` - **Stop Sequences** (`string`) _(accepts multiple)_ — Sequences that will cause the model to stop generating further tokens. Optional: `true` - **Presence Penalty** (`number`) — Penalizes tokens based on whether they appear in the text so far. Optional: `true` • Minimum: `-2` • Maximum: `2` - **Frequency Penalty** (`number`) — Penalizes tokens based on their frequency in the text so far. Optional: `true` • Minimum: `-2` • Maximum: `2` ## Outputs [#outputs] - **Last Response** (`textarea`) — The last response from the model. # Perplexity Chat (https://docs.fuser.studio/docs/nodes/llm/perplexity-chat) _Provided by [Perplexity](https://perplexity.ai) — [Learn More](https://docs.perplexity.ai/guides/model-cards)._ ## Inputs [#inputs] - **Prompt** (`textarea`) — The message prompt to send to the model. - **Model** (`dropdown`) — The Perplexity model to use for chat completion. Optional: `true` • Default: `sonar` • Accepts: `sonar`, `sonar-pro`, `sonar-reasoning`, `sonar-reasoning-pro` - **System Prompt** (`textarea`) — A system prompt that sets the behavior and context for the conversation. Optional: `true` - **Attachment** (`string`) _(accepts multiple)_ — Attachments to include with the prompt (images, text, etc.). Optional: `true` - **Last Message Only** (`toggle`) — If enabled, only the last message will be sent to the model instead of the full conversation history. Optional: `true` • Default: `false` - **Temperature** (`number`) — Controls randomness in the output. Higher values make the output more random, lower values make it more deterministic. Optional: `true` • Minimum: `-1` • Maximum: `1` - **Seed** (`seed`) — A seed value for reproducible outputs. Use the same seed to get consistent results. Optional: `true` • Default: `9329` - **Top P** (`number`) — Nucleus sampling parameter. Controls diversity via nucleus sampling. Optional: `true` - **Top K** (`number`) — Limits the number of highest probability tokens to consider. Optional: `true` - **Max Tokens** (`number`) — Maximum number of tokens to generate in the response. Optional: `true` - **Stop Sequences** (`string`) _(accepts multiple)_ — Sequences that will cause the model to stop generating further tokens. Optional: `true` - **Presence Penalty** (`number`) — Penalizes tokens based on whether they appear in the text so far. Optional: `true` • Minimum: `-2` • Maximum: `2` - **Frequency Penalty** (`number`) — Penalizes tokens based on their frequency in the text so far. Optional: `true` • Minimum: `-2` • Maximum: `2` ## Outputs [#outputs] - **Last Response** (`textarea`) — The last response from the model. # Hunyuan Motion (https://docs.fuser.studio/docs/nodes/mesh/hunyuan-motion) _Provided by [Fal](https://fal.ai) — [Learn More](https://fal.ai/models/fal-ai/hunyuan-motion)._ ## Inputs [#inputs] - **Motion Prompt** (`textarea`) — A text description of the motion to generate, e.g. "A person is running then takes a big leap." - **Duration** (`slider`) — Duration of the motion in seconds. Accepts values between 0.5 and 12 seconds. Optional: `true` • Default: `5` • Minimum: `0.5` • Maximum: `12` - **Guidance Scale** (`slider`) — Controls how closely the generated motion adheres to your prompt. Higher values make the output more faithful to the prompt. Optional: `true` • Default: `5` • Minimum: `0` • Maximum: `20` - **Seed** (`seed`) — The same seed and prompt will output the same motion every time. Optional: `true` • Default: `8582` • Minimum: `0` • Maximum: `65535` ## Outputs [#outputs] - **Generated Motion** (`mesh`) — The generated 3D motion animation as an FBX file. # Hunyuan3D Multiview (https://docs.fuser.studio/docs/nodes/mesh/hunyuan3d-multiview) _Provided by [Fal](https://fal.ai) — [Learn More](https://fal.ai/models/fal-ai/hunyuan3d/v2/multi-view)._ ## Inputs [#inputs] - **Front Image** (`image`) — The front image to generate a 3D model from. - **Back Image** (`image`) — The back image to generate a 3D model from. - **Left Image** (`image`) — The left image to generate a 3D model from. - **Steps** (`slider`) — The number of inference steps to perform. Optional: `true` • Default: `50` • Minimum: `1` • Maximum: `50` - **Guidance Scale** (`slider`) — Guidance controls how closely the generated model adheres to the image you provide. Accepts values between 0 and 20. Optional: `true` • Default: `7.5` • Minimum: `0` • Maximum: `20` - **Octree Resolution** (`slider`) — The resolution of the octree. Accepts values between 10 and 1024. Optional: `true` • Default: `256` • Minimum: `10` • Maximum: `1024` - **Seed** (`seed`) — The same seed and image will output the same image every time. Optional: `true` • Default: `15669` • Minimum: `0` • Maximum: `65535` - **Textured** (`toggle`) — If enabled, the model will be textured. Textured generation increases the cost of the generation by 3x. Optional: `true` • Default: `false` - **Turbo** (`toggle`) — Turbo is a variant of Hunyuan3D that is faster and cheaper. Optional: `true` • Default: `false` ## Outputs [#outputs] - **Generated 3D** (`mesh`) — The generated 3D model. # Hunyuan3D V3 (https://docs.fuser.studio/docs/nodes/mesh/hunyuan3d-v3) _Provided by [Fal](https://fal.ai) — [Learn More](https://fal.ai/models/fal-ai/hunyuan3d-v3/text-to-3d)._ ## Inputs [#inputs] - **Prompt** (`textarea`) — Text prompt used for text-to-3D generation, or to guide sketch-to-3D when an image is also provided. Optional: `true` - **Image** (`image`) — Reference image or sketch. With image only, the node runs image-to-3D. With image plus prompt, it runs sketch-to-3D. Optional: `true` - **Face Count** (`slider`) — Target face count for the generated mesh. Higher values can preserve more detail. Optional: `true` • Default: `500000` • Minimum: `40000` • Maximum: `1500000` - **Generation Type** (`dropdown`) — Choose Normal, LowPoly, or Geometry generation. This control applies to text-to-3D and image-to-3D modes. Optional: `true` • Default: `Normal` • Accepts: `Normal`, `Low Poly`, `Geometry` - **Polygon Type** (`dropdown`) — Triangle or quadrilateral polygon layout for LowPoly mode. This control applies to text-to-3D and image-to-3D modes. Optional: `true` • Default: `triangle` • Accepts: `Triangle`, `Quadrilateral` - **Enable PBR** (`toggle`) — Generate additional PBR material information for downstream rendering workflows. Optional: `true` • Default: `false` ## Outputs [#outputs] - **Generated 3D** (`mesh`) — The generated GLB model. # Meshy 5 Remesh (https://docs.fuser.studio/docs/nodes/mesh/meshy-5-remesh) _Provided by [Fal](https://fal.ai) — [Learn More](https://fal.ai/models/fal-ai/meshy/v5/remesh)._ ## Inputs [#inputs] - **Model** (`mesh`) — The source 3D model to remesh. Supported source formats are GLB, GLTF, OBJ, FBX, and STL. - **Topology** (`dropdown`) — Set remeshed topology to Quad for smoother surfaces or Triangle for finer detail. Optional: `true` • Default: `triangle` • Accepts: `Quad`, `Triangle` - **Target Polycount** (`slider`) — Target number of polygons in the generated model. Actual count may vary based on geometry complexity. Optional: `true` • Default: `30000` • Minimum: `100` • Maximum: `300000` - **Origin Position** (`dropdown`) — Optionally move the model origin to the bottom or center. None keeps the current origin unchanged. Optional: `true` • Default: `none` • Accepts: `None`, `Bottom`, `Center` - **Resize Height (m)** (`number`) — Resize the model to this target height in meters. Set 0 to keep the original scale. Optional: `true` • Default: `0` • Minimum: `0` ## Outputs [#outputs] - **Remeshed 3D** (`mesh`) — The remeshed GLB model. # Meshy 5 Retexture (https://docs.fuser.studio/docs/nodes/mesh/meshy-5-retexture) _Provided by [Fal](https://fal.ai) — [Learn More](https://fal.ai/models/fal-ai/meshy/v5/retexture)._ ## Inputs [#inputs] - **Model** (`mesh`) — The 3D model used for retexturing. - **Texture Prompt** (`textarea`) — A textual prompt to guide texture generation. Optional: `true` - **Texture Image** (`image`) — A 2D reference image to guide the texture generation process. When provided, the texture prompt is ignored. Optional: `true` - **PBR** (`toggle`) — Whether to generate PBR Maps (metallic, roughness, normal) in addition to base color. Optional: `true` • Default: `true` - **Original UV** (`toggle`) — Use the original UV mapping of the model instead of generating new UVs. If the model has no original UV, output quality may be reduced. Optional: `true` • Default: `true` ## Outputs [#outputs] - **Generated 3D** (`mesh`) — The generated 3D model. # Meshy Rigging (https://docs.fuser.studio/docs/nodes/mesh/meshy-rigging) _Provided by [Fal](https://fal.ai) — [Learn More](https://fal.ai/models/fal-ai/meshy/rigging)._ ## Inputs [#inputs] - **Model** (`mesh`) — A humanoid character in GLB format to rig. The model must have clearly defined limbs. - **Height (m)** (`number`) — Approximate height of the character in meters. Optional: `true` • Default: `1.7` • Minimum: `0.1` - **Apply Animation** (`toggle`) — Apply an animation preset from the Meshy library to the rigged model. Optional: `true` • Default: `false` - **Animation Preset** (`dropdown`) — Animation from Meshy’s preset library, applied to the rigged model. Only used when Apply Animation is on. Optional: `true` • Default: `92` • Accepts: `Idle`, `Walking Woman`, `Alert`, `Arise`, `Attack`, `BackLeft run`, `BackRight Run`, `BeHit FlyUp`, `Dead`, `ForwardLeft Run Fight`, `ForwardRight Run Fight`, `Idle 02`, `Idle 03`, `Jump Run`, `Run 02`, `Run 03`, `RunFast`, `Skill 01`, `Skill 02`, `Skill 03`, `Walk Fight Back`, `Walk Fight Forward`, `FunnyDancing 01`, `FunnyDancing 02`, `FunnyDancing 03`, `Agree Gesture`, `Angry Stomp`, `Big Heart Gesture`, `Big Wave Hello`, `Call Gesture`, `Casual Walk`, `Catching Breath`, `Chair Sit Idle F`, `Chair Sit Idle M`, `Checkout Gesture`, `Clapping Run`, `Confused Scratch`, `Discuss While Moving`, `Dozing Elderly`, `Excited Walk F`, `Excited Walk M`, `Formal Bow`, `Gentlemans Bow`, `Handbag Walk`, `Happy jump f`, `Indoor Play`, `Jump Rope`, `Listening Gesture`, `Mirror Viewing`, `Motivational Cheer`, `Phone Call Gesture`, `Shouting Angrily`, `Sit to Stand Transition F`, `Sit to Stand Transition M`, `Squat Stance`, `Stage Walk`, `Stand and Chat`, `Stand to Sit Transition M`, `Step to Sit Transition`, `Victory Cheer`, `Walk to Sit`, `happy jump m`, `penguin walk`, `Arm Circle Shuffle`, `All Night Dance`, `Bass Beats`, `Boom Dance`, `Bubble Dance`, `Cherish Pop Dance`, `Crystal Beads`, `Cardio Dance`, `Denim Pop Dance`, `Dont You Dare`, `Fast Lightning`, `Gangnam Groove`, `Indoor Swing`, `Love You Pop Dance`, `Magic Genie`, `Not Your Mom`, `OMG Groove`, `Pop Dance LSA2`, `Pod Baby Groove`, `Shake It Off Dance`, `Superlove Pop Dance`, `You Groove`, `Axe Stance`, `Basic Jump`, `Boxing Practice`, `Chest Pound Taunt`, `Combat Stance`, `Counterstrike`, `Double Blade Spin`, `Double Combo Attack`, `Dodge and Counter`, `Flying Fist Kick`, `Gun Hold Left Turn`, `Kung Fu Punch`, `Left Slash`, `Run and Shoot`, `Reaping Swing`, `Rightward Spin`, `Sword Shout`, `Sword Judgment`, `Simple Kick`, `Side Shot`, `Triple Combo Attack`, `Confident Walk`, `Confident Strut`, `Flirty Strut`, `Groovy Walk`, `Hello Run`, `Injured Walk`, `Monster Walk`, `Mummy Stagger`, `Proud Strut`, `Quick Walk`, `Run to Walk Transition`, `Red Carpet Walk`, `Skip Forward`, `Slow Orc Walk`, `Touch and Run`, `Thoughtful Walk`, `Texting Walk`, `Unsteady Walk`, `Walking with Phone`, `Charged Spell Cast`, `Charged Spell Cast 1`, `Charged Ground Slam`, `Heavy Hammer Swing`, `mage soell cast`, `mage soell cast 1`, `mage soell cast 2`, `mage soell cast 3`, `mage soell cast 4`, `mage soell cast 5`, `mage soell cast 6`, `mage soell cast 7`, `mage soell cast 8`, `Block1`, `Block2`, `Block3`, `Block4`, `Block5`, `Block6`, `Block8`, `Block9`, `Block10`, `Sword Parry`, `Sword Parry Backward`, `Two Handed Parry`, `Hit Reaction with Bow`, `Sword Parry Backward 1`, `Sword Parry Backward 2`, `Sword Parry Backward 3`, `Sword Parry Backward 4`, `Sword Parry Backward 5`, `Stand Dodge`, `Stand Dodge 1`, `Roll Dodge`, `Roll Dodge 1`, `Roll Dodge 2`, `Roll Dodge 3`, `Stand Dodge 2`, `Roll Dodge 4`, `Stand Dodge 3`, `Kneeling Reload`, `Running Reload`, `Slow Walk Reload`, `Prone Reload`, `Forward Reload Subtle`, `Standing Reload`, `Hit Reaction to Waist`, `Electrocution Reaction`, `Slap Reaction`, `Face Punch Reaction`, `Face Punch Reaction 1`, `Face Punch Reaction 2`, `Gunshot Reaction`, `Hit Reaction`, `Hit Reaction 1`, `Shot in the Back and Fall`, `Electrocuted Fall`, `Shot and Blown Back`, `Shot and Fall Backward`, `Shot and Fall Forward`, `Shot and Slow Fall Backward`, `Strangled and Fall Forward`, `Knock Down`, `Fall Dead from Abdominal Injury`, `dying backwards`, `Knock Down 1`, `Left Jab from Guard`, `Right Jab from Guard`, `Left Hook from Guard`, `Right Uppercut from Guard`, `Right Upper Hook from Guard`, `Left Uppercut from Guard`, `Left Short Hook from Guard`, `Punch Combo`, `Weapon Combo`, `Punch Combo 1`, `Punch Combo 2`, `Weapon Combo 1`, `Punch Combo 3`, `Punch Combo 4`, `Punch Combo 5`, `Spartan Kick`, `Roundhouse Kick`, `Lunge Roundhouse Kick`, `Boxing Guard Right Straight Kick`, `Boxing Guard Prep Straight Punch`, `Boxing Guard Step Knee Strike`, `Elbow Strike`, `Leg Sweep`, `Punch Forward with Both Fists`, `High Kick`, `Lunge Spin Kick`, `Sweeping Kick`, `Step in High Kick`, `Right Hand Sword Slash`, `Shield Push Left`, `Charged Upward Slash`, `Draw and Shoot from Back`, `Draw and Shoot from Back 1`, `Archery Shot`, `Archery Shot 1`, `Archery Shot 2`, `Archery Shot 3`, `Walk Forward with Bow Aimed`, `Draw and Shoot from Back 2`, `Walk Backward with Bow Aimed`, `Archery Aim with Lateral Scan`, `Cowboy Quick Draw Shooting`, `Walk Backward While Shooting`, `Walk Forward While Shooting`, `Forward Roll and Fire`, `Draw and Shoot Left`, `Charged Axe Chop`, `Axe Spin Attack`, `Crouch Pull and Throw`, `Thrust Slash`, `Weapon Combo 2`, `Charged Slash`, `Idle 3`, `Idle 4`, `Idle 5`, `Idle 6`, `Idle 7`, `Idle 8`, `Idle 9`, `Idle 10`, `Idle 11`, `Idle 12`, `Idle 13`, `Idle 14`, `Angry Ground Stomp`, `Angry Ground Stomp 1`, `Angry Ground Stomp 2`, `CrouchLookAroundBow`, `Step Forward and Push`, `Push Forward and Stop`, `Push and Walk Forward`, `Crouch and Push Forward`, `Sleep on Desk`, `Cough While Sleeping`, `Groan Holding Stomach in Sleep`, `Lie Down Hands Spread`, `Sleep Normally`, `Sit and Doze Off`, `sleep`, `Toss and Turn`, `Wake Up and Look Up`, `Lie on Chair Sunbathe and Sleep`, `Male Run Forward Pick Up Left`, `Female Crouch Pick Up Place Side`, `Female Run Forward Pick Up Right`, `Male Bend Over Pick Up`, `Female Crouch Pick Fruit Basket Stand`, `Female Stand Pick Fruit Basket`, `Female Crouch Pick Gun Point Forward`, `Female Crouch Pick Throw Forward`, `Female Bend Over Pick Up Inspect`, `Female Walk Pick Put In Pocket`, `Pull Radish`, `Collect Object`, `open door`, `open door 1`, `open door 2`, `open door 3`, `open door 4`, `Wave One Hand`, `Wave for Help`, `Gesture with Hand on Gun`, `Wave for Help 1`, `Wave for Help 2`, `Wave for Help 3`, `Wave for Help 4`, `Personalized Gesture`, `Cheer with Both Hands Up`, `Stand Clap and Sit Down`, `Sit Cheer with Left Hand`, `Cheer with Both Hands 1`, `Stand Wave and Sit Down`, `Cheer with Both Hands`, `Seated Fist Pump`, `Stand Cheer and Sit Down`, `Cheer with One Hand Up`, `Sitting Answering Questions`, `Talk Passionately`, `Talk with Left Hand on Hip`, `Talk with Left Hand Raised`, `Stand Talking Angry`, `Phone Conversation`, `Talk with Hands Open`, `Talk with Right Hand Open`, `Hand on Hip Gesture`, `Headache Relief`, `Shrug`, `Scheming Hand Rub`, `air squat`, `bicep curl`, `bicycle crunch`, `circle crunch`, `golf drive`, `idle to push up`, `jump push up`, `jumping jacks`, `kettlebell swing`, `push up to idle`, `push up`, `situps`, `Sumo High Pull`, `Look Around Dumbfounded`, `Lower Weapon Look Raise`, `Axe Breathe and Look Around`, `Long Breathe and Look Around`, `Torch Look Around`, `Short Breathe and Look Around`, `Walking Scan with Sudden Look Back`, `Crawl and Look Back`, `Walk Slowly and Look Around`, `Stand and Drink`, `Sit and Drink`, `Stand Up1`, `Stand Up2`, `Stand Up3`, `Stand Up4`, `Stand Up5`, `Stand Up6`, `Stand Up7`, `Stand Up8`, `Stand Up9`, `Stand Up10`, `Sitting Clap`, `Sit Finger Wag No`, `Sit Hands on Head Lean Back`, `Sit Thumbs Up Right`, `Sit Shout Hands on Mouth`, `Look Back and Sit`, `Sit to standTransition Female 2`, `Sit Dodge`, `Sit Cross Legged`, `Sit Cross Legged on Floor`, `Sit on Chair Arms Crossed`, `Kneel on One Knee and Stand`, `falling down`, `SideLying Reach Help`, `Angry To Tantrum Sit`, `Lie Back Leg Swing`, `Stand To Side Lying`, `Sit Lie Bed`, `Prone Reach Help`, `Handstand Flip`, `Punch Pose`, `Relax arms then strike battle pose`, `Large step then high kick`, `Side jumps in horse stance`, `Step Right for Exercise`, `Jump and Slam Back Down`, `Quick Step and Spin Dodge`, `Boxing Warmup`, `Zombie Scream`, `Half Squat with Thumb Up`, `Show Both Arm Muscles`, `Grip and Throw Down`, `Stand on Pole and Balance`, `Head Hold in Pain`, `Ground Flip and Sweep Up`, `baseball pitching`, `Backflip and Hooks`, `Breakdance 1990`, `Burpee Exercise`, `360 Power Spin Jump`, `Crouch Charge and Throw`, `Step Step Turn Kick`, `Sprint Roll and Flip`, `Run and Leap`, `Victory Fist Pump`, `Crouch and Step Back`, `Joyful Dance with Hand Sway`, `Thomas Flair to Jump Up`, `Wall Push Jump and Flip`, `Jazz Hands`, `Finger Wag No`, `Kick a Soccer Ball`, `Neck Slashing Gesture`, `victory`, `Backflip and Rise`, `Double kick forward`, `Happy Sway Standing`, `Hit in Back While Running`, `Hop with Arms Raised`, `Jump to Catch and Fall`, `Left Hand Bitten Step Back`, `Over Shoulder Throw`, `Rising Flying Kick`, `Vault with Rifle`, `Roll Behind Cover`, `Vault and Land`, `Unarmed Vault`, `Parkour Vault`, `Parkour Vault with Roll`, `Parkour Vault 1`, `Parkour Vault 2`, `Parkour Vault 3`, `Fast Ladder Climb`, `Ladder Climb Finish`, `Ladder Mount Start`, `Slow Ladder Climb`, `Ladder Climb Loop`, `Climb Left with Both Limbs`, `Climb Right with Both Limbs`, `Climb Stairs`, `Fast Stair Climb`, `climbing up wall`, `diagonal wall run`, `Hang and Climb Left`, `Hang and Climb Rght`, `Jump and Grab Wall`, `Climb Up Rope`, `Wall Flip`, `One Arm Handstand`, `Backflip`, `Backflip Sweep Kick`, `Sweep Kick`, `Jumping Head Scissor Takedown`, `Jumping Punch`, `Unicycle Jump Dismount`, `Run Jump and Roll`, `Jump with Arms Open`, `Jump with Arms and Legs Open`, `Backflip Jump`, `Run and Jump`, `Leap and Punch`, `Leap Right and Catch`, `Regular Jump`, `Jump Over Obstacle 2`, `Back Jump`, `Jumping Down`, `Jump Over Obstacle`, `Jump Over Obstacle 1`, `Quad Jump Left`, `Quad Jump Up`, `Quad Climb Right`, `Hang and Push with Foot`, `Rope Hang Idle`, `Bar Hang Idle`, `Upside Down Rope Hang`, `Upside Down Rope Hang 1`, `Upside Down Rope Hang 2`, `Grab Wall Midair Idle`, `Slow Bar Hang Left`, `Slow Bar Hang Right`, `Jump and Hang on Bar`, `Wall Support to Step Down`, `Climb Attempt and Fall 3`, `Climb Attempt and Fall 4`, `Climb Attempt and Fall 5`, `Fall Down`, `Fall from Bar`, `Wall Support Jump to Ground`, `Jump Down from Wall`, `Swing on Rope to Ground`, `Grab Bar and Swing Forward`, `Rope Hang Backflip to Crouch`, `climbing down wall`, `Climb Attempt and Fall`, `Climb Attempt and Fall 1`, `Climb Attempt and Fall 2`, `Leap of Faith`, `Fall1`, `Fall2`, `Fall3`, `Fall4`, `Dive Down and Land`, `Dive Down and Land 1`, `Dive Down and Land 2`, `Lean Forward Sprint`, `Standard Forward Charge`, `Rifle Charge`, `Male Head Down Charge`, `Female Head Down Charge`, `Female Bow Charge Left Hand`, `Female Throwing Stance Charge`, `slide light`, `slide right`, `sliding rool`, `sliding stumble`, `Crouch Walk with Torch`, `Crouch Walk Left with Torch`, `Crouch Walk Right with Torch`, `Cautious Crouch Walk Backward`, `Cautious Crouch Walk Forward`, `Cautious Crouch Walk Left`, `Cautious Crouch Walk Right`, `Crouch Walk Left with Gun`, `Walk Left with Gun`, `Walk Backward with Gun`, `run fast 3`, `Sprint and Sudden Stop`, `run fast 4`, `run fast 5`, `run fast 6`, `run fast 7`, `run fast 8`, `run fast 9`, `run fast 10`, `run fast 2`, `Injured Walk Backward`, `Walk Backward with Gun 1`, `Walk Backward with Grenade`, `Step Back`, `Walk Backward`, `Walk Backward with Bow`, `Walk Backward with Sword`, `Walk Backward with Bow 1`, `Walk Backward with Sword Shield`, `Crawl Backward`, `Carry Heavy Cannon Forward`, `Carry Heavy Object Walk`, `Carry Water Bucket Walk`, `Elderly Shaky Walk`, `Funky Walk`, `Limping Walk 1`, `Limping Walk 2`, `Limping Walk 3`, `Limping Walk`, `Sneaky Walk`, `Spear Walk`, `Step Hip Hop Dance`, `Stumble Walk`, `Stylish Walk`, `Tightrope Walk`, `Walk with Umbrella`, `walking 2`, `Walk with Walker Support`, `Swim Idle`, `Swim Forward`, `swimming to edge`, `Run Turn Left`, `Walk Turn Left`, `Rifle Turn Left`, `Walk Turn Left with Weapon`, `Combat Idle Turn Left`, `Idle Turn Left`, `Idle Step Turn Left`, `Idle Torch Turn Left`, `Depressed Full Turn Left`, `Sword and Shield Alert Turn Left`, `Run Sharp Turn Right`, `Run Turn Right`, `Walk Turn Right`, `Walk Turn Right Female`, `Rifle Aim Turn Right`, `Idle Turn Right`, `Walk Turn Right Idle Style`, `Frustrated Turn Right`, `Alert Quick Turn Right`, `Sword and Shield Alert Turn Right`, `Hip Hop Dance`, `Hip Hop Dance 1`, `Hip Hop Dance 2`, `Hip Hop Dance 3`, `jazz danc`, `ymca dance`, `Hip Hop Dance 4`, `kettlebell swing 1`, `Idle 15`, `Backflip inplace`, `Backflip Sweep Kick inplace`, `Back Jump inplace`, `BackLeft run inplace`, `BackRight Run inplace`, `BeHit FlyUp inplace`, `Boxing Practice inplace`, `Carry Heavy Cannon Forward inplace`, `Carry Heavy Object Walk inplace`, `Carry Water Bucket Walk inplace`, `Casual Walk inplace`, `Cautious Crouch Walk Backward inplace`, `Cautious Crouch Walk Forward inplace`, `Cautious Crouch Walk Left inplace`, `Cautious Crouch Walk Right inplace`, `Climb Left with Both Limbs inplace`, `Climb Right with Both Limbs inplace`, `Confident Strut inplace`, `Crawl Backward inplace`, `Crouch Walk Left with Gun inplace`, `Crouch Walk Left with Torch inplace`, `Crouch Walk Right with Torch inplace`, `Elderly Shaky Walk inplace`, `Female Bow Charge Left Hand inplace`, `Female Throwing Stance Charge inplace`, `Flirty Strut inplace`, `ForwardLeft Run Fight inplace`, `ForwardRight Run Fight inplace`, `Funky Walk inplace`, `Handbag Walk inplace`, `Hello Run inplace`, `Injured Walk inplace`, `Injured Walk Backward inplace`, `Jazz Hands inplace`, `Jump Over Obstacle inplace`, `Jump Over Obstacle 1 inplace`, `Jump Over Obstacle 2 inplace`, `Jump Run inplace`, `Lean Forward Sprint inplace`, `Limping Walk inplace`, `Limping Walk 1 inplace`, `Limping Walk 2 inplace`, `Limping Walk 3 inplace`, `Lunge Roundhouse Kick inplace`, `Mummy Stagger inplace`, `Parkour Vault with Roll inplace`, `Proud Strut inplace`, `Red Carpet Walk inplace`, `Rifle Charge inplace`, `Run and Leap inplace`, `run fast 10 inplace`, `run fast 2 inplace`, `run fast 3 inplace`, `run fast 4 inplace`, `run fast 5 inplace`, `run fast 6 inplace`, `run fast 7 inplace`, `run fast 8 inplace`, `run fast 9 inplace`, `Running Reload inplace`, `Run to Walk Transition inplace`, `Skip Forward inplace`, `Slow Orc Walk inplace`, `Slow Walk Reload inplace`, `Sneaky Walk inplace`, `Spear Walk inplace`, `Standard Forward Charge inplace`, `Stumble Walk inplace`, `Stylish Walk inplace`, `Texting Walk inplace`, `Tightrope Walk inplace`, `Unsteady Walk inplace`, `Walk Backward inplace`, `Walk Backward While Shooting inplace`, `Walk Backward with Bow inplace`, `Walk Backward with Bow 1 inplace`, `Walk Backward with Bow Aimed inplace`, `Walk Backward with Grenade inplace`, `Walk Backward with Gun inplace`, `Walk Backward with Gun 1 inplace`, `Walk Backward with Sword inplace`, `Walk Fight Back inplace`, `Walk Fight Forward inplace`, `Walk Forward While Shooting inplace`, `Walk Forward with Bow Aimed inplace`, `walking 2 inplace`, `Walking with Phone inplace`, `Walk Left with Gun inplace`, `Walk with Umbrella inplace`, `Walk with Walker Support inplace` - **Block NSFW** (`toggle`) — Check the input model for safety before processing. Optional: `true` • Default: `true` ## Outputs [#outputs] - **Rigged 3D** (`mesh`) — The animated rigged character in GLB format when animation is applied; otherwise the static rigged character. # Meshy (https://docs.fuser.studio/docs/nodes/mesh/meshy) _Provided by [Fal](https://fal.ai) — [Learn More](https://fal.ai/models/fal-ai/meshy/v6/image-to-3d)._ ## Inputs [#inputs] - **Version** (`dropdown`) — Choose Meshy 5 for single-image or multi-image reconstruction, or Meshy 6 for the latest single-image model. Optional: `true` • Default: `v6` • Accepts: `Meshy 5`, `Meshy 6` - **Images** (`image`) _(accepts multiple)_ — Provide 1 to 4 images of the same object from different angles for Meshy 5, or exactly 1 image for Meshy 6. - **Remesh** (`toggle`) — Whether to enable the remesh phase. When false, Meshy returns a triangular mesh and ignores Topology and Polycount. Optional: `true` • Default: `true` - **Topology** (`dropdown`) — Specify the topology of the generated model. Quad suits smoother surfaces, while Triangle preserves more detailed geometry. Remesh must be enabled for Topology to take effect. Optional: `true` • Default: `triangle` • Accepts: `Quad`, `Triangle` - **Polycount** (`slider`) — The target number of polygons for the generated model. Remesh must be enabled for Polycount to take effect. Optional: `true` • Default: `30000` • Minimum: `1000` • Maximum: `100000` - **Symmetry** (`dropdown`) — Control whether symmetry is enforced, disabled, or determined automatically during model generation. Optional: `true` • Default: `auto` • Accepts: `Auto`, `On`, `Off` - **T/A Pose** (`toggle`) — Whether to generate the model in T/A pose when the subject is human-like. Optional: `true` • Default: `false` - **PBR** (`toggle`) — Generate PBR maps like metallic, roughness, and normal in addition to base color textures. Optional: `true` • Default: `true` - **Texture Prompt** (`textarea`) — An optional text prompt to guide texture generation. Optional: `true` - **Texture Image** (`image`) — An optional 2D reference image to guide texture generation. Optional: `true` ## Outputs [#outputs] - **Generated 3D** (`mesh`) — The generated GLB model. # Rodin (https://docs.fuser.studio/docs/nodes/mesh/rodin) _Provided by [Fal](https://fal.ai) — [Learn More](https://fal.ai/models/fal-ai/hyper3d/rodin/v2.5)._ ## Inputs [#inputs] - **Prompt** (`textarea`) — A textual prompt to guide model generation. Required for Text-to-3D mode. Optional for Image-to-3D mode. Optional: `true` - **Images** (`image`) _(accepts multiple)_ — Images to generate your 3D model. You can upload either multiple views of one object, or images of different objects. Select the appropriate "Multi-Image Mode" below based on your image type. Optional: `true` - **Model** (`dropdown`) — Choose Rodin 2.5 for current quality or the original Rodin endpoint for older workflows. Optional: `true` • Default: `v2.5` • Accepts: `2.5`, `Original` - **Multi-Image Mode** (`dropdown`) — Choose how to process multiple images: Select "Fuse" when uploading images of different objects to combine their features. Select "Concat" when uploading multiple views of the same object to create a more accurate 3D model. Optional: `true` • Default: `fuse` • Accepts: `Fuse`, `Concat` - **Tier** (`dropdown`) — Rodin Sketch provides fast generation of 3D models, suitable for early-stage prototyping. It produces models with basic geometry and texturing, allowing for quick visualization and iteration. Rodin Regular generates 3D models with customizable polygon counts and high-quality texturing. It is ideal for projects that require a good balance of detail and efficiency. Optional: `true` • Default: `Gen-2.5-High` • Accepts: `Minimum`, `Extreme Low`, `Low`, `Medium`, `High`, `Extreme High`, `Sketch`, `Regular` - **Mesh Quality** (`dropdown`) — Rodin 2.5 quality and mesh type. Auto chooses the advised option for the selected tier. Optional: `true` • Default: `Auto` • Accepts: `Auto`, `4K Quad`, `8K Quad`, `18K Quad`, `2K Triangle`, `20K Triangle`, `2M Triangle`, `50K Triangle`, `150K Triangle`, `500K Triangle`, `1M Triangle`, `50K Quad`, `100K Quad`, `200K Quad` - **Material** (`dropdown`) — Rodin 2.5 material output. PBR gives physically-based materials, Shaded bakes lighting, All returns both, and None returns geometry only. Optional: `true` • Default: `All` • Accepts: `PBR`, `Shaded`, `All`, `None` - **Quality** (`dropdown`) — The quality of the generated 3D model. Optional: `true` • Default: `medium` • Accepts: `Extra Low`, `Low`, `Medium`, `High` - **Seed** (`seed`) — The same seed and prompt will result in the same output every time. Optional: `true` • Default: `16919` • Minimum: `0` • Maximum: `65535` - **Bake Lighting** (`toggle`) — If enabled, the model will bake the lighting of the image into the 3D model. Optional: `true` • Default: `false` - **Hyper Mode** (`toggle`) — Whether to export the model using hyper mode. Optional: `true` • Default: `false` - **T/A Pose** (`toggle`) — Whether to generate the model in T/A Pose when the model is human-like. Optional: `true` • Default: `false` - **HD Texture** (`toggle`) — Enable Rodin 2.5 texture post-processing for higher visual fidelity. Optional: `true` • Default: `false` - **High Pack** (`toggle`) — Generate 4K textures instead of the default 2K. In Quad mesh modes, High Pack also increases the face count substantially. Optional: `true` • Default: `false` - **Creative Mode** (`toggle`) — Enhance Rodin 2.5 generative robustness while keeping output consistency. Optional: `true` • Default: `false` ## Outputs [#outputs] - **Generated 3D** (`mesh`) — The generated 3D model. # SAM 3D Objects (https://docs.fuser.studio/docs/nodes/mesh/sam-3d-objects) _Provided by [Fal](https://fal.ai) — [Learn More](https://fal.ai/models/fal-ai/sam-3/3d-objects)._ ## Inputs [#inputs] - **Image** (`image`) — The source image to reconstruct in 3D. - **Prompt** (`textarea`) — Optional object prompt used for auto-segmentation when explicit masks are not provided. Optional: `true` • Default: `` - **Export Textured GLB** (`toggle`) — When enabled, exports a GLB with baked texture and UVs instead of vertex colors. Optional: `true` • Default: `false` - **Detection Threshold** (`slider`) — Detection confidence threshold from 0.1 to 1.0. Lower values detect more objects but can be less precise. Optional: `true` • Default: `0.5` • Minimum: `0.1` • Maximum: `1` - **Seed** (`seed`) — Reuse the same seed with the same image and prompt to reproduce the same result. Optional: `true` • Default: `34523` • Minimum: `0` ## Outputs [#outputs] - **Generated 3D** (`mesh`) — The generated GLB model. # Trellis 2 (https://docs.fuser.studio/docs/nodes/mesh/trellis-2) _Provided by [Fal](https://fal.ai) — [Learn More](https://fal.ai/models/fal-ai/trellis-2)._ ## Inputs [#inputs] - **Image** (`image`) — The image to convert into a 3D model. - **Resolution** (`dropdown`) — Internal generation resolution. Higher values are slower and cost more, but can improve detail. Optional: `true` • Default: `1024` • Accepts: `512`, `1024`, `1536` - **Decimation Target** (`slider`) — Target number of vertices in the final mesh. Lower values create smaller files with less detail. Optional: `true` • Default: `500000` • Minimum: `5000` • Maximum: `2000000` - **Texture Size** (`dropdown`) — Resolution of the baked texture map applied to the mesh. Optional: `true` • Default: `2048` • Accepts: `1024`, `2048`, `4096` - **Remesh** (`toggle`) — Rebuild the mesh topology for cleaner triangles and more reliable downstream use. Optional: `true` • Default: `true` - **Remesh Band** (`slider`) — Controls how far remeshing can move vertices from the original surface. Optional: `true` • Default: `1` • Minimum: `0` • Maximum: `4` - **Remesh Projection** (`slider`) — How strongly the remeshed vertices are projected back onto the original surface. 0 is smoother, 1 preserves more detail. Optional: `true` • Default: `0` • Minimum: `0` • Maximum: `1` - **Seed** (`seed`) — Reuse the same seed with the same image to reproduce the same result. Optional: `true` • Default: `46177` - **Structure Guidance** (`slider`) — How closely the initial 3D structure follows the input image. Optional: `true` • Default: `7.5` • Minimum: `0` • Maximum: `10` - **Structure Rescale** (`slider`) — Dampens artifacts from high structure guidance. Optional: `true` • Default: `0.7` • Minimum: `0` • Maximum: `1` - **Structure Steps** (`slider`) — Number of denoising steps used for the initial structure stage. Optional: `true` • Default: `12` • Minimum: `1` • Maximum: `50` - **Structure Sharpness** (`slider`) — Controls the sharpness of the structure generation noise schedule. Optional: `true` • Default: `5` • Minimum: `1` • Maximum: `6` - **Shape Guidance** (`slider`) — How closely the detailed geometry follows the input image. Optional: `true` • Default: `7.5` • Minimum: `0` • Maximum: `10` - **Shape Rescale** (`slider`) — Dampens artifacts from high shape-stage guidance. Optional: `true` • Default: `0.5` • Minimum: `0` • Maximum: `1` - **Shape Steps** (`slider`) — Number of denoising steps used for shape refinement. Optional: `true` • Default: `12` • Minimum: `1` • Maximum: `50` - **Shape Sharpness** (`slider`) — Controls the sharpness of the shape refinement noise schedule. Optional: `true` • Default: `3` • Minimum: `1` • Maximum: `6` - **Texture Guidance** (`slider`) — How closely the texture colors follow the input image. Optional: `true` • Default: `1` • Minimum: `0` • Maximum: `10` - **Texture Rescale** (`slider`) — Dampens artifacts from high texture guidance. Optional: `true` • Default: `0` • Minimum: `0` • Maximum: `1` - **Texture Steps** (`slider`) — Number of denoising steps used for texture generation. Optional: `true` • Default: `12` • Minimum: `1` • Maximum: `50` - **Texture Sharpness** (`slider`) — Controls the sharpness of the texture generation noise schedule. Optional: `true` • Default: `3` • Minimum: `1` • Maximum: `6` ## Outputs [#outputs] - **Generated 3D** (`mesh`) — The generated GLB model. # Tripo 3D (https://docs.fuser.studio/docs/nodes/mesh/tripo-3d) _Provided by [Fal](https://fal.ai) — [Learn More](https://fal.ai/models/tripo3d/tripo/v2.5/image-to-3d)._ ## Inputs [#inputs] - **Front Image** (`image`) — The required front view image of the object. With only this image, Tripo uses image-to-3d. Adding any extra view switches to multiview-to-3d. - **Back Image** (`image`) — An optional back view image of the same object. Optional: `true` - **Left Image** (`image`) — An optional left-side view image of the same object. Optional: `true` - **Right Image** (`image`) — An optional right-side view image of the same object. Optional: `true` - **Auto Size** (`toggle`) — Automatically scale the model to real-world dimensions in meters. Optional: `true` • Default: `false` - **Orientation** (`dropdown`) — Align the generated model to the original image orientation or keep the default orientation. Optional: `true` • Default: `default` • Accepts: `Default`, `Align Image` - **Face Limit** (`number`) — Optionally cap the number of faces on the generated model. Optional: `true` • Minimum: `0` - **Quad Mesh** (`toggle`) — Generate a quad mesh output. This adds cost and forces FBX export on the Tripo side. Optional: `true` • Default: `false` - **Texture Quality** (`dropdown`) — Choose whether to disable textures or generate standard or HD textures. Optional: `true` • Default: `standard` • Accepts: `No Texture`, `Standard`, `HD` - **Texture Alignment** (`dropdown`) — Prioritize texture alignment to the original image or to the generated geometry. Optional: `true` • Default: `original_image` • Accepts: `Original Image`, `Geometry` - **PBR** (`toggle`) — Enable PBR output for the generated model. When enabled, texture settings are ignored and the PBR model output is used. Optional: `true` • Default: `false` - **Geometry Seed** (`seed`) — Reuse the same seed to reproduce the same geometry from the same images. Optional: `true` • Default: `6400` • Minimum: `0` - **Texture Seed** (`seed`) — Reuse the same texture seed to reproduce the same texture result. Optional: `true` • Default: `17784` • Minimum: `0` ## Outputs [#outputs] - **Generated 3D** (`mesh`) — The generated 3D model. # App (https://docs.fuser.studio/docs/nodes/other/app) ## Inputs [#inputs] - **Prompt** (`textarea`) — Describe what you want to create. The LLM will generate code for you. Optional: `true` - **Inspiration** (`generic`) _(accepts multiple)_ — Multimodal visual / video / audio context for the agent. Any media wired here is sent to the model so it can perceive what you want. Optional: `true` - **Assets** (`generic`) _(accepts multiple)_ — Public URLs of media (image / video / audio) to make available to the agent. Optional: `true` - **Database** (`resource`) — A shared Resource Node binding for the generated app. Optional: `true` - **Model** (`dropdown`) — The model used to generate and edit this app. Optional: `true` • Default: `app-node-free` ## Outputs [#outputs] - **Preview URL** (`text`) — Live preview URL of the deployed app. Optional: `true` # Resource (https://docs.fuser.studio/docs/nodes/other/resource) ## Outputs [#outputs] - **Binding** (`resource`) — Connect to an App to expose this resource as env.. Optional: `true` # Audio (https://docs.fuser.studio/docs/nodes/primitive/audio) ## Inputs [#inputs] - **Audio** (`audio`) — Audio content Optional: `true` ## Outputs [#outputs] - **Audio Out** (`audio`) — The displayed audio, re-emitted for downstream nodes. Optional: `true` # Compositor (https://docs.fuser.studio/docs/nodes/primitive/compositor) The Compositor node opens Fuser's full-screen visual editor. Use it when you want one node to assemble a polished image, video frame, thumbnail, product mockup, title card, layout, or reusable scene from multiple inputs. With a Compositor node you can: * Stack connected images, videos, 3D meshes, and other Compositor outputs. * Draw shapes, vector paths, raster paint, eraser masks, and adjustment layers directly on the canvas. * Build rich text with Google Fonts, custom fonts, variable font axes, stroke, alignment, tracking, and manual kerning. * Organize complex scenes with groups, nested groups, masks, blend modes, and layer-level transforms. * Split an image into editable cutout layers, then refine each cutout independently. * Save the final composition as the node output for downstream nodes, previews, or export. For the complete editor guide, start with the dedicated [Compositor docs](https://docs.fuser.studio/docs/compositor.md). - [Compositor overview](https://docs.fuser.studio/docs/compositor.md): Learn the editor layout, canvas model, tools, layers, properties, and export flow. - [Compositor layers](https://docs.fuser.studio/docs/compositor/layers.md): Learn how image, text, group, mask, nested compositor, split, and 3D layers behave. - [Compositor properties](https://docs.fuser.studio/docs/compositor/properties.md): Adjust canvas, transform, appearance, masks, typography, and type-specific controls. ## Inputs [#inputs] - **Layer 1** (`generic`) — First layer (bottom) Optional: `true` - **Layer 2** (`generic`) — Layer 2 Optional: `true` ## Outputs [#outputs] - **Scene** (`generic`) — The full compositor scene for downstream rendering. Hybrid video/image nodes can render this directly. Optional: `true` # Image (https://docs.fuser.studio/docs/nodes/primitive/image) ## Inputs [#inputs] - **Image** (`image`) — Image content Optional: `true` ## Outputs [#outputs] - **Image Out** (`image`) — The displayed image, re-emitted for downstream nodes. Optional: `true` # Mesh (https://docs.fuser.studio/docs/nodes/primitive/mesh) ## Inputs [#inputs] - **3D** (`mesh`) — 3D mesh content Optional: `true` # Prompt Template (https://docs.fuser.studio/docs/nodes/primitive/prompt-template) Prompt Template lets you write reusable prompt text with slots that can be filled by other nodes. Use `{variable}` syntax to create a matching input on the node, then connect text, captions, keywords, or other prompt fragments into that slot. The node outputs one completed text value that you can send into image, video, audio, or chat generation nodes. You can also use inline choices like `{red|blue|green}` when you want to quickly switch between a few options without rewriting the prompt. This is useful for testing prompt variations, keeping repeated wording consistent, and building a single prompt structure that adapts to different inputs. ## Inputs [#inputs] - **Template** (`textarea`) — Template text with {variable} and {opt1|opt2} syntax. Optional: `true` ## Outputs [#outputs] - **Text** (`textarea`) — Interpolated text output. Optional: `true` # Style (https://docs.fuser.studio/docs/nodes/primitive/style) ## Inputs [#inputs] - **Style** (`style`) — The style to use for the model. ## Outputs [#outputs] - **Master Prompt** (`textarea`) — A detailed prompt capturing the core essence and characteristics of this style. Use this prompt for models without style support to generate highly detailed, stylistically consistent results. # Text Concat (https://docs.fuser.studio/docs/nodes/primitive/text-concat) ## Inputs [#inputs] - **Delimiter** (`dropdown`) — How to join the text inputs. Optional: `true` • Default: `newline` • Accepts: `None`, `Space`, `Comma`, `New Line`, `Custom` - **Custom Delimiter** (`textarea`) — The custom string to join text inputs with. Optional: `true` ## Outputs [#outputs] - **Text** (`textarea`) — Concatenated text output. Optional: `true` # Text Split (https://docs.fuser.studio/docs/nodes/primitive/text-split) Text Split turns one block of text into separate output parts. Choose a delimiter such as new line, comma, space, tab, a custom string, or a regular expression, and the node creates one output for each segment it finds. Use it when you want to break a list, outline, transcript, CSV-style line, or multi-line prompt into pieces that can feed other nodes independently. For example, you can split a shot list by new lines, split keywords by commas, or split a generated response into reusable prompt fragments. ## Inputs [#inputs] - **Text** (`textarea`) — Text to split. Optional: `true` - **Delimiter** (`dropdown`) — How to split the text. Optional: `true` • Default: `newline` • Accepts: `New Line`, `Comma`, `Space`, `Tab`, `Custom`, `Regex` - **Pattern** (`textarea`) — Custom delimiter string or regex pattern. Optional: `true` # Text (https://docs.fuser.studio/docs/nodes/primitive/text) ## Inputs [#inputs] - **Text** (`textarea`) — Text content Optional: `true` # Tool (https://docs.fuser.studio/docs/nodes/primitive/tool) ## Inputs [#inputs] - **Prompt** (`textarea`) — Describe what this tool should do. Optional: `true` • Default: `Create a utility that transforms graph inputs into declared outputs.` # Video (https://docs.fuser.studio/docs/nodes/primitive/video) ## Inputs [#inputs] - **Video** (`video`) — Video content Optional: `true` ## Outputs [#outputs] - **Video Out** (`video`) — The displayed video, re-emitted for downstream nodes. Optional: `true` # AnimateDiff (https://docs.fuser.studio/docs/nodes/video/animatediff) _Provided by [Fal](https://fal.ai) — [Learn More](https://fal.ai/models/fal-ai/fast-animatediff/turbo/video-to-video)._ ## Inputs [#inputs] - **Prompt** (`textarea`) — The prompt to use for generating the video. Be as descriptive as possible for best results. - **Video** (`video`) — The video to transform. Optional: `true` - **Negative Prompt** (`textarea`) — The negative prompt to use. Use it to address details that you don't want in the image. Optional: `true` • Default: `(bad quality, worst quality:1.2), ugly faces, bad anime` - **Number of Frames** (`number`) — The number of frames to generate. Value is ignored when video is provided. Optional: `true` • Default: `16` - **First N Seconds** (`number`) — The first N number of seconds of video to animate. Optional: `true` • Default: `3` - **Steps** (`number`) — The number of inference steps to perform. 4-12 is recommended for turbo mode. Optional: `true` • Default: `8` - **Strength** (`number`) — The strength of the input video in the final output. Optional: `true` • Default: `0.7` - **Guidance Scale** (`number`) — The CFG scale is a measure of how close you want the model to stick to your prompt. Optional: `true` • Default: `1` - **Seed** (`seed`) — The same seed and prompt will output the same image every time. Optional: `true` • Default: `2814` - **FPS** (`number`) — Number of frames per second to extract from the video. Optional: `true` • Default: `8` - **Motions** (`dropdown`) — The motions to apply to the video. Optional: `true` • Accepts: `Zoom Out`, `Zoom In`, `Pan Left`, `Pan Right`, `Tilt Up`, `Tilt Down` - **Video Size** (`dropdown`) — The size of the video to generate. Optional: `true` • Default: `square_hd` • Accepts: `Square HD`, `Square`, `Portrait 4:3`, `Portrait 16:9`, `Landscape 4:3`, `Landscape 16:9` - **Use Turbo** (`toggle`) — Turbo mode is faster but may produce lower quality results. Optional: `true` • Default: `true` ## Outputs [#outputs] - **Generated Video** (`video`) — The generated video from the model. # Auto Caption (https://docs.fuser.studio/docs/nodes/video/auto-caption) _Provided by [Fal](https://fal.ai) — [Learn More](https://fal.ai/models/fal-ai/auto-caption)._ ## Inputs [#inputs] - **Video** (`video`) — The video to generate captions for (must include audio). - **Text Color** (`dropdown`) — Color of the caption text. Optional: `true` • Default: `white` • Accepts: `Azure`, `Beige`, `Black`, `Blue`, `Bronze`, `Brown`, `Coral`, `Crimson`, `Cyan`, `Fuchsia`, `Gold`, `Gray`, `Green`, `Indigo`, `Ivory`, `Khaki`, `Lavender`, `Lime`, `Magenta`, `Maroon`, `Navy`, `Olive`, `Orange`, `Pink`, `Purple`, `Red`, `Silver`, `Teal`, `Turquoise`, `Violet`, `White`, `Yellow` - **Font** (`dropdown`) — Font to use for the captions. Optional: `true` • Default: `Standard` • Accepts: `Standard`, `Arial`, `Garamond`, `Times New Roman`, `Georgia` - **Font Size** (`slider`) — Size of the caption text. Optional: `true` • Default: `24` • Minimum: `1` • Maximum: `148` - **Stroke Width** (`slider`) — Width of the text stroke in pixels. Optional: `true` • Default: `1` • Minimum: `1` • Maximum: `10` - **Horizontal Alignment** (`dropdown`) — Left-to-right text alignment. Optional: `true` • Default: `center` • Accepts: `Left`, `Center`, `Right` - **Vertical Alignment** (`dropdown`) — Top-to-bottom text alignment. Optional: `true` • Default: `center` • Accepts: `Top`, `Center`, `Bottom` - **Display Duration** (`slider`) — Number of seconds captions should stay on screen. Optional: `true` • Default: `1.5` • Minimum: `1` • Maximum: `10` ## Outputs [#outputs] - **Captioned Video** (`video`) — The video with captions added. # Fast SVD Video Generator (https://docs.fuser.studio/docs/nodes/video/fast-svd-video-generator) _Provided by [Fal](https://fal.ai) — [Learn More](https://fal.ai/models/fal-ai/fast-svd/text-to-video)._ ## Inputs [#inputs] - **Prompt** (`textarea`) — The prompt to use for generating the video. Be descriptive for best results. - **Negative Prompt** (`textarea`) — What to exclude from the video. Use it to address details you don't want. Optional: `true` • Default: `blurry, low quality, distorted` - **Video Size** (`dropdown`) — The size of the generated video. Optional: `true` • Default: `landscape_16_9` • Accepts: `Square HD (1024x1024)`, `Square (512x512)`, `Portrait 4:3`, `Portrait 16:9`, `Landscape 4:3`, `Landscape 16:9` - **Motion Bucket** (`slider`) — The motion bucket id determines the motion of the generated video. The higher the number, the more motion there will be. Optional: `true` • Default: `127` • Minimum: `1` • Maximum: `255` - **Conditioning Augmentation** (`slider`) — The conditoning augmentation determines the amount of noise that will be added to the conditioning frame. The higher the number, the more noise there will be, and the less the video will look like the initial image. Increase it for more motion. Optional: `true` • Default: `0.02` • Minimum: `0.01` • Maximum: `0.1` - **Steps** (`slider`) — Number of diffusion steps. Higher = better quality but slower. Optional: `true` • Default: `20` • Minimum: `10` • Maximum: `50` - **Deep Cache** (`dropdown`) — Enabling DeepCache will make the execution faster, but might sometimes degrade overall quality. The higher the setting, the faster the execution will be, but the more quality might be lost. Optional: `true` • Default: `minimum` • Accepts: `None`, `Minimum`, `Medium`, `High` - **FPS** (`slider`) — The FPS of the generated video. The higher the number, the faster the video will play. Total video length is 25 frames. Optional: `true` • Default: `24` • Minimum: `1` • Maximum: `25` - **Seed** (`seed`) — The same seed and prompt will output the same image every time. Optional: `true` • Default: `383414` ## Outputs [#outputs] - **Video** (`video`) — The generated video. # Gemini Omni Video (https://docs.fuser.studio/docs/nodes/video/gemini-omni-video) _Provided by [Google](https://aistudio.google.com)._ ## Inputs [#inputs] - **Prompt** (`textarea`) — Describe the video to generate or the edit to apply. - **Images** (`image`) _(accepts multiple)_ — Reference images to guide the generated video. Public preview supports up to 5 images. Optional: `true` - **Video** (`video`) — Optional source video for video-to-video generation. Public preview supports input videos up to 10 seconds. Optional: `true` - **Duration** (`slider`) — Duration of the generated video in seconds. Public preview supports 3 to 10 seconds in 1-second increments. Optional: `true` • Default: `5` • Minimum: `3` • Maximum: `10` - **Aspect Ratio** (`dropdown`) — Aspect ratio of the generated 720p video. Optional: `true` • Default: `16:9` • Accepts: `16:9`, `9:16` ## Outputs [#outputs] - **Generated Video** (`video`) — The video generated by Gemini Omni. # Grok Imagine Edit (https://docs.fuser.studio/docs/nodes/video/grok-imagine-edit) _Provided by [Fal](https://fal.ai) — [Learn More](https://fal.ai/models/xai/grok-imagine-video/edit-video)._ ## Inputs [#inputs] - **Mode** (`dropdown`) — Edit rewrites video content based on a text prompt. Extend appends new footage to the end of the video. Optional: `true` • Default: `edit` • Accepts: `Edit`, `Extend` - **Prompt** (`textarea`) — Text description of the desired edit or what should happen next in the video. Maximum 4096 characters. - **Video** (`video`) — Source video to edit or extend. For Edit mode, the video is resized to a maximum area of 854×480 pixels and truncated to 8 seconds. For Extend mode, the video must be MP4 format (H.264, H.265, or AV1 codec) and 2–15 seconds long. - **Resolution** (`dropdown`) — Resolution of the edited video. Applies to Edit mode only. Optional: `true` • Default: `720p` • Accepts: `480p`, `720p` - **Extension Duration** (`slider`) — Length of the new footage to append in seconds. Applies to Extend mode only. Optional: `true` • Default: `6` • Minimum: `2` • Maximum: `10` ## Outputs [#outputs] - **Output Video** (`video`) — The edited or extended video from the model. # Grok Imagine (https://docs.fuser.studio/docs/nodes/video/grok-imagine) _Provided by [Fal](https://fal.ai) — [Learn More](https://fal.ai/models/xai/grok-imagine-video/text-to-video)._ ## Inputs [#inputs] - **Prompt** (`textarea`) — Text description of the video to generate. When using reference images, cite them as @Image1, @Image2, etc. in your prompt. Maximum 4096 characters. - **Images** (`image`) _(accepts multiple)_ — Optional images to guide video generation. Provide no images for text-to-video, one image to animate it as the first frame, or two to seven images as visual references (cite them as @Image1, @Image2, etc. in your prompt). Optional: `true` - **Duration** (`slider`) — Video duration in seconds. Text-to-video and image-to-video support 1–15 seconds. Reference-to-video supports 1–10 seconds. Optional: `true` • Default: `6` • Minimum: `1` • Maximum: `15` - **Aspect Ratio** (`dropdown`) — Aspect ratio of the generated video. "Auto" matches the input image aspect ratio and is only applicable for image-to-video mode. Optional: `true` • Default: `16:9` • Accepts: `Auto`, `16:9`, `4:3`, `3:2`, `1:1`, `2:3`, `3:4`, `9:16` - **Resolution** (`dropdown`) — Resolution of the generated video. Optional: `true` • Default: `720p` • Accepts: `480p`, `720p` ## Outputs [#outputs] - **Generated Video** (`video`) — The generated video from the model. # Hailuo 02 (https://docs.fuser.studio/docs/nodes/video/hailuo-02) _Provided by [Fal](https://fal.ai) — [Learn More](https://fal.ai/models/fal-ai/minimax/hailuo-02/standard/image-to-video)._ ## Inputs [#inputs] - **Prompt** (`textarea`) — The prompt to generate a video from. - **First Frame** (`image`) — The image to use as the first frame of the video. Optional: `true` - **Last Frame** (`image`) — The image to use as the last frame of the video. Optional: `true` - **Model** (`dropdown`) — The model to use for video generation. Optional: `true` • Default: `standard` • Accepts: `Fast (Image to Video)`, `Standard`, `Pro` - **Duration** (`dropdown`) — The duration of the generated video. This property is only available for the Standard model. Optional: `true` • Default: `6` • Accepts: `6 seconds`, `10 seconds` - **Resolution** (`dropdown`) — The resolution of the generated video. This property is only available for the Standard model when using the image to video mode. Optional: `true` • Default: `768P` • Accepts: `512p`, `768p` - **Optimize Prompt** (`toggle`) — Optimize the prompt with more details, specificity, and clarity. Optional: `true` • Default: `true` ## Outputs [#outputs] - **Generated Video** (`video`) — The generated video from the model. # Hailuo 2.3 (https://docs.fuser.studio/docs/nodes/video/hailuo-2-3) _Provided by [Fal](https://fal.ai) — [Learn More](https://fal.ai/models/fal-ai/minimax/hailuo-2.3/standard/image-to-video)._ ## Inputs [#inputs] - **Prompt** (`textarea`) — The prompt to generate a video from. - **First Frame** (`image`) — The image to use as the first frame of the video. Optional: `true` - **Model** (`dropdown`) — The model to use for video generation. Optional: `true` • Default: `standard` • Accepts: `Pro Fast`, `Standard Fast`, `Standard`, `Pro` - **Duration** (`dropdown`) — The duration of the generated video. This property is only available for the Standard variant models. Optional: `true` • Default: `6` • Accepts: `6 seconds`, `10 seconds` - **Optimize Prompt** (`toggle`) — Optimize the prompt with more details, specificity, and clarity. Optional: `true` • Default: `true` ## Outputs [#outputs] - **Generated Video** (`video`) — The generated video from the model. # HeyGen (https://docs.fuser.studio/docs/nodes/video/heygen) _Provided by [Fal](https://fal.ai) — [Learn More](https://fal.ai/models/fal-ai/heygen/avatar4/image-to-video)._ ## Inputs [#inputs] - **Image** (`image`) — The portrait image to animate into a talking avatar. - **Audio** (`audio`) — An audio track to lip-sync the avatar to. When provided, it sets the video length and overrides prompt and voice. Optional: `true` - **Prompt** (`textarea`) — Text for the avatar to speak when no audio is provided. Optional: `true` - **Voice** (`dropdown`) — The HeyGen voice name to use when generating speech from a prompt. Optional: `true` • Default: `Warm Pro Narrator` • Accepts: `Warm Pro Narrator`, `Chill Brian`, `Ivy`, `John Doe`, `Monika Sogam`, `Hope `, `Archer `, `Brittney`, `Patrick`, `David Castlemore`, `Michael C`, `Adam Stone `, `Juniper`, `Cassidy `, `Jessica Anne Bogart`, `Arabella`, `Andrew`, `Spuds Oxley `, `Grace Elder`, `Helen`, `Canyon Rivers`, `Derya - Lifelike - Excited 🤩`, `Mellow Marcus`, `Jack Sterling - Broadcaster 🎙️`, `Brenda - UGC - 1.mp4`, `Reid`, `Reagan`, `Terry`, `Jenny`, `Radio Rick`, `Denise`, `Tim in car - Excited 🤩`, `Iskander`, `Thompson`, `Delicate Daisy - Excited 🤩`, `Kingston`, `George UGC 1`, `Bold Blake`, `Jane`, `Expressive Evan`, `Marianne - IA`, `Aaron`, `Modern Recipe Host - Voice 1`, `Willow`, `Cute Chloe - Friendly 😊`, `Rafael`, `June - Lifelike`, `Crisp Chloe`, `Slick Simon`, `Nassim - Informative`, `Baritone Ben`, `Maxwell`, `Ellie Faye - Excited 🤩`, `Milani`, `Feisty Fiona - Excited 🤩`, `Professor Dean`, `Rose - UGC - 1.mp4`, `Shona`, `Hudson Wilder`, `Ann - IA`, `Alastair Kensington`, `Oxley`, `Christina`, `Andrew Rizz `, `Peyton`, `Gerardo - Outdoor`, `Chloe - Lifelike`, `Stephanie`, `Anthony - IA`, `Signal - Voice 1`, `Luca`, `Lisa - Voice 1`, `T.W.Tucker`, `Jack Sullivan - Serious 😐`, `Winter`, `Mireia - Lifelike`, `Georgia`, `Stella`, `Masha - Lifelike`, `Charming Charles - Friendly 😊`, `Serenity`, `Annie - Excited`, `Ralph`, `Bethany`, `Dominic`, `Mason Finn`, `Leena`, `Veteran Victor`, `Tamara`, `Nik Public`, `Calm Chloe`, `Sevik`, `Reilly`, `Raul`, `Imposing Ian`, `Relaxed Ray`, `Dexter - Professional`, `Relaxed Rick`, `Edwin`, `Rupert Blackwood`, `Ginny`, `Hope` - **Aspect Ratio** (`dropdown`) — The aspect ratio of the generated video. Optional: `true` • Default: `16:9` • Accepts: `16:9`, `9:16`, `4:5`, `5:4`, `1:1`, `Auto` - **Resolution** (`dropdown`) — The resolution of the generated video. Optional: `true` • Default: `720p` • Accepts: `360p`, `480p`, `540p`, `720p`, `1080p` - **Talking Style** (`dropdown`) — How expressive the avatar is while talking. Optional: `true` • Default: `stable` • Accepts: `Stable`, `Expressive` - **Captions** (`toggle`) — Burn captions into the generated video. Optional: `true` • Default: `false` ## Outputs [#outputs] - **Generated Video** (`video`) — The generated talking-avatar video. # Kling 1.6 Video (https://docs.fuser.studio/docs/nodes/video/kling-1-6-video) _Provided by [Fal](https://fal.ai) — [Learn More](https://fal.ai/models/fal-ai/kling-video/v1.6/pro/image-to-video)._ ## Inputs [#inputs] - **Prompt** (`textarea`) — The prompt to generate a video from. - **Image Prompt** (`image`) — The image to generate a video from. The image must be 960x544 or it will get cropped and resized to that size. Optional: `true` - **Model** (`dropdown`) — The model to use for video generation. Optional: `true` • Default: `standard` • Accepts: `Standard`, `Pro` - **Aspect Ratio** (`dropdown`) — The aspect ratio of the generated video. Optional: `true` • Default: `16:9` • Accepts: `16:9`, `9:16`, `1:1` - **Duration** (`dropdown`) — The duration of the generated video in seconds. Optional: `true` • Default: `5` • Accepts: `5`, `10` ## Outputs [#outputs] - **Generated Video** (`video`) — The generated video from the model. # Kling 2.X Video Tool (https://docs.fuser.studio/docs/nodes/video/kling-2-x-video-tool) _Provided by [Fal](https://fal.ai) — [Learn More](https://fal.ai/models/fal-ai/kling-video/v2.1/master/image-to-video)._ ## Inputs [#inputs] - **Prompt** (`textarea`) — The prompt to generate a video from. - **Image Prompt** (`image`) — The image to generate a video from. This will be used as the first frame of the video. Optional: `true` - **End Image** (`image`) — The image used as the last frame of the video. Only supported by the 2.1 Pro model. Optional: `true` - **Negative Prompt** (`textarea`) — The negative prompt to guide against undesired results. Optional: `true` - **Model** (`dropdown`) — The Kling 2.X model to use for video generation. Optional: `true` • Default: `2.5-turbo-pro` • Accepts: `flow.nodes.FalKling21VideoNode.inputs.model.items.2.6-pro`, `flow.nodes.FalKling21VideoNode.inputs.model.items.2.5-turbo-standard`, `flow.nodes.FalKling21VideoNode.inputs.model.items.2.5-turbo-pro`, `2.1 Standard`, `2.1 Pro`, `2.1 Master` - **Aspect Ratio** (`dropdown`) — The aspect ratio of the generated video. This property is only supported for the Master model when using text to video mode. Optional: `true` • Default: `16:9` • Accepts: `16:9`, `9:16`, `1:1` - **Duration** (`dropdown`) — The duration of the generated video in seconds. Optional: `true` • Default: `5` • Accepts: `5`, `10` - **CFG Scale** (`slider`) — Classifier Free Guidance controls how closely the generated video adheres to the text prompt you provide. Accepts values between 0 and 1. Optional: `true` • Default: `0.5` • Minimum: `0` • Maximum: `1` - **Generate Audio** (`toggle`) — Generate audio for the video. Available only for the 2.6 Pro model. Optional: `true` • Default: `false` ## Outputs [#outputs] - **Generated Video** (`video`) — The generated video from the model. # Kling 3.0 Motion (https://docs.fuser.studio/docs/nodes/video/kling-3-0-motion) _Provided by [Fal](https://fal.ai) — [Learn More](https://fal.ai/models/fal-ai/kling-video/v3/standard/motion-control)._ ## Inputs [#inputs] - **Prompt** (`textarea`) — Optional text description to guide the motion transfer. Optional: `true` - **Image** (`image`) — Reference image for character appearance. Characters should have clear body proportions and occupy more than 5% of the image. - **Reference Video** (`video`) — Reference video for motion patterns. Should contain a realistic character with visible body, 3–30 seconds. - **Model** (`dropdown`) — The Kling 3.0 tier to use for motion control. Optional: `true` • Default: `standard` • Accepts: `Standard`, `Pro` - **Character Orientation** (`dropdown`) — Video: orientation matches reference video, better for complex motions (max 30s). Image: orientation matches reference image, better for camera movements (max 10s). Optional: `true` • Default: `video` • Accepts: `Video`, `Image` - **Keep Original Sound** (`toggle`) — Preserve audio from the reference video. Optional: `true` • Default: `true` ## Outputs [#outputs] - **Generated Video** (`video`) — Generated motion-controlled video. # Kling 3.0 Video (https://docs.fuser.studio/docs/nodes/video/kling-3-0-video) _Provided by [Fal](https://fal.ai) — [Learn More](https://fal.ai/models/fal-ai/kling-video/v3/standard/text-to-video)._ ## Inputs [#inputs] - **Prompt** (`textarea`) — Required text prompt for video generation. - **Image** (`image`) — Optional start frame image. When provided, Kling runs in image-to-video mode. Optional: `true` - **End Image** (`image`) — Optional end frame image. Requires Start Image. Optional: `true` - **Negative Prompt** (`textarea`) — Describe content or qualities you want the model to avoid. Optional: `true` - **Model** (`dropdown`) — The Kling 3.0 tier to use for generation. Optional: `true` • Default: `standard` • Accepts: `Standard`, `Pro` - **Aspect Ratio** (`dropdown`) — Aspect ratio of the generated video frames. Optional: `true` • Default: `16:9` • Accepts: `16:9`, `9:16`, `1:1` - **Duration** (`slider`) — Duration of the generated video in seconds (3 to 15). Optional: `true` • Default: `5` • Minimum: `3` • Maximum: `15` - **CFG Scale** (`slider`) — Controls how closely output follows your prompt (0.0 to 1.0). Optional: `true` • Default: `0.5` • Minimum: `0` • Maximum: `1` - **Generate Audio** (`toggle`) — Generate native audio for the video. Optional: `true` • Default: `false` ## Outputs [#outputs] - **Generated Video** (`video`) — Generated output video URL. # LatentSync (https://docs.fuser.studio/docs/nodes/video/latentsync) _Provided by [Fal](https://fal.ai) — [Learn More](https://fal.ai/models/fal-ai/latentsync)._ ## Inputs [#inputs] - **Video** (`video`) — Video for lip sync generation - **Audio** (`audio`) — Audio to sync with the video - **Guidance Scale** (`slider`) — Controls how closely the model follows the audio guidance (higher values = stronger guidance) Optional: `true` • Default: `1` • Minimum: `1` • Maximum: `2` - **Seed** (`seed`) — The same seed and prompt will output the same result every time. Optional: `true` • Default: `7456` - **Loop Mode** (`dropdown`) — Video loop mode when audio is longer than video. Options: pingpong, loop Optional: `true` • Default: `pingpong` • Accepts: `Ping Pong`, `Loop` ## Outputs [#outputs] - **Synced Video** (`video`) — The generated video with lip sync applied # LTX 2.0 (https://docs.fuser.studio/docs/nodes/video/ltx-2-0) _Provided by [Fal](https://fal.ai) — [Learn More](https://ltx.video/blog/introducing-ltx-2)._ ## Inputs [#inputs] - **Prompt** (`textarea`) — The prompt to generate a video from. - **Image** (`image`) — The image to use as the first frame of the video. Optional: `true` - **Retake Video** (`video`) — The video to edit. This should be a video of a scene that you would like to edit, or change the audio of. Optional: `true` - **Model** (`dropdown`) — The model to use for video generation. Optional: `true` • Default: `fast` • Accepts: `Fast`, `Pro` - **Resolution** (`dropdown`) — The resolution of the generated video. Optional: `true` • Default: `1080p` • Accepts: `1080p`, `1440p`, `2160p` - **Duration** (`dropdown`) — The duration of the generated video. The fast model supports 6-20 seconds. Durations longer than 10 seconds (12, 14, 16, 18, 20) are only supported with 25 FPS and 1080p resolution. The retake model supports 6-20 seconds. Optional: `true` • Default: `6` • Accepts: `6s`, `8s`, `10s`, `12s`, `14s`, `16s`, `18s`, `20s` - **FPS** (`dropdown`) — The FPS of the generated video. Optional: `true` • Default: `25` • Accepts: `25`, `50` - **Aspect Ratio** (`dropdown`) — The aspect ratio of the generated video. Optional: `true` • Default: `16:9` • Accepts: `16:9` - **Generate Audio** (`toggle`) — Generate audio for the video. Optional: `true` • Default: `false` - **Retake Mode** (`dropdown`) — The retake mode to use for the video. Optional: `true` • Default: `replace_audio_and_video` • Accepts: `Replace Audio`, `Replace Video`, `Replace Audio and Video` - **Retake Start Time** (`slider`) — The start time of the video to retake in seconds. Optional: `true` • Default: `0` • Minimum: `0` • Maximum: `20` ## Outputs [#outputs] - **Generated Video** (`video`) — The generated video from the model. # LTX (https://docs.fuser.studio/docs/nodes/video/ltx) _Provided by [Fal](https://fal.ai) — [Learn More](https://fal.ai/models/fal-ai/ltx-video-v095)._ ## Inputs [#inputs] - **Prompt** (`textarea`) — The prompt to generate a video from. - **Negative Prompt** (`textarea`) — The negative prompt to guide the model to generate a video that is not like the prompt. Optional: `true` • Default: `worst quality, inconsistent motion, blurry, jittery, distorted` - **Aspect Ratio** (`dropdown`) — The aspect ratio of the generated video. Optional: `true` • Default: `16:9` • Accepts: `16:9`, `9:16` - **Resolution** (`dropdown`) — The resolution of the generated video. Optional: `true` • Default: `720p` • Accepts: `480p`, `720p` - **Steps** (`slider`) — The number of inference steps to perform. Optional: `true` • Default: `40` • Minimum: `2` • Maximum: `50` - **Seed** (`seed`) — The same seed and prompt will output the same image every time. Optional: `true` • Default: `26492` • Minimum: `0` • Maximum: `65535` - **Expand Prompt** (`toggle`) — Whether to expand the prompt using the model's own capabilities Optional: `true` • Default: `true` ## Outputs [#outputs] - **Generated Video** (`video`) — The generated video from the model. # Lucy (https://docs.fuser.studio/docs/nodes/video/lucy) _Provided by [Fal](https://fal.ai) — [Learn More](https://fal.ai/models/decart/lucy-14b/image-to-video)._ ## Inputs [#inputs] - **Prompt** (`textarea`) — The prompt to generate a video from. - **Image Prompt** (`image`) — The image to generate a video from. - **Aspect Ratio** (`dropdown`) — The aspect ratio of the generated video. Optional: `true` • Default: `16:9` • Accepts: `16:9`, `9:16` ## Outputs [#outputs] - **Generated Video** (`video`) — The generated video from the model. # Luma Ray 2 (https://docs.fuser.studio/docs/nodes/video/luma-ray-2) _Provided by [Fal](https://fal.ai) — [Learn More](https://fal.ai/models/luma/agent/ray/v3.2/text-to-video)._ ## Inputs [#inputs] - **Prompt** (`textarea`) — Describe the video to generate, reframe, or edit. - **Image** (`image`) — An optional first frame for generate mode. When provided, Ray 3.2 uses image-to-video pricing and constraints. Optional: `true` - **End Image** (`image`) — An optional ending frame to blend toward. Requires an image input. Optional: `true` - **Video** (`video`) — Source video for Ray 3.2 reframe or video edit mode. Optional: `true` - **Start Image** (`image`) — Optional first-frame guide for Ray 3.2 video edit mode. Optional: `true` - **Model** (`dropdown`) — Choose the Luma Ray model variant. Optional: `true` • Default: `ray-3.2` • Accepts: `Ray 3.2`, `Ray 2`, `Ray 2 Flash` - **Mode** (`dropdown`) — Choose whether Ray 3.2 should generate, reframe, or edit video. Optional: `true` • Default: `generate` • Accepts: `Generate`, `Reframe`, `Video Edit` - **Aspect Ratio** (`dropdown`) — The aspect ratio of the generated or reframed video. Optional: `true` • Default: `16:9` • Accepts: `16:9`, `9:16`, `4:3`, `3:4`, `21:9`, `9:21`, `1:1` - **Resolution** (`dropdown`) — The resolution of the generated video. Optional: `true` • Default: `540p` • Accepts: `540p`, `720p`, `1080p` - **Duration** (`dropdown`) — The duration of the generated or edited video. Optional: `true` • Default: `5s` • Accepts: `5s`, `9s`, `10s` - **Render Format** (`dropdown`) — Choose standard video, HDR video, or HDR with an EXR export when supported. Optional: `true` • Default: `standard` • Accepts: `Standard`, `HDR`, `HDR + EXR` - **Edit Mode** (`dropdown`) — Controls how closely Ray 3.2 video edit mode preserves the source video. Optional: `true` • Default: `default` • Accepts: `Default`, `Auto Controls`, `Adhere 1`, `Adhere 2`, `Adhere 3`, `Flex 1`, `Flex 2`, `Flex 3`, `Reimagine 1`, `Reimagine 2`, `Reimagine 3` - **Loop** (`toggle`) — Whether the video should loop by blending the end back into the beginning. Optional: `true` • Default: `false` ## Outputs [#outputs] - **Generated Video** (`video`) — The generated video from the model. # Luma Ray (https://docs.fuser.studio/docs/nodes/video/luma-ray) _Provided by [Fal](https://fal.ai) — [Learn More](https://fal.ai/models/luma/agent/ray/v3.2/text-to-video)._ ## Inputs [#inputs] - **Prompt** (`textarea`) — Describe the video to generate, reframe, or edit. - **Image** (`image`) — An optional first frame for generate mode. When provided, Ray 3.2 uses image-to-video pricing and constraints. Optional: `true` - **End Image** (`image`) — An optional ending frame to blend toward. Requires an image input. Optional: `true` - **Video** (`video`) — Source video for Ray 3.2 reframe or video edit mode. Optional: `true` - **Start Image** (`image`) — Optional first-frame guide for Ray 3.2 video edit mode. Optional: `true` - **Model** (`dropdown`) — Choose the Luma Ray model variant. Optional: `true` • Default: `ray-3.2` • Accepts: `Ray 3.2`, `Ray 2`, `Ray 2 Flash` - **Mode** (`dropdown`) — Choose whether Ray 3.2 should generate, reframe, or edit video. Optional: `true` • Default: `generate` • Accepts: `Generate`, `Reframe`, `Video Edit` - **Aspect Ratio** (`dropdown`) — The aspect ratio of the generated or reframed video. Optional: `true` • Default: `16:9` • Accepts: `16:9`, `9:16`, `4:3`, `3:4`, `21:9`, `9:21`, `1:1` - **Resolution** (`dropdown`) — The resolution of the generated video. Optional: `true` • Default: `540p` • Accepts: `540p`, `720p`, `1080p` - **Duration** (`dropdown`) — The duration of the generated or edited video. Optional: `true` • Default: `5s` • Accepts: `5s`, `9s`, `10s` - **Render Format** (`dropdown`) — Choose standard video, HDR video, or HDR with an EXR export when supported. Optional: `true` • Default: `standard` • Accepts: `Standard`, `HDR`, `HDR + EXR` - **Edit Mode** (`dropdown`) — Controls how closely Ray 3.2 video edit mode preserves the source video. Optional: `true` • Default: `default` • Accepts: `Default`, `Auto Controls`, `Adhere 1`, `Adhere 2`, `Adhere 3`, `Flex 1`, `Flex 2`, `Flex 3`, `Reimagine 1`, `Reimagine 2`, `Reimagine 3` - **Loop** (`toggle`) — Whether the video should loop by blending the end back into the beginning. Optional: `true` • Default: `false` ## Outputs [#outputs] - **Generated Video** (`video`) — The generated video from the model. # Luma Video (https://docs.fuser.studio/docs/nodes/video/luma-video) _Provided by [Fal](https://fal.ai) — [Learn More](https://fal.ai/models/fal-ai/luma-dream-machine)._ ## Inputs [#inputs] - **Prompt** (`textarea`) — The prompt to generate a video from. - **Image Prompt** (`image`) — The image to generate a video from. The image must be 960x544 or it will get cropped and resized to that size. Optional: `true` - **End Image Prompt** (`image`) — An image to blend the end of the video with. Optional: `true` - **Aspect Ratio** (`dropdown`) — The aspect ratio of the generated video. Optional: `true` • Default: `16:9` • Accepts: `16:9`, `9:16`, `4:3`, `3:4`, `21:9`, `9:21` - **Loop** (`toggle`) — Whether the video should loop (end of video is blended with the beginning). Optional: `true` • Default: `false` ## Outputs [#outputs] - **Generated Video** (`video`) — The generated video from the model. # Mirelo SFX (https://docs.fuser.studio/docs/nodes/video/mirelo-sfx) _Provided by [Fal](https://fal.ai) — [Learn More](https://fal.ai/models/mirelo-ai/sfx1.6/video-to-video)._ ## Inputs [#inputs] - **Video** (`video`) — The video to generate sound effects for. - **Prompt** (`textarea`) — An optional text prompt describing the sound effects to generate. Optional: `true` - **Duration** (`slider`) — The duration of the generated sound effects in seconds. Optional: `true` • Default: `10` • Minimum: `1` • Maximum: `60` - **Samples** (`slider`) — The number of sound-effect variations to generate. Optional: `true` • Default: `1` • Minimum: `1` • Maximum: `4` - **Seed** (`seed`) — The same seed and inputs will output the same result every time. Optional: `true` • Default: `5374` ## Outputs [#outputs] - **Generated Video** (`video`) — The input video with a generated sound-effects track. # Pika (https://docs.fuser.studio/docs/nodes/video/pika) _Provided by [Fal](https://fal.ai) — [Learn More](https://fal.ai/models/fal-ai/pika/v2.2/text-to-video)._ ## Inputs [#inputs] - **Prompt** (`textarea`) — The prompt to generate a video from. - **Negative Prompt** (`textarea`) — The negative prompt to guide the model to generate a video that is not like the prompt. Optional: `true` - **Image Prompt** (`image`) — The image used as the first frame of the video. When provided, the aspect ratio will be ignored. Optional: `true` - **Aspect Ratio** (`dropdown`) — The aspect ratio of the generated video. Optional: `true` • Default: `16:9` • Accepts: `16:9`, `9:16`, `1:1`, `4:5`, `5:4`, `3:2`, `2:3` - **Resolution** (`dropdown`) — The resolution of the generated video. Optional: `true` • Default: `720p` • Accepts: `720p`, `1080p` - **Duration** (`dropdown`) — The duration of the generated video. Optional: `true` • Default: `5` • Accepts: `5s`, `10s` - **Seed** (`seed`) — The same seed and prompt will output the same image every time. Optional: `true` • Default: `4776` • Minimum: `0` • Maximum: `65535` ## Outputs [#outputs] - **Generated Video** (`video`) — The generated video from the model. # Runway Act-Two (https://docs.fuser.studio/docs/nodes/video/runway-act-two) _Provided by [Runway](https://dev.runwayml.com) — [Learn More](https://runwayml.com/research/introducing-act-one)._ ## Inputs [#inputs] - **Character Video** (`video`) — A video of your character. In the output, the character will use the reference video performance in its original animated environment and some of the character's own movements. Optional: `true` - **Character Image** (`image`) — An image of your character. In the output, the character will use the reference video performance in its original static environment. Optional: `true` - **Reference Video** (`video`) — A video of a person performing in the manner that you would like your character to perform. The video must be between 3 and 30 seconds in duration. - **Ratio** (`dropdown`) — The aspect ratio of the generated video. Optional: `true` • Default: `1280:720` • Accepts: `1280:720 Horizontal`, `720:1280 Vertical`, `960:960 Square`, `1104:832 Horizontal`, `832:1104 Vertical`, `1584:672 Landscape` - **Expression Intensity** (`slider`) — Larger value increases the intensity of the character's expression. Optional: `true` • Default: `3` • Minimum: `1` • Maximum: `5` - **Body Control** (`toggle`) — When enabled, non-facial movements and gestures will be applied to the character in addition to facial expressions. Optional: `true` • Default: `true` - **Seed** (`seed`) — Varying the seed integer is a way to get different results for the same other request parameters. Using the same seed for an identical properties will produce similar results. Optional: `true` • Default: `503756942` • Minimum: `0` • Maximum: `4294967295` ## Outputs [#outputs] - **Generated Video** (`video`) — The generated video from the model. # Runway Aleph (https://docs.fuser.studio/docs/nodes/video/runway-aleph) _Provided by [Runway](https://dev.runwayml.com) — [Learn More](https://runwayml.com/research/introducing-runway-aleph)._ ## Inputs [#inputs] - **Prompt** (`textarea`) — The prompt to generate a video from. This should describe in detail what should appear in the output. Effective prompts include two key elements: use of an action verb that describes the scope of changes and description of the target transformation. Examples of action verbs include add, remove, change, replace, re-light, and re-style. - **Video** (`video`) — The video to edit. This should be a video of a scene that you would like to edit, re-light, or re-style. - **Reference Image** (`image`) — You can accompany your input video with an image to influence color, styles, lighting, and much more. When using an image, specify how your image and video inputs should interact. For example, you can specify that the image should be used as a reference for the color, styles, lighting, and much more. Please note that subjects and objects from images may not be consistent at this time. For elements that must remain consistent, we recommend ensuring that they are included in your input video. Optional: `true` - **Ratio** (`dropdown`) — The aspect ratio of the generated video. Optional: `true` • Default: `1280:720` • Accepts: `1280:720 Horizontal`, `720:1280 Vertical`, `848:480 Landscape`, `640:480 Landscape`, `960:960 Square`, `1104:832 Horizontal`, `832:1104 Vertical`, `1584:672 Landscape` - **Seed** (`seed`) — Varying the seed integer is a way to get different results for the same other request parameters. Using the same seed for an identical properties will produce similar results. Optional: `true` • Default: `4075731617` • Minimum: `0` • Maximum: `4294967295` ## Outputs [#outputs] - **Generated Video** (`video`) — The edited video from the model. # Runway Video (https://docs.fuser.studio/docs/nodes/video/runway-video) _Provided by [Runway](https://dev.runwayml.com) — [Learn More](https://runwayml.com/research/introducing-runway-gen-4)._ ## Inputs [#inputs] - **Prompt** (`textarea`) — The prompt to generate a video from. - **Image Prompt** (`image`) — The image used as the first frame of the video. - **End Image Prompt** (`image`) — An image to blend the end of the video with. Optional: `true` - **Model** (`dropdown`) — The model to use for video generation. Optional: `true` • Default: `gen4_turbo` • Accepts: `Gen-3a Turbo`, `Gen-4 Turbo` - **Ratio** (`dropdown`) — The aspect ratio of the generated video. Optional: `true` • Default: `1280:720` • Accepts: `1280:720 Horizontal`, `720:1280 Vertical`, `1104:832 Landscape`, `832:1104 Vertical`, `960:960 Square`, `1584:672 Landscape`, `1280:768 Horizontal`, `768:1280 Vertical` - **Duration** (`dropdown`) — The duration of the generated video. Optional: `true` • Default: `5` • Accepts: `5 seconds`, `10 seconds` - **Seed** (`seed`) — The same seed and prompt will result in the same output every time. Optional: `true` • Default: `8271637` • Minimum: `0` • Maximum: `10000000` ## Outputs [#outputs] - **Generated Video** (`video`) — The generated video from the model. # Seedance 2 (https://docs.fuser.studio/docs/nodes/video/seedance-2) _Provided by [Fal](https://fal.ai) — [Learn More](https://fal.ai/models/bytedance/seedance-2.0/text-to-video)._ ## Inputs [#inputs] - **Prompt** (`textarea`) — The text prompt to generate a video from. In reference mode, use @Image1, @Image2, @Video1, etc. to refer to provided media. - **Images** (`image`) _(accepts multiple)_ — Provide a single image to use as the first frame of the video, or multiple images to use as references. When multiple images are provided, the reference endpoint is used automatically. Optional: `true` - **Videos** (`video`) _(accepts multiple)_ — Reference videos to guide video generation. Refer to them in the prompt as @Video1, @Video2, etc. Supported formats: MP4, MOV. Up to 3 videos, combined duration must be between 2 and 15 seconds, total size under 50 MB. Each video must be between ~480p (640x640) and ~720p (834x1112) in resolution. Optional: `true` - **End Image** (`image`) — The image used as the last frame of the video. Only available when a single starting image is provided. Optional: `true` - **Model** (`dropdown`) — The model to use for video generation. Optional: `true` • Default: `standard` • Accepts: `2.0`, `2.0 Fast`, `2.0 Mini` - **Resolution** (`dropdown`) — Video resolution. 480p for faster generation, 720p for higher quality. 1080p for maximum quality. Optional: `true` • Default: `720p` • Accepts: `480p`, `720p`, `1080p`, `4K` - **Duration** (`slider`) — The duration of the generated video in seconds. Optional: `true` • Default: `5` • Minimum: `4` • Maximum: `15` - **Aspect Ratio** (`dropdown`) — The aspect ratio of the generated video. Optional: `true` • Default: `16:9` • Accepts: `Auto`, `21:9`, `16:9`, `4:3`, `1:1`, `3:4`, `9:16` - **Generate Audio** (`toggle`) — Generate synchronized audio for the video, including sound effects, ambient sounds, and lip-synced speech. Optional: `true` • Default: `true` ## Outputs [#outputs] - **Generated Video** (`video`) — The generated video from the model. # Seedance (https://docs.fuser.studio/docs/nodes/video/seedance) _Provided by [Fal](https://fal.ai) — [Learn More](https://fal.ai/models/fal-ai/bytedance/seedance/v1/lite/image-to-video)._ ## Inputs [#inputs] - **Prompt** (`textarea`) — The prompt to generate a video from. - **Images** (`image`) _(accepts multiple)_ — Provide a single image to use as the first frame of the video, or up to 4 images to use as reference images for combining features. If a single image is provided, the aspect ratio will be ignored. Optional: `true` - **End Image** (`image`) — The image used as the last frame of the video. When multiple image references are provided, end image will be ignored. Optional: `true` - **Model** (`dropdown`) — The model to use for video generation. Optional: `true` • Default: `pro-fast` • Accepts: `flow.nodes.FalSeedanceLiteNode.inputs.model.items.pro-v1.5`, `Lite`, `Pro Fast`, `Pro` - **Resolution** (`dropdown`) — The resolution of the generated video. Optional: `true` • Default: `720p` • Accepts: `480p`, `720p`, `1080p` - **Duration** (`dropdown`) — The duration of the generated video. If an image is provided, the duration will be 5 seconds. Optional: `true` • Default: `5` • Accepts: `3s`, `4s`, `5s`, `6s`, `7s`, `8s`, `9s`, `10s`, `11s`, `12s` - **Aspect Ratio** (`dropdown`) — The aspect ratio of the generated video. Optional: `true` • Default: `16:9` • Accepts: `21:9`, `16:9`, `4:3`, `1:1`, `3:4`, `9:16`, `9:21` - **Seed** (`seed`) — The same seed and prompt will output the same video every time. Optional: `true` • Default: `6375` - **Fixed Camera** (`toggle`) — When enabled, the camera will be fixed without any movement. Optional: `true` • Default: `false` - **Generate Audio** (`toggle`) — Generate audio for the video. Optional: `true` • Default: `true` ## Outputs [#outputs] - **Generated Video** (`video`) — The generated video from the model. # SeedVR Upscale (https://docs.fuser.studio/docs/nodes/video/seedvr-upscale) _Provided by [Fal](https://fal.ai) — [Learn More](https://fal.ai/models/fal-ai/seedvr/upscale/video)._ ## Inputs [#inputs] - **Video** (`video`) — The video to upscale. - **Scale Factor** (`slider`) — The factor by which to upscale the video. Optional: `true` • Default: `2` • Minimum: `1` • Maximum: `10` - **Seed** (`seed`) — The same seed and upscale factor will output the same video every time. Optional: `true` • Default: `2649` ## Outputs [#outputs] - **Upscaled Video** (`video`) — The resulting enhanced video. # Sora 2 (https://docs.fuser.studio/docs/nodes/video/sora-2) _Provided by [OpenAI](https://openai.com) — [Learn More](https://openai.com/index/sora-2/)._ ## Inputs [#inputs] - **Prompt** (`textarea`) — A textual prompt to guide video generation. - **Image** (`image`) — Image to use as the input reference for video generation. Image should be the same aspect ratio as the video size, otherwise it will be cropped to fit the video size. Optional: `true` - **Model** (`dropdown`) — The model to use for video generation. Sora 2 is the default model and is a good balance of quality and speed. Sora 2 Pro is a more powerful model that is better for generating high quality videos, but it is slower and more expensive. Optional: `true` • Default: `sora-2` • Accepts: `Sora 2`, `Sora 2 Pro` - **Duration** (`dropdown`) — The duration of the generated video in seconds. Optional: `true` • Default: `4` • Accepts: `4s`, `8s`, `12s` - **Video Size** (`dropdown`) — The size of the generated video. Optional: `true` • Default: `1280x720` • Accepts: `1280x720 Landscape`, `720x1280 Portrait`, `1792x1024 Landscape`, `1024x1792 Portrait` ## Outputs [#outputs] - **Generated Video** (`video`) — The generated video from the model. # Topaz Upscale (https://docs.fuser.studio/docs/nodes/video/topaz-upscale) _Provided by [Fal](https://fal.ai) — [Learn More](https://fal.ai/models/fal-ai/topaz/upscale/video)._ ## Inputs [#inputs] - **Video** (`video`) — The video to upscale. - **Scale Factor** (`slider`) — The factor by which to upscale the video. Optional: `true` • Default: `2` • Minimum: `1` • Maximum: `4` ## Outputs [#outputs] - **Upscaled Video** (`video`) — The resulting enhanced video. # Veed Subtitles (https://docs.fuser.studio/docs/nodes/video/veed-subtitles) _Provided by [Fal](https://fal.ai) — [Learn More](https://fal.ai/models/veed/subtitles)._ ## Inputs [#inputs] - **Video** (`video`) — The video to add subtitles to. - **Preset** (`dropdown`) — The subtitle style. Dynamic presets (Glass, Whisper, Glide 2, Fusion, Glide, Terminal, Handwritten, Backdrop, Backdrop 2) render context-aware animations and bill at 2x; the rest are basic fixed styles. Optional: `true` • Default: `glass` • Accepts: `Glass`, `Whisper`, `Glide 2`, `Fusion`, `Glide`, `Terminal`, `Handwritten`, `Backdrop`, `Backdrop 2`, `Simple`, `Plain`, `Beans`, `Corpo`, `Boo`, `Shadeplay`, `Casper`, `Capri`, `Lowkey`, `Vinta`, `Diego`, `Ali`, `Slay`, `Kitty`, `Hustle`, `Karl`, `Sprout`, `Flex`, `Mint`, `Rizz`, `Vegas` - **SRT Content** (`textarea`) — Paste raw SRT subtitle text to use instead of auto-transcription. When set, transcription is skipped. Optional: `true` - **SRT File URL** (`text`) — A URL to a .srt subtitles file to use instead of auto-transcription. When set, transcription is skipped. Optional: `true` ## Outputs [#outputs] - **Subtitled Video** (`video`) — The input video with styled subtitles rendered onto it. # Veo (https://docs.fuser.studio/docs/nodes/video/veo) _Provided by [Fal](https://fal.ai) — [Learn More](https://fal.ai/models/fal-ai/veo3)._ ## Inputs [#inputs] - **Prompt** (`textarea`) — The prompt to generate a video from. - **First Frame** (`image`) — The image to generate a video from. This will be used as the first frame of the video. Should be 720p or higher resolution in 16:9 or 9:16 aspect ratio. If the image is not in 16:9 or 9:16 aspect ratio, it will be cropped to fit. Optional: `true` - **Last Frame** (`image`) — The image to generate a video from. This will be used as the last frame of the video. Optional: `true` - **Ingredients** (`image`) _(accepts multiple)_ — Veo 3.1 supports Ingredients to guide the video generation. Ingredients are images that will be used as reference images for combining features. You can use a maximum of 3 ingredients. Optional: `true` - **Negative Prompt** (`textarea`) — The negative prompt to guide against undesired results. Optional: `true` - **Model** (`dropdown`) — The model to use for video generation. Optional: `true` • Default: `veo3.1-fast` • Accepts: `flow.nodes.FalVeoNode.inputs.model.items.veo3.1-fast`, `flow.nodes.FalVeoNode.inputs.model.items.veo3.1`, `Veo 3 Fast`, `Veo 3` - **Duration** (`dropdown`) — The duration of the generated video. When using images, the duration is always set to 8 seconds. Optional: `true` • Default: `8s` • Accepts: `4 seconds`, `6 seconds`, `8 seconds` - **Aspect Ratio** (`dropdown`) — The aspect ratio of the generated video. Aspect ratio is ignored when using Ingredients. Optional: `true` • Default: `auto` • Accepts: `Auto`, `16:9 Horizontal`, `9:16 Vertical` - **Resolution** (`dropdown`) — The resolution of the generated video. Optional: `true` • Default: `720p` • Accepts: `720p`, `1080p` - **Seed** (`seed`) — The same seed and prompt will output the same video every time. Seed is used only when generating from text prompt alone. Optional: `true` • Default: `9202` - **Fix Prompt** (`toggle`) — Whether to automatically attempt to fix prompts that fail content policy or other validation checks by rewriting them. Optional: `true` • Default: `true` - **Generate Audio** (`toggle`) — Generate audio for the video. Optional: `true` • Default: `true` ## Outputs [#outputs] - **Generated Video** (`video`) — The generated video from the model. # Vidu Reference (https://docs.fuser.studio/docs/nodes/video/vidu-reference) _Provided by [Fal](https://fal.ai) — [Learn More](https://fal.ai/models/fal-ai/vidu/q1/reference-to-video)._ ## Inputs [#inputs] - **Prompt** (`textarea`) — The prompt to generate a video from. The prompt should be 1500 characters or less. - **Images** (`image`) _(accepts multiple)_ — Reference images to generate your video. Vidu will combine the features of these images to create a video. - **Model** (`dropdown`) — The model to use for the video. Choose between the latest Q1 model or the original Vidu model. Optional: `true` • Default: `q1` • Accepts: `Vidu Q1`, `Vidu` - **Movement Amplitude** (`dropdown`) — Movement amplitude controls the amount of movement in the video. Optional: `true` • Default: `auto` • Accepts: `Auto`, `Small`, `Medium`, `Large` - **Aspect Ratio** (`dropdown`) — The aspect ratio of the generated video. Optional: `true` • Default: `16:9` • Accepts: `16:9`, `9:16`, `1:1` - **Seed** (`seed`) — The same seed and prompt will result in the same output every time. Optional: `true` • Default: `8470` • Minimum: `0` • Maximum: `65535` - **Add Music** (`toggle`) — Whether to add background music to the video. This property is only available for the Vidu Q1. Optional: `true` • Default: `false` ## Outputs [#outputs] - **Generated Video** (`video`) — The generated video from the model. # Vidu (https://docs.fuser.studio/docs/nodes/video/vidu) _Provided by [Fal](https://fal.ai) — [Learn More](https://fal.ai/models/fal-ai/vidu/q1/image-to-video)._ ## Inputs [#inputs] - **Prompt** (`textarea`) — The prompt to generate a video from. - **First Frame** (`image`) — The image used as the first frame of the video. Optional: `true` - **Last Frame** (`image`) — The image used as the last frame of the video. Optional: `true` - **Model** (`dropdown`) — The model to use for the video. Choose between the latest Q2 model, Q1, or the first generation Vidu model. Optional: `true` • Default: `q2` • Accepts: `Vidu Q2`, `Vidu Q1`, `Vidu` - **Style** (`dropdown`) — The style of the video. This property is only available for the Vidu Q1 model when using text only prompts. Optional: `true` • Default: `general` • Accepts: `General`, `Anime` - **Resolution** (`dropdown`) — The resolution of the generated video. This property is only available for the Vidu Q2 model. Optional: `true` • Default: `720p` • Accepts: `720p`, `1080p` - **Duration** (`dropdown`) — The duration of the generated video. This property is only available for the Vidu Q2 model. Optional: `true` • Default: `5` • Accepts: `4s`, `5s`, `6s`, `7s`, `8s` - **Aspect Ratio** (`dropdown`) — The aspect ratio of the generated video. This property is only available for the Vidu Q2 model. Optional: `true` • Default: `16:9` • Accepts: `16:9`, `9:16`, `1:1` - **Seed** (`seed`) — The same seed and prompt will result in the same output every time. Optional: `true` • Default: `18945` • Minimum: `0` • Maximum: `65535` - **Movement Amplitude** (`dropdown`) — Movement amplitude controls the amount of movement in the video. Optional: `true` • Default: `auto` • Accepts: `Auto`, `Small`, `Medium`, `Large` - **Turbo Mode** (`toggle`) — When enabled, the video will be generated faster with no noticeable degradation in the visual quality. This property is only available for the Vidu Q2 Image to Video model. Optional: `true` • Default: `true` - **Generate Music** (`toggle`) — Generate background music for the video. This property is only available for the Vidu Q2 model and 4s video duration. Optional: `true` • Default: `true` ## Outputs [#outputs] - **Generated Video** (`video`) — The generated video from the model. # Wan-2.1 (https://docs.fuser.studio/docs/nodes/video/wan-2-1) _Provided by [Fal](https://fal.ai) — [Learn More](https://fal.ai/models/fal-ai/wan-t2v)._ ## Inputs [#inputs] - **Prompt** (`textarea`) — The prompt to generate a video from. - **Image Prompt** (`image`) — The image used as the first frame of the video. If the image does not match the chosen aspect ratio, it is resized and center cropped. Optional: `true` - **End Image** (`image`) — The image used as the last frame of the video. Optional: `true` - **Negative Prompt** (`textarea`) — The negative prompt is used to guide the model to avoid generating videos that contain certain elements or concepts. Optional: `true` • Default: `bright colors, overexposed, static, blurred details, subtitles, style, artwork, painting, picture, still, overall gray, worst quality, low quality, JPEG compression residue, ugly, incomplete, extra fingers, poorly drawn hands, poorly drawn faces, deformed, disfigured, malformed limbs, fused fingers, still picture, cluttered background, three legs, many people in the background, walking backwards` - **Model** (`dropdown`) — The model to use for video generation. Optional: `true` • Default: `wan-2.1` • Accepts: `flow.nodes.FalWanNode.inputs.model.items.wan-2.1`, `flow.nodes.FalWanNode.inputs.model.items.wan-2.1-pro` - **Aspect Ratio** (`dropdown`) — The aspect ratio of the generated video. Optional: `true` • Default: `16:9` • Accepts: `16:9`, `9:16`, `1:1` - **FPS** (`slider`) — The number of frames per second to generate. Optional: `true` • Default: `16` • Minimum: `5` • Maximum: `24` - **Frames** (`slider`) — The total number of frames to generate. Must be between 81 and 100. Optional: `true` • Default: `81` • Minimum: `81` • Maximum: `100` - **Resolution** (`dropdown`) — The resolution of the generated video. Optional: `true` • Default: `720p` • Accepts: `480p`, `580p`, `720p` - **Steps** (`slider`) — The number of inference steps to perform. Optional: `true` • Default: `30` • Minimum: `2` • Maximum: `40` - **Seed** (`seed`) — The same seed and prompt will output the same image every time. Optional: `true` • Default: `17009` • Minimum: `0` • Maximum: `65535` - **Guidance Scale** (`slider`) — Higher guidance scales can help with preserving garment detail, but risks oversaturated colors. Optional: `true` • Default: `5` • Minimum: `1` • Maximum: `10` - **Shift** (`slider`) — Shift controls how the model moves through the denoising process, affecting motion and time flow in your video. Lower values result in smoother, more predictable movement. Higher values result in more dynamic but sometimes chaotic motion. Optional: `true` • Default: `6` • Minimum: `1` • Maximum: `10` - **Expand Prompt** (`toggle`) — Whether to expand the prompt using the model's own capabilities Optional: `true` • Default: `true` - **Block NSFW** (`toggle`) — Whether to block NSFW content Optional: `true` • Default: `false` - **Turbo Mode** (`toggle`) — When enabled, the video will be generated faster with no noticeable degradation in the visual quality. This property is not supported when using an image prompt. Optional: `true` • Default: `false` ## Outputs [#outputs] - **Generated Video** (`video`) — The generated video from the model. # Wan-2.2 Video (https://docs.fuser.studio/docs/nodes/video/wan-2-2-video) _Provided by [Fal](https://fal.ai) — [Learn More](https://fal.ai/models/fal-ai/wan/v2.2-a14b/image-to-video)._ ## Inputs [#inputs] - **Prompt** (`textarea`) — The prompt to generate a video from. - **Image Prompt** (`image`) — The image used as the first frame of the video. If the image does not match the chosen aspect ratio, it is resized and center cropped. Optional: `true` - **End Image** (`image`) — The image used as the last frame of the video. Only supported by the Pro model. Optional: `true` - **Video Prompt** (`video`) — Input video, used for video-to-video generation and editing. Optional: `true` - **Negative Prompt** (`textarea`) — The negative prompt is used to guide the model to avoid generating videos that contain certain elements or concepts. Optional: `true` - **Model** (`dropdown`) — The model to use for video generation. Optional: `true` • Default: `wan-2.2-5b` • Accepts: `flow.nodes.FalWan22VideoNode.inputs.model.items.wan-2.2-5b`, `flow.nodes.FalWan22VideoNode.inputs.model.items.wan-2.2-a14b` - **Frames** (`slider`) — The total number of frames to generate. Must be between 81 and 121. Optional: `true` • Default: `81` • Minimum: `81` • Maximum: `121` - **FPS** (`slider`) — The number of frames per second to generate. Optional: `true` • Default: `24` • Minimum: `5` • Maximum: `60` - **Seed** (`seed`) — The same seed and prompt will output the same video every time. Optional: `true` • Default: `47146` • Minimum: `0` • Maximum: `65535` - **Resolution** (`dropdown`) — The resolution of the generated video. Optional: `true` • Default: `720p` • Accepts: `480p`, `580p`, `720p` - **Aspect Ratio** (`dropdown`) — The aspect ratio of the generated video. If 'auto', the aspect ratio will be determined automatically based on the image or video prompts. Optional: `true` • Default: `auto` • Accepts: `Auto`, `16:9`, `9:16`, `1:1` - **Steps** (`slider`) — The number of inference steps to perform. Higher values can help with preserving details, but take longer to generate. We recommend using 40 steps for Lite and 27 steps for Pro. Optional: `true` • Default: `27` • Minimum: `2` • Maximum: `50` - **Guidance Scale** (`slider`) — Higher guidance scales can help with preserving garment detail, but risks oversaturated colors. Optional: `true` • Default: `3.5` • Minimum: `1` • Maximum: `10` - **Shift** (`slider`) — Shift controls how the model moves through the denoising process, affecting motion and time flow in your video. Lower values result in smoother, more predictable movement. Higher values result in more dynamic but sometimes chaotic motion. Optional: `true` • Default: `5` • Minimum: `1` • Maximum: `10` - **Expand Prompt** (`toggle`) — Whether to expand the prompt using the model's own capabilities Optional: `true` • Default: `true` - **Block NSFW** (`toggle`) — Whether to block NSFW content Optional: `true` • Default: `false` - **Turbo Mode** (`toggle`) — When enabled, the video will be generated faster with no noticeable degradation in the visual quality. This property is not supported when using video-to-video generation. Optional: `true` • Default: `false` ## Outputs [#outputs] - **Generated Video** (`video`) — The generated video from the model. # Wan-2.6 Video (https://docs.fuser.studio/docs/nodes/video/wan-2-6-video) _Provided by [Fal](https://fal.ai) — [Learn More](https://fal.ai/models/wan/v2.6/image-to-video)._ ## Inputs [#inputs] - **Prompt** (`textarea`) — The text prompt for video generation. For multi-shot videos, use format: 'Overall description. First shot [0-3s] content. Second shot [3-5s] content.' - **Image Prompt** (`image`) — The image used as the first frame of the video. Optional: `true` - **Video References** (`video`) _(accepts multiple)_ — Reference videos for subject consistency. Videos' FPS must be at least 16 FPS. Reference in prompt as `@Video1`, `@Video2`, `@Video3`. Works for people, animals, or objects. Optional: `true` - **Audio** (`audio`) — The audio to use as the background music. If the audio duration exceeds the duration value (5, 10, or 15 seconds), the audio is truncated to the first N seconds, and the rest is discarded. If the audio is shorter than the video, the remaining part of the video will be silent. Optional: `true` - **Negative Prompt** (`textarea`) — The negative prompt is used to guide the model to avoid generating videos that contain certain elements or concepts. Optional: `true` - **Seed** (`seed`) — The same seed and prompt will output the same video every time. Optional: `true` • Default: `48648` • Minimum: `0` • Maximum: `65535` - **Duration** (`dropdown`) — The duration of the generated video in seconds. Optional: `true` • Default: `5` • Accepts: `5s`, `10s`, `15s` - **Resolution** (`dropdown`) — The resolution of the generated video. Optional: `true` • Default: `1080p` • Accepts: `720p`, `1080p` - **Aspect Ratio** (`dropdown`) — The aspect ratio of the generated video. This value is ignored when using video references. Optional: `true` • Default: `16:9` • Accepts: `16:9`, `9:16`, `1:1`, `4:3`, `3:4` - **Expand Prompt** (`toggle`) — Whether to expand the prompt using the model's own capabilities Optional: `true` • Default: `true` - **Multi-Shots** (`toggle`) — When enabled, the model will generate a multi-shot video. If disabled, the model will generate a single-shot video. Optional: `true` • Default: `true` - **Block NSFW** (`toggle`) — Whether to block NSFW content Optional: `true` • Default: `false` ## Outputs [#outputs] - **Generated Video** (`video`) — The generated video from the model. # Access Reference (https://docs.fuser.studio/docs/teams/access-reference) This page is the complete reference for how Fuser decides who can see and edit a project. Most days you don't need it — the defaults work the way you'd expect, and the [Sharing](https://docs.fuser.studio/docs/teams/sharing.md) page covers the common cases. Reach for this page when something surprises you. ## Mental Model [#mental-model] Seven rules cover the 80% case. Internalize these and you can predict access for almost any situation. 1. Workspace **Owners** and **Admins** can edit everything in the workspace. Always. Skip the rest of these rules for them. 2. **Drafts** are private. A Draft project is yours alone until you publish it or share it — your teammates can't even see it exists. 3. **Published** projects open up to where they live. Publish at the workspace root → everyone in the workspace sees it. Publish in a folder → people who can see the folder see it. Publish in a team folder → the team sees it. 4. **Folders set the access level** for everything inside them. A folder marked **View** gives readers read-only access; **Edit** gives full read/write. Projects inherit this. 5. **Team folders are gated by team membership.** If you're not in the team, you don't see its folders or projects unless someone shares them with you. 6. **Sharing only adds access**, never removes it. Use shares to give one person Edit on a project they otherwise couldn't touch. 7. The **workspace root** has its own default (View or Edit), set by your workspace **Admin**. This is the fallback whenever a folder says **Inherit**. ## Edge Cases [#edge-cases] The cases below are the ones that surprise people. Each has caused real confusion — read them once and you'll save yourself a debugging session later. > [!WARNING] Re-drafting removes others' access > > Switching a **Published** project back to **Draft** removes everyone else's access immediately — including yours, in some cases. If you weren't the original creator, only the creator and workspace **Admins** keep Edit. Add an explicit Edit share to yourself before flipping a Published project back to Draft. > [!WARNING] Archiving a team caps members at View > > When a team is **Archived**, its members keep access but at View only — even on folders set to default-Edit. Non-members lose access entirely (Open teams stop being open when archived). Explicit Edit shares survive the cap and continue to work. > [!NOTE] Private folders override their projects > > A **Published** project inside a **Private** folder is still hidden from everyone except the folder creator and workspace **Admins**. The folder's privacy gate takes precedence over the project's visibility setting. > [!WARNING] Folder creators don't automatically see team folders > > Creating a folder in a team grants you management rights — you can rename it, change its default access, and add projects. But it doesn't grant visibility. If you later leave the team, the folder disappears from your view. To keep seeing it, get a share. > [!NOTE] Comment access only comes from shares > > The **Comment** access level can only be granted through a share. You can't set a folder or workspace root to default-Comment — those default to **View** or **Edit** only. > [!WARNING] Removing a member revokes everything immediately > > When you remove someone from your workspace, they lose access to every workspace project, folder, and share immediately — including projects they created in the workspace. Their personal projects (made outside any workspace) stay with them. If you re-invite them later, you'll need to re-share anything they should still see. > [!NOTE] Open teams aren't necessarily joinable > > **Open** means discoverable by everyone in the workspace. It does not mean public outside the workspace, and it doesn't always mean self-join is enabled. Use **Closed** when you want a team's work hidden from non-members. > [!NOTE] Direct-to-team projects use the workspace root default > > A project assigned to a team but not placed in any folder uses the **workspace root access** level, not a folder default. This sometimes surprises **Admins** who expect team projects to follow per-folder settings. > [!WARNING] Personal projects are separate from your workspace > > A project you created outside any workspace belongs only to you. Workspace **Admins** can't see or manage it. Moving it into the workspace changes its access model entirely — share it carefully if it has personal context. > [!NOTE] Verified domains don't grant access by themselves > > Verified-domain auto-join lets people sign in with a matching email and join your workspace. Until they actually accept and become a workspace **Member**, they have zero implicit access — only direct shares (typically by email) reach them. ## Scenarios [#scenarios] A few common situations and what each person sees. Assume the workspace root default is **Edit** (the out-of-the-box default) unless noted. | You are... | The project is... | You see... | | -------------------------------------- | ---------------------------------------------------- | ------------------------------- | | The creator | A **Draft**, anywhere | **Edit** | | A workspace **Admin** | Anything in the workspace | **Edit** | | A team **Member** | **Published**, in your team's folder set to **View** | **View** | | A team **Member** | **Published**, in your team's folder set to **Edit** | **Edit** | | A workspace **Member** not in the team | **Published**, in a **Closed** team's folder | Nothing | | A workspace **Member** not in the team | **Published**, in an **Open** team's folder | **Edit** (workspace root level) | | A team **Member**, team **Archived** | **Published**, in a folder set to **Edit** | **View** (cap) | | Anyone with a public link | The project has **Share a Link** on | **View** (read-only) | ## What's Next? [#whats-next] - [Sharing](https://docs.fuser.studio/docs/teams/sharing.md): Grant explicit access to override defaults. - [Folders](https://docs.fuser.studio/docs/teams/folders.md): Set the default access for everything inside a folder. - [Teams](https://docs.fuser.studio/docs/teams/team-groups.md): Group members and gate access by team membership. # Folders (https://docs.fuser.studio/docs/teams/folders) A folder is a named container for projects. Folders give each team a place for its work, and they're how you set the default access level for everything inside. Folders live in one of two places: * **At the workspace root** — visible to the whole workspace, governed by the workspace root access level. * **Inside a team** — visible to that team's members, governed by the folder's own default access. This page covers creating folders, choosing visibility, and configuring default access. ## Creating a Folder [#creating-a-folder] ### Open the new folder dialog [#open-the-new-folder-dialog] In the sidebar on the home page, hover the **Folders** section and click the **+** button. You can also create a folder inside a team from the team's section. ### Fill out the folder details [#fill-out-the-folder-details] Fuser asks for: * **Name** — what the folder is called. * **Color** — a small dot used to label the folder in the sidebar. * **Visibility** — **Private** or **Team** (described below). * **Default access** — what level of access folder visitors get by default (described below). ### Drop projects into it [#drop-projects-into-it] The folder appears in the sidebar immediately. You can drag and drop projects into it, or pick it as the destination when creating new projects. ## Folder Visibility [#folder-visibility] A folder is either **Private** or **Team**: * **Private** — only the creator and workspace **Admins** can see it. Use this for a personal scratch folder, or for work-in-progress you don't want to surface yet. Private folders cannot be assigned to a team. * **Team** — every member of the assigned team can see the folder. If no team is assigned, the folder lives at the **workspace root** and every workspace member can see it. > [!NOTE] Private folders override their projects > > A **Published** project inside a **Private** folder is still hidden from everyone except the folder creator and workspace **Admins**. The folder's privacy gate takes precedence over the project's own visibility setting. ## Default Access [#default-access] The folder's **default access** sets the level at which people get to its projects when no explicit share is involved. * **View** — everyone who can see the folder can read its projects. * **Edit** — everyone who can see the folder can read and edit its projects. * **Inherit** — use whatever the **Workspace root default access** is set to in [Workspace Settings → Access Defaults](https://docs.fuser.studio/docs/teams/workspace-settings.md#access-defaults). The default for new team folders. If you don't change the workspace default, "Inherit" effectively means "Edit" out of the box. Choose Inherit when you want one toggle in workspace settings to drive every folder's defaults at once. The default applies only to people who have access to the folder in the first place — for **Team** folders, that means team members; for workspace-root folders, that means every workspace member. **Admins** and **Owners** always get Edit regardless. For the precise rules and edge cases, see [Access Reference](https://docs.fuser.studio/docs/teams/access-reference.md). ## Workspace Root vs. Team Folders [#workspace-root-vs-team-folders] A folder lives in one of two homes — directly at the workspace root, or inside a team: Project Project The **workspace root** is the implicit container outside any folder or team. It has its own default access level (set in [Workspace Settings → Access Defaults](https://docs.fuser.studio/docs/teams/workspace-settings.md#access-defaults)) and applies to: * Projects you create at the workspace root with no folder. * Folders that don't belong to a team — these inherit visibility from the workspace. * Folders set to **Inherit** — the default access flows down from the workspace root. A **team folder** lives inside a team. It's gated by team membership: non-members can't see it unless someone shares it with them. Inside the team, the folder's default access decides whether members get View or Edit. ## Folder Creator Rights [#folder-creator-rights] The person who creates a folder always keeps **Edit** access on the folder itself, so they can rename it, change its color, or add projects. Only **Admins**, the folder creator, and (for team folders) team **Managers** can change the default access or delete the folder. > [!WARNING] Creator access is per-workspace > > Creator rights apply only while you're a member of the workspace. If you leave the workspace, you lose your folder-creator rights along with everything else. For team folders, you also need to stay in the team to keep *seeing* the folder — creator rights cover management, not visibility. ## What's Next? [#whats-next] - [Sharing](https://docs.fuser.studio/docs/teams/sharing.md): Override folder defaults with explicit shares to specific people. - [Access Reference](https://docs.fuser.studio/docs/teams/access-reference.md): Full rules for how folder access combines with teams and shares. # Overview (https://docs.fuser.studio/docs/teams) A workspace is your shared home in Fuser — the umbrella that holds everyone you collaborate with, every project you build, and the rules for who sees what. Inside a workspace you can group people into **teams**, organize projects into **folders**, and control access at every level. This section covers everything from creating a workspace to administering its policies. ## The Hierarchy [#the-hierarchy] Fuser organizes work in four nested layers. Each layer scopes the one below it. * **Workspace** — your account in Fuser. Holds members, billing, and workspace-wide settings. * **Team** — a named slice of a workspace with its own members and folders. * **Folder** — a named container for projects. Lives in a team, or at the **workspace root**. * **Project** — a single flow on the canvas. A typical workspace looks like this — projects sit at the workspace root, inside a workspace folder, inside a team, or inside a team's folder. Project Project Project Project Project Project Project Project You switch between workspaces from the button in the top bar of the home page. Opening it reveals every workspace you belong to, plus your profile, settings, and an entry to create a new one. > [!NOTE] Why this hierarchy? > > Workspaces handle billing and identity. Teams scope collaboration so a designer in one team doesn't see another team's drafts. Folders give each team a way to organize its own work. Projects stay focused on the flow itself. ## Glossary [#glossary] A few terms you'll see throughout this section. They map to what's on screen — no internal jargon. Where an icon appears next to a term, it's the same icon you'll see in the app. | | Term | What it means | | ------------------------------------------------------------------ | ------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | | **Workspace** | Your account in Fuser. Holds members, billing, settings, and everything you create. | | | **Workspace root** | The top level of your workspace, outside any folder or team. Projects placed here are visible to everyone in the workspace, with the workspace root access level. | | | **Team** | A named slice of your workspace (e.g. *Brand*, *Motion*) with its own members and folders. | | | **Folder** | A named container for projects. Lives at the workspace root or inside a team. | | | **Project** | A single Fuser document. The flow you actually work in on the canvas. | | | **Draft** | A project that's private to its creator and workspace admins. Hidden from teammates until you publish or share it. | | | **Published** | A project that's open to its surrounding context — its team, its folder, or the workspace root. | | | **Visibility** | Where a thing lives and who can see it. Applies to projects (**Draft** / **Published**), folders (**Private** / **Team**), and teams (**Open** / **Closed** / **Private**). | | | **Default access** | The access level a folder or workspace root gives by default: **View**, **Edit**, or (folders only) **Inherit** from the workspace root. | | | **Share** | An explicit grant to a person, email, or team that adds access on top of whatever they'd get by default. Shares only add access, never remove it. | | | **Role** | Workspace roles are **Owner**, **Admin**, **Member**. Team roles are **Manager**, **Member**. | | | **Access level** | What you can do once you have access: **View** (read), **Comment** (read + comment, share-only), or **Edit** (read/write). | ## What's Next? [#whats-next] - [Workspaces](https://docs.fuser.studio/docs/teams/workspaces.md): Create a workspace, switch between them, and edit the workspace profile. - [Members](https://docs.fuser.studio/docs/teams/members.md): Invite people, assign roles, and manage who's in your workspace. - [Teams](https://docs.fuser.studio/docs/teams/team-groups.md): Group members into teams with their own visibility and folders. - [Folders](https://docs.fuser.studio/docs/teams/folders.md): Organize projects, set default access, and choose folder visibility. - [Sharing](https://docs.fuser.studio/docs/teams/sharing.md): Share projects with specific people, teams, or external collaborators. - [Access Reference](https://docs.fuser.studio/docs/teams/access-reference.md): The full rules of who can see what, with edge cases and scenarios. - [Workspace Settings](https://docs.fuser.studio/docs/teams/workspace-settings.md): Access defaults, sharing policies, verified domains, audit, and recovery. # Members (https://docs.fuser.studio/docs/teams/members) Members are the people who belong to your workspace. They can see and create content according to their **role** and the visibility rules of teams, folders, and projects. This page covers the member lifecycle: inviting people, choosing their role, removing them, and the **Verified domains** shortcut for letting whole companies join automatically. ## The Members Panel [#the-members-panel] Open **Settings** → **Workspace** → **Settings** → **Members** (the Workspace tab itself has Settings / Members / Access sub-modes — pick **Members**). The panel lists every member with their name, email, role, and the teams they belong to. From here you can invite new people, change roles, manage team assignments, and remove members. Pending invitations live in their own section near the top — you can resend or cancel them. ## Inviting Members [#inviting-members] ### Open the invite dialog [#open-the-invite-dialog] Click **Invite** at the top of the panel. ### Enter the recipient and role [#enter-the-recipient-and-role] Enter the recipient's email address and pick a role (described below), then send. ### Manage the pending invite [#manage-the-pending-invite] Fuser emails the invitation and adds it to the **Pending** list. **Invitations expire 7 days after they're sent.** Until then, they stay open until the recipient accepts, you cancel them, or the 7-day window passes. You can resend the invitation at any time from the pending row — resending issues a fresh 7-day window. The email contains a link to `/invite/:id`. Clicking it opens a Fuser page that shows the workspace name, the inviter, and the role being offered. Accepting joins the recipient to the workspace and drops them on its home page; declining marks the invite cancelled in your Pending list. > [!NOTE] Seat limits > > Workspaces have a seat limit set by the plan. See **Workspace Billing** in the settings modal for your current seats and limit. ## Workspace Roles [#workspace-roles] Every member has one of three workspace roles. Roles stack — an **Admin** can do everything a **Member** can, and an **Owner** can do everything an **Admin** can. | Role | What it adds | | ---------- | ------------------------------------------------------------------------------------------------------------------------ | | **Owner** | Delete the workspace, transfer ownership, receive remaining workspace credits when the subscription is cancelled. | | **Admin** | Manage members, create and manage teams, see all projects, update workspace settings, **manage billing** (incl. portal). | | **Member** | Create projects in places they can access, edit their own draft projects, join open teams. | You change a member's role from the **Role** dropdown next to their name. Use the checkbox at the start of each row to select multiple members and change their roles in bulk. > [!WARNING] The last Owner is protected > > A workspace must always have at least one **Owner**. The dropdown for the last remaining Owner is disabled — to demote them, first promote someone else to Owner. To leave a workspace you own, transfer ownership first. ## Removing Members [#removing-members] Use the remove icon on a member's row to remove a single person, or select multiple rows and click **Remove member** to bulk-remove. Fuser asks for confirmation before applying. > [!WARNING] Removal revokes access immediately > > When you remove someone from the workspace, they lose access to every workspace project, folder, and share immediately. Their personal projects (those made outside any workspace) stay theirs. If you later re-invite the same person, you'll need to re-share anything they should still see. ## Verified Domains [#verified-domains] Verified domains let you skip individual invitations for your own company. Once a domain is verified for your workspace, anyone with a **verified-email** account at that domain can self-join (subject to seat capacity). The flow for the joining user: 1. They sign in to Fuser with their company email (the email address must be verified on their account — unverified accounts can't auto-join). 2. They see a **Join** button for your workspace on their next sign-in. 3. They click Join to accept and land in your workspace. Setup lives in **Settings** → **Workspace** → **Settings** → **Verified Domains**. You add the domain and an admin email address that can prove ownership; Fuser sends a verification link to that address. For the full setup walkthrough see [Workspace Settings — Verified Domains](https://docs.fuser.studio/docs/teams/workspace-settings.md#verified-domains). ## What's Next? [#whats-next] - [Teams](https://docs.fuser.studio/docs/teams/team-groups.md): After adding members, group them into teams to scope their work. - [Workspace Settings](https://docs.fuser.studio/docs/teams/workspace-settings.md#verified-domains): Set up verified domains and configure default member spend limits. # Sharing (https://docs.fuser.studio/docs/teams/sharing) Default access — what your teammates see based on team and folder rules — covers the common cases. When you need to grant access to someone the defaults don't reach, you reach for **Share**. This page covers the share popover, the full share dialog, the share types and access levels you can grant, and how to flip a project between **Draft** and **Published**. ## The Share Popover [#the-share-popover] Every project has a **Share** button. Clicking it opens the compact popover with quick controls: * **Manage access** — opens the full share dialog (covered below). * **Share a Link** — toggles a read-only public link anyone with the URL can view. Useful for showing work to clients or posting on social. Public links are independent of workspace membership — if **Share a Link** is on, anyone with the URL gets a view-only copy. Turn it off to revoke. ## The Full Share Dialog [#the-full-share-dialog] **Manage access** opens the full share dialog. It has two tabs: **Internal** for people inside the workspace, and **External** for people outside it. ### Internal [#internal] The **Internal** tab targets people and teams in your workspace. Pick a person or team from the search field, choose an access level (**View**, **Comment**, or **Edit**), and the share is added. You can: * Share with an individual workspace **Member**. * Share with a whole **Team** — every team member gets the chosen access level. * Expand a team share to see each member's effective access. * Remove a share with the **X** on its row. > [!NOTE] Sharing with someone who already has access > > If you try to share with a person who already has access through a team or folder default — say they're in the team that owns the folder — the dialog shows their existing access alongside an **Elevate to Edit** (or Comment) button. Elevation creates an explicit share that overrides the inherited level upward. There's no way to elevate downward; sharing only adds access. ### External [#external] The **External** tab invites people who aren't in your workspace by email. Fuser sends them a link they can use to view, comment on, or edit the project — no workspace membership required. External email shares only work if your workspace allows them. The toggle lives at [Workspace Settings → Sharing Policies → Allow External Email Sharing](https://docs.fuser.studio/docs/teams/workspace-settings.md#sharing-policies). When it's off, the **External** tab is still visible but new email invites are rejected — turn the policy on to grant them. ## Share Types [#share-types] You can grant access to four kinds of grantee: * **User share** — a specific workspace member. * **Team share** — every member of a team. * **Email share** — someone outside the workspace (only if external sharing is on). * **Folder share** — applied to a whole folder. The share extends to every project inside the folder via inheritance. Folder shares are added from the folder's own context menu, not the project's share dialog. Use them when you want to grant a guest access to a whole batch of work at once. ## Access Levels [#access-levels] Three access levels exist when sharing: * **View** — read the project and see comments. * **Comment** — view, plus create and resolve comments. Comment access is share-only — you can't set a folder to default-Comment. * **Edit** — comment, plus modify or delete the project. Shares only **add** access — they cannot reduce it. If a folder gives someone Edit by default, sharing them View on a project inside doesn't downgrade them. To restrict access, change the folder default or move the project. ## Project Visibility — Draft vs. Published [#project-visibility--draft-vs-published] Independent of sharing, every project has a **visibility** setting that decides whether it's openly visible to its surrounding context. * **Draft** — only the creator and workspace **Admins** can see the project. Teammates need an explicit share, even if they could otherwise see the folder. * **Published** — visible to everyone who can reach the project's location, at the access level the folder or workspace root defines. You change visibility two ways: 1. **From the project itself** — open the share popover and use the visibility toggle at the top. 2. **From a project card** — right-click any project on the home page and pick a visibility option from the context menu. Only the project's creator or a workspace **Admin** can change visibility. > [!WARNING] Re-drafting removes others' access > > Switching a **Published** project back to **Draft** removes everyone else's access immediately — including, in some cases, your own. If you weren't the original creator, you'll lose access too unless you have an explicit share. Make sure you have an explicit Edit share on the project before flipping it back. ## What's Next? [#whats-next] - [Access Reference](https://docs.fuser.studio/docs/teams/access-reference.md): The full rules of who can see what, and how shares combine with defaults. - [Workspace Settings](https://docs.fuser.studio/docs/teams/workspace-settings.md#sharing-policies): Toggle external email sharing and other workspace-wide policies. # Teams (https://docs.fuser.studio/docs/teams/team-groups) A team is a named slice of your workspace with its own members, folders, and visibility. Teams are useful for separating Brand from Motion, or Production from R\&D, without making every project visible to everyone. This page covers creating a team, picking its visibility, managing membership, and archiving a team you no longer need. ## Creating a Team [#creating-a-team] ### Open the Teams panel [#open-the-teams-panel] Open **Settings** → **Workspace** → **Teams** and click **Create Team**. ### Set name, color, and visibility [#set-name-color-and-visibility] * **Name** — what the team is called. * **Color** — a small dot used to label the team in member rows and folders. * **Visibility** — who can discover and join the team (described below). ### Become the first Manager [#become-the-first-manager] The person who creates a team automatically becomes its first **Manager**. > [!NOTE] Who can create teams? > > By default any workspace **Owner** or **Admin** can create teams. Whether regular **Members** can create teams depends on the **Members Can Create Teams** policy in [Workspace Settings — Sharing Policies](https://docs.fuser.studio/docs/teams/workspace-settings.md#sharing-policies). ## Team Visibility [#team-visibility] Visibility controls who can discover the team and what non-members see of its work. * **Open** — discoverable by every workspace member. Non-members can see the team's published content at the workspace root default access level. Members can self-join. * **Closed** — discoverable, but joining requires an invitation from a **Manager**. Non-members can't see the team's projects. * **Private** — invisible to non-members. Only the team's own members know it exists. You can change visibility later from the team's row in the **Teams** panel — only the team's Managers and workspace Admins can do this. > [!NOTE] Open does not mean public > > **Open** means discoverable by everyone in your workspace, not by the outside world. Nothing in your workspace is ever exposed to non-members of the workspace by default — for that, see [Sharing](https://docs.fuser.studio/docs/teams/sharing.md). ## Team Roles [#team-roles] Inside a team, members have one of two roles: * **Manager** — update team settings, add or remove members, change visibility, archive the team. * **Member** — read team content according to the team's visibility rules. You change a team member's role from the team detail view. The team's creator is its first Manager; promote others as the team grows. Workspace **Admins** and **Owners** can manage any team without needing to be members of it. ## Adding and Removing Members [#adding-and-removing-members] In the team's detail view, click **Add Member** to pick from the workspace's member list. Removing a member is the **Remove** button on their row. Removed members lose access to the team's folders and projects immediately, unless they have explicit shares. For **Open** teams, members can also self-join from the workspace's team list — no manager action required. ## Archiving a Team [#archiving-a-team] When a team's work is done but you want to keep its history, **Archive** the team instead of deleting it. The team's row stays visible (with an **Archived** badge), and its folders and projects stay intact. While a team is archived: * **Non-members lose access entirely.** Even **Open** teams stop granting access to outsiders. * **Members are capped at View access.** Even on folders set to default-Edit, archived-team members can only read. * Explicit Edit shares still work — they override the cap. To resume work, click **Unarchive** on the team's row. To remove the team permanently, click **Delete Team** — this is irreversible and removes the team's folders and projects unless you've moved them out first. > [!WARNING] Archiving caps editing across the team > > Even if a folder inside an archived team has default-Edit access, members only get View. If you need ongoing edit access while a team is archived, grant explicit shares to the people who need them — see [Sharing](https://docs.fuser.studio/docs/teams/sharing.md). ## What's Next? [#whats-next] - [Folders](https://docs.fuser.studio/docs/teams/folders.md): Teams own folders — set them up and choose default access. - [Access Reference](https://docs.fuser.studio/docs/teams/access-reference.md): Full rules for who sees what across teams, folders, and projects. # Transferring Projects (https://docs.fuser.studio/docs/teams/transferring-projects) Personal projects live outside any workspace — only you can see them, and only people you've shared them with directly. When the work is ready for a team, transferring brings the project into a workspace you belong to and drops it into the exact spot you choose. This page covers how to transfer, where projects can land, what changes after the move, and who is allowed to transfer where. ## How to Transfer [#how-to-transfer] ### Open the project's menu [#open-the-projects-menu] On the home page in your **Personal** context, right-click the project card (or open the **…** menu) and pick **Transfer to workspace…**. The menu item only appears for personal projects you created. If you're not the project's creator, or you're already in a workspace context, the option is omitted. ### Pick a workspace [#pick-a-workspace] The dialog shows a **Workspace** picker listing every workspace you belong to. Choose the one you want the project to move to. If you aren't a member of any workspace yet, Fuser tells you to create one first — there's nowhere to transfer to until then. ### Pick a destination inside the workspace [#pick-a-destination-inside-the-workspace] Below the picker, a tree shows the places you can drop the project. Workspaces with a single team auto-expand so you can see its folders without an extra click. You can land the project in one of four places — see [Where Projects Can Land](#where-projects-can-land) below. ### Confirm [#confirm] A summary appears once both a workspace and a destination are selected: where the project is going, what its new visibility will be, and a reminder that personal collaborators will lose access. Click **Transfer** to commit, or **Cancel** to back out. On success, Fuser shows a toast with a **View** link that opens the project in its new workspace context. ## Try the Destination Picker [#try-the-destination-picker] Click and expand below to see how the picker behaves in the real dialog. Picking the workspace targets the **workspace root**; expanding it reveals workspace folders. Each team is its own expandable row with its folders inside. ## Where Projects Can Land [#where-projects-can-land] You pick exactly one of four destinations inside the workspace: | Destination | Where it lives | Notes | | ------------------------------------------------------------------------------------- | ------------------------------------------------------------- | ----------------------------------------------------------------------------------- | | **Workspace root** | The top level of the workspace, outside any folder or team. | Visible to every workspace member, governed by the workspace root's default access. | | **Workspace folder** | A folder that belongs to the workspace itself, not to a team. | Anyone who can see the folder can find the project. | | **Team** | The root of a specific team. | Only that team's members can see the project. | | **Team folder** | A folder inside a team. | Gated by team membership, then by the folder's own default access. | For the full rules on what each destination's defaults mean, see [Folders](https://docs.fuser.studio/docs/teams/folders.md) and [Access Reference](https://docs.fuser.studio/docs/teams/access-reference.md). ## What Changes When You Transfer [#what-changes-when-you-transfer] * **Visibility resets to the workspace default.** The project is set to **Draft** or **Published** based on the destination workspace's setting, regardless of what it was before. The dialog shows you the new value before you confirm. Change it later in [Workspace Settings → Access Defaults](https://docs.fuser.studio/docs/teams/workspace-settings.md#access-defaults). * **Personal collaborators lose access.** Anyone you'd shared the project with directly — by name or by email link — is removed. They won't see the project anymore. If you want them to keep access, re-invite them in the destination workspace using the project's [Sharing](https://docs.fuser.studio/docs/teams/sharing.md) tools after the transfer. * **Media follows the project.** Images, generations, and files used in the project become visible to the destination workspace through its asset library. Anything you don't want shared, remove from the project before you transfer. * **The project keeps its history.** The flow, comments, and version history move with the project unchanged. * **An entry appears in the workspace activity log.** Workspace **Admins** can see who transferred what, when, and where it landed. ## Who Can Transfer Where [#who-can-transfer-where] A few rules decide whether a destination is available: * You can only transfer projects **you created**. You won't see the menu item on someone else's personal project. * You must be a **member** of the destination workspace. * **Owners** and **Admins** can transfer to any destination in the workspace. * **Members** can transfer to the workspace root, to any workspace folder they have edit access to, to a team they belong to, or to a folder inside a team they belong to (provided they can edit that folder). Destinations you can't reach are filtered out of the tree, so the dialog only shows you valid choices. For the precise edit-access rules, see [Access Reference](https://docs.fuser.studio/docs/teams/access-reference.md). ## One-Way and Irreversible [#one-way-and-irreversible] > [!WARNING] Transfers can't be undone > > Once a project is transferred, it belongs to the workspace. There is no built-in **transfer back** to personal — if you want a personal copy of the work, duplicate the project before or after the transfer. Personal collaborators don't auto-restore either, so make a list before you confirm if you intend to re-invite them. ## What's Next? [#whats-next] - [Folders](https://docs.fuser.studio/docs/teams/folders.md): How destinations are structured, and how folder defaults shape access. - [Sharing](https://docs.fuser.studio/docs/teams/sharing.md): Re-invite collaborators to the project after the transfer. - [Access Reference](https://docs.fuser.studio/docs/teams/access-reference.md): The full rules for who can see and edit projects in each destination. # Workspace Billing (https://docs.fuser.studio/docs/teams/workspace-billing) A workspace has its own billing — separate from the personal billing of any individual member. The workspace pays for the work done inside it, with shared credits, its own subscription, and per-member spend limits to keep usage in check. This page covers the **Workspace Billing** tab. If you're looking for your personal subscription and credits, that's [Billing & Plans](https://docs.fuser.studio/docs/interface/billing.md). > [!NOTE] Workspace plans are always Teams > > Every workspace runs on the **Teams** plan — there is no Indie or Professional workspace. The "plan" controls are about credit packs and seats, not tier. If you don't need shared credits, multiple seats, or per-member spend controls, work on a personal account instead. ## Where to find it [#where-to-find-it] Open **Settings** from the workspace switcher and pick the **Workspace Billing** tab. Both **Owners** and **Admins** can open this tab and manage billing — regular members can't. The tab has two modes, switched by a toggle at the top: * **Billing** — plan, seats, credits, payment methods, invoices. * **Spend Limits** — per-member monthly credit caps. ## Workspace plan [#workspace-plan] The plan card shows the workspace's monthly cost, the credit grant, the renewal date, and the payment method on file. Since every workspace is on the Teams plan, "plan changes" here mean adjusting **credit packs** and **seats** rather than switching tiers. Two things take effect immediately and the rest defer to the cancellation flow: * **Credit-pack changes** apply immediately. The previous billing period closes and a fresh one starts at the new credit pack — credits do **not** prorate. * **Seat changes** apply immediately and **are prorated** on your next invoice. Adding a seat charges the prorated remainder of the current period; removing a seat credits it. * **Cancellation** ends the subscription at the end of the current paid period, then enters a **7-day grace period** (see below). ## Seats [#seats] Workspaces include a base seat count (10 on the Teams plan), with the option to add more for a per-seat monthly fee. The **Seats** card shows your base seats, how many are in use right now, and a control to add or remove paid seats. When all seats are full, new invitations are blocked until you free a seat (remove a member or cancel a pending invite) or buy more. The card surfaces the seat-add cost up front so there's no surprise on the next invoice. > [!NOTE] Pending invitations count toward seats > > A pending invitation reserves a seat the same way an active member does. If your seat usage looks higher than the member list, check for unaccepted invitations. ## Cancellation & the 7-day grace period [#cancellation--the-7-day-grace-period] Cancelling the workspace subscription (from the plan card or the Stripe **Billing Portal**) doesn't immediately cut off access. Two things happen: 1. **Grace period (7 days).** Members keep full access for 7 days after cancellation. The workspace continues to function — generations still draw from the remaining credit pool. This window exists so you can re-subscribe without losing the team's work in progress. 2. **Credit redistribution to the owner.** Any credits remaining in the workspace pool when the subscription ends are **transferred to the workspace owner's personal credit balance** — they aren't refunded or lost. The transfer happens as part of the cancellation flow. After 7 days, the workspace becomes archived: members lose access, and any new generation request returns a forbidden error. Re-subscribing within or after grace restores access. > [!WARNING] Plan for the credit transfer > > If your workspace pool has tens of thousands of credits when you cancel, those credits land on the **owner's personal account** — not split among members. If credits should go elsewhere, drain the pool intentionally before cancelling, or transfer ownership first. ## Workspace credits [#workspace-credits] Workspace credits are the pool every member draws from when they generate inside the workspace. The balance is shared — when one member runs an expensive video render, the whole team's pool drops by that cost. Use **Spend Limits** below to cap individual members so one rendering session can't empty the pool. The **Workspace Credits** card mirrors the personal credits card from [Billing & Plans](https://docs.fuser.studio/docs/interface/billing.md#credits): it shows the current balance and a **Top up** button (Owner / Admin only) for one-shot credit purchases on top of the monthly grant. Unlike personal accounts, a workspace **must have an active subscription** before it can buy top-up credits — there's no pay-as-you-go on a workspace without a base plan. ## Auto-recharge [#auto-recharge] The workspace can have auto-recharge configured the same way personal accounts do — pick a balance threshold and a recharge amount, and Fuser tops up automatically when the workspace pool drops below the threshold. See [the personal Auto-recharge section](https://docs.fuser.studio/docs/interface/billing.md#auto-recharge) for the exact mechanics — the workspace tab uses the same UI. The same caveat applies: a valid payment method on the workspace is required for auto-recharge to fire. ## Spend Limits [#spend-limits] Switch the tab to **Spend Limits** to see per-member monthly caps. This is how you prevent one member from accidentally draining the workspace pool with a long video render. Each member row shows: * The member's name and role. * Their current calendar-month spend. * Their cap — preset buckets from 5K credits up to **Unlimited**, configurable per member. The default limit applied to new members is set in [Workspace Settings → Access Defaults → Default Spend Limit for New Members](https://docs.fuser.studio/docs/teams/workspace-settings.md#access-defaults). If no workspace default is set, the system fallback is **50K credits per month**. Existing members keep whatever limit they had when they joined; raise or lower individual limits here. **Reset cadence.** Member usage resets on the **1st of each calendar month (UTC)** — not on the workspace's billing-period anniversary. A member who hits their cap on the 28th has only a few days to wait; a member who hits it on the 2nd waits nearly a month. **What a blocked member sees.** When a member hits their cap, their next generation request fails with a **Spend limit exceeded** error and a toast pointing them at the workspace owner. Their personal credits are not used as a fallback — workspace usage is workspace-only. Raise the limit (or wait for the monthly reset) to unblock them. ## Annual billing & volume discounts [#annual-billing--volume-discounts] Workspace plans can be billed **monthly** or **annually**. Switching to annual saves **15%** off the monthly equivalent, configured from the plan card. Larger credit packs also unlock a **volume discount** of up to **10%** — applied automatically based on the pack size you pick. ## Tax ID [#tax-id] If your workspace needs an EU VAT number, GST/HST, ABN, or any other regional tax identifier on its invoices, add it via the Stripe **Billing Portal** (linked at the top of the Workspace Billing tab). New invoices issued after you save the tax ID will include it. Past invoices stay as-is — Stripe doesn't retroactively rewrite issued invoices. ## Invoices [#invoices] Workspace invoices live in the **Invoices** section of the Billing mode. Each invoice has a date, amount, and a PDF download. For older invoices or detailed line items, use the **Billing Portal** link at the top of the tab — it takes you out to Stripe. ## Personal vs. workspace billing [#personal-vs-workspace-billing] The workspace's plan, credits, payment method, and invoices are entirely separate from your personal **Billing & Plans**. The split is about *which credit pool pays*, not *who clicks the button*. * Generations triggered while you're working **inside a workspace** are paid in **workspace credits**, regardless of who triggered them. * Generations triggered while you're **outside any workspace** (a personal project) are paid in **your personal credits**. * Each member can have their own personal subscription for their own work; that never affects the workspace. Permissions for the Workspace Billing tab itself: | Action | Owner | Admin | Member | | ----------------------------------------- | ----- | ----- | ------ | | View Workspace Billing tab | ✓ | ✓ | — | | Top up workspace credits | ✓ | ✓ | — | | Add or remove seats | ✓ | ✓ | — | | Change Auto-recharge / payment method | ✓ | ✓ | — | | Open the Stripe **Billing Portal** | ✓ | ✓ | — | | Set per-member Spend Limits | ✓ | ✓ | — | | Cancel the workspace subscription | ✓ | ✓ | — | | Receive remaining credits on cancellation | ✓ | — | — | Removing a member doesn't refund any credits they consumed; their share of the pool is already spent. Their pending invitations are released and their seat is freed. ## What's Next? [#whats-next] - [Members](https://docs.fuser.studio/docs/teams/members.md): Invite and manage the people whose work spends workspace credits. - [Workspace Settings](https://docs.fuser.studio/docs/teams/workspace-settings.md): Set the default spend limit for new members and other workspace policies. - [Billing & Plans (personal)](https://docs.fuser.studio/docs/interface/billing.md): Your own subscription, credits, and payment methods. # Workspace Settings (https://docs.fuser.studio/docs/teams/workspace-settings) Workspace settings live in the global **Settings** modal. Open it from the workspace switcher (or any other settings entry point) to find the controls described here. The settings most workspaces care about are concentrated in three places: * **Workspace** tab → **Settings** sub-tab — workspace profile, access defaults, sharing policies, verified domains, default spend limit. * **Workspace** tab → **Access** sub-tab — the access audit panel. * **Recovery** tab — point-in-time recovery for the active project. * **Notifications** tab — your personal email preferences. Most controls require a workspace **Owner** or **Admin** role. The Recovery and Notifications tabs apply to the project or user respectively, not the whole workspace. ## Profile [#profile] In **Workspace** → **Settings**, the top section is the workspace profile. * **Workspace Name** — letters, numbers, and spaces, up to 100 characters. * **URL Slug** — lowercase letters, numbers, and hyphens. Live availability check. * **Avatar** — PNG, JPEG, or WebP. Click **Save Changes** to apply. For the full creation rules, see [Workspaces](https://docs.fuser.studio/docs/teams/workspaces.md). ## Access Defaults [#access-defaults] The **Access Defaults** section controls the default visibility and access level for new projects and unassigned content. Three settings live here: * **Default Project Visibility** — **Draft** or **Published**. Applied to new projects when their creator doesn't pick one explicitly. Set this to **Draft** if your team prefers to publish deliberately. * **Workspace Root Access** — **View** or **Edit**. Default access level for projects at the workspace root and for folders set to **Inherit**. New workspaces start at **Edit** — switch to **View** if you want a more conservative default for inherited folders. * **Default Spend Limit for New Members** — preset buckets from 5K credits per billing period up to **Unlimited**. New members joining the workspace are created with this limit. Existing members keep whatever limit they already have. (If you don't set a workspace default, the system fallback is 50K per month.) For how these defaults combine with team and folder rules, see [Access Reference](https://docs.fuser.studio/docs/teams/access-reference.md). ## Sharing Policies [#sharing-policies] Two toggles control how members can share content and create teams. * **Members Can Create Teams** — when on, any member can create a team. When off, only **Owners** and **Admins** can. Useful in larger workspaces where team sprawl is a concern. * **Allow External Email Sharing** — when on, members can invite people outside the workspace to view, comment on, or edit projects via email. When off, only workspace members and teams can be granted shares. These policies apply across the whole workspace immediately. Existing shares remain in place when a policy changes — the toggle only governs new shares. ## Verified Domains [#verified-domains] A verified domain lets people with matching email addresses join your workspace without an individual invite. To add one, scroll to **Verified Domains** and click **Add a domain**. Enter: * The domain (e.g. `acme.com`). * An admin email at that domain that can prove ownership. Fuser sends a verification link to the admin email. The link opens `/verify-domain?token=...` in the recipient's browser; confirming the page completes verification and the domain transitions from **Pending** to **Verified** in the panel. Members at that domain then see a join button next time they sign in. Pending domains can be **Resend**ed or removed. Verified domains can be removed at any time — existing members stay, but new auto-joins stop. > [!NOTE] One workspace per domain > > A given domain can only be verified for one workspace at a time. If you try to verify a domain that's already bound elsewhere, Fuser tells you so up front. ## Spend Limits [#spend-limits] The **Default Spend Limit for New Members** setting (covered above) governs new joins. Per-member limits are set on each member's row in the **Members** sub-tab — pick a preset or set a custom value to override the default for a specific person. The credits and billing model itself lives in **Workspace Billing** in the settings modal. This page only covers the workspace-wide defaults. ## Access Audit [#access-audit] In the **Workspace** tab, the **Access** sub-tab is the **Access Audit** panel — visible to **Owners** and **Admins** only. The panel is search-driven: pick a project or folder, and you see who has access to it and how. Each entry sits in one of three groups: * **Implicit access** — people who can reach the resource through workspace, team, or folder defaults, with no explicit share involved. * **Direct shares** — explicit shares granted on the resource itself. * **Inherited shares** — shares granted on a parent folder that flow down to the project. Team entries expand to show each member's effective access. Reach for the Access Audit when: * A specific person reports they can (or can't) see a project and you need to **trace why**. * You're **onboarding** someone and want to confirm they have access to the right work — or **offboarding** someone and want to confirm they no longer do. * You're about to **tighten a folder default** (lower its access) and want to see who would be affected before you click Save. * A client reports a leak — fast triage of "who can actually see this". ## Recovery [#recovery] The **Recovery** tab in the Settings modal restores a project to an earlier state. It's project-scoped, so you need a project open before the tab activates, and it's restricted to workspace **Owners** and **Admins**. The panel shows a timeline of canvas actions for the active project — who did what, and when. Pick an entry and confirm to revert the project to that snapshot. Reload the page when prompted to sync the canvas with the restored state. > [!WARNING] Restore is destructive > > Restoring rewinds the project to the chosen point. Anything created after that point is removed. A restore is itself an entry on the timeline, so you can undo it by restoring to a more recent snapshot — but plan ahead and only restore when you're sure. ## Notifications [#notifications] The **Notifications** tab in the Settings modal is your personal email-notification preferences — it's per-user, not per-workspace, so it follows you into every workspace you belong to. Toggles cover the events Fuser can email you about. The exact set evolves with the product; the panel shows what's currently available. ## What's Next? [#whats-next] - [Members](https://docs.fuser.studio/docs/teams/members.md): Manage who's in your workspace and what role they have. - [Sharing](https://docs.fuser.studio/docs/teams/sharing.md): Apply the sharing policies set here in real-world flows. - [Access Reference](https://docs.fuser.studio/docs/teams/access-reference.md): Understand how access defaults combine with team and folder rules. # Workspaces (https://docs.fuser.studio/docs/teams/workspaces) A workspace is your account in Fuser — your billing root, your member list, and the umbrella for everything you create. You can belong to as many workspaces as you've been invited to, plus a personal one of your own. This page covers the workspace lifecycle: creating one, switching between them, and editing the workspace profile (name, slug, avatar). For everything inside the workspace — members, teams, folders, sharing — see the rest of this section. ## Creating a Workspace [#creating-a-workspace] ### Open the workspace switcher [#open-the-workspace-switcher] Click the **Workspace switcher** in the top bar, then **Create a new workspace**. ### Name the workspace and pick a slug [#name-the-workspace-and-pick-a-slug] * **Workspace Name** — what teammates see in the switcher and across the app. Letters, numbers, and spaces, up to 100 characters. * **URL Slug** — the unique identifier in your workspace URL (`/w/`). Lowercase letters, numbers, and hyphens, no leading or trailing hyphen. Fuser auto-suggests a slug from the name and checks availability as you type — a checkmark means it's free, a warning means it's taken. ### Submit [#submit] Fuser creates the workspace, makes you its **Owner**, and switches you into it. > [!NOTE] Reserved names > > A short list of slugs is reserved for system routes (`admin`, `api`, and similar). If yours is rejected, pick a more specific one — `acme`, `acme-studio`, `acme-team`. ## Switching Workspaces [#switching-workspaces] The **Workspace switcher** in the top bar lists every workspace you belong to, including your **Personal Workspace**. Click any entry to switch — Fuser sets it as your active workspace and navigates to its home. Inside the switcher you also get: * A search field to filter when you have many workspaces. * A shortcut to your **Profile** and global **Settings**. * A **Sign out** button. * The **Create a new workspace** entry described above. The switcher remembers your last-used workspace, so opening Fuser puts you back where you were. ## Editing the Workspace Profile [#editing-the-workspace-profile] Workspace **Owners** and **Admins** can rename the workspace, change its URL, and upload an avatar. ### Open Workspace Settings [#open-workspace-settings] Open **Settings** from the workspace switcher (or from any settings entry point), pick the **Workspace** tab, then the **Settings** sub-tab. ### Edit the fields you want to change [#edit-the-fields-you-want-to-change] * **Workspace Name** — same rules as on creation. Saving updates every place the name appears. * **URL Slug** — same validation as on creation, with live availability checks. Changing the slug changes your workspace's URL; existing direct links to projects continue to work. * **Avatar** — upload a PNG, JPEG, or WebP. The avatar shows in the switcher and on shared content. ### Save Changes [#save-changes] Click **Save Changes** to apply. The button stays disabled until you've made an edit and the slug (if changed) is available. > [!WARNING] Changing the slug rewrites your URL > > If you change the URL slug, the workspace's URL changes immediately. Anyone with a bookmark to `/w/` will need an updated link. Project links inside the workspace keep working through Fuser's redirect. ## Leaving a Workspace [#leaving-a-workspace] Members (non-Owners) can leave a workspace they've been invited to. Open **Settings → Workspace → Settings** and click **Leave Workspace** at the bottom of the panel. Leaving: * Removes you from the member list and every team you belonged to. * Revokes your access to every project, folder, and share scoped to that workspace. * Does **not** affect your personal projects (those made outside any workspace). * Does **not** affect projects you created inside the workspace — those stay with the workspace and the team that owned them. If you change your mind, you'll need to be re-invited. ## Deleting a Workspace [#deleting-a-workspace] Only **Owners** can delete a workspace. Open **Settings → Workspace → Settings** and click **Delete Workspace** at the bottom. Confirm in the modal. Deletion is **irreversible** and cascades: * All members are removed and pending invitations are revoked. * Every team, folder, and project inside the workspace is deleted. * All shares pointing into the workspace are dropped. * The active subscription is cancelled. * Any **remaining workspace credits** are transferred to the Owner's personal credit balance (the same flow as a normal cancellation — see [Workspace Billing](https://docs.fuser.studio/docs/teams/workspace-billing.md#cancellation--the-7-day-grace-period)). ## What's Next? [#whats-next] - [Members](https://docs.fuser.studio/docs/teams/members.md): Add people to your workspace and assign roles. - [Workspace Settings](https://docs.fuser.studio/docs/teams/workspace-settings.md): Configure access defaults, sharing policies, and verified domains.