rewrite: refresh all blog posts for public audience

Merged overlapping posts:
- forking-gitea + fork-dont-build → one post about the fork philosophy
- fal-image-generation + image-generation-fal → one post about AI art pipeline

Rewrote all posts with external/public voice:
- Stronger hooks, concrete examples, punchier language
- agentic-workflow: restructured around soul files + skills + numbers
- agent-harness: clearer framing of 'what an agent harness is'
- cloud-harness: tighter narrative about overnight agents
- godot-optimisation: same depth, sharper opening
- pre-commit-agent: clearer architecture, cost breakdown
- studio-cli: reframed around identity/cold-start problem
- blog-visual-upgrade: tightened the restyle story

10 posts total (9 markdown + 1 hand-authored HTML)
This commit is contained in:
2026-06-03 03:06:41 +01:00
parent bf42a76cf9
commit f01036c646
23 changed files with 933 additions and 2546 deletions
+78 -94
View File
@@ -4,27 +4,27 @@
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>AI Art at Scale: Using fal.ai Flux for Game Asset Generation — Tinqs Blog</title>
<meta name="description" content="How we use fal.ai Flux models to generate concept art, trailer frames, and UI assets for our game --- with a 4-layer prompt pattern that actually works.">
<title>AI Art at Every Price Point: How We Generate Game Assets with fal.ai — Tinqs Blog</title>
<meta name="description" content="From $0.002 to $0.09 per image, across 12 models. How we built a prompt pattern that actually produces usable game art, and a model-picking strategy that keeps costs at $8/month.">
<meta name="robots" content="index, follow">
<link rel="canonical" href="https://www.tinqs.com/blog/fal-image-generation">
<meta property="og:type" content="article">
<meta property="og:url" content="https://www.tinqs.com/blog/fal-image-generation">
<meta property="og:title" content="AI Art at Scale: Using fal.ai Flux for Game Asset Generation">
<meta property="og:description" content="fal.ai Flux for game art: 4-layer prompts, $0.01/image, and a pipeline that replaced our concept art bottleneck.">
<meta property="og:title" content="AI Art at Every Price Point: How We Generate Game Assets with fal.ai">
<meta property="og:description" content="12 fal.ai models, $0.002-$0.09/image, 4-layer prompt pattern. Game art that actually ships.">
<meta property="og:image" content="https://www.tinqs.com/img/og-cover.jpg">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="AI Art at Scale: Using fal.ai Flux for Game Asset Generation">
<meta name="twitter:description" content="fal.ai Flux for game art: 4-layer prompts, $0.01/image, and a pipeline that replaced our concept art bottleneck.">
<meta name="twitter:title" content="AI Art at Every Price Point: How We Generate Game Assets with fal.ai">
<meta name="twitter:description" content="12 fal.ai models, $0.002-$0.09/image, 4-layer prompt pattern. Game art that actually ships.">
<meta name="twitter:image" content="https://www.tinqs.com/img/og-cover.jpg">
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BlogPosting",
"headline": "AI Art at Scale: Using fal.ai Flux for Game Asset Generation",
"headline": "AI Art at Every Price Point: How We Generate Game Assets with fal.ai",
"datePublished": "2026-05-25",
"author": {
"@type": "Person",
@@ -35,7 +35,7 @@
"name": "Tinqs Limited",
"url": "https://www.tinqs.com"
},
"description": "How we use fal.ai Flux models to generate concept art, trailer frames, and UI assets for our game --- with a 4-layer prompt pattern that actually works."
"description": "From $0.002 to $0.09 per image, across 12 models. How we built a prompt pattern that actually produces usable game art, and a model-picking strategy that keeps costs at $8/month."
}
</script>
@@ -218,100 +218,84 @@
<article class="post">
<a href="/blog/" class="post__back">&larr; All Posts</a>
<span class="post__date">25 May 2026</span>
<h1 class="post__title">AI Art at Scale: Using fal.ai Flux for Game Asset Generation</h1>
<p class="post__lead">We're a small indie studio building a survival colony sim. We don't have a concept artist on staff. Every piece of character art, trailer frame, and UI icon in our game was generated with fal.ai Flux models &mdash; at roughly a penny per image.</p>
<h1 class="post__title">AI Art at Every Price Point: How We Generate Game Assets with fal.ai</h1>
<p class="post__lead">Every visual asset in our game — character art, app icons, trailer frames, logo variants, Steam capsules — was generated through a single API. No Photoshop. No concept artist on staff. Last month: 673 images, $8.30 total. Here's the prompt pattern that makes AI art actually usable for game development, and how we pick between 12 models spanning $0.002 to $0.09 per image.</p>
<div class="post__body">
<h2>The Problem with AI Art for Games</h2>
<p>Most AI image generators produce beautiful images that are completely useless for game development. They look great on social media but fall apart when you need consistency: the same character from four angles, a UI icon that reads at 64x64, a trailer frame that matches your game's art style rather than whatever the model defaults to.</p>
<p>The issue isn't the models &mdash; Flux is genuinely good. The issue is prompting. When you write "warrior on a beach," you get a different art style every time. Different skin tones, different proportions, different lighting. You can't build a game from that.</p>
<p>We spent three months iterating on prompt patterns before we found something that works consistently. The result is a 4-layer system that anchors the model to your art direction and produces images you can actually ship.</p>
<h2>Why fal.ai</h2>
<p>We evaluated Midjourney, DALL-E 3, Stable Diffusion (self-hosted), and fal.ai:</p>
<p><strong>API-first.</strong> Midjourney is Discord-only. DALL-E's API works but the model makes everything look like a stock photo. Self-hosted SD means maintaining GPU infrastructure. fal.ai gives you Flux models behind a simple REST API &mdash; POST a prompt, GET an image URL.</p>
<p><strong>Cost.</strong> $0.01 per image with <code>flux-2-pro</code>. $0.004 with <code>schnell</code> for rapid iteration. A full character design session &mdash; 12 variants across 3 rounds of refinement &mdash; costs $0.12. A 20-frame trailer storyboard costs $0.20. At these prices, the bottleneck is creative direction, not budget.</p>
<p><strong>Speed.</strong> <code>flux/schnell</code> returns an image in 4 seconds. <code>flux-2-pro</code> in 15 seconds. Fast enough that an AI agent can generate, display, get feedback, and regenerate in a single conversation turn.</p>
<p><strong>No subscription.</strong> Pay per image. No monthly fee, no credit packs that expire, no tier-gated features.</p>
<h2>The 4-Layer Prompt Pattern</h2>
<p>This is the pattern that made AI art actually usable for our game. Each layer adds specificity, and the combination anchors the model to a consistent output.</p>
<h3>Layer 1: Design Context</h3>
<p>The most important layer and the one most people skip. It sets the overall art direction:</p>
<h2>The problem with AI art for games</h2>
<p>Most AI-generated images look beautiful on social media and useless in a game. The character looks different from every angle. The art style drifts between generations. The text in the logo is garbled. The icon doesn't read at 64×64.</p>
<p>The issue isn't the models — Flux, Ideogram, and Recraft are genuinely good. The issue is prompting. "Warrior on a beach" gives you a different art style, different skin tone, different proportions every time. You can't build a game from one-offs.</p>
<p>We spent three months iterating before we found a prompt structure that anchors the model to a consistent art direction and produces images you can actually ship. It has four layers.</p>
<h2>The 4-layer prompt pattern</h2>
<h3>Layer 1: Design context (the anchor)</h3>
<p>This is the most important paragraph and the one most people skip. It sets the art direction for every single generation:</p>
<pre><code>Art direction: stylized 3D render for a survival colony sim. Warm earthy
palette --- browns, tans, dark reds, cream, ocean blues. Carved wood
palette browns, tans, dark reds, cream, ocean blues. Carved wood
textures, traditional patterns, woven natural fibres. Game engine quality,
not photorealistic.</code></pre>
<p>This paragraph appears at the start of every prompt. Same paragraph whether you're generating a character, a landscape, or an icon. It anchors the model to your art style.</p>
<p><strong>The key insight:</strong> write this once, paste it everywhere. It's your art bible compressed into 50 words. Every time we skipped it &mdash; "just a quick test" &mdash; the output drifted into generic fantasy art.</p>
<h3>Layer 2: Scene Description</h3>
<p>Describe exactly what should appear, element by element:</p>
<pre><code>Full body character in T-pose, front view. Young woman, mid-20s.
Wearing a woven wrap skirt (mid-thigh length) and a fitted cloth top.
Shell necklace with a carved bone pendant. Single bone bracelet on
left wrist. Hair swept back over right shoulder. Bare feet.
Matte skin, warm brown tones. Neutral confident expression ---
not smiling, not angry. Dark grey background.</code></pre>
<p>Not "tribal clothing" but "woven wrap skirt." Not "jewelry" but "shell necklace with a carved bone pendant." Vague prompts produce vague results. Specific prompts produce usable assets.</p>
<h3>Layer 3: Negative Prompt</h3>
<p>Same paragraph whether you're generating a character, a landscape, or an icon. It's your art bible compressed into 50 words. Every time we skipped it — "just a quick test" — the output drifted into generic fantasy art.</p>
<h3>Layer 2: Scene description (be specific)</h3>
<p>Not "tribal clothing" — "woven wrap skirt, mid-thigh length." Not "jewelry" — "shell necklace with a carved bone pendant." Vague prompts produce vague results. Specific prompts produce usable assets. Describe element by element.</p>
<h3>Layer 3: Negative prompt (prevent drift)</h3>
<p>Always include what you don't want:</p>
<pre><code>Do not include: cartoon style, anime style, photorealistic render,
extra text or taglines, watermark, deformed elements, modern or
sci-fi. No extra fingers, no merged limbs, no floating accessories.</code></pre>
<p>Extend per-subject. For characters: "no stereotypical elements, no overly shiny materials." The negative prompt is as important as the positive one.</p>
<h3>Layer 4: Reference Images</h3>
<p>When you need consistency &mdash; the same character from different angles, or a new character matching an existing one &mdash; pass a reference image:</p>
<pre><code class="language-python">result = fal_client.subscribe("fal-ai/flux-2-pro", arguments={
"prompt": "Same character, side view, same clothing and accessories...",
"image_url": "https://your-approved-front-view.png",
"image_size": "square_hd",
})</code></pre>
<p>The first approved image becomes the reference for all subsequent views. Without it, you get a different person every time.</p>
<h2>The Model Lineup</h2>
<p>| Model | Cost | Speed | When |</p>
<p>|&mdash;&mdash;-|&mdash;&mdash;|&mdash;&mdash;-|&mdash;&mdash;|</p>
<p>| <code>flux-2-pro</code> | $0.01 | ~15s | Final art. Default for anything you'll ship. |</p>
<p>| <code>flux/schnell</code> | $0.004 | ~4s | Exploration and iteration. |</p>
<p>| <code>ideogram/v2</code> | $0.008 | ~5s | Anything with readable text &mdash; logos, UI, posters. |</p>
<p>| <code>flux-pro/v1.1-ultra</code> | $0.015 | ~8s | Highest quality, but can hang. |</p>
<p>The workflow: explore with <code>schnell</code>, refine with <code>flux-2-pro</code>, add text with <code>ideogram/v2</code>.</p>
<h2>How This Fits Our Pipeline</h2>
<p>fal.ai is the first step in a pipeline from idea to in-game asset:</p>
<pre><code>Brief --&gt; fal.ai (2D concept art) --&gt; Tripo Studio (3D model) --&gt; Blender (decimate) --&gt; Godot (in-game)</code></pre>
<p>1. <strong>Brief.</strong> The designer describes the character or asset.</p>
<p>2. <strong>2D generation.</strong> Generate 3 variants with <code>flux-2-pro</code>, score each on a rubric (style match, cultural accuracy, silhouette, expression, animatability), pick the best.</p>
<p>3. <strong>Reference sheet.</strong> Generate front, side, three-quarter, and head closeup views using the winner as reference.</p>
<p>4. <strong>3D model.</strong> Approved concept art goes into Tripo Studio for image-to-3D. Outputs ~1.5M faces with full PBR textures.</p>
<p>5. <strong>Decimation.</strong> Blender CLI decimates to 25,000 faces.</p>
<p>6. <strong>Rigging.</strong> Auto-rig the body (hair separated first if large).</p>
<p>7. <strong>In-game.</strong> Import into the engine, set up materials, done.</p>
<p>The entire pipeline from "I want a character" to "character walking around in the game" takes about 2 hours. The quality isn't AAA, but for an indie game with a stylised art style, it's more than good enough.</p>
<h2>What We Learned</h2>
<p><strong>The design context layer is everything.</strong> Without it, every image is a one-off. With it, every image belongs to the same game. The 50-word context block is worth more than the rest of the prompt combined.</p>
<p><strong>Negative prompts prevent drift.</strong> AI models have strong defaults &mdash; they want to make things shiny, symmetrical, and photorealistic. If your game isn't those things, say so explicitly.</p>
<p><strong>Score and iterate, don't accept the first output.</strong> Generate 3 variants, score on 5 criteria, approve only 8+/10. Three attempts at $0.01 each is $0.03 &mdash; cheaper than working around a mediocre image.</p>
<p><strong>Reference images are the consistency mechanism.</strong> Without them, every generation is independent. With them, every generation builds on the last approved output. This is how you get a roster of characters that look like they belong in the same game.</p>
<p><strong>Fast models for exploration, quality models for output.</strong> <code>schnell</code> at 4 seconds is for "what if..." iterations. <code>flux-2-pro</code> at 15 seconds is for "yes, this is the one."</p>
<p><strong>Let the AI agent handle prompt engineering.</strong> We encode the 4-layer pattern, art style guide, and cultural guardrails in a <a href="../skills/image-generation.md" style="color: var(&ndash;c-accent-l);">skill file</a>. The agent writes the full prompt, generates images, displays them, and asks for scores. The human's job is creative direction.</p>
<h2>The Numbers</h2>
<ul>
<li><strong>Characters designed:</strong> 10 (full roster for early access)</li>
<li><strong>Total images generated:</strong> ~400 across all iterations</li>
<li><strong>Total cost:</strong> ~$6 in fal.ai credits</li>
<li><strong>Time per character:</strong> ~30 minutes from brief to approved reference sheet</li>
<li><strong>Pipeline time:</strong> ~2 hours from concept art to in-game model</li>
<li><strong>Models used:</strong> flux-2-pro (80%), schnell (15%), ideogram/v2 (5%)</li>
</ul>
<h2>Open-Source Skills</h2>
<p>We've published the skill files that power this workflow. A skill is a markdown document that teaches an AI agent a specific procedure &mdash; like a runbook, but the reader is an LLM.</p>
<ul>
<li><strong><a href="../skills/image-generation.md" style="color: var(&ndash;c-accent-l);">Image Generation</a></strong> &mdash; fal.ai API, 4-layer prompt pattern, model comparison</li>
<li><strong><a href="../skills/concept-art-pipeline.md" style="color: var(&ndash;c-accent-l);">Concept Art Pipeline</a></strong> &mdash; full 2D-to-3D character workflow</li>
<li><strong><a href="../skills/tripo-browser-workflow.md" style="color: var(&ndash;c-accent-l);">3D Model Generation</a></strong> &mdash; Tripo Studio text-to-3D and image-to-3D</li>
<li><strong><a href="../skills/sora2-video.md" style="color: var(&ndash;c-accent-l);">Video Generation</a></strong> &mdash; trailer clip generation with OpenAI Sora 2</li>
</ul>
<p>Drop any of these into your <code>.cursor/skills/</code> directory and your AI agent can follow them. Adapt the design context block to your game's art style and you're good to go.</p>
extra text or taglines, watermark, deformed elements, modern or sci-fi.
No extra fingers, no merged limbs, no floating accessories.</code></pre>
<p>AI models have strong defaults — they want to make things shiny, symmetrical, and photorealistic. If your game isn't those things, say so explicitly.</p>
<h3>Layer 4: Reference images (consistency)</h3>
<p>When you need the same character from different angles, pass the first approved image as reference. Without it, every generation is independent — a different person every time. With it, every generation builds on the last approved output. This is how you get a roster of characters that look like they belong in the same game.</p>
<h2>The model lineup (and when to use each)</h2>
<p>Not every image needs the best model. A throwaway mockup doesn't justify $0.09. A final logo doesn't deserve $0.002.</p>
<p>| Model | Cost | Speed | Use for |</p>
<p>|&mdash;&mdash;-|&mdash;&mdash;|&mdash;&mdash;-|&mdash;&mdash;&mdash;|</p>
<p>| Flux 2 Pro | $0.03 | 15s | Final art, characters, environments |</p>
<p>| Flux Schnell | $0.003 | 3s | Exploration drafts, 20-variant grids |</p>
<p>| Ideogram v3 Quality | $0.09 | 12s | Anything with readable text |</p>
<p>| Recraft v3 | $0.04-0.08 | 10s | Logos, brand assets, SVG vectors |</p>
<p>| Seedream v4.5 | $0.04 | 8s | Photorealistic scenes |</p>
<p>| Flux Dev | $0.025 | 10s | LoRA fine-tuning base |</p>
<p>| Nano Banana Edit | $0.039 | 12s | Style transfer, material variants |</p>
<p>| BiRefNet | $0.001 | 3s | Background removal |</p>
<h3>The Schnell-to-Pro pipeline (never iterate on expensive models)</h3>
<p>Every generation session follows the same pattern:</p>
<p>1. <strong>Explore with Schnell</strong> ($0.003) — 10-20 variants, different angles, color palettes. Cost: $0.03-0.06</p>
<p>2. <strong>Pick 2-3 directions.</strong> Human looks at the grid, picks winners.</p>
<p>3. <strong>Refine with Flux 2 Pro</strong> ($0.03) — regenerate winners at full quality. Cost: $0.06-0.09</p>
<p>4. <strong>Post-process</strong> — BiRefNet for background removal ($0.001), Recraft for vector ($0.08)</p>
<p>A full session — blank canvas to final assets — costs under $0.20. Most of the creative work happens at $0.003/image. The expensive model just polishes a decision you already made.</p>
<h3>Typography: one model rules them all</h3>
<p>Every model except Ideogram fails at text. Flux gives you beautiful art with garbled letters. SDXL doesn't try. If your image has words in it, Ideogram v3 Quality is the only answer. We learned to accept the $0.09 cost rather than waste $0.30 on ten failed Flux attempts.</p>
<h3>Logo variants at scale</h3>
<p>Our game logo has 18 material variants — mahogany, mother-of-pearl, obsidian, molten lava, bronze with verdigris. Each generated with Nano Banana Edit ($0.039) + BiRefNet ($0.001) for transparency. Total: $0.72. A designer would quote hundreds of dollars and a week.</p>
<h2>The numbers (one month of generation)</h2>
<p>| Category | Images | Cost | Avg/Image |</p>
<p>|&mdash;&mdash;&mdash;-|&mdash;&mdash;&ndash;|&mdash;&mdash;|&mdash;&mdash;&mdash;&ndash;|</p>
<p>| Concept art (flux-2-pro) | 120 | $3.60 | $0.03 |</p>
<p>| Exploration (schnell) | 400 | $1.20 | $0.003 |</p>
<p>| Logo variants | 18 | $0.72 | $0.04 |</p>
<p>| Icons | 30 | $1.20 | $0.04 |</p>
<p>| Typography (ideogram) | 25 | $1.50 | $0.06 |</p>
<p>| Background removal | 80 | $0.08 | $0.001 |</p>
<p>| <strong>Total</strong> | <strong>673</strong> | <strong>$8.30</strong> | <strong>$0.012</strong> |</p>
<p>Six hundred images. Eight dollars.</p>
<h2>The pipeline: from prompt to in-game asset</h2>
<p>fal.ai is step one of a pipeline that goes from idea to walking character in about two hours:</p>
<pre><code>Brief → fal.ai (2D concept) → Tripo Studio (3D model) → Blender (decimate) → Godot (in-game)</code></pre>
<p>1. Designer describes the character</p>
<p>2. Generate 3 variants with Flux 2 Pro, score on 5 criteria (style match, cultural accuracy, silhouette, expression, animatability)</p>
<p>3. Generate front/side/three-quarter reference views using the winner</p>
<p>4. Tripo Studio image-to-3D (~1.5M faces, PBR textures)</p>
<p>5. Blender CLI decimates to 25k faces</p>
<p>6. Auto-rig, import into engine, done</p>
<p>Quality isn't AAA, but for an indie game with a stylized art style, it's more than good enough. Ten characters designed, total fal.ai spend: $6.</p>
<h2>What we learned</h2>
<p><strong>The design context block is worth more than the rest of the prompt combined.</strong> Without it, every image is a one-off. With it, every image belongs to the same game.</p>
<p><strong>Never iterate on expensive models.</strong> Schnell at $0.003/image is for exploration. Flux 2 Pro at $0.03 is for final output. The cheap model does 90% of the creative work.</p>
<p><strong>Aggregation beats loyalty.</strong> No single model is best at everything. Flux for art, Ideogram for text, Recraft for design, Nano Banana for edits, BiRefNet for masks. Use the right tool for each job.</p>
<p><strong>Let the agent handle prompting.</strong> We encode the 4-layer pattern, art style guide, and model selection rules in an <a href="../skills/image-generation.md" style="color: var(&ndash;c-accent-l);">agent skill file</a>. The AI writes the full prompt, generates images, displays them, and asks for scores. The human's job is creative direction.</p>
<p>AI art isn't magic and it isn't free. But at a penny per image, with the right prompt structure and model strategy, it eliminates the most expensive bottleneck in indie game development: the gap between "I know what this should look like" and "I have an asset I can actually use."</p>
<hr>
<p>AI image generation isn't magic and it isn't free. But at a penny per image, with the right prompt structure, it eliminates the most expensive bottleneck in indie game development: the gap between "I know what this should look like" and "I have an image I can actually use."</p>
<p>We're building all of this as part of <a href="https://tinqs.com" style="color: var(&ndash;c-accent-l);">Tinqs Studio</a> &mdash; a game development platform that brings together git hosting, AI tools, and creative workflows for game teams.</p>
<p><em>Image generation is built into <a href="https://tinqs.com" style="color: var(&ndash;c-accent-l);">Tinqs Studio</a>. We've open-sourced the <a href="../skills/image-generation.md" style="color: var(&ndash;c-accent-l);">prompt engineering skill</a> and <a href="../skills/concept-art-pipeline.md" style="color: var(&ndash;c-accent-l);">concept art pipeline skill</a>. We're building <a href="https://arikigame.com" style="color: var(&ndash;c-accent-l);">Ariki</a> with these tools.</em></p>
</div>
Before
After