<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[Dashtoon Insiders]]></title><description><![CDATA[Dashtoon Insiders]]></description><link>http://insiders.dashtoon.com/</link><image><url>http://insiders.dashtoon.com/favicon.png</url><title>Dashtoon Insiders</title><link>http://insiders.dashtoon.com/</link></image><generator>Ghost 5.80</generator><lastBuildDate>Wed, 08 Apr 2026 13:15:49 GMT</lastBuildDate><atom:link href="http://insiders.dashtoon.com/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[No more face mashups: UMO meets Qwen Edit]]></title><description><![CDATA[<p><em>We rebuilt multi&#x2011;identity image editing on Qwen Edit around global matching and reward-driven training If you&#x2019;ve tried to edit images with multiple people, you&#x2019;ve felt it: faces average together, attributes leak across subjects, and &#x201C;who&#x2019;s who?&#x201D; becomes a guessing game.</em></p>]]></description><link>http://insiders.dashtoon.com/no-more-face-mashups-umo-meets-qwen-edit/</link><guid isPermaLink="false">6909a0de10b1c00065077c6f</guid><dc:creator><![CDATA[Ayushman Buragohain]]></dc:creator><pubDate>Tue, 04 Nov 2025 06:59:03 GMT</pubDate><media:content url="http://insiders.dashtoon.com/content/images/2025/11/x2--1-.png" medium="image"/><content:encoded><![CDATA[<img src="http://insiders.dashtoon.com/content/images/2025/11/x2--1-.png" alt="No more face mashups: UMO meets Qwen Edit"><p><em>We rebuilt multi&#x2011;identity image editing on Qwen Edit around global matching and reward-driven training If you&#x2019;ve tried to edit images with multiple people, you&#x2019;ve felt it: faces average together, attributes leak across subjects, and &#x201C;who&#x2019;s who?&#x201D; becomes a guessing game. As the headcount grows, most pipelines crumble. Humans are ultra-sensitive to faces; one-to-one heuristics don&#x2019;t scale.</em></p><div class="kg-card kg-header-card kg-v2 kg-width-regular " style="background-color: #000000;" data-background-color="#000000">
            
            <div class="kg-header-card-content">
                
                <div class="kg-header-card-text kg-align-center">
                    <h2 id="the-challenge" class="kg-header-card-heading" style="color: #FFFFFF;" data-text-color="#FFFFFF"><span style="white-space: pre-wrap;">The Challenge</span></h2>
                    
                    
                </div>
            </div>
        </div><p>Modern AI image editing has mastered the art of the solo portrait. You can conjure a photorealistic CEO or a fantasy warrior from a simple text prompt with stunning fidelity. But add a second or third person to the scene, and the magic often breaks. The core challenge?&#xA0;<strong>Maintaining distinct identities.</strong></p><p>Current models struggle to keep track of &quot;who&apos;s who.&quot; When prompted to create an image of multiple specific people, the AI often gets confused. This isn&apos;t just about placing people in a scene; it&apos;s about preserving the unique facial features, hair color, and characteristics of each individual without them blending together.</p><p>Imagine you&apos;re trying to generate a photo of three friends: Alice, Bob, and Carol.</p><p><strong>1. Facial Averaging and Feature Bleed:</strong></p><p>Instead of creating three distinct faces, the AI might produce individuals who look like strange composites of each other. Alice might end up with Bob&apos;s jawline, or Carol&apos;s nose might appear on Alice&apos;s face. The model creates an &quot;average&quot; face that incorporates features from all the references, rather than assigning them correctly. It&#x2019;s as if the AI took all the source photos and digitally mashed them together, resulting in three vaguely similar, uncanny strangers.</p><p><strong>2. Identity Swapping:</strong></p><p>Another common failure is &quot;identity swapping.&quot; The AI might generate three perfectly clear faces, but it gets their identities mixed up. If your prompt was &quot;Alice on the left, Bob in the middle, and Carol on the right,&quot; you might get Bob on the left, Alice on the right, and Carol in the middle. The model understands the features but fails to correctly map them to the positions and descriptions specified in the prompt. This makes it impossible to control the composition of a scene.</p><p><strong>3. The &quot;Uncanny Valley&quot; Effect:</strong></p><p>Because humans are incredibly sensitive to facial details, even minor errors can make a generated image feel &quot;off&quot; or unsettling. When features are blended or slightly distorted, the resulting faces can fall into the &quot;uncanny valley&quot;&#x2014;looking almost human, but with subtle inaccuracies that are deeply unnerving. Skin can appear overly smooth and plastic-like, and lighting can feel unnatural, further distancing the image from reality.</p><p>Solving this &quot;identity leakage&quot; problem is one of the most significant challenges in generative AI today. It&apos;s the barrier that stands between creating simple solo portraits and generating complex, believable scenes with multiple, specific individuals&#x2014;a critical step for everything from personalized family photos to commercial ad creation.</p><div class="kg-card kg-header-card kg-v2 kg-width-regular " style="background-color: #000000;" data-background-color="#000000">
            
            <div class="kg-header-card-content">
                
                <div class="kg-header-card-text kg-align-center">
                    <h2 id="umo-a-new-approach" class="kg-header-card-heading" style="color: #FFFFFF;" data-text-color="#FFFFFF"><span style="white-space: pre-wrap;">UMO: A new approach</span></h2>
                    
                    
                </div>
            </div>
        </div><p>We integrated UMO (Unified Multi&#x2011;identity Optimization) into Qwen Edit to turn this multi-person chaos into crisp, consistent portraits that still follow your prompt and style. UMO reframes multi&#x2011;identity generation as a global assignment problem with reinforcement learning on diffusion models&#x2014;so every generated face matches the best reference face, and non&#x2011;matches are actively discouraged. Then we add a final realism&#x2011;alignment RL pass to remove the plastic &#x201C;AI sheen&#x201D; without sacrificing identity.</p><h2 id="how-umo-works">How UMO Works ?</h2><p>We detect faces in the generated image, embed them with a lightweight face encoder, and compute pairwise similarities to the reference faces. The reward boosts the matched edges and penalizes mismatches (MIMR). We apply ReReFL on the late denoising steps only&#x2014;where identity signals are stable&#x2014;to align <strong>Qwen Edit </strong>with these rewards using parameter&#x2011;efficient LoRA finetuning. Net result: fewer swaps, higher fidelity, better separation.</p>
<!--kg-card-begin: html-->
<img src="https://content.dashtoon.ai/stability-images/0656fcbe-5e3b-468a-9fdc-449b104fa616.png" alt="No more face mashups: UMO meets Qwen Edit">
<!--kg-card-end: html-->
<ul><li><strong>Multi&#x2011;to&#x2011;multi matching</strong>: Instead of pinning each output face to a single reference, UMO maximizes overall matching quality using a bipartite assignment (Hungarian) step. That balances intra&#x2011;identity variation (pose, expression, lighting) with inter&#x2011;identity separation.</li><li><strong>Reference Reward Feedback Learning (ReReFL)</strong>: Late&#x2011;step reward optimization on diffusion models&#x2014;where identity cues stabilize&#x2014;so gradients are clean and impactful.</li><li><strong>MIMR (Multi&#x2011;Identity Matching Reward)</strong>: Positive signal for matched pairs, negative signal for mismatches. This suppresses cross&#x2011;identity leakage and makes each person stand on their own.</li></ul><h2 id="what-it-means-for-creators">What it means for creators ?</h2><ul><li>Multi&#x2011;person scenes that look like your actual people&#x2014;not averaged composites.</li><li>Scales from single portraits to 3&#x2013;5 person compositions, and early wins on crowded scenes.</li></ul><div class="kg-card kg-header-card kg-v2 kg-width-regular " style="background-color: #000000;" data-background-color="#000000">
            
            <div class="kg-header-card-content">
                
                <div class="kg-header-card-text kg-align-center">
                    <h2 id="qwen-image-edit-training-recipe" class="kg-header-card-heading" style="color: #FFFFFF;" data-text-color="#FFFFFF"><span style="white-space: pre-wrap;">Qwen Image Edit Training Recipe</span></h2>
                    
                    
                </div>
            </div>
        </div><ul><li><strong>Optimizer</strong>: AdamW, learning rate 5e&#x2011;6; LoRA rank 512 on attention blocks; effective batch 8 on 8&#xD7;H100.</li><li><strong>Scheduler</strong>: 30&#x2013;50 denoising steps</li><li><strong>Late&#x2011;step RL window</strong>: We choose the last ~30&#x2013;40% of steps where identity reward variance flattens. A typical example:<ul><li>If T=30 steps: focus RL on t &#x2208; [1, 10&#x2013;12] (where t=1 is the last step).</li><li>If T=50 steps: focus RL on t &#x2208; [1, 18&#x2013;20].</li></ul></li><li><strong>Rewards</strong>:<ul><li><strong>SIR (single&#x2011;identity)</strong>: cosine similarity in face&#x2011;embedding space.</li><li><strong>MIMR (multi&#x2011;identity)</strong>: &#x3BB;1=+1 for matched pairs, &#x3BB;2=&#x2212;1 for non&#x2011;matches.</li></ul></li><li><strong>Loss</strong>: total = pretrain loss + (&#x2212; reward).</li><li><strong>Data</strong>: A mix of real multi&#x2011;person video frames (with per&#x2011;ID retrieval across clips) and filtered synthetic scenes for pose/lighting diversity, all filtered with strict face&#x2011;similarity thresholds.</li></ul><div class="kg-card kg-header-card kg-v2 kg-width-regular " style="background-color: #000000;" data-background-color="#000000">
            
            <div class="kg-header-card-content">
                
                <div class="kg-header-card-text kg-align-center">
                    <h2 id="results" class="kg-header-card-heading" style="color: #FFFFFF;" data-text-color="#FFFFFF"><span style="white-space: pre-wrap;">Results</span></h2>
                    
                    
                </div>
            </div>
        </div>
<!--kg-card-begin: html-->
<img src="https://content.dashtoon.ai/stability-images/a71938c4-0ca3-408a-8dd4-669703425748.png" alt="No more face mashups: UMO meets Qwen Edit">
<!--kg-card-end: html-->
<div class="kg-card kg-header-card kg-v2 kg-width-regular " style="background-color: #000000;" data-background-color="#000000">
            
            <div class="kg-header-card-content">
                
                <div class="kg-header-card-text kg-align-center">
                    <h2 id="our-next-big-push-tackling-the-ai-look" class="kg-header-card-heading" style="color: #FFFFFF;" data-text-color="#FFFFFF"><b><strong style="white-space: pre-wrap;">Our Next Big Push: Tackling the &#x201C;AI Look&#x201D;</strong></b></h2>
                    
                    
                </div>
            </div>
        </div><p>While UMO dramatically improves identity consistency, we know the work isn&apos;t done.&#xA0;<strong>What we saw</strong>&#xA0;in some outputs were tell-tale signs of AI generation: over-smooth skin, uncanny lighting, and subtle plastic textures that break realism.</p><p><strong>Fixing this is our top priority, and it&apos;s what we are actively working on for our next release.</strong></p><p>Our solution is a final, realism-alignment RL stage that will sit on top of the UMO framework. Here&#x2019;s the plan:</p><ul><li><strong>Realism Reward:</strong>&#xA0;This new reward function will be trained on a mixture of human preference labels and a separate realism scorer. It will penalize non-photorealistic textures, unrealistic lighting, and other AI artifacts.<ul><li><strong>Identity Guardrails:</strong>&#xA0;Crucially, we will keep the MIMR reward active as a guardrail during this phase. This ensures that in our quest for realism, we don&apos;t sacrifice the identity fidelity we worked so hard to achieve.</li></ul></li><li><strong>Low-level Priors:</strong>&#xA0;We are also experimenting with auxiliary penalties that target over-smoothing directly by looking at edge and texture statistics in the generated images.</li></ul><p>This next phase will bridge the final gap between &quot;consistent&quot; and &quot;indistinguishable from a real photo.&quot; Stay tuned for updates.</p><div class="kg-card kg-header-card kg-v2 kg-width-regular " style="background-color: #000000;" data-background-color="#000000">
            
            <div class="kg-header-card-content">
                
                <div class="kg-header-card-text kg-align-center">
                    <h2 id="references" class="kg-header-card-heading" style="color: #FFFFFF;" data-text-color="#FFFFFF"><span style="white-space: pre-wrap;">References</span></h2>
                    
                    
                </div>
            </div>
        </div><pre><code>@misc{wu2025qwenimagetechnicalreport,
      title={Qwen-Image Technical Report}, 
      author={Chenfei Wu and Jiahao Li and Jingren Zhou and Junyang Lin and Kaiyuan Gao and Kun Yan and Sheng-ming Yin and Shuai Bai and Xiao Xu and Yilei Chen and Yuxiang Chen and Zecheng Tang and Zekai Zhang and Zhengyi Wang and An Yang and Bowen Yu and Chen Cheng and Dayiheng Liu and Deqing Li and Hang Zhang and Hao Meng and Hu Wei and Jingyuan Ni and Kai Chen and Kuan Cao and Liang Peng and Lin Qu and Minggang Wu and Peng Wang and Shuting Yu and Tingkun Wen and Wensen Feng and Xiaoxiao Xu and Yi Wang and Yichang Zhang and Yongqiang Zhu and Yujia Wu and Yuxuan Cai and Zenan Liu},
      year={2025},
      eprint={2508.02324},
      archivePrefix={arXiv},
      primaryClass={cs.CV},
      url={https://arxiv.org/abs/2508.02324}, 
}
</code></pre>
<pre><code>@article{cheng2025umo,
  title={UMO: Scaling Multi-Identity Consistency for Image Customization via Matching Reward},
  author={Cheng, Yufeng and Wu, Wenxu and Wu, Shaojin and Huang, Mengqi and Ding, Fei and He, Qian},
  journal={arXiv preprint arXiv:2509.06818},
  year={2025}
}
</code></pre>
<pre><code>@article{wu2025omnigen2,
  title={OmniGen2: Exploration to Advanced Multimodal Generation},
  author={Chenyuan Wu and Pengfei Zheng and Ruiran Yan and Shitao Xiao and Xin Luo and Yueze Wang and Wanli Li and Xiyan Jiang and Yexin Liu and Junjie Zhou and Ze Liu and Ziyi Xia and Chaofan Li and Haoge Deng and Jiahao Wang and Kun Luo and Bo Zhang and Defu Lian and Xinlong Wang and Zhongyuan Wang and Tiejun Huang and Zheng Liu},
  journal={arXiv preprint arXiv:2506.18871},
  year={2025}
}
</code></pre>
]]></content:encoded></item><item><title><![CDATA[Improving Control in Flux-Driven Image Generation]]></title><description><![CDATA[<p>In our continuous effort to push the boundaries of controllable image generation, we&apos;ve identified and addressed a critical gap in how current ControlNet models interact with the Flux pipeline. Despite the power of ControlNet, existing models &#x2014; even when paired with Flux Ultra &#x2014; fell short in several</p>]]></description><link>http://insiders.dashtoon.com/improving-control-in-flux-driven-image-generation-with-custom-controlnet-integration/</link><guid isPermaLink="false">68a6bb4eea542a006531b383</guid><dc:creator><![CDATA[Ayushman Buragohain]]></dc:creator><pubDate>Thu, 21 Aug 2025 06:54:50 GMT</pubDate><media:content url="http://insiders.dashtoon.com/content/images/2025/08/image--15--1.png" medium="image"/><content:encoded><![CDATA[<img src="http://insiders.dashtoon.com/content/images/2025/08/image--15--1.png" alt="Improving Control in Flux-Driven Image Generation"><p>In our continuous effort to push the boundaries of controllable image generation, we&apos;ve identified and addressed a critical gap in how current ControlNet models interact with the Flux pipeline. Despite the power of ControlNet, existing models &#x2014; even when paired with Flux Ultra &#x2014; fell short in several key areas such as structural accuracy, prompt fidelity, and response to control signals.</p><p>To address these constraints, we&apos;ve developed a custom FluxDev fine-tune and a newly trained ControlNet variant that together produce markedly better results in structure-aware generation tasks like pose guidance, depth rendering, and edge detection conditioning.</p><div class="kg-card kg-header-card kg-v2 kg-width-full kg-content-wide " style="background-color: #000000;" data-background-color="#000000">
            
            <div class="kg-header-card-content">
                
                <div class="kg-header-card-text kg-align-center">
                    <h2 id="-the-challenge" class="kg-header-card-heading" style="color: #FFFFFF;" data-text-color="#FFFFFF"><span style="white-space: pre-wrap;">&#x1F50D; The Challenge</span></h2>
                    
                    
                </div>
            </div>
        </div><p>While ControlNet-based models are generally effective at conditioning on structure-like inputs, we observed several limitations when applied within the Flux and Flux Ultra environments:</p><ul><li>Weak correlation between the input control maps and the generated features</li></ul><p><img src="https://content.dashtoon.ai/stability-images/0a9e910f-13ad-4aca-b15f-683100a64b64.png" alt="Improving Control in Flux-Driven Image Generation" loading="lazy"></p>
<p><img src="https://content.dashtoon.ai/stability-images/64837c93-b4aa-4dcb-be38-26cd28b1c5cb.png" alt="Improving Control in Flux-Driven Image Generation" loading="lazy"></p>
<ul><li>Poor overall aesthetics in the outputs</li></ul><p><img src="https://content.dashtoon.ai/stability-images/1fc402e9-f66e-4c73-939b-2f0fa94b7400.png" alt="Improving Control in Flux-Driven Image Generation" loading="lazy"></p>
<p><img src="https://content.dashtoon.ai/stability-images/f38e1fd2-513c-4ba8-b16b-ac1653c44696.png" alt="Improving Control in Flux-Driven Image Generation" loading="lazy"></p>
<div class="kg-card kg-callout-card kg-callout-card-blue"><div class="kg-callout-emoji">&#x1F4A1;</div><div class="kg-callout-text">These issues were consistent across multiple pretrained ControlNet checkpoints and became more pronounced under heavier Flux configurations.</div></div><p>&#x1F4F7;&#x2002;Sample Output &#x2014; Existing ControlNet with Flux Ultra</p><p><img src="https://content.dashtoon.ai/stability-images/cabd0598-140b-4ed6-81f1-58927a3319ce.png" alt="Improving Control in Flux-Driven Image Generation" loading="lazy"></p>
<div class="kg-card kg-callout-card kg-callout-card-blue"><div class="kg-callout-emoji">&#x1F4A1;</div><div class="kg-callout-text"><i><em class="italic" style="white-space: pre-wrap;">Note how the generated pose diverges significantly from control input under standard models.</em></i></div></div><div class="kg-card kg-header-card kg-v2 kg-width-full kg-content-wide " style="background-color: #000000;" data-background-color="#000000">
            
            <div class="kg-header-card-content">
                
                <div class="kg-header-card-text kg-align-center">
                    <h2 id="-our-solution" class="kg-header-card-heading" style="color: #FFFFFF;" data-text-color="#FFFFFF"><span style="white-space: pre-wrap;">&#x1F6E0;&#xFE0F; Our Solution</span></h2>
                    
                    
                </div>
            </div>
        </div><p>We initiated a comprehensive re-architecture of the Flux conditioning pipeline:</p><ul><li>Fine-tuned a FluxDev variant optimized for multi-stream attention flow</li><li>Trained a custom ControlNet model on hybrid internal+public datasets across multiple conditioning maps (pose, depth, canny)</li><li>Introduced dynamic control strength adaptation to maintain guidance integrity across a range of prompt lengths and noise thresholds</li></ul><p>These updates significantly improve signal fidelity while still preserving generative flexibility.</p><h3 id="%F0%9F%93%8A-performance-benchmarks">&#x1F4CA; Performance Benchmarks</h3><p>We evaluated our new control stack along three key dimensions: Control Adherence, Prompt Consistency, and Structural Error.</p>
<!--kg-card-begin: html-->
<table>
<thead>
<tr>
<th>Metric</th>
<th>Baseline (Existing ControlNet + Flux Ultra)</th>
<th>New Method (Custom FluxDev + ControlNet)</th>
</tr>
</thead>
<tbody>
<tr>
<td>Control Map Adherence (SSIM)</td>
<td>0.68</td>
<td>0.84</td>
</tr>
<tr>
<td>Prompt/Control Harmony (%)</td>
<td>71%</td>
<td>92%</td>
</tr>
<tr>
<td>Structural Deviation (low = better)</td>
<td>0.342</td>
<td>0.112</td>
</tr>
<tr>
<td>Artifact Rate (per 100 imgs)</td>
<td>18.2</td>
<td>4.7</td>
</tr>
</tbody>
</table>
<!--kg-card-end: html-->
<p>Additionally, average inference latency stayed within &#xB1;5% compared to the previous method, indicating no significant trade-offs in speed.</p><div class="kg-card kg-callout-card kg-callout-card-blue"><div class="kg-callout-emoji">&#x1F4A1;</div><div class="kg-callout-text">Benchmarks conducted on internal validation set using consistent prompts, control types, and seeds.</div></div><h3 id="%F0%9F%A7%A0-architecture-notes"><strong>&#x1F9E0; Architecture Notes</strong></h3><p>Below is a high-level overview of what has changed in the architecture layout:</p><p><img src="https://content.dashtoon.ai/stability-images/55c3cc71-15a1-4d63-9004-1c24da53b941.png" alt="Improving Control in Flux-Driven Image Generation" loading="lazy"></p>
<ul><li><strong>ControlNet Input Pathway</strong>:<ul><li>Swapped out standard adapter layers for multi-head attention fusion blocks</li><li>Introduced gated skip connections from early encoder positions for stronger pose retention</li></ul></li><li><strong>Training Setup</strong><ul><li>Dataset: 1.3M control-labeled image pairs (pose, depth, etc.)</li><li>Target losses: MSE for control adherence, perceptual loss for image fidelity</li></ul></li></ul><div class="kg-card kg-callout-card kg-callout-card-blue"><div class="kg-callout-emoji">&#x1F4A1;</div><div class="kg-callout-text">We&#x2019;ve intentionally abstracted some fine-grain implementation specifics to preserve internal IP, but we plan to share more experimental results in an upcoming technical deep-dive.</div></div><div class="kg-card kg-header-card kg-v2 kg-width-full kg-content-wide " style="background-color: #000000;" data-background-color="#000000">
            
            <div class="kg-header-card-content">
                
                <div class="kg-header-card-text kg-align-center">
                    <h2 id="-whats-next" class="kg-header-card-heading" style="color: #FFFFFF;" data-text-color="#FFFFFF"><span style="white-space: pre-wrap;">&#x2795; What&#x2019;s Next</span></h2>
                    
                    
                </div>
            </div>
        </div><p>We&#x2019;re continuing to iterate on other control domains, including semantic maps and sketch-based prompts, using similar architectural principles. Additionally, we&#x2019;re exploring interpolation guidance &#x2014; where users can blend between multiple control signals dynamically during generation.</p><p>However, one issue we&#x2019;ve observed with this model is that generations often adopt an overly blueish color tone.</p><style>
  .title-container {
    display: flex;
    justify-content: center;
    align-items: center;
    height: 100vh; /* Adjust this value to position the title vertically */
  }
  
  .title {
    font-size: 2.5em;
    text-align: center;
    color: #333;
    font-family: 'Helvetica Neue', sans-serif;
    letter-spacing: 0.1em;
    padding: 0.5em 0;
    background: transparent;
  }
  
  .title span {
    background: -webkit-linear-gradient(45deg, #7ed56f, #28b485);
    -webkit-background-clip: text;
    -webkit-text-fill-color: transparent;
  }
  
  .masonry-grid {
    column-count: 2;
    column-gap: 15px;
  }

  .masonry-item {
    margin-bottom: 15px;
    break-inside: avoid;
  }

  .custom-image {
    width: 100%;
    height: auto;
    display: block;
    border-radius: 10px;
    transition: transform .7s;
  }

  .custom-image:hover {
    transform: scale(1.05);
  }
</style>
<div class="masonry-grid">
  <div class="masonry-item">
    <img class="custom-image" src="https://content.dashtoon.ai/stability-images/13d163c8-a800-46c3-8932-328664367ab2.png" alt="Improving Control in Flux-Driven Image Generation">
  </div>
  <div class="masonry-item">
    <img class="custom-image" src="https://content.dashtoon.ai/stability-images/41714a7f-99fa-4ed5-80aa-cc1d717ad244.png" alt="Improving Control in Flux-Driven Image Generation">
  </div>
</div><p>This unintended color bias reduces the naturalness of outputs and makes them appear more stylized than realistic. The effect is especially noticeable on skin tones, clothing, and ambient lighting, where cooler hues dominate regardless of the intended palette.</p><p>We suspect a few possible causes for this issue:</p><ul><li><strong>Training data imbalance</strong> &#x2013; if a significant portion of the dataset contains cooler/blue-tinted lighting conditions, the model may overfit to that distribution.</li><li><strong>Conditioning signal leakage</strong> &#x2013; certain control modalities (e.g., depth maps or sketch prompts) might bias the network toward cooler tones due to how they were preprocessed or normalized.</li><li><strong>Interpolation interactions</strong> &#x2013; blending multiple control signals dynamically may amplify subtle biases, leading to a systematic shift toward blueish palettes.</li></ul><p>Addressing this requires better color consistency handling within the control framework to ensure that user-specified prompts and reference conditions are respected without introducing systematic tinting artifacts.</p>]]></content:encoded></item><item><title><![CDATA[Introducing Hunyuan Keyframe LoRA: Open-Source Keyframe-Based Video Generation]]></title><description><![CDATA[<div class="kg-card kg-header-card kg-v2 kg-width-regular " style="background-color: #000000;" data-background-color="#000000">
            
            <div class="kg-header-card-content">
                
                <div class="kg-header-card-text kg-align-center">
                    <h2 id="introduction" class="kg-header-card-heading" style="color: #FFFFFF;" data-text-color="#FFFFFF"><span style="white-space: pre-wrap;">Introduction</span></h2>
                    
                    
                </div>
            </div>
        </div><p>In the realm of AI-driven video creation, tools like Runway&apos;s Gen-3 Alpha Turbo and Kling have showcased the potential of keyframe-based generation, enabling smooth transitions between specified frames. Inspired by this approach, we present <strong>Hunyuan Keyframe LoRA</strong>, an open-source solution built upon the <a href="https://github.com/Tencent/HunyuanVideo?ref=insiders.dashtoon.com" rel="noreferrer"><strong>Hunyuan Video</strong></a> framework. This</p>]]></description><link>http://insiders.dashtoon.com/introducing-hunyuan-keyframe-lora-open-source-keyframe-based-video-generation/</link><guid isPermaLink="false">67bc1fdfcfaace006599d680</guid><dc:creator><![CDATA[Ayushman Buragohain]]></dc:creator><pubDate>Thu, 27 Feb 2025 11:08:51 GMT</pubDate><media:content url="http://insiders.dashtoon.com/content/images/2025/02/Frame-1.png" medium="image"/><content:encoded><![CDATA[<div class="kg-card kg-header-card kg-v2 kg-width-regular " style="background-color: #000000;" data-background-color="#000000">
            
            <div class="kg-header-card-content">
                
                <div class="kg-header-card-text kg-align-center">
                    <h2 id="introduction" class="kg-header-card-heading" style="color: #FFFFFF;" data-text-color="#FFFFFF"><span style="white-space: pre-wrap;">Introduction</span></h2>
                    
                    
                </div>
            </div>
        </div><img src="http://insiders.dashtoon.com/content/images/2025/02/Frame-1.png" alt="Introducing Hunyuan Keyframe LoRA: Open-Source Keyframe-Based Video Generation"><p>In the realm of AI-driven video creation, tools like Runway&apos;s Gen-3 Alpha Turbo and Kling have showcased the potential of keyframe-based generation, enabling smooth transitions between specified frames. Inspired by this approach, we present <strong>Hunyuan Keyframe LoRA</strong>, an open-source solution built upon the <a href="https://github.com/Tencent/HunyuanVideo?ref=insiders.dashtoon.com" rel="noreferrer"><strong>Hunyuan Video</strong></a> framework. This model empowers creators to define keyframes and generate seamless video sequences, all within an open-source ecosystem</p><table>
<thead>
<tr>
<th>Image 1</th>
<th>Image 2</th>
<th>Generated Video</th>
</tr>
</thead>
<tbody>
<tr>
<td><img src="https://content.dashtoon.ai/stability-images/41aeca63-064a-4003-8c8b-bfe2cc80d275.png" alt="Introducing Hunyuan Keyframe LoRA: Open-Source Keyframe-Based Video Generation" loading="lazy"></td>
<td><img src="https://content.dashtoon.ai/stability-images/28956177-3455-4b56-bb6c-73eacef323ca.png" alt="Introducing Hunyuan Keyframe LoRA: Open-Source Keyframe-Based Video Generation" loading="lazy"></td>
<td><video controls autoplay src="https://content.dashtoon.ai/stability-images/14b7dd1a-1f46-4c4c-b4ec-9d0f948712af.mp4"></video></td>
</tr>
<tr>
<td><img src="https://content.dashtoon.ai/stability-images/ddabbf2f-4218-497b-8239-b7b882d93000.png" alt="Introducing Hunyuan Keyframe LoRA: Open-Source Keyframe-Based Video Generation" loading="lazy"></td>
<td><img src="https://content.dashtoon.ai/stability-images/b603acba-40a4-44ba-aa26-ed79403df580.png" alt="Introducing Hunyuan Keyframe LoRA: Open-Source Keyframe-Based Video Generation" loading="lazy"></td>
<td><video controls autoplay src="https://content.dashtoon.ai/stability-images/b00ba193-b3b7-41a1-9bc1-9fdaceba6efa.mp4"></video></td>
</tr>
<tr>
<td><img src="https://content.dashtoon.ai/stability-images/5298cf0c-0955-4568-935a-2fb66045f21d.png" alt="Introducing Hunyuan Keyframe LoRA: Open-Source Keyframe-Based Video Generation" loading="lazy"></td>
<td><img src="https://content.dashtoon.ai/stability-images/722a4ea7-7092-4323-8e83-3f627e8fd7f8.png" alt="Introducing Hunyuan Keyframe LoRA: Open-Source Keyframe-Based Video Generation" loading="lazy"></td>
<td><video controls autoplay src="https://content.dashtoon.ai/stability-images/0cb84780-4fdf-4ecc-ab48-12e7e1055a39.mp4"></video></td>
</tr>
<tr>
<td><img src="https://content.dashtoon.ai/stability-images/69d9a49f-95c0-4e85-bd49-14a039373c8b.png" alt="Introducing Hunyuan Keyframe LoRA: Open-Source Keyframe-Based Video Generation" loading="lazy"></td>
<td><img src="https://content.dashtoon.ai/stability-images/0cef7fa9-e15a-48ec-9bd3-c61921181802.png" alt="Introducing Hunyuan Keyframe LoRA: Open-Source Keyframe-Based Video Generation" loading="lazy"></td>
<td><video controls autoplay src="https://content.dashtoon.ai/stability-images/ce12156f-0ac2-4d16-b489-37e85c61b5b2.mp4"></video></td>
</tr>
</tbody>
</table>
<div class="kg-card kg-header-card kg-v2 kg-width-regular " style="background-color: #000000;" data-background-color="#000000">
            
            <div class="kg-header-card-content">
                
                <div class="kg-header-card-text kg-align-center">
                    <h2 id="architecture-enhancing-keyframe-integration" class="kg-header-card-heading" style="color: #FFFFFF;" data-text-color="#FFFFFF"><span style="white-space: pre-wrap;">Architecture: Enhancing Keyframe Integration</span></h2>
                    
                    
                </div>
            </div>
        </div><p>&#x200B;Our architecture builds upon existing models, introducing key enhancements to optimize keyframe-based video generation:&#x200B;</p><ul><li><strong>Input Patch Embedding Expansion</strong>: We modify the input patch embedding projection layer to effectively incorporate keyframe information. By adjusting the convolutional input parameters, we enable the model to process image inputs within the Diffusion Transformer (DiT) framework.&#x200B;</li><li><strong>LoRA Integration</strong>: We apply Low-Rank Adaptation (LoRA) across all linear layers and the convolutional input layer. This approach facilitates efficient fine-tuning by introducing low-rank matrices that approximate the weight updates, thereby preserving the base model&apos;s foundational capabilities while reducing the number of trainable parameters.</li><li><strong>Keyframe Conditioning</strong>: The model is conditioned on user-defined keyframes, allowing precise control over the generated video&apos;s start and end frames. This conditioning ensures that the generated content aligns seamlessly with the specified keyframes, enhancing the coherence and narrative flow of the video.&#x200B;</li></ul><p>These architectural modifications collectively enhance the model&apos;s ability to generate high-quality videos that adhere closely to user-defined keyframes, all while maintaining computational efficiency.</p><div class="kg-card kg-header-card kg-v2 kg-width-regular " style="background-color: #000000;" data-background-color="#000000">
            
            <div class="kg-header-card-content">
                
                <div class="kg-header-card-text kg-align-center">
                    <h2 id="curating-highquality-motion-sequences" class="kg-header-card-heading" style="color: #FFFFFF;" data-text-color="#FFFFFF"><span style="white-space: pre-wrap;">Curating High-Quality Motion Sequences</span></h2>
                    
                    
                </div>
            </div>
        </div><p>A meticulously curated dataset is essential for training effective keyframe-based models. Our data collection strategy includes:&#x200B;</p><ul><li><strong>OpenVideo1M Subset</strong>: We selected approximately 20,000 samples from <a href="https://huggingface.co/datasets/nkp37/OpenVid-1M?ref=insiders.dashtoon.com" rel="noreferrer">OpenVideo1M</a>, focusing on clips with high aesthetic value and dynamic motion.&#x200B;</li><li><strong>Dashtoon Internal Dataset</strong>: An additional 5,000 samples were incorporated from Dashtoon&apos;s proprietary dataset, primarily centered on human subjects.&#x200B;</li><li><strong>Data Filtering</strong>: Utilizing scripts from <a href="https://github.com/aigc-apps/EasyAnimate/tree/main?ref=insiders.dashtoon.com" rel="noreferrer">EasyAnimate</a>, we filtered the dataset to exclude low-quality or repetitive frames, ensuring a diverse and high-quality training set.&#x200B;</li></ul><div class="kg-card kg-header-card kg-v2 kg-width-regular " style="background-color: #000000;" data-background-color="#000000">
            
            <div class="kg-header-card-content">
                
                <div class="kg-header-card-text kg-align-center">
                    <h2 id="leveraging-keyframes-for-seamless-transitions" class="kg-header-card-heading" style="color: #FFFFFF;" data-text-color="#FFFFFF"><span style="white-space: pre-wrap;">Leveraging Keyframes for Seamless Transitions</span></h2>
                    
                    
                </div>
            </div>
        </div><p>Our training process is designed to fully leverage the power of keyframes, ensuring high-quality, temporally consistent video generation:</p><ul><li><strong>Keyframe Sampling:</strong> We condition the model using static keyframes, specifically selecting the initial and final frames of videos as anchors for generation. To maintain consistency, we ensure that these keyframes do not contain significant motion, preventing unwanted artifacts in the generated sequence.</li><li><strong>Motion-Aware Sampling:</strong> During training, careful selection of keyframes is crucial&#x2014;ensuring that the start and end frames are truly static helps establish a clear visual reference, allowing the model to infer smooth motion transitions more effectively.</li><li><strong>Temporal Consistency:</strong> The model is trained to generate intermediate frames that naturally bridge the defined keyframes, ensuring smooth, coherent transitions. By optimizing for temporal stability, the model maintains consistency in motion, structure, and subject appearance across the generated sequence.</li></ul><p>These refinements enable <strong>Hunyuan Keyframe LoRA</strong> to produce high-quality, controlled video generations that align closely with user-defined keyframes while preserving natural motion dynamics.</p><p>&#x200B;During inference, <strong>Hunyuan Keyframe LoRA</strong> offers enhanced flexibility and control, enabling users to craft videos that align closely with their creative vision:&#x200B;</p><ul><li><strong>Keyframe Specification</strong>: Users can define the initial and final frames, setting precise visual anchors that guide the video&apos;s narrative and flow.&#x200B;</li><li><strong>Variable Video Length</strong>: Trained on sequences of varying lengths, the model can generate between 33 to 121 frames between the specified keyframes, offering adaptability in video duration.&#x200B;</li><li><strong>Textual Prompts</strong>: While the model can operate without textual input, incorporating descriptive prompts significantly enriches the generated content&apos;s detail and relevance.&#x200B;</li></ul><p>By combining keyframe control with flexible video lengths and optional textual guidance, <strong>Hunyuan Keyframe LoRA</strong> empowers creators to produce dynamic and tailored video content.</p><div class="kg-card kg-header-card kg-v2 kg-width-regular " style="background-color: #000000;" data-background-color="#000000">
            
            <div class="kg-header-card-content">
                
                <div class="kg-header-card-text kg-align-center">
                    <h2 id="conclusion" class="kg-header-card-heading" style="color: #FFFFFF;" data-text-color="#FFFFFF"><span style="white-space: pre-wrap;">Conclusion</span></h2>
                    
                    
                </div>
            </div>
        </div><p>&#x200B;<strong>Hunyuan Keyframe LoRA</strong> democratizes keyframe-based video generation by offering an open-source alternative to proprietary models. We are fully open-sourcing the model weights, enabling the community to access, utilize, and build upon our work. Additionally, we are collaborating with the Hugging Face Diffusers library to integrate Hunyuan Keyframe LoRA, streamlining its adoption and fostering a more intuitive creative process. Future developments will focus on refining keyframe conditioning techniques, expanding dataset diversity, and enhancing user interfaces to make the creative process more seamless and accessible.</p><ul><li>Model weights are available on HuggingFace: <a href="https://huggingface.co/dashtoon/hunyuan-video-keyframe-control-lora?ref=insiders.dashtoon.com" rel="noreferrer">[Control Lora]</a></li><li>Training code is available on <a href="https://github.com/dashtoon/hunyuan-video-keyframe-control-lora/?ref=insiders.dashtoon.com" rel="noreferrer">[Github]</a></li></ul>]]></content:encoded></item><item><title><![CDATA[DashTailor - Training Free Clothing and Object Transfer for AI Comics]]></title><description><![CDATA[<p>While making comics using generative AI, achieving consistency in clothing and specific objects across panels is essential. It&#x2019;s easier to do with characters and art style by using LoRAs. But it&#x2019;s impractical to train a LoRA for clothing because using too many concept LoRAs together creates</p>]]></description><link>http://insiders.dashtoon.com/dashtailor-training-free-clothing-and-object-transfer-for-ai-comics/</link><guid isPermaLink="false">67b7224ccfaace006599d615</guid><dc:creator><![CDATA[Amogh Vaishampayan]]></dc:creator><pubDate>Sat, 22 Feb 2025 12:37:44 GMT</pubDate><media:content url="http://insiders.dashtoon.com/content/images/2025/02/blog-header-2.png" medium="image"/><content:encoded><![CDATA[<img src="http://insiders.dashtoon.com/content/images/2025/02/blog-header-2.png" alt="DashTailor - Training Free Clothing and Object Transfer for AI&#xA0;Comics"><p>While making comics using generative AI, achieving consistency in clothing and specific objects across panels is essential. It&#x2019;s easier to do with characters and art style by using LoRAs. But it&#x2019;s impractical to train a LoRA for clothing because using too many concept LoRAs together creates unwanted artefacts. A character might wear different outfits in different scenes, so generating the clothing as a part of the character by including it consistently in every image of the LoRA dataset isn&#x2019;t practical either. We needed a method to upload an image of clothing or an object and transfer it seamlessly into the target image.</p><p>To solve this problem, we used an interesting capability of the Flux Fill inpainting model that transfers concepts from one part of an image to another part of the&#xA0;<em>same image</em>&#xA0;remarkably well. The workflow for this technique can be found <a href="https://github.com/dashtoon/dashtailor-workflow?ref=insiders.dashtoon.com" rel="noreferrer">here</a>.</p><h2 id="approach">Approach</h2><p><strong>Masking:</strong>&#xA0;Draw masks on the object and target images</p>
<p><strong>Object image</strong> &#x2013; the mask covers the piece of clothing the character needs to wear</p>
<table>
<thead>
<tr>
<th>Object image</th>
<th>Object mask</th>
</tr>
</thead>
<tbody>
<tr>
<td><img src="https://github.com/user-attachments/assets/548788ae-e64a-4804-9411-2a97d12e1e77" alt="DashTailor - Training Free Clothing and Object Transfer for AI&#xA0;Comics" loading="lazy"></td>
<td><img src="https://github.com/user-attachments/assets/a265ef6a-02dc-4354-a440-8313b2c6c833" alt="DashTailor - Training Free Clothing and Object Transfer for AI&#xA0;Comics" loading="lazy"></td>
</tr>
</tbody>
</table>
<p><strong>Target image</strong> &#x2013; the mask covers should cover only the part of the image where the object must be applied, such as the character&#x2019;s body</p>
<table>
<thead>
<tr>
<th>Target image</th>
<th>Target mask</th>
</tr>
</thead>
<tbody>
<tr>
<td><img src="https://github.com/user-attachments/assets/229d46b4-3711-4b08-b30d-cda340e182cf" alt="DashTailor - Training Free Clothing and Object Transfer for AI&#xA0;Comics" loading="lazy"></td>
<td><img src="https://github.com/user-attachments/assets/13e64550-509b-4b88-9c4a-f3117df6faf8" alt="DashTailor - Training Free Clothing and Object Transfer for AI&#xA0;Comics" loading="lazy"></td>
</tr>
</tbody>
</table>
<p><strong>Extracting the Masked Object:</strong>&#xA0;Isolate the part of the object image within the mask, leaving the rest of the image blank. The original aspect ratio of the image was retained.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://github.com/user-attachments/assets/89c6c37e-fa3d-443f-944d-79354e9710b4" class="kg-image" alt="DashTailor - Training Free Clothing and Object Transfer for AI&#xA0;Comics" loading="lazy" width="1024" height="1024"><figcaption><span style="white-space: pre-wrap;">Masked object</span></figcaption></figure><p><strong>Using GPT-4o Vision:</strong>&#xA0;Describe the isolated object to use as a prompt. The GPT instruction prompt is: <code>Describe the clothing, object, design or any other item in this image. Be brief and to the point. Avoid starting phrases like &quot;This image contains...&#x201D;</code><br>In this case the extracted object prompt was <code>Metallic plate armor with intricate designs, including a winged emblem on the chest. Brown leather straps and accents secure the armor, complemented by layered pauldrons and arm guards.</code></p><p><strong>Creating a Composite Image:</strong>&#xA0;Join the object image and the target image side by side. Scale the object image height up or down to match the target image.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://github.com/user-attachments/assets/b0163e03-219d-4116-862a-0130d4ef90a4" class="kg-image" alt="DashTailor - Training Free Clothing and Object Transfer for AI&#xA0;Comics" loading="lazy" width="2048" height="1024"><figcaption><span style="white-space: pre-wrap;">Composite image</span></figcaption></figure><p><strong>Pose Controlnet:</strong> To maintain the pose of the original subject while inpainting, we passed the composite image into an Openpose annotator and used Flux Union Controlnet with type Openpose and strength value of 0.8.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://github.com/user-attachments/assets/013460c0-3b7a-435a-ae95-e05ed1669fe3" class="kg-image" alt="DashTailor - Training Free Clothing and Object Transfer for AI&#xA0;Comics" loading="lazy" width="1024" height="512"><figcaption><span style="white-space: pre-wrap;">Openpose annotation</span></figcaption></figure><p><strong>Flux Fill Inpainting:</strong>&#xA0;Use the composite image along with the GPT extracted prompt as the conditioning to guide the inpainting process. The inpainting parameters are: </p><ol start="6"><ol><li>Flux Guidance: 50</li><li>Denoise: 1</li><li>Steps: 20</li><li>CFG: 1</li><li>Sampler: Euler</li><li>Scheduler: Beta</li></ol></ol><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://github.com/user-attachments/assets/10970235-17f3-450d-9477-a53c08d9def2" class="kg-image" alt="DashTailor - Training Free Clothing and Object Transfer for AI&#xA0;Comics" loading="lazy" width="2048" height="1024"><figcaption><span style="white-space: pre-wrap;">Initial Flux Fill output</span></figcaption></figure><p><strong>Cropping the composite image:</strong> Crop the output from the left by the width of the scaled object mask image to get the target image with the transferred output.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://github.com/user-attachments/assets/41b6c465-6b52-4f7b-9628-0d5157985a20" class="kg-image" alt="DashTailor - Training Free Clothing and Object Transfer for AI&#xA0;Comics" loading="lazy" width="1024" height="1024"><figcaption><span style="white-space: pre-wrap;">Final output by inpainting</span></figcaption></figure><p><strong>Improving quality:</strong> This output may still have some rough edges and artifacts. Also, there may be a style mismatch if the object image was in a different art style than the target image. So we recommend doing one final inpainting pass at 0.15 to 0.2 denoise and the same object prompt from earlier. It&#x2019;s important that this inpainting pass uses the checkpoint, Lora, and generation configuration that&#x2019;s suitable for the target image style. This will eliminate any artifacts and ensure style consistency. For example, if your target image is in anime style, use an anime checkpoint or Lora for this step.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://github.com/user-attachments/assets/c1e22d4d-cd1f-42f0-b22a-eefa131f84d3" class="kg-image" alt="DashTailor - Training Free Clothing and Object Transfer for AI&#xA0;Comics" loading="lazy" width="1024" height="1024"><figcaption><span style="white-space: pre-wrap;">Cropped initial output</span></figcaption></figure><p><strong>Using Flux Redux: </strong>Optionally, you can use the Flux Redux model in the ComfyUI workflow instead of relying on GPT to write a prompt based on the masked object. To use Redux, change the value in this node in the <em>Generation parameters</em> section from 1 to 2. However, Redux is tricky to use. If your object and target masks do not perfectly match, black patches may be generated. For a general use case I would recommend using a prompt.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://github.com/user-attachments/assets/b6d911b7-2c57-4722-97e4-680d57ea78ad" class="kg-image" alt="DashTailor - Training Free Clothing and Object Transfer for AI&#xA0;Comics" loading="lazy" width="848" height="317"><figcaption><span style="white-space: pre-wrap;">Flux Redux setting</span></figcaption></figure><h2 id="why-does-this-work"><strong>Why Does This Work?</strong></h2><p>When you combine the object and target images into a single composite image, you&#x2019;re providing the model with a unified context. This allows the model to leverage the spatial and visual cues from both images simultaneously. Flux Fill is excellent at inpainting because its architecture utilizes the context of the image very well.</p><p>When both the object and the target areas are present in the same composite image, the model can more effectively learn the relationship and ensure the masked area is filled in a way that aligns with the object&#x2019;s characteristics and the overall scene. The model&#x2019;s attention mechanism can more easily correlate the visual features of the object with the masked area. This ensures a more precise and accurate transfer, effectively guiding the model to fill in the missing parts with high fidelity.</p><p>This method effectively transfers the isolated object into the target image, maintaining consistency across different poses and orientations.</p><h2 id="how-to-use-dashtailor">How to use DashTailor</h2><p>You can <a href="https://github.com/dashtoon/dashtailor-workflow?ref=insiders.dashtoon.com" rel="noreferrer">run this workflow in CommfyUI</a>.</p><p>DashTailor is also available to use on <a href="https://dashtoon.com/studio?ref=insiders.dashtoon.com" rel="noreferrer">dashtoon.com/studio</a>. Just Create a new Dashtoon and use the tool in the Editor section.</p><h2 id="more-examples">More examples</h2><figure class="kg-card kg-image-card"><img src="https://github.com/user-attachments/assets/4bd6ebf3-8794-47e9-8d09-247e58abf3f1" class="kg-image" alt="DashTailor - Training Free Clothing and Object Transfer for AI&#xA0;Comics" loading="lazy" width="1024" height="384"></figure><figure class="kg-card kg-image-card"><img src="https://github.com/user-attachments/assets/f4f166cf-cf80-4510-bcd7-95675a285f49" class="kg-image" alt="DashTailor - Training Free Clothing and Object Transfer for AI&#xA0;Comics" loading="lazy" width="1024" height="341"></figure><figure class="kg-card kg-image-card"><img src="https://github.com/user-attachments/assets/bbb38d93-f2e7-4f64-8213-788af846437b" class="kg-image" alt="DashTailor - Training Free Clothing and Object Transfer for AI&#xA0;Comics" loading="lazy" width="1024" height="377"></figure><figure class="kg-card kg-image-card"><img src="https://github.com/user-attachments/assets/d7c6ed5f-a895-44d7-bfca-67b68f2f5162" class="kg-image" alt="DashTailor - Training Free Clothing and Object Transfer for AI&#xA0;Comics" loading="lazy" width="1024" height="365"></figure>]]></content:encoded></item><item><title><![CDATA[A Road Towards Tuning-Free Identity-Consistent Character Inpainting]]></title><description><![CDATA[<p>At Dashtoon, we are dedicated to simplifying and enabling seamless visual storytelling through comic creation, with character creation at the heart of this process. Our mission is to make storytelling accessible to everyone by empowering users to craft personalized characters&#x2014;whether entirely original or inspired by real-world personas&#x2014;</p>]]></description><link>http://insiders.dashtoon.com/a-road-towards-tuning-free-id-consistent-character-inpainting/</link><guid isPermaLink="false">6790998bcfaace006599d547</guid><category><![CDATA[research]]></category><dc:creator><![CDATA[Naman Rastogi]]></dc:creator><pubDate>Wed, 22 Jan 2025 10:55:22 GMT</pubDate><media:content url="http://insiders.dashtoon.com/content/images/2025/01/diag1b-1-1.png" medium="image"/><content:encoded><![CDATA[<img src="http://insiders.dashtoon.com/content/images/2025/01/diag1b-1-1.png" alt="A Road Towards Tuning-Free Identity-Consistent Character Inpainting"><p>At Dashtoon, we are dedicated to simplifying and enabling seamless visual storytelling through comic creation, with character creation at the heart of this process. Our mission is to make storytelling accessible to everyone by empowering users to craft personalized characters&#x2014;whether entirely original or inspired by real-world personas&#x2014;that bring their narratives to life. Comics, by nature, involve creating multi-panel, multi-page stories, where maintaining consistency in character design is essential. Ensuring that characters retain their intrinsic attributes&#x2014;such as facial features, hairstyles, body shapes, and other physical traits&#x2014;across diverse scenes and frames is critical to achieving narrative coherence and visual continuity (Fig A and B). This focus on character consistency underpins the immersive storytelling experience we aim to deliver, offering users the flexibility to shape narratives that reflect their ideas, identities, and imagination.</p>
<!--kg-card-begin: html-->
<figure>
<img src="https://content.dashtoon.ai/assets/free-id-consistent-character/oz2--1-.png" alt="A Road Towards Tuning-Free Identity-Consistent Character Inpainting"> 
<figcaption>Fig A: Character: Asian, Female, Adult, Red eyes, Short fringed, Outer dark black hair , Inner yellow Hair, Bangs, Skinny.</figcaption>
  </figure>
<!--kg-card-end: html-->

<!--kg-card-begin: html-->
<figure>
<img src="https://content.dashtoon.ai/assets/free-id-consistent-character/oz3--1-.png" alt="A Road Towards Tuning-Free Identity-Consistent Character Inpainting"> 
<figcaption>Fig B: Character: Caucasian, Female, Adult, Long Brown Wavy hair, wearing a blue top with a beige blazer.</figcaption>
  </figure>
<!--kg-card-end: html-->
<p>To support this, we are working to adapt Text-to-Image generative models for efficient and scalable ID-driven synthesis, which is formally defined in the next section.</p><h2 id="1-id-consistent-synthesis%E2%80%94what-is-it">1 | ID-Consistent Synthesis&#x2014;What is it?</h2><p>It&#x2019;s a direction within the field of text-to-image generation aimed at creating visually coherent images that maintain a subject&apos;s identity (ID) across varied prompts defining diverse situations or artistic variations. Unlike traditional generative models that focus on general styles or objects, ID-consistent synthesis deals with a relatively subtle task of preserving intricate identity details&#x2014;such as facial features&#x2014;of a person or object from a single or limited reference image. Recent advances in diffusion models like Stable Diffusion [19], DALL-E3 [18], and Flux [15] have significantly improved creative, context-rich image generation. However, ensuring identity consistency remains challenging, as these models balance preserving identity with aligning to diverse prompts.</p><h3 id="11-the-spectrum-of-methods">1.1 | The Spectrum of Methods</h3><p>The problem can fundamentally be addressed through three distinct dimensions, each defined by the role of model training:</p><ul><li><strong>Test-time optimization methods</strong>, exemplified by techniques like DreamBooth [10] and Textual Inversion [11], rely on fine-tuning the model specifically for each subject or object. These methods are both time-consuming and computationally demanding as they require per-subject optimization and often multiple reference images, which limit their scalability in practical applications.</li><li><strong>Tuning-free methods</strong>. The focus of these is to tune specialized ID adapters that inject identity information into the base generative model. Approaches like InstantID [2] and PULID [13] leverage these adapters or conditioning strategies to generate consistent images for unseen subjects, avoiding per-subject optimization.</li><li><strong>Training-free approaches</strong> eliminate the need for any training. These methods focus on inference-time manipulations to achieve identity consistency, primarily by adjusting attention layers across batches to align with the reference identity. We will touch on this briefly at the end of our article.</li></ul><p>Among these approaches, the focus of this article lies on the second dimension&#x2014;<strong>tuning-free methods</strong>&#x2014;and the advancements we have contributed in this space.</p><p>Let&#x2019;s begin with how we constructed our data pipeline to facilitate extraction of consistent character images for model training.</p><h2 id="2-dataset-construction-flow">2 | Dataset Construction Flow</h2><p></p>
<!--kg-card-begin: html-->
<figure>
<img src="https://content.dashtoon.ai/assets/free-id-consistent-character/datasetiddiag--1-.png" alt="A Road Towards Tuning-Free Identity-Consistent Character Inpainting"> 
<figcaption>Fig 0: Overview of dataset construction pipeline for extracting consistent character images from videos.</figcaption>
  </figure>
<!--kg-card-end: html-->
<p>Curating datasets for consistent character generation presents specific challenges due to the inherent requirement for structured data in the form of triplets. These triplets consist of: <strong>(1)</strong> a reference or ID image that defines the subject to remain consistent across generations, <strong>(2)</strong> a text prompt describing how the subject should appear in the generated image, and <strong>(3)</strong> a target image showcasing the subject as specified by the text prompt.</p><p>To meet our dataset requirements, we opted for a large-scale collection of <strong>movies</strong>. Movies offer a valuable resource, as they consist of numerous image frames featuring various characters across different scenes. By leveraging appropriate deep learning approaches, we can efficiently extract multiple consistent images of distinct characters from a single movie, providing a rich source of structured data for our needs.</p><p>Furthermore, our goal was to train the model using<strong><em> in-the-wild reference images</em></strong>, ensuring that user-provided reference images are not limited to portrait, front-facing, or close-up formats. Character images extracted from movie frames satisfied this requirement for the dataset.</p><h3 id="21-character-aggregation-phase">2.1 | Character aggregation phase</h3><p>Below are details for the dataset construction pipeline:</p><ol><li><strong>Frame extraction:</strong> For each movie, frames were extracted using a frame skip value of 50, chosen as an optimal balance based on empirical observations. A lower value yielded redundant frames with minimal variation, while a higher value risked missing sufficient consistent and diverse frames for character representation. In total, frames were extracted from over 1200 movies scraped from the web.</li><li><strong>Face detection stage:</strong> We use the ArcFace [3] module to detect human faces in the frames extracted from the movie. Frames with no detected faces are discarded. For frames where multiple faces are detected, we calculate the pairwise cosine similarity of the face embeddings and sum these similarities for each detected face. The face with the lowest cumulative similarity score is selected, as it is deemed to be the most unique or distinctive among the detected faces. This ensures consistency in selecting a single representative face per frame, even when multiple faces are present. The selected face&apos;s embedding, bounding box, keypoints, and corresponding frame information are stored for further processing.</li><li><strong>Grouping distinct characters:</strong> After extracting the face embeddings and their associated metadata from the frames, we group the frames into clusters based on cosine similarity of the embeddings. This process is carried out using a similarity threshold to identify frames that likely belong to the same character. Frames are iteratively compared, and those with a similarity score above the defined threshold are grouped together. Each group represents a distinct character, with its frames ordered by descending similarity scores.Once the groups are formed, we apply additional filtering criteria to ensure the quality and usability of the groups. Groups with fewer than the minimum required frames are discarded, while a maximum number of frames is retained for groups exceeding the limit. The final output is a set of structured character data, where each distinct character is represented by its frame IDs, bounding boxes, and facial landmarks.</li></ol><p>      With this, we extracted around 50k IDs from the movies.  </p>
<!--kg-card-begin: html-->
<figure>
<img src="https://content.dashtoon.ai/assets/free-id-consistent-character/4diffsim-1.png" alt="A Road Towards Tuning-Free Identity-Consistent Character Inpainting"> 
<figcaption>Fig 1: Subset of characters extracted from the movie Simulant (2023)</figcaption>
  </figure>
<!--kg-card-end: html-->
<h3 id="22-mask-generation">2.2 | Mask Generation</h3><p>For the consistent frames aggregated in the previous step, we generate segmentation masks for the target character using the SAM (Segment Anything Model) [7]. Since each frame may contain multiple faces or human figures, the face bounding box stored for each frame is uniquely associated with the target character. To generate masks, we utilize the midpoint of the face bounding box as the input to the segmentation model. For each input frame, the model produces a multi-mask output, from which we select the mask with the largest area.</p><p><strong>Note 1:</strong> The quality of the generated masks can be further enhanced by incorporating whole-body bounding boxes. This is achieved by using Grounding-DINO or other object detectors to detect all bounding boxes for humans within the frame. The bounding box with the largest overlap with the target face bounding box is then used as the input to the segmentation model, providing a more accurate and refined segmentation of the target character.</p><p><strong>Note 2:</strong> <a href="https://github.com/CartoonSegmentation/CartoonSegmentation?ref=insiders.dashtoon.com">Specialized segmentation models</a> can be employed for anime images, as general-purpose models such as SAM often exhibit suboptimal mask quality in certain cases.</p><p>Fig 2.0 and 2.1: Extracted frames for a character with its corresponding segmentation masks</p>
<!--kg-card-begin: html-->
<figure>
<img src="https://content.dashtoon.ai/assets/free-id-consistent-character/frame_2331_eab2b477-6628-45b8-99ed-32a707b8b854-1.png" alt="A Road Towards Tuning-Free Identity-Consistent Character Inpainting"> 
<figcaption>Fig 2.0: Character with the bounding box is the extracted character for these set of images. From the movie Enchanto.</figcaption>
  </figure>
<!--kg-card-end: html-->

<!--kg-card-begin: html-->
<figure>
<img src="https://content.dashtoon.ai/assets/free-id-consistent-character/frame_2331_eab2b477-6628-45b8-99ed-32a707b8b854_mask-1.png" alt="A Road Towards Tuning-Free Identity-Consistent Character Inpainting"> 
<figcaption>Fig 2.1: Corresponding masks for the extracted character as in Fig 2.0.</figcaption>
  </figure>
<!--kg-card-end: html-->
<p>More Samples</p>
<!--kg-card-begin: html-->
<figure>
<img src="https://content.dashtoon.ai/assets/free-id-consistent-character/WhatsApp-Image-2025-01-22-at-1.59.09-PM.jpeg" alt="A Road Towards Tuning-Free Identity-Consistent Character Inpainting"> 
<figcaption>Fig 3: From Avatar - The Way of Water</figcaption>
  </figure>
<!--kg-card-end: html-->

<!--kg-card-begin: html-->
<figure>
<img src="https://content.dashtoon.ai/assets/free-id-consistent-character/frame_0809_f86f1265-9f36-4b2a-97b3-b63ebd5a3817.png" alt="A Road Towards Tuning-Free Identity-Consistent Character Inpainting"> 
<figcaption>Fig 4: From Avatar - The Way of Water</figcaption>
  </figure>
<!--kg-card-end: html-->

<!--kg-card-begin: html-->
<figure>
<img src="https://content.dashtoon.ai/assets/free-id-consistent-character/frame_29988_c6d0561c-f7ca-49f5-99fc-a27235816ce3.png" alt="A Road Towards Tuning-Free Identity-Consistent Character Inpainting"> 
<figcaption>Fig 5: From Batman</figcaption>
  </figure>
<!--kg-card-end: html-->
<h3 id="23-captioning">2.3 | Captioning</h3><p>In this study, we used <strong>InternVL2-26B</strong> [6] as the Vision-Language Model (VLM) to generate high-quality captions tailored to our needs, providing descriptive textual annotations for target images.</p><p>To ensure precision and relevance, we developed a structured <strong>instruction prompt template</strong> to guide the VLM in producing focused descriptions. The prompt emphasized key aspects such as appearance, clothing, expressions, gestures, and interactions while excluding irrelevant details. Constraints on word count (100&#x2013;150 words) and avoidance of subjective or speculative details further refined the output, ensuring captions aligned with the inpainting task&apos;s requirements.</p><blockquote>The prompt template, shown below, helped meet our training objectives.<br>  <br><em><strong>Prompt Template: </strong><br>Describe the image in detail, STRICTLY keeping it under 100-150 words, in a single coherent paragraph. <br>DO NOT BEGIN WITH &apos;This image shows&apos;, &apos;In this image&apos;, &apos;The image depicts&apos;, etc. Clearly specify the gender (man, woman, boy, girl, or male/female). <br>Focus on the character&apos;s appearance, gestures, poses, clothing, and any accessories they might be wearing. <br>If the character is interacting with any objects, describe the nature of the interaction clearly, including interactions with the background.<br>Describe the character&apos;s expressions and emotions. <br>Mention any text visible on the character or objects (e.g., logos, patterns, or labels). <br>Specify the lighting&#x2019;s direction, intensity, and its effect on the character (e.g., shadows or highlights on the body or clothing). <br>Indicate the style of the image (e.g., cartoon, photograph, 3D render) and avoid adding subjective interpretations or speculation. Keep the description strictly factual and focus solely on the observable details within the image</em>.</blockquote><p>Below are some sample images with their generated captions.</p>
<!--kg-card-begin: html-->
<figure>
<img src="https://content.dashtoon.ai/assets/free-id-consistent-character/o1.png" alt="A Road Towards Tuning-Free Identity-Consistent Character Inpainting"> 
<figcaption>Fig 6: A man with dark hair and a beard, wearing a black suit and a white shirt with a tie, is kneeling at a wooden table. He is holding an orange in his hands, seemingly about to peel it. On the table in front of him are several peeled orange segments. The background features a green wall, a globe on a stand, and a chair. The lighting is soft and natural, coming from the left side of the image, casting gentle shadows. The style of the image is a detailed anime illustration. The man&apos;s expression is focused and slightly intense.</figcaption>
  </figure>
<!--kg-card-end: html-->

<!--kg-card-begin: html-->
<figure>
<img src="https://content.dashtoon.ai/assets/free-id-consistent-character/o2.png" alt="A Road Towards Tuning-Free Identity-Consistent Character Inpainting"> 
<figcaption>Fig 7: A young girl with long brown hair sits on the carpeted stairs, wearing a blue dress with a pattern of small dots. She holds a clear glass in her right hand and looks directly at the camera with a neutral expression. The stairs have white railings and the carpet is a light green color. The background features a yellow wall with a leafy pattern and a decorative fan hanging on the wall. The lighting is soft and natural, coming from the left side of the image, casting gentle shadows. The style of the image is a photograph. There are no other characters or text visible in the image.</figcaption>
  </figure>
<!--kg-card-end: html-->
<h2 id="3-towards-the-approach">3 | Towards the Approach</h2><p>Existing methods struggle to generate characters in diverse poses, facial expressions, and varying backgrounds using a single model with just a reference character image and prompt description&#x2014;an open problem to date. To address this, and in alignment with Dashtoon&#x2019;s custom requirements and internal workflow for comic creation, we viewed the problem through the lens of inpainting, leveraging its suitability for our structured comic creation process.</p><blockquote>Formally, the objective is to repurpose a text-to-image generative model for ID-consistent character inpainting. The task involves generating an inpainted image by utilizing user-provided inputs, including a base image, a binary mask defining the region to be inpainted, a reference image specifying the identity and appearance of the character, and a textual prompt describing the final inpainted image. The approach should ensure that the inpainted character maintains identity consistency with the reference image, adheres to the attributes specified in the prompt, and integrates seamlessly into the masked region of the base image.</blockquote><p>We chose SDXL [12] for this research to meet our specific requirements; however, the proposed method is adaptable and can be extended to other text-to-image models, including Diffusion Transformer-based models such as Flux [15], SD3.5 [17], and others.</p><h3 id="31-preliminaries">3.1 | Preliminaries</h3><p><strong>3.1.1 | Cross-Attention</strong></p><p>In text-to-image models such as Stable Diffusion, text conditioning is achieved through the cross-attention mechanism, where CLIP-generated text embeddings are integrated into the cross-attention layers to guide the generation process. Formally,</p>
<!--kg-card-begin: html-->
<figure>
<img src="https://content.dashtoon.ai/assets/free-id-consistent-character/image--56-.png" alt="A Road Towards Tuning-Free Identity-Consistent Character Inpainting"> 
</figure>
<!--kg-card-end: html-->
<p>Theoretically, this cross-attention mechanism can be extended to incorporate information from other modalities, provided that the information can be effectively projected into the model&#x2019;s cross-attention embedding space. Let&#x2019;s discuss this further in the next subsection.</p><p><strong>3.1.2 | Extending Cross-Attention for Image Conditioning</strong></p><p>Reference-based text-to-image generation requires that we are effectively able to inject identity information in the base diffusion model through some form of conditioning for ID awareness. <a href="https://github.com/tencent-ailab/IP-Adapter?ref=insiders.dashtoon.com">IP-Adapter</a> [1] introduced a novel mechanism to enable a pretrained text-to-image diffusion model to generate images with image as a prompt. This is characterized by utilizing a decoupled-cross attention mechanism to inject image features through additional cross-attention layer in the base model along with the text cross-attention layer. Formally, that means:</p>
<!--kg-card-begin: html-->
<figure>
<img src="https://content.dashtoon.ai/assets/free-id-consistent-character/image--57-.png" alt="A Road Towards Tuning-Free Identity-Consistent Character Inpainting"> 
  </figure>
<!--kg-card-end: html-->
<p>While [1] demonstrates the addition of image features through a dedicated cross-attention layer <em>(let&#x2019;s call it <strong>ICA1</strong>)</em> for image conditioning, we can further extend this concept to include more cross-attention layers, each injecting different modalities into the base model to provide supplementary information that might not be fully captured by the earlier ones.</p><p>However, the point to consider here is that cross-attention extension essentially operates as a weighted addition, which inherently dilutes the information being integrated. Consequently, the more cross-attention layers we add, the greater the risk of diminishing the distinctiveness of the injected information. However, through our experiments and empirical observations, we found that adding yet another cross-attention layer actually helped in providing additional information that was not captured by the initial image cross-attention layer.</p><p>We will discuss more on this in the upcoming sections.</p><h3 id="32-method-discussion">3.2 | Method Discussion</h3>
<!--kg-card-begin: html-->
<figure>
<img src="https://content.dashtoon.ai/assets/free-id-consistent-character/diag1b-1.png" alt="A Road Towards Tuning-Free Identity-Consistent Character Inpainting"> 
<figcaption>Fig 8: Overview of the proposed framework for ID-consistent character inpainting. Reference images are processed to extract facial and body embeddings using specialized modules (ArcFace and InternViT, respectively), which are projected into the SDXL&#x2019;s text embedding space and injected into SDXL as extra cross-attention layers (ICA1 for facial features and ICA2 for global body-level features). Pose-IdentityNet further refines the output by replacing text embeddings with face embeddings (following [2]) to ensure accurate identity preservation and pose adherence by virtue of being conditioned on pose keypoints images.</figcaption>
  </figure>
<!--kg-card-end: html-->
<p><strong>3.2.1 | SDXL for inpainting</strong></p><p>To adapt SDXL for the inpainting task, we followed the standard approach of utilizing 9-channel inputs for the U-Net backbone. The base input image and the masked image were encoded into 4-channel latents using the SDXL VAE, with the masked image downsampled according to the SDXL VAE&apos;s scale factor. These components were then concatenated in the following order: image latents + mask + masked image latents, forming the final input to the U-Net.</p><p><strong>3.2.2 | Injecting ID information - Facial Features</strong></p><p>To incorporate identity information into the SDXL U-Net, we divide the process into two parts. In the first part, we employ an ArcFace module (antelope-v2) [3] to extract facial features from the reference image. These features are then projected into the SDXL cross-attention embedding space via a trainable projection module known as the <strong>Perceiver-Resampler</strong> [4]. The Perceiver-Resampler accepts input image features and transforms them into a fixed number of learnable queries, which serve as the output feature sequence. These features are subsequently used to extract key and value embeddings, and are then combined with the queries obtained from self-attention to form the final cross-attention mechanism, following the approach described in [1].</p><p>In the second part, we follow the approach outlined in [2] to enhance face-ID information within SDXL. Specifically, we employ the <strong>ControlNet (or IdentityNet)</strong> described in [2], initialized from the same checkpoint. In this setup, text embeddings are replaced with the facial embeddings extracted in the first part, ensuring the network focuses exclusively on face information for improved identity awareness.</p><p><strong>3.2.3 | Injecting Pose information</strong></p><p>In the original IdentityNet framework described in [2], five facial keypoints (two for the eyes, one for the nose, and two for the mouth) are used as the conditioning image to provide spatial control information to the ControlNet. However, in the context of our problem space, this approach proved suboptimal, as it confines the facial region strictly to the layout of the user reference image. Moreover, the facial expressions of the reference image are perpetuated in the generation process (see Fig. 9). This outcome is at odds with our goal, which requires the generated image to conform to the target character&#x2019;s pose and facial expressions requiring inpainting.</p>
<!--kg-card-begin: html-->
<figure>
<img src="https://content.dashtoon.ai/assets/free-id-consistent-character/WhatsApp-Image-2025-01-22-at-2.53.18-PM.jpeg" alt="A Road Towards Tuning-Free Identity-Consistent Character Inpainting"> 
<figcaption>Fig 9: Examples of problematic generations when using five facial keypoints as the conditioning image are shown. In each sample, the first image represents the reference image, while the subsequent images depict the generated outputs.</figcaption>
  </figure>
<!--kg-card-end: html-->
<p>Hence, we opted to extract 133 pose keypoints set in the OpenPose format for the character defined by the mask region in the user-provided base image, which is to be inpainted with the character from the reference image. The extracted keypoint image (Fig 10) is then provided to our version of IdentityNet, referred to as Pose-IdentityNet. This approach offers additional pose information for the target character, while also capturing a richer range of facial expressions through the expanded keypoint set. For this we used RTMPose-l, 384x288 variant (based on MMPose) [5], to extract the required keypoints set. Note that the pose model receives the masked image containing only the target character, allowing keypoints to be extracted exclusively for the intended subject.</p>
<!--kg-card-begin: html-->
<figure>
<img src="https://content.dashtoon.ai/assets/free-id-consistent-character/oz--2-.png" alt="A Road Towards Tuning-Free Identity-Consistent Character Inpainting"> 
<figcaption>Fig 10: Input base image and the corresponding keypoints extracted. These keypoints image are fed as spatial control image in our version of ControlNet (Pose-IdentityNet).</figcaption>
  </figure>
<!--kg-card-end: html-->
<p><strong>3.2.4 | Injecting ID information - Body features</strong></p><p>In addition to the facial information supplied to SDXL via cross-attention and Pose-IdentityNet, we introduce an additional cross-attention layer to incorporate more global information about the character from the reference image. This step ensures that the generated outputs fully align with the reference subject&#x2019;s overall body appearance, including details such as hairstyle. Based on our discussion in Section 3.1.2, we understand that the cross-attention layer in the SDXL U-Net can be further extended to incorporate additional information. Formally, this can be translated as:</p>
<!--kg-card-begin: html-->
<figure>
<img src="https://content.dashtoon.ai/assets/free-id-consistent-character/image--58-.png" alt="A Road Towards Tuning-Free Identity-Consistent Character Inpainting">   </figure>
<!--kg-card-end: html-->
<p>The first image cross-attention mechanism is utilized to inject facial ID features, while the second image cross-attention is employed for incorporating global ID features. To extract these global features, we leverage the InternViT-300M-448px [6] model, which processes the segmented character region obtained from the reference image and outputs image embeddings. The extracted features are then passed through a Perceiver-Resampler module, which projects them into the SDXL cross-attention embedding space, similar to what we did for facial ID features.</p><p>This straightforward extension enabled the model to better focus on body-related attributes, including physical details, shapes, and hairstyles.</p><p><strong>3.2.5 | Training details</strong></p><p>Figure 8 provides an overview of the training flow and pipeline, which includes the following trainable components: two Perceiver-Resampler projection modules, a facial ID cross-attention layer, a global ID cross-attention layer, and the entire Pose-IdentityNet. The experiments were conducted using SDXL 1.0 while keeping its base weights frozen. Model training was performed on 8 H100 GPUs (80 GB), with a batch size of one sample per GPU.</p><p>Approximately 50k distinct IDs were extracted from movie footage; although each character had multiple images available, only one was used as a reference image and another as the target image, thereby forming the necessary triplet data points (reference image, target image, and target prompt). An additional set of approximately 30k single-image anime IDs was also incorporated; in these cases, a horizontally flipped version of the reference image served as the target image to create the triplet data.</p><p>To further enhance generalization, we randomly dropped text, face, and body feature embeddings for classifier-free guidance. We also employed multi-resolution training via aspect-ratio bucketing (following [8]) to support multi-resolution inputs. Additionally, the model was trained on longer descriptive prompts (following [9]), using a maximum token length of 154.</p><h3 id="33-sample-results">3.3 | Sample Results</h3><p>From left-to-right or top-to-bottom: Base Image, Mask, Extracted Pose Keypoints (from character in the masked region), Reference Image, Inpainted Image.</p>
<!--kg-card-begin: html-->
<figure>
<img src="https://content.dashtoon.ai/assets/free-id-consistent-character/oz--3-.png" alt="A Road Towards Tuning-Free Identity-Consistent Character Inpainting"> 
<figcaption>FIg 11: Inpaint Prompt: A man playing a piano</figcaption>
  </figure>
<!--kg-card-end: html-->

<!--kg-card-begin: html-->
<figure>
<img src="https://content.dashtoon.ai/assets/free-id-consistent-character/oz--4-.png" alt="A Road Towards Tuning-Free Identity-Consistent Character Inpainting"> 
<figcaption>Fig 12: Inpaint Prompt: A boy in a green t-shirt holding a pen.</figcaption>
  </figure>
<!--kg-card-end: html-->

<!--kg-card-begin: html-->
<figure>
<img src="https://content.dashtoon.ai/assets/free-id-consistent-character/oz--5-.png" alt="A Road Towards Tuning-Free Identity-Consistent Character Inpainting"> 
<figcaption>Fig 13: Inpaint Prompt: A middle-aged man with silver hair, wearing a beige V-neck sweater over a dark blue collared shirt, smiling.</figcaption>
  </figure>
<!--kg-card-end: html-->
<h1 id="4-conclusion">4 | Conclusion</h1><p>This blogpost presented an approach to Zero-Shot ID-Consistent Character Inpainting, addressing the demands of our comic-creation pipelines. To achieve this goal, we introduced a data construction process that extracts consistent character frames from large-scale movie datasets, thereby enabling robust ID-consistent character training on in-the-wild images (flexible reference images which doesn&#x2019;t need to be portrait as shown in sample results). Our proposed inpainting architecture integrates additional cross-attention over global image features, ensuring the faithful injection of the reference character&#x2019;s physical attributes. Furthermore, we incorporated a pose-conditioned ControlNet to promote accurate pose and facial attribute adherence&#x2014;an essential requirement for high-fidelity character inpainting. To the best of our knowledge, this is the first work to explicitly focus on zero-shot ID-preserving character inpainting. The empirical results underscore the effectiveness of our approach in maintaining character identity and pose alignment.</p><p>We also encountered challenges with our proposed model. One primary issue is color saturation (Fig 14), an artifact carried over from the InstantID-based ideas that we leveraged, which is similarly reflected in our outputs. Additionally, the model sometimes struggles with rendering complex hairstyles (Fig 15), indicating the need for more robust handling of fine-grained attributes. Lastly, the reliance on external modules such as ArcFace and pose extraction introduces potential failure points, as inaccuracies in these priors affect subsequent stages of the generation pipeline.</p>
<!--kg-card-begin: html-->
<figure>
<img src="https://content.dashtoon.ai/assets/free-id-consistent-character/oz2--3-.png" alt="A Road Towards Tuning-Free Identity-Consistent Character Inpainting"> 
<figcaption>Fig. 14: From left to right: base input image, mask, pose keypoints image, reference character image, and inpainted image. Observe the color saturation in the inpainted image, highlighting an issue identified in the InstantID model.</figcaption>
  </figure>
<!--kg-card-end: html-->

<!--kg-card-begin: html-->
<figure>
<img src="https://content.dashtoon.ai/assets/free-id-consistent-character/oz--6-.png" alt="A Road Towards Tuning-Free Identity-Consistent Character Inpainting"> 
<figcaption>Fig. 15: From left to right: base input image, mask, pose keypoints image, reference character image, and inpainted image. The inpainted character fails to accurately replicate the hairstyle of the reference character.</figcaption>
  </figure>
<!--kg-card-end: html-->
<h3 id="41-scaling-data-with-the-synthetic-images"><strong>4.1 | Scaling data with the synthetic images</strong></h3><p>As discussed earlier, recent advancements in training-free approaches have demonstrated promising results for achieving ID consistency. These methods tend to leverage cross-image attention manipulations across batches to maintain consistency effectively. A notable example is [14], which also employs Diffusion Features (DIFT) [16] to establish dense visual correspondences across images, ensuring that the subject appears consistent across different generations.</p><p>In the context of data generation for training the architecture proposed in this work, the approach outlined in [14] can be effectively leveraged to further scale the dataset. By providing unique character descriptions&#x2014;generated based on specific requirements and utilizing available LLMs&#x2014;to the model, and enabling the generation of batches of two or more consistent images under varying prompt settings, it can serve as strong medium to facilitate the creation of diverse training samples.</p><h2 id="what-nextefforts-on-training-free-approaches">What Next - Efforts on training-free approaches</h2><p>As discussed in the preceding section, we are concurrently exploring training-free approaches for zero-shot ID-consistent character synthesis, not only for data scaling but also with the goal of adapting them to support reference images, inpainting, and other tools integral to the character creation process.</p><p>Recent flow-based methods, such as Flux [15], also present a promising foundation for achieving training-free ID-consistent character generation, owing to their better prompt adherence and anatomy fidelity. Our research efforts, therefore, also focus on advancing strategies for encoding reference image information and improving consistency mechanisms within these flow-based models.</p><p><em>Glimpse of what we are currently cooking:</em></p>
<!--kg-card-begin: html-->
<figure>
<img src="https://content.dashtoon.ai/assets/free-id-consistent-character/yann-lecun-scaled--1---1-.jpg" alt="A Road Towards Tuning-Free Identity-Consistent Character Inpainting"> 
<figcaption>Fig 16: Reference image featuring Yann LeCun.</figcaption>
  </figure>
<!--kg-card-end: html-->

<!--kg-card-begin: html-->
<figure>
<img src="https://content.dashtoon.ai/assets/free-id-consistent-character/oz2--4-.png" alt="A Road Towards Tuning-Free Identity-Consistent Character Inpainting"> 
<figcaption>Fig 17: Images generated using reference image in Fig 16 from our method in its initial development phase. The model was not trained on ID-consistent task. The result is from our method falling under training-free approaches that we briefly discussed in section 1.1</figcaption>
  </figure>
<!--kg-card-end: html-->
<p>Stayed tuned..!</p><h1 id="references">References</h1><p>[1] <a href="https://github.com/tencent-ailab/IP-Adapter?ref=insiders.dashtoon.com">IP-Adapter: Text Compatible Image Prompt Adapter for Text-to-Image Diffusion Models</a><br>[2] <a href="https://github.com/instantX-research/InstantID?ref=insiders.dashtoon.com">InstantID: Zero-shot Identity-Preserving Generation in Seconds</a><br>[3] <a href="https://insightface.ai/arcface?ref=insiders.dashtoon.com">ArcFace: Additive Angular Margin Loss for Deep Face Recognition</a><br>[4] <a href="https://arxiv.org/pdf/2204.14198v2?ref=insiders.dashtoon.com">Flamingo: a Visual Language Model for Few-Shot Learning</a><br>[5] <a href="https://arxiv.org/abs/2303.07399?ref=insiders.dashtoon.com">RTMPose: Real-Time Multi-Person Pose Estimation based on MMPose</a><br>[6] <a href="https://github.com/OpenGVLab/InternVL?ref=insiders.dashtoon.com">OpenGVLab-InternVL</a><br>[7] <a href="https://github.com/facebookresearch/segment-anything?ref=insiders.dashtoon.com">Segment Anything (SAM)</a><br>[8] <a href="https://github.com/PixArt-alpha/PixArt-sigma?ref=insiders.dashtoon.com">PixArt-&#x3A3;: Weak-to-Strong Training of Diffusion Transformer for 4K Text-to-Image Generation</a><br>[9] <a href="https://github.com/kohya-ss/sd-scripts/blob/main/docs/train_SDXL-en.md?ref=insiders.dashtoon.com">kohya-ss sd scripts - SDXL training</a><br>[10] <a href="https://dreambooth.github.io/?ref=insiders.dashtoon.com">DreamBooth: Fine Tuning Text-to-Image Diffusion Models for Subject-Driven Generation</a><br>[11] <a href="https://textual-inversion.github.io/?ref=insiders.dashtoon.com">An Image is Worth One Word: Personalizing Text-to-Image Generation using Textual Inversion</a><br>[12] <a href="https://arxiv.org/abs/2307.01952?ref=insiders.dashtoon.com">SDXL: Improving Latent Diffusion Models for High-Resolution Image Synthesis</a><br>[13] <a href="https://github.com/ToTheBeginning/PuLID?ref=insiders.dashtoon.com">PuLID: Pure and Lightning ID Customization via Contrastive Alignment</a><br>[14] <a href="https://github.com/NVlabs/consistory?ref=insiders.dashtoon.com">ConsiStory: Training-Free Consistent Text-to-Image Generation</a><br>[15] <a href="https://github.com/black-forest-labs/flux?ref=insiders.dashtoon.com">Flux</a><br>[16] <a href="https://arxiv.org/abs/2306.03881?ref=insiders.dashtoon.com">Emergent Correspondence from Image Diffusion</a><br>[17] <a href="https://stability.ai/news/introducing-stable-diffusion-3-5?ref=insiders.dashtoon.com">Stable Diffusion 3.5</a><br>[18] <a href="https://openai.com/index/dall-e-3/?ref=insiders.dashtoon.com" rel="noopener noreferrer">DALL-E3</a><br>[19] <a href="https://arxiv.org/abs/2112.10752?ref=insiders.dashtoon.com" rel="noopener noreferrer">High-Resolution Image Synthesis with Latent Diffusion Models</a></p>]]></content:encoded></item><item><title><![CDATA[Insights from Our Adversarial Diffusion Distillation POC]]></title><description><![CDATA[<p>When building a comic creation platform, speed and efficiency are paramount. Users expect rapid feedback, especially when generating images through multiple iterations. To meet this demand, we turned to Adversarial Diffusion Distillation, a cutting-edge technique designed to speed up image generation without sacrificing quality. In this blog post, we&apos;</p>]]></description><link>http://insiders.dashtoon.com/exploring-the-future-of-comic-generation-insights-from-our-adversarial-diffusion-distillation-poc/</link><guid isPermaLink="false">6727ad20904fd300654570d3</guid><dc:creator><![CDATA[Ayushman Buragohain]]></dc:creator><pubDate>Mon, 04 Nov 2024 06:14:34 GMT</pubDate><media:content url="http://insiders.dashtoon.com/content/images/2024/11/Dashtoon-Studio-Image--1-.png" medium="image"/><content:encoded><![CDATA[<img src="http://insiders.dashtoon.com/content/images/2024/11/Dashtoon-Studio-Image--1-.png" alt="Insights from Our Adversarial Diffusion Distillation POC"><p>When building a comic creation platform, speed and efficiency are paramount. Users expect rapid feedback, especially when generating images through multiple iterations. To meet this demand, we turned to Adversarial Diffusion Distillation, a cutting-edge technique designed to speed up image generation without sacrificing quality. In this blog post, we&apos;ll share why we chose this approach, how we implemented it using our own in-house models, and the steps we took to streamline our process.</p><div class="kg-card kg-header-card kg-v2 kg-width-full kg-content-wide " style="background-color: #000000;" data-background-color="#000000">
            
            <div class="kg-header-card-content">
                
                <div class="kg-header-card-text kg-align-center">
                    <h2 id="why-adversarial-diffusion-distillation" class="kg-header-card-heading" style="color: #FFFFFF;" data-text-color="#FFFFFF"><span style="white-space: pre-wrap;">Why Adversarial Diffusion Distillation?</span></h2>
                    
                    
                </div>
            </div>
        </div><ol><li><strong>Faster Inference Speed</strong>: Reducing the time it takes to generate images improves the user experience. The faster we can deliver outputs, the more seamless the creative process becomes for our users. Additionally, quicker generation times reduce operational costs for us, ensuring a more sustainable business model.</li><li><strong>Efficient Iteration in Comic Creation</strong>: Comic creation is an iterative process. Artists frequently modify images before reaching their final version. Showing image outputs quickly allows creators to make adjustments on the fly, fostering a smoother creative workflow.</li></ol><div class="kg-card kg-header-card kg-v2 kg-width-full kg-content-wide " style="background-color: #000000;" data-background-color="#000000">
            
            <div class="kg-header-card-content">
                
                <div class="kg-header-card-text kg-align-center">
                    <h2 id="introduction" class="kg-header-card-heading" style="color: #FFFFFF;" data-text-color="#FFFFFF"><span style="white-space: pre-wrap;">Introduction</span></h2>
                    
                    
                </div>
            </div>
        </div><p>The goal is to generate high-fidelity samples quickly while achieving the quality of top-tier models. The adversarial objective enables fast generation by producing samples in a single step, but scaling GANs to large datasets has shown the importance of not solely relying on the discriminator. Incorporating a pretrained classifier or CLIP network enhances text alignment, however, overuse of discriminative networks can lead to artifacts and reduced image quality.</p><p>To address this, the authors leverage the gradient of a pretrained diffusion model through score distillation to improve text alignment and sample quality. The model is initialized with pretrained diffusion model weights, known to enhance training with adversarial loss. Finally, rather than a decoder-only architecture typical in GAN training, a standard diffusion model framework is adapted, allowing for iterative refinement.</p><div class="kg-card kg-header-card kg-v2 kg-width-full kg-content-wide " style="background-color: #000000;" data-background-color="#000000">
            
            <div class="kg-header-card-content">
                
                <div class="kg-header-card-text kg-align-center">
                    <h2 id="training-procedure" class="kg-header-card-heading" style="color: #FFFFFF;" data-text-color="#FFFFFF"><span style="white-space: pre-wrap;">Training Procedure</span></h2>
                    
                    
                </div>
            </div>
        </div><p><img src="https://content.dashtoon.ai/user-uploaded-files/UPL9CiRCtQhUUBP69sw77SyYMtXNw7IUF20.webp" alt="Insights from Our Adversarial Diffusion Distillation POC" loading="lazy"></p>
<p>The training procedure involves three networks: the ADD-student initialized from a pretrained UNet-DM, a discriminator with trainable weights, and a DM teacher with frozen weights. The ADD-student generates samples from noisy data, which are produced from real images through a forward diffusion process. The process uses coefficients and samples timesteps uniformly from a chosen set, typically four timesteps, starting from pure noise.</p><p>For the adversarial objective, the discriminator distinguishes between generated samples and real images. Knowledge is distilled from the DM teacher by diffusing student samples with the teacher&#x2019;s process and using the teacher&#x2019;s denoising prediction as a reconstruction target for the distillation loss. The overall objective combines the adversarial loss and distillation loss.</p><p>The method is formulated in pixel space but can be adapted to Latent Diffusion Models operating in latent space. For LDMs with a shared latent space between teacher and student, the distillation loss can be computed in either pixel or latent space, with pixel space providing more stable gradients for distilling latent diffusion models.</p><h3 id="adversarial-loss"><strong>Adversarial Loss</strong></h3><p>The discriminator design and training procedure use a frozen pretrained feature network, typically ViTs, and a set of trainable lightweight discriminator heads applied to features at different layers of the network. The discriminator can be conditioned on additional information, such as text embeddings in text-to-image settings, or on a given image, especially useful when the ADD-student receives some signal from the input image. In practice, an additional feature network extracts an image embedding to condition the discriminator, enhancing the ADD-student&#x2019;s use of input effectively. The hinge loss is used as the adversarial objective function.</p><h3 id="score-distillation-loss"><strong>Score Distillation Loss</strong></h3><p>The distillation loss measures the mismatch between samples generated by the ADD-student and the outputs from the DM-teacher, using a distance metric. The teacher model is applied to diffused outputs of the student&#x2019;s generations, not directly to the non-diffused student outputs, as these would be out-of-distribution for the teacher.</p><p>The distance function used is the squared L2 norm. The weighting function has two options: exponential weighting, where higher noise levels contribute less, and score distillation sampling weighting.</p><div class="kg-card kg-header-card kg-v2 kg-width-full kg-content-wide " style="background-color: #000000;" data-background-color="#000000">
            
            <div class="kg-header-card-content">
                
                <div class="kg-header-card-text kg-align-center">
                    <h2 id="dashtoons-experiments" class="kg-header-card-heading" style="color: #FFFFFF;" data-text-color="#FFFFFF"><span style="white-space: pre-wrap;">Dashtoon&#x2019;s Experiments</span></h2>
                    
                    
                </div>
            </div>
        </div><p>We began by carefully studying the key details from the original Adversarial Diffusion Distillation paper. The goal was to transfer knowledge from a larger, pre-trained model (the teacher) to a smaller, more efficient model (the student), all while maintaining the quality of generated images.</p><p>For our implementation, we selected diffusers, a flexible and efficient framework for diffusion models. Below, we walk through the main components of our training process.</p><ul><li><strong>Teacher Model</strong>: We used our in-house trained SDXL model, which we call dashanime-xl. This model has been fine-tuned on a wide array of anime images, ensuring that it understands the nuances of comic-style art.</li><li><strong>Student Model</strong>: The student model was initialized from the pretrained weights of dashanime-xl. Starting from a strong base model allowed us to train faster while preserving image quality.</li><li><strong>Discriminator: W</strong>e used a discriminator, just as described in the paper. The discriminator includes two key components:<ol><li>Text Embeddings: Generated from a pretrained CLIP-ViT-g-14 text encoder, which helps evaluate how well the generated image aligns with the text prompt.</li><li>Image Embeddings: Extracted using the CLS embedding of a DINOv2 ViT-L encoder. This ensures that the images generated by the student model maintain high fidelity and visual quality.</li></ol></li><li><strong>Training Dataset</strong>: Our training dataset consists of 2 million publicly available anime images, curated and filtered using the process we detailed in our blog post about dashanime-xl. This dataset was essential in ensuring that our models learned to generate high-quality anime-style artwork.</li></ul><p>Below is the pseudo code outlining our training process using diffusers:</p><ul><li>Compute student predictions</li></ul><p><img src="https://content.dashtoon.ai/user-uploaded-files/UPLmEY760y3rO6qieW03Qi0fH16m0xW8Vbb.webp" alt="Insights from Our Adversarial Diffusion Distillation POC" loading="lazy"></p>
<ul><li>Compute the teacher predictions on student predicted x0</li></ul><p><img src="https://content.dashtoon.ai/user-uploaded-files/UPLzgoOd03RsA2CTZqTCjN37Y1SzjlGqiTT.webp" alt="Insights from Our Adversarial Diffusion Distillation POC" loading="lazy"></p>
<ul><li>Computing the GAN loss</li></ul><p><img src="https://content.dashtoon.ai/user-uploaded-files/UPLTANQJBGLex0p5lXdn4MKTwDlHpmpFOid.webp" alt="Insights from Our Adversarial Diffusion Distillation POC" loading="lazy"></p>
<ul><li>Compute the distillation loss. We used the exponential weighting scheme for the score distillation loss</li></ul><p><img src="https://content.dashtoon.ai/user-uploaded-files/UPLEJAuvr8HX7DyyeZiEGezleLei5EhnbnK.webp" alt="Insights from Our Adversarial Diffusion Distillation POC" loading="lazy"></p>
<div class="kg-card kg-header-card kg-v2 kg-width-full kg-content-wide " style="background-color: #000000;" data-background-color="#000000">
            
            <div class="kg-header-card-content">
                
                <div class="kg-header-card-text kg-align-center">
                    <h2 id="experiment-results" class="kg-header-card-heading" style="color: #FFFFFF;" data-text-color="#FFFFFF"><span style="white-space: pre-wrap;">Experiment Results</span></h2>
                    
                    
                </div>
            </div>
        </div><p>By applying Adversarial Diffusion Distillation, we successfully reduced inference times while maintaining the high-quality outputs that are essential for comic creation. The <strong>student model</strong> now generates images significantly faster than the <strong>teacher model</strong>, providing creators with a smoother and more efficient experience.</p><p><img src="https://content.dashtoon.ai/user-uploaded-files/UPLBF8T4DqotbULeat2jtlkZCfffgWXMIMJ.webp" alt="Insights from Our Adversarial Diffusion Distillation POC" loading="lazy"></p>
<p>Due to time constraints, we weren&apos;t able to perform a thorough quantitative evaluation of our new model, but we did manage to test it qualitatively. We&apos;re excited to share some of the results generated by our <strong>dashanime-xl-1.0-turbo</strong>, the outcome of our <strong>Adversarial Diffusion Distillation (ADD)</strong> implementation.</p><p>Our initial tests show that <strong>dashanime-xl-1.0-turbo</strong> performs impressively, producing high-quality anime-style images with significantly reduced generation times. The faster inference speed makes it ideal for rapid iteration during the comic creation process, fulfilling our goal of delivering seamless user experiences.</p><p>While we still plan to conduct comprehensive quantitative tests, these initial qualitative outputs are promising. They highlight <strong>dashanime-xl-1.0-turbo&apos;s</strong> ability to generate intricate and stylistically consistent images rapidly. The model&apos;s ability to maintain image quality while reducing generation time is a significant leap for use cases like comic creation, where speed and creative flexibility are crucial. Our next steps include further fine-tuning and testing on a broader range of comic styles and scenarios. We&#x2019;re also exploring ways to integrate this approach directly into our platform to allow for real-time image generation.</p><p>Stay tuned as we refine the model further and move on to more quantitative analysis to showcase the full potential of <strong>dashanime-xl-1.0-turbo</strong>!</p><hr><p>In this blog post, we&apos;ve highlighted the technical aspects of implementing Adversarial Diffusion Distillation, but the implications for user experience and efficiency are even more exciting. As we roll out these enhancements, we&#x2019;re eager to see how our community of creators utilizes this newfound speed and power in their projects.</p>]]></content:encoded></item><item><title><![CDATA[Dashtoon Studio August 2024 Release]]></title><description><![CDATA[<h1 id="what%E2%80%99s-new">What&#x2019;s new?</h1><p>In April 2023, we embarked on the journey of building Dashtoon Studio with a vision to revolutionize the way comics are created. After several iterations and invaluable feedback from our community, we are delighted to announce a host of new features that empower creators to bring</p>]]></description><link>http://insiders.dashtoon.com/dashtoon-studio-august-2024-release/</link><guid isPermaLink="false">66c48f16f3de2e00650bcf1b</guid><dc:creator><![CDATA[Amogh Vaishampayan]]></dc:creator><pubDate>Fri, 23 Aug 2024 14:21:50 GMT</pubDate><media:content url="http://insiders.dashtoon.com/content/images/2024/08/34466035.png" medium="image"/><content:encoded><![CDATA[<h1 id="what%E2%80%99s-new">What&#x2019;s new?</h1><img src="http://insiders.dashtoon.com/content/images/2024/08/34466035.png" alt="Dashtoon Studio August 2024 Release"><p>In April 2023, we embarked on the journey of building Dashtoon Studio with a vision to revolutionize the way comics are created. After several iterations and invaluable feedback from our community, we are delighted to announce a host of new features that empower creators to bring their stories to life with unparalleled control and creativity.</p><h2 id="introducing-story-mode">Introducing Story Mode</h2><p>Every captivating comic begins with a compelling story. However, transforming a narrative into a comic format is far from simple. Dashtoon Studio&apos;s Story Mode makes it possible for storytellers and artists to seamlessly convert their stories into engaging comics.</p><p>When you input your story in the Story section, our AI identifies the characters within your narrative and maps each one to a character from our extensive library of consistent characters. This ensures that each character maintains a consistent appearance throughout the comic. </p><figure class="kg-card kg-video-card kg-width-regular kg-card-hascaption" data-kg-thumbnail="http://insiders.dashtoon.com/content/media/2024/08/character-mapping_thumb.jpg" data-kg-custom-thumbnail>
            <div class="kg-video-container">
                <video src="http://insiders.dashtoon.com/content/media/2024/08/character-mapping.mp4" poster="https://img.spacergif.org/v1/1920x1080/0a/spacer.png" width="1920" height="1080" playsinline preload="metadata" style="background: transparent url(&apos;http://insiders.dashtoon.com/content/media/2024/08/character-mapping_thumb.jpg&apos;) 50% 50% / cover no-repeat;"></video>
                <div class="kg-video-overlay">
                    <button class="kg-video-large-play-icon" aria-label="Play video">
                        <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                            <path d="M23.14 10.608 2.253.164A1.559 1.559 0 0 0 0 1.557v20.887a1.558 1.558 0 0 0 2.253 1.392L23.14 13.393a1.557 1.557 0 0 0 0-2.785Z"/>
                        </svg>
                    </button>
                </div>
                <div class="kg-video-player-container">
                    <div class="kg-video-player">
                        <button class="kg-video-play-icon" aria-label="Play video">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <path d="M23.14 10.608 2.253.164A1.559 1.559 0 0 0 0 1.557v20.887a1.558 1.558 0 0 0 2.253 1.392L23.14 13.393a1.557 1.557 0 0 0 0-2.785Z"/>
                            </svg>
                        </button>
                        <button class="kg-video-pause-icon kg-video-hide" aria-label="Pause video">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <rect x="3" y="1" width="7" height="22" rx="1.5" ry="1.5"/>
                                <rect x="14" y="1" width="7" height="22" rx="1.5" ry="1.5"/>
                            </svg>
                        </button>
                        <span class="kg-video-current-time">0:00</span>
                        <div class="kg-video-time">
                            /<span class="kg-video-duration">0:10</span>
                        </div>
                        <input type="range" class="kg-video-seek-slider" max="100" value="0">
                        <button class="kg-video-playback-rate" aria-label="Adjust playback speed">1&#xD7;</button>
                        <button class="kg-video-unmute-icon" aria-label="Unmute">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <path d="M15.189 2.021a9.728 9.728 0 0 0-7.924 4.85.249.249 0 0 1-.221.133H5.25a3 3 0 0 0-3 3v2a3 3 0 0 0 3 3h1.794a.249.249 0 0 1 .221.133 9.73 9.73 0 0 0 7.924 4.85h.06a1 1 0 0 0 1-1V3.02a1 1 0 0 0-1.06-.998Z"/>
                            </svg>
                        </button>
                        <button class="kg-video-mute-icon kg-video-hide" aria-label="Mute">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <path d="M16.177 4.3a.248.248 0 0 0 .073-.176v-1.1a1 1 0 0 0-1.061-1 9.728 9.728 0 0 0-7.924 4.85.249.249 0 0 1-.221.133H5.25a3 3 0 0 0-3 3v2a3 3 0 0 0 3 3h.114a.251.251 0 0 0 .177-.073ZM23.707 1.706A1 1 0 0 0 22.293.292l-22 22a1 1 0 0 0 0 1.414l.009.009a1 1 0 0 0 1.405-.009l6.63-6.631A.251.251 0 0 1 8.515 17a.245.245 0 0 1 .177.075 10.081 10.081 0 0 0 6.5 2.92 1 1 0 0 0 1.061-1V9.266a.247.247 0 0 1 .073-.176Z"/>
                            </svg>
                        </button>
                        <input type="range" class="kg-video-volume-slider" max="100" value="100">
                    </div>
                </div>
            </div>
            <figcaption><p><span style="white-space: pre-wrap;">Dashtoon Studio automatically detects characters from your story and gives them a face</span></p></figcaption>
        </figure><p>Dashtoon Studio&apos;s AI then adapts your story into a detailed, panel-by-panel screenplay. After that, it generates the comic images, complete with the mapped characters, bringing your story to life in a visually stunning comic. Every panel of the screenplay is editable. You can even add new panels using just text instructions.</p><figure class="kg-card kg-video-card kg-width-regular kg-card-hascaption" data-kg-thumbnail="http://insiders.dashtoon.com/content/media/2024/08/add-panel_thumb.jpg" data-kg-custom-thumbnail>
            <div class="kg-video-container">
                <video src="http://insiders.dashtoon.com/content/media/2024/08/add-panel.mp4" poster="https://img.spacergif.org/v1/1920x1080/0a/spacer.png" width="1920" height="1080" playsinline preload="metadata" style="background: transparent url(&apos;http://insiders.dashtoon.com/content/media/2024/08/add-panel_thumb.jpg&apos;) 50% 50% / cover no-repeat;"></video>
                <div class="kg-video-overlay">
                    <button class="kg-video-large-play-icon" aria-label="Play video">
                        <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                            <path d="M23.14 10.608 2.253.164A1.559 1.559 0 0 0 0 1.557v20.887a1.558 1.558 0 0 0 2.253 1.392L23.14 13.393a1.557 1.557 0 0 0 0-2.785Z"/>
                        </svg>
                    </button>
                </div>
                <div class="kg-video-player-container">
                    <div class="kg-video-player">
                        <button class="kg-video-play-icon" aria-label="Play video">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <path d="M23.14 10.608 2.253.164A1.559 1.559 0 0 0 0 1.557v20.887a1.558 1.558 0 0 0 2.253 1.392L23.14 13.393a1.557 1.557 0 0 0 0-2.785Z"/>
                            </svg>
                        </button>
                        <button class="kg-video-pause-icon kg-video-hide" aria-label="Pause video">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <rect x="3" y="1" width="7" height="22" rx="1.5" ry="1.5"/>
                                <rect x="14" y="1" width="7" height="22" rx="1.5" ry="1.5"/>
                            </svg>
                        </button>
                        <span class="kg-video-current-time">0:00</span>
                        <div class="kg-video-time">
                            /<span class="kg-video-duration">0:12</span>
                        </div>
                        <input type="range" class="kg-video-seek-slider" max="100" value="0">
                        <button class="kg-video-playback-rate" aria-label="Adjust playback speed">1&#xD7;</button>
                        <button class="kg-video-unmute-icon" aria-label="Unmute">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <path d="M15.189 2.021a9.728 9.728 0 0 0-7.924 4.85.249.249 0 0 1-.221.133H5.25a3 3 0 0 0-3 3v2a3 3 0 0 0 3 3h1.794a.249.249 0 0 1 .221.133 9.73 9.73 0 0 0 7.924 4.85h.06a1 1 0 0 0 1-1V3.02a1 1 0 0 0-1.06-.998Z"/>
                            </svg>
                        </button>
                        <button class="kg-video-mute-icon kg-video-hide" aria-label="Mute">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <path d="M16.177 4.3a.248.248 0 0 0 .073-.176v-1.1a1 1 0 0 0-1.061-1 9.728 9.728 0 0 0-7.924 4.85.249.249 0 0 1-.221.133H5.25a3 3 0 0 0-3 3v2a3 3 0 0 0 3 3h.114a.251.251 0 0 0 .177-.073ZM23.707 1.706A1 1 0 0 0 22.293.292l-22 22a1 1 0 0 0 0 1.414l.009.009a1 1 0 0 0 1.405-.009l6.63-6.631A.251.251 0 0 1 8.515 17a.245.245 0 0 1 .177.075 10.081 10.081 0 0 0 6.5 2.92 1 1 0 0 0 1.061-1V9.266a.247.247 0 0 1 .073-.176Z"/>
                            </svg>
                        </button>
                        <input type="range" class="kg-video-volume-slider" max="100" value="100">
                    </div>
                </div>
            </div>
            <figcaption><p><span style="white-space: pre-wrap;">Add panels using simple text prompts</span></p></figcaption>
        </figure><h2 id="the-all-new-editor">The All-New Editor</h2><p>Our improved Editor brings back the beloved infinite canvas, now with a cleaner interface that balances accessibility and functionality. Whether you&apos;re a newcomer or a seasoned artist familiar with digital painting software like Photoshop and Clip Studio, you&apos;ll find the interface intuitive. The tool bar on the left and settings on the right offer a familiar yet enhanced workspace.</p><h3 id="key-features">Key Features</h3><ul><li><strong>Toolbar on Left</strong>: Easy access to essential tools.</li></ul><figure class="kg-card kg-video-card kg-width-regular kg-card-hascaption" data-kg-thumbnail="http://insiders.dashtoon.com/content/media/2024/08/toolbar-to-left_thumb.jpg" data-kg-custom-thumbnail>
            <div class="kg-video-container">
                <video src="http://insiders.dashtoon.com/content/media/2024/08/toolbar-to-left.mp4" poster="https://img.spacergif.org/v1/1920x1080/0a/spacer.png" width="1920" height="1080" playsinline preload="metadata" style="background: transparent url(&apos;http://insiders.dashtoon.com/content/media/2024/08/toolbar-to-left_thumb.jpg&apos;) 50% 50% / cover no-repeat;"></video>
                <div class="kg-video-overlay">
                    <button class="kg-video-large-play-icon" aria-label="Play video">
                        <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                            <path d="M23.14 10.608 2.253.164A1.559 1.559 0 0 0 0 1.557v20.887a1.558 1.558 0 0 0 2.253 1.392L23.14 13.393a1.557 1.557 0 0 0 0-2.785Z"/>
                        </svg>
                    </button>
                </div>
                <div class="kg-video-player-container">
                    <div class="kg-video-player">
                        <button class="kg-video-play-icon" aria-label="Play video">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <path d="M23.14 10.608 2.253.164A1.559 1.559 0 0 0 0 1.557v20.887a1.558 1.558 0 0 0 2.253 1.392L23.14 13.393a1.557 1.557 0 0 0 0-2.785Z"/>
                            </svg>
                        </button>
                        <button class="kg-video-pause-icon kg-video-hide" aria-label="Pause video">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <rect x="3" y="1" width="7" height="22" rx="1.5" ry="1.5"/>
                                <rect x="14" y="1" width="7" height="22" rx="1.5" ry="1.5"/>
                            </svg>
                        </button>
                        <span class="kg-video-current-time">0:00</span>
                        <div class="kg-video-time">
                            /<span class="kg-video-duration">0:05</span>
                        </div>
                        <input type="range" class="kg-video-seek-slider" max="100" value="0">
                        <button class="kg-video-playback-rate" aria-label="Adjust playback speed">1&#xD7;</button>
                        <button class="kg-video-unmute-icon" aria-label="Unmute">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <path d="M15.189 2.021a9.728 9.728 0 0 0-7.924 4.85.249.249 0 0 1-.221.133H5.25a3 3 0 0 0-3 3v2a3 3 0 0 0 3 3h1.794a.249.249 0 0 1 .221.133 9.73 9.73 0 0 0 7.924 4.85h.06a1 1 0 0 0 1-1V3.02a1 1 0 0 0-1.06-.998Z"/>
                            </svg>
                        </button>
                        <button class="kg-video-mute-icon kg-video-hide" aria-label="Mute">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <path d="M16.177 4.3a.248.248 0 0 0 .073-.176v-1.1a1 1 0 0 0-1.061-1 9.728 9.728 0 0 0-7.924 4.85.249.249 0 0 1-.221.133H5.25a3 3 0 0 0-3 3v2a3 3 0 0 0 3 3h.114a.251.251 0 0 0 .177-.073ZM23.707 1.706A1 1 0 0 0 22.293.292l-22 22a1 1 0 0 0 0 1.414l.009.009a1 1 0 0 0 1.405-.009l6.63-6.631A.251.251 0 0 1 8.515 17a.245.245 0 0 1 .177.075 10.081 10.081 0 0 0 6.5 2.92 1 1 0 0 0 1.061-1V9.266a.247.247 0 0 1 .073-.176Z"/>
                            </svg>
                        </button>
                        <input type="range" class="kg-video-volume-slider" max="100" value="100">
                    </div>
                </div>
            </div>
            <figcaption><p><span style="white-space: pre-wrap;">A better toolbar positioning</span></p></figcaption>
        </figure><ul><li><strong>Preset Frame Sizes</strong>: Convenient Frame sizes in a variety of aspect ratios to fit your comic&apos;s layout. </li></ul><figure class="kg-card kg-video-card kg-width-regular kg-card-hascaption" data-kg-thumbnail="http://insiders.dashtoon.com/content/media/2024/08/frames_thumb.jpg" data-kg-custom-thumbnail>
            <div class="kg-video-container">
                <video src="http://insiders.dashtoon.com/content/media/2024/08/frames.mp4" poster="https://img.spacergif.org/v1/1920x1044/0a/spacer.png" width="1920" height="1044" playsinline preload="metadata" style="background: transparent url(&apos;http://insiders.dashtoon.com/content/media/2024/08/frames_thumb.jpg&apos;) 50% 50% / cover no-repeat;"></video>
                <div class="kg-video-overlay">
                    <button class="kg-video-large-play-icon" aria-label="Play video">
                        <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                            <path d="M23.14 10.608 2.253.164A1.559 1.559 0 0 0 0 1.557v20.887a1.558 1.558 0 0 0 2.253 1.392L23.14 13.393a1.557 1.557 0 0 0 0-2.785Z"/>
                        </svg>
                    </button>
                </div>
                <div class="kg-video-player-container">
                    <div class="kg-video-player">
                        <button class="kg-video-play-icon" aria-label="Play video">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <path d="M23.14 10.608 2.253.164A1.559 1.559 0 0 0 0 1.557v20.887a1.558 1.558 0 0 0 2.253 1.392L23.14 13.393a1.557 1.557 0 0 0 0-2.785Z"/>
                            </svg>
                        </button>
                        <button class="kg-video-pause-icon kg-video-hide" aria-label="Pause video">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <rect x="3" y="1" width="7" height="22" rx="1.5" ry="1.5"/>
                                <rect x="14" y="1" width="7" height="22" rx="1.5" ry="1.5"/>
                            </svg>
                        </button>
                        <span class="kg-video-current-time">0:00</span>
                        <div class="kg-video-time">
                            /<span class="kg-video-duration">0:22</span>
                        </div>
                        <input type="range" class="kg-video-seek-slider" max="100" value="0">
                        <button class="kg-video-playback-rate" aria-label="Adjust playback speed">1&#xD7;</button>
                        <button class="kg-video-unmute-icon" aria-label="Unmute">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <path d="M15.189 2.021a9.728 9.728 0 0 0-7.924 4.85.249.249 0 0 1-.221.133H5.25a3 3 0 0 0-3 3v2a3 3 0 0 0 3 3h1.794a.249.249 0 0 1 .221.133 9.73 9.73 0 0 0 7.924 4.85h.06a1 1 0 0 0 1-1V3.02a1 1 0 0 0-1.06-.998Z"/>
                            </svg>
                        </button>
                        <button class="kg-video-mute-icon kg-video-hide" aria-label="Mute">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <path d="M16.177 4.3a.248.248 0 0 0 .073-.176v-1.1a1 1 0 0 0-1.061-1 9.728 9.728 0 0 0-7.924 4.85.249.249 0 0 1-.221.133H5.25a3 3 0 0 0-3 3v2a3 3 0 0 0 3 3h.114a.251.251 0 0 0 .177-.073ZM23.707 1.706A1 1 0 0 0 22.293.292l-22 22a1 1 0 0 0 0 1.414l.009.009a1 1 0 0 0 1.405-.009l6.63-6.631A.251.251 0 0 1 8.515 17a.245.245 0 0 1 .177.075 10.081 10.081 0 0 0 6.5 2.92 1 1 0 0 0 1.061-1V9.266a.247.247 0 0 1 .073-.176Z"/>
                            </svg>
                        </button>
                        <input type="range" class="kg-video-volume-slider" max="100" value="100">
                    </div>
                </div>
            </div>
            <figcaption><p><span style="white-space: pre-wrap;">Create Frames in preset sizes</span></p></figcaption>
        </figure><ul><li><strong>Simplified Image Generation Modes</strong>:<ul><li><strong>Text to Image</strong>: Convert text descriptions into images.</li><li><strong>Storyboard to Comic</strong>: Transform storyboards - hand drawn or uploaded - into fully realized comic panels.</li></ul></li><ul><li><strong>Inpainting</strong>: Edit specific areas within an image, now with the option of preserving the original composition.</li></ul><ul><li><strong>Image to Image</strong>: Modify existing images.</li><li><strong>Edge to Comic</strong>: Turn edge-detected outlines into detailed comic art.</li></ul></ul><figure class="kg-card kg-embed-card kg-card-hascaption"><iframe width="200" height="113" src="https://www.youtube.com/embed/UTd_V27kHY0?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen title="Bring your ideas to life with these generation methods in this Free AI assisted comic creator"></iframe><figcaption><p><span style="white-space: pre-wrap;">Use different image generation methods for complete control over your comic</span></p></figcaption></figure><ul><li><strong>New Upscalers</strong>:<ul><li><strong>Creative</strong>: Increase image size while also enhance it with artistic flair.</li><li><strong>Non-Creative</strong>: Increase size while maintaining the original image&#x2019;s integrity.</li></ul></li></ul><figure class="kg-card kg-video-card kg-width-regular kg-card-hascaption" data-kg-thumbnail="http://insiders.dashtoon.com/content/media/2024/08/Creative-Upscaler_thumb.jpg" data-kg-custom-thumbnail>
            <div class="kg-video-container">
                <video src="http://insiders.dashtoon.com/content/media/2024/08/Creative-Upscaler.mp4" poster="https://img.spacergif.org/v1/1920x1080/0a/spacer.png" width="1920" height="1080" playsinline preload="metadata" style="background: transparent url(&apos;http://insiders.dashtoon.com/content/media/2024/08/Creative-Upscaler_thumb.jpg&apos;) 50% 50% / cover no-repeat;"></video>
                <div class="kg-video-overlay">
                    <button class="kg-video-large-play-icon" aria-label="Play video">
                        <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                            <path d="M23.14 10.608 2.253.164A1.559 1.559 0 0 0 0 1.557v20.887a1.558 1.558 0 0 0 2.253 1.392L23.14 13.393a1.557 1.557 0 0 0 0-2.785Z"/>
                        </svg>
                    </button>
                </div>
                <div class="kg-video-player-container">
                    <div class="kg-video-player">
                        <button class="kg-video-play-icon" aria-label="Play video">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <path d="M23.14 10.608 2.253.164A1.559 1.559 0 0 0 0 1.557v20.887a1.558 1.558 0 0 0 2.253 1.392L23.14 13.393a1.557 1.557 0 0 0 0-2.785Z"/>
                            </svg>
                        </button>
                        <button class="kg-video-pause-icon kg-video-hide" aria-label="Pause video">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <rect x="3" y="1" width="7" height="22" rx="1.5" ry="1.5"/>
                                <rect x="14" y="1" width="7" height="22" rx="1.5" ry="1.5"/>
                            </svg>
                        </button>
                        <span class="kg-video-current-time">0:00</span>
                        <div class="kg-video-time">
                            /<span class="kg-video-duration">0:04</span>
                        </div>
                        <input type="range" class="kg-video-seek-slider" max="100" value="0">
                        <button class="kg-video-playback-rate" aria-label="Adjust playback speed">1&#xD7;</button>
                        <button class="kg-video-unmute-icon" aria-label="Unmute">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <path d="M15.189 2.021a9.728 9.728 0 0 0-7.924 4.85.249.249 0 0 1-.221.133H5.25a3 3 0 0 0-3 3v2a3 3 0 0 0 3 3h1.794a.249.249 0 0 1 .221.133 9.73 9.73 0 0 0 7.924 4.85h.06a1 1 0 0 0 1-1V3.02a1 1 0 0 0-1.06-.998Z"/>
                            </svg>
                        </button>
                        <button class="kg-video-mute-icon kg-video-hide" aria-label="Mute">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <path d="M16.177 4.3a.248.248 0 0 0 .073-.176v-1.1a1 1 0 0 0-1.061-1 9.728 9.728 0 0 0-7.924 4.85.249.249 0 0 1-.221.133H5.25a3 3 0 0 0-3 3v2a3 3 0 0 0 3 3h.114a.251.251 0 0 0 .177-.073ZM23.707 1.706A1 1 0 0 0 22.293.292l-22 22a1 1 0 0 0 0 1.414l.009.009a1 1 0 0 0 1.405-.009l6.63-6.631A.251.251 0 0 1 8.515 17a.245.245 0 0 1 .177.075 10.081 10.081 0 0 0 6.5 2.92 1 1 0 0 0 1.061-1V9.266a.247.247 0 0 1 .073-.176Z"/>
                            </svg>
                        </button>
                        <input type="range" class="kg-video-volume-slider" max="100" value="100">
                    </div>
                </div>
            </div>
            <figcaption><p><span style="white-space: pre-wrap;">Upscale your images without losing any details, but rather enhancing them</span></p></figcaption>
        </figure><ul><li><strong>Speech Bubbles</strong>:<ul><li><strong>New Bubble Shapes</strong>: Fresh designs for speech bubbles.</li><li><strong>Flexible Bubble Tails</strong>: New curved tails with easy manipulation for.</li><li><strong>Connecting Bubbles</strong>: Link multiple speech bubbles for cohesive dialogue flow.</li></ul></li></ul><p>With these new features, Dashtoon Studio combines an unprecedented control over AI with an uncompromising storyteller&#x2019;s toolkit to produce comics at one-tenth the time and cost as compared to traditional methods. Our in-house comic production studio creates over 2,000 episodes a month, with one artist producing an entire episode in just one day.</p><h1 id="ai-that-empowers-artists">AI That Empowers Artists</h1><p>In the current landscape, the narrative surrounding generative AI within the artist community is often negative. Many view AI as soulless, a theft of their work, producing low-quality output, and taking artistic control away from the user. This perception, coupled with the idea that &quot;anybody can be an artist without effort,&quot; undermines the years of training and hard work that actual artists invest in their craft. Another common fear is that AI image generation will completely replace comic artists. In our experience at Dashtoon Studio, these fears are unfounded.</p><p>What doesn&apos;t get enough attention&#x2014;perhaps because it&apos;s not sensational enough&#x2014;is how artists can leverage generative AI. By learning to manipulate AI, artists can produce high-quality works at astonishing speeds.</p><p>Most image generation AI tools today are good at creating individual images, similar to stock imagery. While these images may look impressive on their own, maintaining storytelling continuity between them is challenging. Typically, these services use a single text prompt as their primary input. However, generative AI for comics and storytelling requires so much more than just generating standalone images. There&apos;s a vast arsenal of tools available beyond a simple text prompt, enabling richer and more coherent narratives.</p><p>In comic storytelling, where every image is deliberate and conveys something specific, artists need a high degree of control. They need to manage composition tightly, pose characters accurately, and make specific changes like adjusting the color of a character&apos;s clothes. Character and style consistency in AI-generated images is crucial for crafting an engaging narrative. This level of precision cannot be achieved with just prompting; it requires a comprehensive toolkit to harness the AI effectively. That&apos;s why the fundamental philosophy behind Dashtoon Studio is that the AI always works <em>for</em> the artist, rather than <em>against</em> them. Comic artists and storytellers have complete control over how, when, where, and how much the system&apos;s AI affects the images.</p><figure class="kg-card kg-video-card kg-width-regular kg-card-hascaption" data-kg-thumbnail="http://insiders.dashtoon.com/content/media/2024/08/std2comic-1_thumb.jpg" data-kg-custom-thumbnail>
            <div class="kg-video-container">
                <video src="http://insiders.dashtoon.com/content/media/2024/08/std2comic-1.mp4" poster="https://img.spacergif.org/v1/1920x1080/0a/spacer.png" width="1920" height="1080" playsinline preload="metadata" style="background: transparent url(&apos;http://insiders.dashtoon.com/content/media/2024/08/std2comic-1_thumb.jpg&apos;) 50% 50% / cover no-repeat;"></video>
                <div class="kg-video-overlay">
                    <button class="kg-video-large-play-icon" aria-label="Play video">
                        <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                            <path d="M23.14 10.608 2.253.164A1.559 1.559 0 0 0 0 1.557v20.887a1.558 1.558 0 0 0 2.253 1.392L23.14 13.393a1.557 1.557 0 0 0 0-2.785Z"/>
                        </svg>
                    </button>
                </div>
                <div class="kg-video-player-container">
                    <div class="kg-video-player">
                        <button class="kg-video-play-icon" aria-label="Play video">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <path d="M23.14 10.608 2.253.164A1.559 1.559 0 0 0 0 1.557v20.887a1.558 1.558 0 0 0 2.253 1.392L23.14 13.393a1.557 1.557 0 0 0 0-2.785Z"/>
                            </svg>
                        </button>
                        <button class="kg-video-pause-icon kg-video-hide" aria-label="Pause video">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <rect x="3" y="1" width="7" height="22" rx="1.5" ry="1.5"/>
                                <rect x="14" y="1" width="7" height="22" rx="1.5" ry="1.5"/>
                            </svg>
                        </button>
                        <span class="kg-video-current-time">0:00</span>
                        <div class="kg-video-time">
                            /<span class="kg-video-duration">0:09</span>
                        </div>
                        <input type="range" class="kg-video-seek-slider" max="100" value="0">
                        <button class="kg-video-playback-rate" aria-label="Adjust playback speed">1&#xD7;</button>
                        <button class="kg-video-unmute-icon" aria-label="Unmute">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <path d="M15.189 2.021a9.728 9.728 0 0 0-7.924 4.85.249.249 0 0 1-.221.133H5.25a3 3 0 0 0-3 3v2a3 3 0 0 0 3 3h1.794a.249.249 0 0 1 .221.133 9.73 9.73 0 0 0 7.924 4.85h.06a1 1 0 0 0 1-1V3.02a1 1 0 0 0-1.06-.998Z"/>
                            </svg>
                        </button>
                        <button class="kg-video-mute-icon kg-video-hide" aria-label="Mute">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <path d="M16.177 4.3a.248.248 0 0 0 .073-.176v-1.1a1 1 0 0 0-1.061-1 9.728 9.728 0 0 0-7.924 4.85.249.249 0 0 1-.221.133H5.25a3 3 0 0 0-3 3v2a3 3 0 0 0 3 3h.114a.251.251 0 0 0 .177-.073ZM23.707 1.706A1 1 0 0 0 22.293.292l-22 22a1 1 0 0 0 0 1.414l.009.009a1 1 0 0 0 1.405-.009l6.63-6.631A.251.251 0 0 1 8.515 17a.245.245 0 0 1 .177.075 10.081 10.081 0 0 0 6.5 2.92 1 1 0 0 0 1.061-1V9.266a.247.247 0 0 1 .073-.176Z"/>
                            </svg>
                        </button>
                        <input type="range" class="kg-video-volume-slider" max="100" value="100">
                    </div>
                </div>
            </div>
            <figcaption><p><span style="white-space: pre-wrap;">Artists can upload or draw storyboards to guide the AI image generation</span></p></figcaption>
        </figure><p>At Dashtoon Studio, we include several techniques beyond text prompting to achieve this level of control. For instance, artists can draw storyboards to set up their scenes and use them as guidance for AI image generation. This helps control the composition. They can also command the AI to edit only specific parts of an image according to their rough drawing combined with a text prompt. Advanced object selection using segmentation AI allows artists to extract parts of an image as a layer. Additionally, we have included classic non-AI image manipulation features such as blend modes and control over hue, saturation, brightness, and contrast.</p><figure class="kg-card kg-video-card kg-width-regular kg-card-hascaption" data-kg-thumbnail="http://insiders.dashtoon.com/content/media/2024/08/Segment-and-color-change_thumb.jpg" data-kg-custom-thumbnail>
            <div class="kg-video-container">
                <video src="http://insiders.dashtoon.com/content/media/2024/08/Segment-and-color-change.mp4" poster="https://img.spacergif.org/v1/1920x1080/0a/spacer.png" width="1920" height="1080" playsinline preload="metadata" style="background: transparent url(&apos;http://insiders.dashtoon.com/content/media/2024/08/Segment-and-color-change_thumb.jpg&apos;) 50% 50% / cover no-repeat;"></video>
                <div class="kg-video-overlay">
                    <button class="kg-video-large-play-icon" aria-label="Play video">
                        <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                            <path d="M23.14 10.608 2.253.164A1.559 1.559 0 0 0 0 1.557v20.887a1.558 1.558 0 0 0 2.253 1.392L23.14 13.393a1.557 1.557 0 0 0 0-2.785Z"/>
                        </svg>
                    </button>
                </div>
                <div class="kg-video-player-container">
                    <div class="kg-video-player">
                        <button class="kg-video-play-icon" aria-label="Play video">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <path d="M23.14 10.608 2.253.164A1.559 1.559 0 0 0 0 1.557v20.887a1.558 1.558 0 0 0 2.253 1.392L23.14 13.393a1.557 1.557 0 0 0 0-2.785Z"/>
                            </svg>
                        </button>
                        <button class="kg-video-pause-icon kg-video-hide" aria-label="Pause video">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <rect x="3" y="1" width="7" height="22" rx="1.5" ry="1.5"/>
                                <rect x="14" y="1" width="7" height="22" rx="1.5" ry="1.5"/>
                            </svg>
                        </button>
                        <span class="kg-video-current-time">0:00</span>
                        <div class="kg-video-time">
                            /<span class="kg-video-duration">0:06</span>
                        </div>
                        <input type="range" class="kg-video-seek-slider" max="100" value="0">
                        <button class="kg-video-playback-rate" aria-label="Adjust playback speed">1&#xD7;</button>
                        <button class="kg-video-unmute-icon" aria-label="Unmute">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <path d="M15.189 2.021a9.728 9.728 0 0 0-7.924 4.85.249.249 0 0 1-.221.133H5.25a3 3 0 0 0-3 3v2a3 3 0 0 0 3 3h1.794a.249.249 0 0 1 .221.133 9.73 9.73 0 0 0 7.924 4.85h.06a1 1 0 0 0 1-1V3.02a1 1 0 0 0-1.06-.998Z"/>
                            </svg>
                        </button>
                        <button class="kg-video-mute-icon kg-video-hide" aria-label="Mute">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <path d="M16.177 4.3a.248.248 0 0 0 .073-.176v-1.1a1 1 0 0 0-1.061-1 9.728 9.728 0 0 0-7.924 4.85.249.249 0 0 1-.221.133H5.25a3 3 0 0 0-3 3v2a3 3 0 0 0 3 3h.114a.251.251 0 0 0 .177-.073ZM23.707 1.706A1 1 0 0 0 22.293.292l-22 22a1 1 0 0 0 0 1.414l.009.009a1 1 0 0 0 1.405-.009l6.63-6.631A.251.251 0 0 1 8.515 17a.245.245 0 0 1 .177.075 10.081 10.081 0 0 0 6.5 2.92 1 1 0 0 0 1.061-1V9.266a.247.247 0 0 1 .073-.176Z"/>
                            </svg>
                        </button>
                        <input type="range" class="kg-video-volume-slider" max="100" value="100">
                    </div>
                </div>
            </div>
            <figcaption><p><span style="white-space: pre-wrap;">Object detection and color changes</span></p></figcaption>
        </figure><h1 id="we-hire-great-artists">We Hire Great Artists</h1><p>Possibly the greatest proof of this philosophy is the fact that Dashtoon employs a creative staff of over 300 artists, writers and producers at our in-house comic production studio. If AI image generation alone could make anybody a great comic creator, we would hire anybody off the street. But we don&#x2019;t.</p><p>Dashtoon&#x2019;s artist hiring process is rigorous and extremely competitive. Through our evaluation pipeline, we have trained numerous artists across India, but only a select few have ever been hired at Dashtoon Studio.</p><p>We have observed a significant difference in the quality of comics produced by an artist versus a non-artist using Dashtoon Studio. With both personas leveraging AI, the artist-produced comics are of a much higher quality and more enjoyable to read by a large margin. We are building the AI equivalent of a Lamborghini, but only an artist can truly drive it.</p><p>Dashtoon Studio is revolutionizing how comic artists can use generative AI, providing them with the tools and control they need to create compelling and high-quality comics. By empowering artists rather than replacing them, we are ensuring that the art of storytelling through comics continues to thrive in the age of AI.</p><h1 id="coming-soon%E2%80%A6">Coming soon&#x2026;</h1><ul><li>Character creation<ul><li>Create custom characters that the AI will learn and replicate in any pose, with any expression.</li><li>Create characters that work across several styles</li><li>Addition of humanoid and non-human characters.</li></ul></li><li>New art styles<ul><li>A brand new menu of preset art styles that you can use for your comic</li><li>Enabling artists to train our AI on their signature style, giving them an even greater degree of control over their work</li></ul></li><li>Improved AI capabilities<ul><li>Prompt adherence - how well the AI follows the instructions in your text prompt</li><li>Facial expression and eye gaze control</li><li>Image segmentation</li></ul></li><li>Improved Layer management</li></ul><p>Try using the new Dashtoon Studio today!</p><p>If you are a published author, consider applying to our <a href="https://dashtoon.com/authors?ref=insiders.dashtoon.com">Author&#x2019;s Program</a>.</p><p>If you are a comic book artist, or have previously written content for online platforms, please apply to our <a href="https://dashtoon.com/creators?ref=insiders.dashtoon.com" rel="noreferrer">Creator Program</a>.</p>]]></content:encoded></item><item><title><![CDATA[Introducing DashAnime XL 1.0]]></title><description><![CDATA[<p>Dashtoon Studio is an innovative AI-powered platform designed to empower creators in the art of comic crafting. The immense popularity and profound cultural influence of anime have sparked a fervent demand from our user base for this distinctive style. Recognizing this enthusiasm, we embarked on an ambitious journey to develop</p>]]></description><link>http://insiders.dashtoon.com/dashanimexl/</link><guid isPermaLink="false">66c59923f3de2e00650bcf39</guid><category><![CDATA[research]]></category><dc:creator><![CDATA[Ayushman Buragohain]]></dc:creator><pubDate>Wed, 21 Aug 2024 13:46:45 GMT</pubDate><media:content url="http://insiders.dashtoon.com/content/images/2024/08/ComfyUI_temp_vjlhc_00023_.png" medium="image"/><content:encoded><![CDATA[<img src="http://insiders.dashtoon.com/content/images/2024/08/ComfyUI_temp_vjlhc_00023_.png" alt="Introducing DashAnime XL 1.0"><p>Dashtoon Studio is an innovative AI-powered platform designed to empower creators in the art of comic crafting. The immense popularity and profound cultural influence of anime have sparked a fervent demand from our user base for this distinctive style. Recognizing this enthusiasm, we embarked on an ambitious journey to develop a state-of-the-art anime image generation model specifically tailored for storytelling. Our goal was to create a tool that not only meets the high expectations of anime enthusiasts but also enhances the creative process for comic artists working in this beloved medium.</p>
<h1 id="the-art-of-anime-dashtoons-need-for-a-dedicated-model">The Art of Anime: Dashtoon&apos;s Need for a Dedicated Model</h1>
<p>Existing anime models primarily rely on <a href="https://danbooru.donmai.us/tags?commit=Search&amp;search%5Bcategory%5D=1&amp;search%5Bhas_artist%5D=yes&amp;search%5Bhide_empty%5D=yes&amp;search%5Bname_or_alias_matches%5D=blue+archive&amp;search%5Border%5D=date&amp;ref=insiders.dashtoon.com">danbooru</a> tags, which can make it challenging for a novice user to control these models effectively. Additionally, these models often exhibit low prompt adherence. With these challenges in mind, we set out to create an anime model that responds accurately to natural language prompts. To achieve this, we used SDXL as our base architecture.</p>
<h1 id="dataset-curation-captioning">Dataset Curation &amp; Captioning</h1>
<p>We trained our model using a carefully curated dataset of approximately 7 million openly avaialble anime-styled images. In projects like this, a common technique is to recaption all images to eliminate any faulty text conditions in the dataset. To achieve this, we employed our in-house Vision Large Language Model (VLLM) for captioning, which significantly enhances the model&apos;s ability to follow instructions accurately. This step was crucial to ensure the model&apos;s effectiveness with natural language, as the existing captions for anime-style images are predominantly in the Danbooru style, which we aimed to avoid.<br>
Danbooru-style prompting involves guiding the model using tags found on the <a href="https://danbooru.donmai.us/tags?commit=Search&amp;search%5Bcategory%5D=1&amp;search%5Bhas_artist%5D=yes&amp;search%5Bhide_empty%5D=yes&amp;search%5Bname_or_alias_matches%5D=blue+archive&amp;search%5Border%5D=date&amp;ref=insiders.dashtoon.com">danbooru</a>. This approach can be particularly challenging for novices, as danbooru contains a vast number of tags. Achieving the desired generations often requires experimenting with multiple tags and demands extensive knowledge of the available tags.</p>
<h2 id="balancing-the-dataset-%E2%80%A6">Balancing the dataset &#x2026;</h2>
<p>The anime dataset we curated (also any anime based dataset in general) exhibits a significant long-tail distribution phenomenon, where some less common concepts have fewer samples due to their niche nature or recent introduction. While many of these concepts are quite interesting, direct training often makes it difficult for the model to learn them effectively.</p>
<p>Below are some examples illustrating how this long-tail distribution impacts the final image generation. Even if we don&apos;t explicitly tag an image to include a girl, the model might inadvertently generate one, which is an outcome we want to avoid. The images shown below are generated using an open-source anime model, we also add images generated by DashAnimeXL for comparison.</p>
<table class="custom-table">
  <thead>
    <tr>
      <th class="prompt-column">Prompt</th>
      <th>Generated Image</th>
      <th>DashAnimeXL</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td class="prompt-column">a wall</td>
      <td>
        <div class="image-container">
          <img class="custom-image" src="https://content.dashtoon.ai/assets/DashAnimeXL_Blog/33205494.png" alt="Introducing DashAnime XL 1.0">
        </div>
      </td>
      <td>
        <div class="image-container">
          <img class="custom-image" src="https://content.dashtoon.ai/assets/DashAnimeXL_Blog/33207029.png" alt="Introducing DashAnime XL 1.0">
        </div>
      </td>
    </tr>
    <tr>
      <td class="prompt-column">abstract shapes and colours</td>
      <td>
        <div class="image-container">
          <img class="custom-image" src="https://content.dashtoon.ai/assets/DashAnimeXL_Blog/image.png" alt="Introducing DashAnime XL 1.0">
        </div>
      </td>
      <td>
        <div class="image-container">
          <img class="custom-image" src="https://content.dashtoon.ai/assets/DashAnimeXL_Blog/ComfyUI_temp_zvkev_00177_.png" alt="Introducing DashAnime XL 1.0">
        </div>
      </td>
    </tr>
    <tr>
      <td class="prompt-column">a horse</td>
      <td>
        <div class="image-container">
          <img class="custom-image" src="https://content.dashtoon.ai/assets/DashAnimeXL_Blog/33205506.png" alt="Introducing DashAnime XL 1.0">
        </div>
      </td>
      <td>
        <div class="image-container">
          <img class="custom-image" src="https://content.dashtoon.ai/assets/DashAnimeXL_Blog/ComfyUI_temp_zvkev_00096_.png" alt="Introducing DashAnime XL 1.0">
        </div>
      </td>
    </tr>
    <tr>
      <td class="prompt-column">a book</td>
      <td>
        <div class="image-container">
          <img class="custom-image" src="https://content.dashtoon.ai/assets/DashAnimeXL_Blog/33205504.png" alt="Introducing DashAnime XL 1.0">
        </div>
      </td>
      <td>
        <div class="image-container">
          <img class="custom-image" src="https://content.dashtoon.ai/assets/DashAnimeXL_Blog/ComfyUI_temp_zvkev_00105_.png" alt="Introducing DashAnime XL 1.0">
        </div>
      </td>
    </tr>
    <tr>
      <td class="prompt-column">a tree</td>
      <td>
        <div class="image-container">
          <img class="custom-image" src="https://content.dashtoon.ai/assets/DashAnimeXL_Blog/33205492.png" alt="Introducing DashAnime XL 1.0">
        </div>
      </td>
      <td>
        <div class="image-container">
          <img class="custom-image" src="https://content.dashtoon.ai/assets/DashAnimeXL_Blog/ComfyUI_temp_zvkev_00128_.png" alt="Introducing DashAnime XL 1.0">
        </div>
      </td>
    </tr>
    <tr>
      <td class="prompt-column">A vibrant street mural covering an entire wall</td>
      <td>
        <div class="image-container">
          <img class="custom-image" src="https://content.dashtoon.ai/assets/DashAnimeXL_Blog/ac613ec9-dadb-493c-9228-3843e299ca59.png" alt="Introducing DashAnime XL 1.0">
        </div>
      </td>
      <td>
        <div class="image-container">
          <img class="custom-image" src="https://content.dashtoon.ai/assets/DashAnimeXL_Blog/ComfyUI_temp_zvkev_00195_.png" alt="Introducing DashAnime XL 1.0">
        </div>
      </td>
    </tr>
  </tbody>
</table>
<style>
  .custom-table {
    width: 100%;
    border-collapse: collapse;
    table-layout: fixed;
  }

  .custom-table th, .custom-table td {
    padding: 8px;
    text-align: left;
    border-bottom: 1px solid #ddd;
    vertical-align: top;
  }

  .prompt-column {
    width: 15%;
    word-wrap: break-word;
    font-size: 14px;
  }

  .image-container {
    position: relative;
    overflow: hidden;
    border-radius: 10px;
    height: 150px; /* Set a fixed height for images */
    display: flex;
    justify-content: center;
    align-items: center;
    aspect-ratio: 1/1;
  }

  .custom-image {
    max-width: 100%;
    max-height: 100%;
    display: block;
    border-radius: 10px;
    transition: transform .7s;
  }

  .custom-image:hover {
    transform: scale(1.05);
  }
</style>
<p>We implemented specific balancing strategies to smooth out the original data distribution:</p>
<ol>
<li>We partitioned the dataset into specific tag groups based on our internal testing and analysis</li>
<li>We then sampled tags within the selected categories separately. To balance the dataset, we reduced the influence of tags from high-frequency categories and increased the sampling frequency of tags from low-frequency categories. Using these adjusted sampling frequencies, we reconstructed the dataset, resulting in a smoother distribution across the categories.</li>
<li>Finally, all the images were captioned in natural language using our in-house captioning tool.</li>
</ol>
<p>We primarily categorised the entire dataset into one of the buckets (the actual list of buckets is exhaustive and here we provide only the most important ones):</p>
<ol>
<li><strong>1 girl with emotion</strong>: Includes images where a girl showing any emotion is the central figure.</li>
<li><strong>1 girl only</strong>: Includes images where a girl is the central figure</li>
<li><strong>1 boy with emotion</strong>: Includes images where a boy showing any emotion is the central figure.</li>
<li><strong>1 boy only</strong>:Includes images where a boy is the central figure</li>
<li><strong>multiple girls</strong>: Includes images with multiple girl characters</li>
<li><strong>multiple boys</strong>: Includes images with multiple boy characters</li>
<li><strong>animal</strong>: Includes images where an animal is the central figure</li>
<li><strong>object</strong>: Includes images where an object is the central figure</li>
<li><strong>is_no_human</strong>: Includes images with no human subjects, focusing on scenery or backgrounds.</li>
</ol>
<p>After categorising the data, we ensured that each image was assigned to exactly one bucket. This step was crucial to avoid inadvertently skewing the weight of any particular category. Once the images were correctly categorised, we adjusted the weightage of each bucket. Specifically, we increased the weight of underrepresented buckets and decreased the weight of overrepresented ones, aiming to balance the distribution and bring each bucket&apos;s weight closer to the median of the overall dataset.</p>
<p>The pseudo-code looks something like this :</p>
<pre style="background-color: #f5f5f5; padding: 10px; border-radius: 5px;"><code># Step 1: Analyze and categorize tags
for each tag in Danbooru dataset:
    assign tag to appropriate category based on its characteristics

# Step 2: Separate and sample tags within each category
for each category in dataset:
    calculate frequency of each tag in the category
    if category is high-frequency:
        reduce sampling frequency
    else if category is low-frequency:
        increase sampling frequency

# Step 3: Reconstruct dataset with balanced sampling
balanced_dataset = []
for each category in dataset:
    sampled_tags = sample_tags(category, adjusted_sampling_frequency)
    add sampled_tags to balanced_dataset

# Step 4: Categorize images into buckets
for each image in balanced_dataset:
    assign image to one of the buckets:
        - 1 girl with emotion
        - 1 girl only
        - 1 boy with emotion
        - 1 boy only
        - multiple girls
        - multiple boys
        - animal
        - object
        - is_no_human

# Step 5: Ensure each image is in exactly one bucket
for each image in balanced_dataset:
    if image is assigned to multiple buckets:
        remove from all but one bucket

# Step 6: Adjust bucket weights to balance distribution
for each bucket in balanced_dataset:
    if bucket is overrepresented:
        decrease weight
    else if bucket is underrepresented:
        increase weight

# Step 7: Final dataset preparation
final_dataset = apply_weighting(balanced_dataset)
caption_images(final_dataset, captioning_tool)
</code>
</pre>
<h3 id="from-long-captions-to-short-captions-%E2%80%A6">From long captions to short captions &#x2026;</h3>
<p>In our initial experiments, we began with very long and descriptive prompts, which significantly enhanced the model&apos;s ability to follow instructions. However, we soon observed a decline in performance when using shorter prompts. This approach also introduced style inconsistencies, as some image captions included style references while others did not. This inconsistency occasionally led the model to generate realistic images when we actually desired a different style. Style inconsistency is a significant concern for us because we are engaged in storytelling through comics. Visual continuity needs to be maintained from panel to panel and across hundreds of chapters. Maintaining a consistent visual style is crucial for ensuring that our readers remain immersed in the story without distractions.</p>
<p>Upon further investigation, we traced this issue back to inherent biases in the SDXL and inconsistent captioning of training dataset.</p>
<p>Below, we present some examples of model generations that exhibit style inconsistencies. In these cases, we intended to produce images in an anime style, but instead received realistic images.</p>
<div class="row-grid">
  <div class="row-item">
    <img class="row-image" src="https://content.dashtoon.ai/assets/DashAnimeXL_Blog/ComfyUI_temp_zvkev_00365_.png" alt="Introducing DashAnime XL 1.0">
  </div>
  <div class="row-item">
    <img class="row-image" src="https://content.dashtoon.ai/assets/DashAnimeXL_Blog/ComfyUI_temp_zvkev_00447_.png" alt="Introducing DashAnime XL 1.0">
  </div>
  <div class="row-item">
    <img class="row-image" src="https://content.dashtoon.ai/assets/DashAnimeXL_Blog/ComfyUI_temp_zvkev_00455_.png" alt="Introducing DashAnime XL 1.0">
  </div>
  <div class="row-item">
    <img class="row-image" src="https://content.dashtoon.ai/assets/DashAnimeXL_Blog/ComfyUI_temp_zvkev_00458_.png" alt="Introducing DashAnime XL 1.0">
  </div>
</div>
<style>
  .row-grid {
    display: flex;
    justify-content: space-between;
    gap: 15px;
  }

  .row-item {
    flex: 1;
  }

  .row-image {
    width: 100%;
    height: auto;
    display: block;
    border-radius: 10px;
    transition: transform .7s;
  }

  .row-image:hover {
    transform: scale(1.05);
  }
</style>
<p>Below we present some examples that highlight labelling inconsistencies within the dataset. Notice how certain samples explicitly include the &quot;anime&quot; style in the caption, while others do not. This inconsistency leads the models to develop their own biases, resulting in unpredictable behaviour during inference. Specifically, we observed that the output image styles became inconsistent&#x2014;sometimes appearing in an anime style and other times in the default SDXL realistic style as shown above. For instance, some captions include phrases like <strong>animated characters</strong> and <strong>A stylized, illustrated.</strong> Additionally, in our full dataset, we discovered that many images contain keywords such as <strong>A digital illustration</strong>, <strong>A cartoon-style illustration</strong>, and <strong>A stylized, anime-style character</strong>.</p>
<table style="width: 100%; border-collapse: collapse; white-space: wrap !important;">
  <thead>
    <tr>
      <th style="width: 30%; text-align: center;">Image</th>
      <th style="width: 70%; text-align: left;">Caption</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td style="text-align: center;">
        <img class="custom-image" src="https://content.dashtoon.ai/assets/DashAnimeXL_Blog/image%201.png" alt="Introducing DashAnime XL 1.0" style="max-width: 100%; height: auto;">
      </td>
      <td style="width: 50%; word-wrap: break-word;">
        Two animated characters, one with brown hair and one with green hair, both wearing black and red outfits with accessories. The character on the left holds a vintage-style camera, while the character on the right holds a smartphone. They stand in front of a plain background with a red object visible to the right. The characters have a friendly demeanor, with the brown-haired character smiling and the green-haired character looking at the camera with a slight smile.
      </td>
    </tr>
    <tr>
      <td style="text-align: center;">
        <img class="custom-image" src="https://content.dashtoon.ai/assets/DashAnimeXL_Blog/image%202.png" alt="Introducing DashAnime XL 1.0" style="max-width: 100%; height: auto;">
      </td>
      <td style="width: 50%; word-wrap: break-word;">
        A girl character with long, light-colored hair, large blue eyes, and a black and white outfit with a bow tie. She is smiling and appears to be in a cheerful mood. The character is positioned in the foreground against a white background with scattered orange and pink hues.
      </td>
    </tr>
    <tr>
      <td style="text-align: center;">
        <img class="custom-image" src="https://content.dashtoon.ai/assets/DashAnimeXL_Blog/image%203.png" alt="Introducing DashAnime XL 1.0" style="max-width: 100%; height: auto;">
      </td>
      <td style="width: 50%; word-wrap: break-word;">
        An illustration of a man with spiky, dark blue hair and striking red eyes. He is wearing a black and white checkered shirt and a black choker. His right hand is raised to his chin, with his index finger resting on his cheek, while his thumb is tucked under his chin. He is holding a white electric guitar with a brown pickguard and six strings. The background is minimalistic, featuring a white wall with a red and white sign partially visible. The style of the image is cartoonish, with a focus on the character&apos;s expressive features and the guitar, suggesting a theme of music and youth culture.
      </td>
    </tr>
    <tr>
      <td style="text-align: center;">
        <img class="custom-image" src="https://content.dashtoon.ai/assets/DashAnimeXL_Blog/image%204.png" alt="Introducing DashAnime XL 1.0" style="max-width: 100%; height: auto;">
      </td>
      <td style="width: 50%; word-wrap: break-word;">
        A girl riding a tricycle. She is depicted from the back, wearing a black and white outfit with a hoodie, leggings, and sneakers. Her hair is styled in a bun with two pigtails on top. The background is a solid red color. The girl is positioned on the right side of the image, with her left foot on the front wheel and her right foot on the back wheel.
      </td>
    </tr>
    <tr>
      <td style="text-align: center;">
        <img class="custom-image" src="https://content.dashtoon.ai/assets/DashAnimeXL_Blog/image%205.png" alt="Introducing DashAnime XL 1.0" style="max-width: 100%; height: auto;">
      </td>
      <td style="width: 50%; word-wrap: break-word;">
        A stylized, illustrated character with angelic features, standing centrally with arms outstretched. The character has large, feathered wings with a gradient of blue and white, and is adorned with a golden, ornate armor-like outfit with circular designs on the chest and arms. The character&apos;s hair is short and dark, and they have a serene expression. Behind the character is a symmetrical, stained-glass window-like background with intricate patterns and motifs, including a central circular emblem with a face, surrounded by four smaller circles with various symbols. The background is a blend of pastel colors, predominantly in shades of blue, white, and peach. There is no text present in the image. The lighting appears to be emanating from the central emblem, casting a soft glow on the character and the surrounding patterns. The style of the image is a digital illustration with a fantasy or mythical theme. The character appears to be a girl, and the overall mood conveyed is one of tranquility and ethereal beauty.
      </td>
    </tr>
    <tr>
      <td style="text-align: center;">
        <img class="custom-image" src="https://content.dashtoon.ai/assets/DashAnimeXL_Blog/image%206.png" alt="Introducing DashAnime XL 1.0" style="max-width: 100%; height: auto;">
      </td>
      <td style="width: 50%; word-wrap: break-word;">
        A male character with spiky blond hair and blue eyes, wearing a green military-style jacket with gold buttons and a white shirt. He holds a sword with a golden hilt and a silver blade, examining it closely. The character&apos;s expression is focused and serious.
      </td>
    </tr>
  </tbody>
</table>
<style>
  .custom-image {
    max-width: 100%;
    height: auto;
    display: block;
    transition: transform 0.7s;
    border-radius: 10px;
  }

  .custom-image:hover {
    transform: scale(1.05);
  }
</style>
<p>To address this, we developed an in-house LLM that compresses these ultra-descriptive captions into short, concise ones, deliberately omitting any style references. In later experiments, we discovered that adding &quot;anime illustration&quot; as a prefix significantly improved the quality of the generated images. As a result, we applied this prefix to all captions in our training dataset.</p>
<table style="width: 100%; border-collapse: collapse; white-space: wrap !important;">
  <thead>
    <tr>
      <th style="width: 30%; text-align: center;">Image</th>
      <th style="width: 70%; text-align: left;">Caption</th>
    </tr>
  </thead>
  <tbody>
      <tr><td style="text-align: center;">
        <img class="custom-image" src="https://content.dashtoon.ai/assets/DashAnimeXL_Blog/0001.png" alt="Introducing DashAnime XL 1.0" style="max-width: 100%; height: auto;">
      </td>
      <td style="width: 50%; word-wrap: break-word;">
        <p><strong>Long Caption:</strong> An animated character with green hair and green eyes, wearing a blue and white outfit with a high ponytail. she is holding a sword with both hands, and the sword is emitting a bright light, suggesting it might be a magical or special weapon. the character is looking directly at the viewer with a focused expression. she is wearing fingerless gloves and has a rope belt around her waist. the background is a warm, brownish color, which could indicate an indoor setting or a warm environment. the character&apos;s attire and the style of the image suggest it is related to the fire emblem series, specifically referencing the game fire emblem: the blazing blade and the character lyn from that game. the image is rich in detail and conveys a sense of action and readiness.</p>
        <hr>
        <p><strong>Short Caption:</strong> A girl with long, dark green hair and striking green eyes. she is adorned in a blue dress with intricate designs and accessories, including earrings and a belt with a pouch. She is holding a sword, which emanates a glowing blue light, suggesting it might be enchanted or imbued with some magical power.</p>
      </td>
    </tr>
    <tr>
      <td style="text-align: center;">
        <img class="custom-image" src="https://content.dashtoon.ai/assets/DashAnimeXL_Blog/0002.png" alt="Introducing DashAnime XL 1.0" style="max-width: 100%; height: auto;">
      </td>
      <td style="width: 50%; word-wrap: break-word;">
        <p><strong>Long Caption:</strong> An animated character from the &quot;the idolmaster&quot; franchise, specifically from <br> the &quot;shiny colors&quot; series. the character is labeled as chiyoko sonoda, indicating her name within the series. the character is drawn in a style typical of anime and manga, with large expressive eyes and stylized features. she has brown hair styled in a double bun, with a black choker around her neck. she is wearing a light blue shirt with the word &quot;shiny&quot; written on it, paired with a pink skirt that has a high waist. the skirt has suspenders, and she is wearing a black choker with a small charm. the character is standing with her hands on her hips, and she is looking to the side with a slight blush on her cheeks. her pose and expression suggest a confident and playful demeanor. the background is simple and does not distract from the character, focusing the viewer&apos;s attention on her. the character&apos;s appearance and pose are notable, with her hair style, the color of her clothing, and the accessories she is wearing all contributing to her overall look. the image is cropped at the waist, showing a &quot;cowboy shot&quot; view of the character. the overall impression is that of a cute and fashionable girl, likely designed to appeal to fans of the &quot;idolmaster&quot; series.</p>
        <hr>
        <p><strong>Short Caption:</strong> A girl character with long, vibrant blue hair and striking blue eyes. she&apos;s adorned in a black dress with intricate lace and frill details, complemented by black gloves and knee-high boots. the character holds a black umbrella with a decorative ribbon, and her gaze is directed towards the viewer. the background is a muted grey and the character has a few tattoos on her arm.</p>
      </td>
    </tr>
  </tbody>
</table>
<style>
  .custom-image {
    max-width: 100%;
    height: auto;
    display: block;
    transition: transform 0.7s;
    border-radius: 10px;
  }

  .custom-image:hover {
    transform: scale(1.05);
  }
</style>
<h2 id="adding-special-tags-for-improved-control-%E2%80%A6">Adding special tags for improved control &#x2026;</h2>
<p>In addition to recaptioning the entire dataset, we retained a select few tags that we identified as crucial for enhancing the model&apos;s learning capabilities.</p>
<p>We carefully curated a list of special tags from the original Danbooru prompts, recognizing that certain tags, such as <strong>lowres</strong>, <strong>highres</strong>, and <strong>absurdres</strong>, were essential for guiding the model toward better generations. We also preserved the character name and series name tags from the original danbooru prompts.</p>
<p>Furthermore, we introduced special tags to each image in the dataset to provide more control over the model&apos;s output. These tags serve specific purposes:</p>
<ol>
<li>nsfw rating tags: safe, sensitive, general, explicit, nsfw</li>
<li>aesthetic tags: very aesthetic, aesthetic, displeasing, very displeasing</li>
<li>quality tags: masterpiece quality, best quality, high quality, medium quality, normal quality, low quality, worst quality</li>
</ol>
<h2 id="assembling-the-final-prompts">Assembling the final prompts</h2>
<p>Using the above guidelines, we arrive at the final assembled prompt structure:</p>
<pre style="white-space: pre-wrap; word-wrap: break-word; overflow-x: auto; background-color: #f5f5f5; padding: 10px; border-radius: 5px;"><code>anime illustration, [[super descriptive prompt OR condensed prompt]]. [[quality tags]], [[aesthetic tags]], [[nsfw rating tags]]</code>
</pre>
<p>This final prompt structure ensures that each generated image aligns with the desired style, quality, and content, providing a comprehensive framework for creating high-quality anime illustrations.</p>
<p>Our model leverages special tags to guide the output towards specific qualities, ratings, and aesthetics. While the model can generate images without these tags, including them often results in superior outcomes</p>
<p>Below we showcase some examples from our training dataset after assembling the final prompt.</p>
<div class="masonry-grid">
  <div class="masonry-item">
    <img class="custom-image" src="https://content.dashtoon.ai/assets/DashAnimeXL_Blog/0a8c907f6e974ec29bdc8d0a80248a22.webp" alt="Introducing DashAnime XL 1.0">
    <div class="caption">anime illustration, a boy with spiky hair, one purple eye, and bandaged arms crouches in a ready pose, his face set in a serious expression. Low quality, very displeasing, safe, monochrome.</div>
  </div>
  <div class="masonry-item">
    <img class="custom-image" src="https://content.dashtoon.ai/assets/DashAnimeXL_Blog/00aba7a45cef4a91a3b817189c8c6575.webp" alt="Introducing DashAnime XL 1.0">
    <div class="caption">anime illustration, a boy with dark hair and a white headband with a black strap looks to the side with a surprised or intense expression. He wears a plaid shirt. A girl with blonde hair and a blue beret smiles with one eye closed, wearing a purple outfit with a white collar. Low quality, very displeasing, safe.</div>
  </div>
  <div class="masonry-item">
    <img class="custom-image" src="https://content.dashtoon.ai/assets/DashAnimeXL_Blog/0b3e8ef794594721825662b0343ff29e.webp" alt="Introducing DashAnime XL 1.0">
    <div class="caption">anime illustration, a boy with reddish-brown hair and blue eyes wears a light blue hoodie with a black strap over his shoulder, holding black earphones to his ear in a casual, relaxed pose with a slight smile and direct gaze. best quality, aesthetic, safe.</div>
  </div>
</div>
<style>
  .masonry-grid {
    column-count: 2;
    column-gap: 15px;
  }

  .masonry-item {
    margin-bottom: 15px;
    break-inside: avoid;
  }

  .custom-image {
    width: 100%;
    height: auto;
    display: block;
    border-radius: 10px;
    transition: transform .7s;
  }

  .custom-image:hover {
    transform: scale(1.05);
  }

  .caption {
    margin-top: 10px;
    font-size: 14px;
    line-height: 1.4;
    color: #555;
    text-align: center;
  }
</style>
<h1 id="training-details">Training details</h1>
<p>This model architecture is built on the SDXL model. After performing rule-based cleaning and balancing on the dataset (as discussed above), we fine-tuned the model over a total of 25 epochs following this schedule:</p>
<ol>
<li><strong>Epochs 1-10:</strong>
<ol>
<li>We fine-tuned both the Unet and CLIP Text Encoders to help the model learn anime concepts.</li>
<li>During this stage, we alternated between using super descriptive captions and short captions in the training process.</li>
<li>While this approach improved the model&apos;s understanding of anime concepts, it also introduced the style inconsistency issue described earlier. We decided to retain the text encoders and the unet from this stage, add &quot;anime illustration&quot; to all the training data, and remove all style references from the images in stage 2.</li>
<li>The sample size during this phase was approximately ~5M images.</li>
</ol>
</li>
<li><strong>Epochs 10-25:</strong>
<ol>
<li>We shifted focus to fine-tuning only the Unet from stage 1, aiming to refine the model&apos;s art style and improve the rendering of hands and anatomy.</li>
<li>In this stage, we trained exclusively on short captions.</li>
<li>The dataset was further filtered down to ~1.5M images.</li>
</ol>
</li>
</ol>
<p>Both stages of training employed aspect ratio bucketing to prevent the degradation of image quality in the training samples.</p>
<p>Throughout both stages, we used the Adafactor optimizer, which we found to offer the best memory/performance ratio. Initially, we experimented with <strong>kohya&apos;s sd-scripts</strong> for the training but soon developed our own tooling around <strong>diffusers</strong>, <strong>mosaicml-streaming</strong>, and <strong>pytorch-lightning</strong> to handle the massive data loads and scale efficiently across multiple nodes.</p>
<p><strong>mosaicml-streaming</strong> in particular played a crucial role in meeting our dataset requirements by enabling seamless scaling across multiple nodes. It provided an optimal balance, allowing us to stream large amounts of data in and out of multiple nodes while leveraging local NVMe space as a staging ground.</p>
<h1 id="evaluation">Evaluation</h1>
<p>We experimented with nearly all of the open-source benchmarks for diffusion models, including <a href="https://github.com/TencentQQGYLab/ELLA/tree/main?ref=insiders.dashtoon.com">DPG</a> and <a href="https://github.com/djghosh13/geneval?ref=insiders.dashtoon.com">Geneval</a>. However, we quickly realised that these existing benchmarks don&apos;t account for the specific factors that are crucial in show and comic creation. In comic creation, aspects such as character consistency, multi-character interaction, scene interaction, and overall consistency are more important.</p>
<p>Drawing insights from the existing benchmarks, particularly the excellent DPG benchmark developed by the ELLA team, we developed our own benchmarks tailored specifically for show and comic creation. A more detailed blog on this topic will be released in the future. With these considerations in mind, we present our benchmark scores.</p>
<p><img src="https://content.dashtoon.ai/assets/DashAnimeXL_Blog/comp_graph.png" alt="Introducing DashAnime XL 1.0" loading="lazy"></p>
<p>From our internal testing metric, we concluded that our model demonstrates superior prompt adherence compared to other anime models available in the market. One of the key advantages of our model is its ease of use&#x2014;there&apos;s no need to rely on danbooru tags to generate high-quality images. Instead, this can be easily achieved through natural language prompting.</p>
<blockquote>
<p><em>We plan to conduct a more comprehensive study in the future to further validate and refine our model&apos;s capabilities. While our model performs well overall, we aim to further enhance its capabilities by incorporating more detailed character and style information. Currently, the model struggles to consistently generate styles beyond the base anime style. We plan to address this in future iterations, ensuring more consistent and diverse stylistic outputs.</em></p>
</blockquote>
<h1 id="results-showcase">Results Showcase</h1>
<div class="masonry-grid">
  <div class="masonry-item">
    <img class="custom-image" src="https://content.dashtoon.ai/assets/DashAnimeXL_Blog/367983.png" alt="Introducing DashAnime XL 1.0">
  </div>
  <div class="masonry-item">
    <img class="custom-image" src="https://content.dashtoon.ai/assets/DashAnimeXL_Blog/ComfyUI_temp_zvkev_00024_.png" alt="Introducing DashAnime XL 1.0">
  </div>
  <div class="masonry-item">
    <img class="custom-image" src="https://content.dashtoon.ai/assets/DashAnimeXL_Blog/ComfyUI_temp_zvkev_00027_.png" alt="Introducing DashAnime XL 1.0">
  </div>
  <div class="masonry-item">
    <img class="custom-image" src="https://content.dashtoon.ai/assets/DashAnimeXL_Blog/ComfyUI_temp_zvkev_00044_.png" alt="Introducing DashAnime XL 1.0">
  </div>
  <div class="masonry-item">
    <img class="custom-image" src="https://content.dashtoon.ai/assets/DashAnimeXL_Blog/ComfyUI_temp_zvkev_00055_.png" alt="Introducing DashAnime XL 1.0">
  </div>
  <div class="masonry-item">
    <img class="custom-image" src="https://content.dashtoon.ai/assets/DashAnimeXL_Blog/ComfyUI_temp_zvkev_00071_.png" alt="Introducing DashAnime XL 1.0">
  </div>
  <div class="masonry-item">
    <img class="custom-image" src="https://content.dashtoon.ai/assets/DashAnimeXL_Blog/ComfyUI_temp_zvkev_00087_.png" alt="Introducing DashAnime XL 1.0">
  </div>
  <div class="masonry-item">
    <img class="custom-image" src="https://content.dashtoon.ai/assets/DashAnimeXL_Blog/ComfyUI_temp_zvkev_00099_.png" alt="Introducing DashAnime XL 1.0">
  </div>
  <div class="masonry-item">
    <img class="custom-image" src="https://content.dashtoon.ai/assets/DashAnimeXL_Blog/ComfyUI_temp_zvkev_00115_.png" alt="Introducing DashAnime XL 1.0">
  </div>
  <div class="masonry-item">
    <img class="custom-image" src="https://content.dashtoon.ai/assets/DashAnimeXL_Blog/ComfyUI_temp_zvkev_00121_.png" alt="Introducing DashAnime XL 1.0">
  </div>
  <div class="masonry-item">
    <img class="custom-image" src="https://content.dashtoon.ai/assets/DashAnimeXL_Blog/ComfyUI_temp_zvkev_00129_.png" alt="Introducing DashAnime XL 1.0">
  </div>
  <div class="masonry-item">
    <img class="custom-image" src="https://content.dashtoon.ai/assets/DashAnimeXL_Blog/ComfyUI_temp_zvkev_00137_.png" alt="Introducing DashAnime XL 1.0">
  </div>
  <div class="masonry-item">
    <img class="custom-image" src="https://content.dashtoon.ai/assets/DashAnimeXL_Blog/ComfyUI_temp_zvkev_00149_.png" alt="Introducing DashAnime XL 1.0">
  </div>
  <div class="masonry-item">
    <img class="custom-image" src="https://content.dashtoon.ai/assets/DashAnimeXL_Blog/ComfyUI_temp_zvkev_00153_.png" alt="Introducing DashAnime XL 1.0">
  </div>
  <div class="masonry-item">
    <img class="custom-image" src="https://content.dashtoon.ai/assets/DashAnimeXL_Blog/ComfyUI_temp_zvkev_00192_.png" alt="Introducing DashAnime XL 1.0">
  </div>
  <div class="masonry-item">
    <img class="custom-image" src="https://content.dashtoon.ai/assets/DashAnimeXL_Blog/ComfyUI_temp_zvkev_00259_.png" alt="Introducing DashAnime XL 1.0">
  </div>
  <div class="masonry-item">
    <img class="custom-image" src="https://content.dashtoon.ai/assets/DashAnimeXL_Blog/ComfyUI_temp_zvkev_00267_.png" alt="Introducing DashAnime XL 1.0">
  </div>
  <div class="masonry-item">
    <img class="custom-image" src="https://content.dashtoon.ai/assets/DashAnimeXL_Blog/ComfyUI_temp_zvkev_00296_.png" alt="Introducing DashAnime XL 1.0">
  </div>
  <div class="masonry-item">
    <img class="custom-image" src="https://content.dashtoon.ai/assets/DashAnimeXL_Blog/ComfyUI_temp_zvkev_00306_.png" alt="Introducing DashAnime XL 1.0">
  </div>
  <div class="masonry-item">
    <img class="custom-image" src="https://content.dashtoon.ai/assets/DashAnimeXL_Blog/ComfyUI_temp_zvkev_00330_.png" alt="Introducing DashAnime XL 1.0">
  </div>
  <div class="masonry-item">
    <img class="custom-image" src="https://content.dashtoon.ai/assets/DashAnimeXL_Blog/CR_00414_.png" alt="Introducing DashAnime XL 1.0">
  </div>
  <div class="masonry-item">
    <img class="custom-image" src="https://content.dashtoon.ai/assets/DashAnimeXL_Blog/CR_00418_.png" alt="Introducing DashAnime XL 1.0">
  </div>
  <div class="masonry-item">
    <img class="custom-image" src="https://content.dashtoon.ai/assets/DashAnimeXL_Blog/CR_00420_.png" alt="Introducing DashAnime XL 1.0">
  </div>
  <div class="masonry-item">
    <img class="custom-image" src="https://content.dashtoon.ai/assets/DashAnimeXL_Blog/CR_00421_.png" alt="Introducing DashAnime XL 1.0">
  </div>
  <div class="masonry-item">
    <img class="custom-image" src="https://content.dashtoon.ai/assets/DashAnimeXL_Blog/CR_00423_.png" alt="Introducing DashAnime XL 1.0">
  </div>
  <div class="masonry-item">
    <img class="custom-image" src="https://content.dashtoon.ai/assets/DashAnimeXL_Blog/CR_00424_.png" alt="Introducing DashAnime XL 1.0">
  </div>
  <div class="masonry-item">
    <img class="custom-image" src="https://content.dashtoon.ai/assets/DashAnimeXL_Blog/368340.png" alt="Introducing DashAnime XL 1.0">
  </div>
  <div class="masonry-item">
    <img class="custom-image" src="https://content.dashtoon.ai/assets/DashAnimeXL_Blog/368341.png" alt="Introducing DashAnime XL 1.0">
  </div>
</div>
<style>
  .masonry-grid {
    column-count: 3;
    column-gap: 15px;
  }

  .masonry-item {
    margin-bottom: 15px;
    break-inside: avoid;
  }

  .custom-image {
    width: 100%;
    height: auto;
    display: block;
    border-radius: 10px;
    transition: transform .7s;
  }

  .custom-image:hover {
    transform: scale(1.05);
  }
</style>
<h1 id="how-to-use">How to use</h1>
<p>DashAnimeXL is now publicly available on the <a href="https://dashtoon.com/?ref=insiders.dashtoon.com">Dashtoon Studio</a> ! Head over there to check it out. Refer to the video below for a guide on how to use it.</p>
<video controls>
  <source src="https://content.dashtoon.ai/assets/DashAnimeXL_Blog/studio.mov" type="video/mp4">
  Your browser does not support the video tag.
</video>
<p>The model is also available in <a href="https://huggingface.co/dashtoon/DashAnimeXL-V1?ref=insiders.dashtoon.com">Huggingface</a> and <a href="https://civitai.com/models/670869/dashanimexl-v1?ref=insiders.dashtoon.com">Civitai</a></p>
<h1 id="what%E2%80%99s-next">What&#x2019;s next ?</h1>
<p>Recently, we&apos;ve seen the <a href="https://blackforestlabs.ai/announcing-black-forest-labs/?ref=insiders.dashtoon.com">FLUX</a> gaining traction, and our internal benchmarks also found FLUX to be very promising for show and comic creation.</p>
<p>However, we observed a significant issue with style inconsistency, especially when deviating from the realistic style. The anime style, in particular, tends to be quite inconsistent.</p>
<p>As a way to contribute to the open-source community, we plan to release some cool variants of FLUX in the coming weeks.</p>
<p>Here&#x2019;s a sneak peek at some of the upcoming outputs.</p>
<div class="masonry-grid">
  <div class="masonry-item">
    <img class="custom-image" src="https://content.dashtoon.ai/assets/DashAnimeXL_Blog/CR_00001__(1).png" alt="Introducing DashAnime XL 1.0">
  </div>
  <div class="masonry-item">
    <img class="custom-image" src="https://content.dashtoon.ai/assets/DashAnimeXL_Blog/CR_00008_.png" alt="Introducing DashAnime XL 1.0">
  </div>
  <div class="masonry-item">
    <img class="custom-image" src="https://content.dashtoon.ai/assets/DashAnimeXL_Blog/CR_00012_.png" alt="Introducing DashAnime XL 1.0">
  </div>
  <div class="masonry-item">
    <img class="custom-image" src="https://content.dashtoon.ai/assets/DashAnimeXL_Blog/CR_00014_.png" alt="Introducing DashAnime XL 1.0">
  </div>
  <div class="masonry-item">
    <img class="custom-image" src="https://content.dashtoon.ai/assets/DashAnimeXL_Blog/CR_00018_.png" alt="Introducing DashAnime XL 1.0">
  </div>
  <div class="masonry-item">
    <img class="custom-image" src="https://content.dashtoon.ai/assets/DashAnimeXL_Blog/CR_00022_.png" alt="Introducing DashAnime XL 1.0">
  </div>
</div>
<style>
  .masonry-grid {
    column-count: 3;
    column-gap: 15px;
  }

  .masonry-item {
    margin-bottom: 15px;
    break-inside: avoid;
  }

  .custom-image {
    width: 100%;
    height: auto;
    display: block;
    border-radius: 10px;
    transition: transform .7s;
  }

  .custom-image:hover {
    transform: scale(1.05);
  }
</style>
]]></content:encoded></item><item><title><![CDATA[Enhancing Performance in Dashtoon Studio: A Leap from 8FPS to 55FPS]]></title><description><![CDATA[<h2 id="hey-there-everyone"><strong>Hey There, Everyone!</strong></h2><p>We&apos;ve got an exciting story for you! In just one week, our team turned our comic creation tool, Dashtoon Studio, from kind of slow (think 8FPS slow) to super speedy (a whopping 55FPS!). Want to know how we did it? Read on!</p><h2 id="some-context">Some Context</h2><p>Behind</p>]]></description><link>http://insiders.dashtoon.com/enhancing-performance-in-dashtoon-studio-a-leap-from-8fps-to-55fps/</link><guid isPermaLink="false">66c2e24b8bb9860065517871</guid><category><![CDATA[tech]]></category><dc:creator><![CDATA[Mohammad Zaryab]]></dc:creator><pubDate>Wed, 01 May 2024 13:11:01 GMT</pubDate><media:content url="http://insiders.dashtoon.com/content/images/2024/08/DALL-E-2024-01-02-23.59.44---Create-a-horizontal-tech-themed-image-for-a-blog-post--showcasing-the-difference-between-8FPS-and-55FPS-in-React-programming.-The-left-side-should-sho.png" medium="image"/><content:encoded><![CDATA[<h2 id="hey-there-everyone"><strong>Hey There, Everyone!</strong></h2><img src="http://insiders.dashtoon.com/content/images/2024/08/DALL-E-2024-01-02-23.59.44---Create-a-horizontal-tech-themed-image-for-a-blog-post--showcasing-the-difference-between-8FPS-and-55FPS-in-React-programming.-The-left-side-should-sho.png" alt="Enhancing Performance in Dashtoon Studio: A Leap from 8FPS to 55FPS"><p>We&apos;ve got an exciting story for you! In just one week, our team turned our comic creation tool, Dashtoon Studio, from kind of slow (think 8FPS slow) to super speedy (a whopping 55FPS!). Want to know how we did it? Read on!</p><h2 id="some-context">Some Context</h2><p>Behind the scenes, we use Tldraw (<a href="https://web.archive.org/web/20240228134934/http://tldraw.com/?ref=blog.dashtoon.ai">tldraw.com</a>) for its impressive functionality, which served as a solid starting point for our project. However, customizing Tldraw to meet our unique needs, especially in terms of canvas state management, proved to be a significant challenge. Achieving a balance between our specific requirements and Tldraw&apos;s existing features required a thorough understanding of the library, but even so, we encountered some challenges.</p><h2 id="the-problem-dashtoon-studio-our-platform-for-making-comics-with-ai-was-moving-like-a-snail-when-our-canvas-got-filled-up-the-whole-thing-would-just-crawl-not-good-right-we-knew-we-had-to-fix-this-and-fast"><em>The Problem:</em><strong>&#xA0;Dashtoon Studio, our platform for making comics with AI, was moving like a snail. When our canvas got filled up, the whole thing would just crawl. Not good, right? We knew we had to fix this, and fast!</strong></h2><h2 id></h2><figure class="kg-card kg-gallery-card kg-width-wide"><div class="kg-gallery-container"><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://web.archive.org/web/20240228134934im_/https://blog.dashtoon.ai/content/images/2024/01/Screenshot-2024-01-02-at-5.15.47-PM.png" width="360" height="172" loading="lazy" alt="Enhancing Performance in Dashtoon Studio: A Leap from 8FPS to 55FPS"></div><div class="kg-gallery-image"><img src="https://web.archive.org/web/20240228134934im_/https://blog.dashtoon.ai/content/images/2024/01/Screenshot-2024-01-02-at-5.17.01-PM.png" width="366" height="178" loading="lazy" alt="Enhancing Performance in Dashtoon Studio: A Leap from 8FPS to 55FPS"></div></div></div></figure><p>FPS Comparison</p><p></p><h2 id="our-super-busy-week-of-fixes"><strong>Our Super Busy Week of Fixes</strong><br></h2><h3 id="1-making-our-app-smarter-with-redux"><strong>1. Making Our App Smarter with Redux</strong></h3><p><strong><em>No More Useless Chatter</em></strong></p><ul><li><em>What Was Wrong</em>: Our app was updating too much and causing a lot of unnecessary work.</li><li><em>What We Did</em>: We optimized the way how we were using Redux to make our app smarter about updates. It stopped bothering every part of the app unless it really needed to.</li></ul><p><strong><em>Remembering Stuff to Save Time</em></strong></p><ul><li><em>What Was Wrong</em><strong>:</strong>&#xA0;Our app parts were redoing stuff they didn&apos;t need to.</li><li><em>What We Did</em>: We used some tricks with&#xA0;<strong><code>React.memo</code></strong>,&#xA0;<strong><code>useMemo</code></strong>, and&#xA0;<strong><code>useCallback</code></strong>&#xA0;to help our app remember things better, so it didn&#x2019;t redo work.</li></ul><h3 id="2-smoothing-out-interactions-on-the-canvas"><strong>2. Smoothing Out Interactions on the Canvas</strong></h3><p><strong><em>No More Jumpy Interactions</em></strong></p><ul><li><em>What Was Wrong</em><strong>:</strong>&#xA0;Drawing or Dragging on our canvas was all jerky and not smooth.</li><li><em>What We Did</em>: We made this debounced custom hook that made every move on the canvas smooth and nice.</li></ul><p><strong><em>Handling Inputs Better</em></strong></p><ul><li><em>What Was Wrong</em><strong>:</strong>&#xA0;Our app was getting overwhelmed with too much input.</li><li><em>What We Did</em>: We used&#xA0;<strong><code>useCallback</code></strong>&#xA0;to make it chill and only deal with what was important.</li></ul><h3 id="3-custom-hooks-streamlining-components"><strong>3. Custom Hooks: Streamlining Components</strong></h3><p><strong><em>Unburdening Components</em></strong></p><ul><li><em>What Was Wrong</em><strong>:</strong>&#xA0;Components were overloaded with too much logic and state.</li><li><em>What We Did</em>: We developed custom hooks for specific component needs. This helped isolate and manage state and effects where needed, making components lighter and faster.</li></ul><h3 id="4-canvas-element-positioning"><strong>4. Canvas Element Positioning</strong></h3><p><strong><em>Stabilizing Moving Elements</em></strong></p><ul><li><em>What Was Wrong</em><strong>:</strong>&#xA0;Elements using&#xA0;<strong><code>transform</code></strong>&#xA0;were causing unnecessary re-renders.</li><li><em>What We Did</em>: We switched these elements to fixed positions, cutting down on the re-renders and enhancing performance.</li></ul><h3 id="5-smarter-auto-save"><strong>5. Smarter Auto-Save</strong></h3><p><strong><em>Auto-Save That Actually Makes Sense</em></strong></p><ul><li><em>What Was Wrong</em>: Our app was saving stuff too often, even when it didn&#x2019;t need to.</li><li><em>What We Did</em>: We made our auto-save feature only kick in when it really needed to, by checking for actual changes.</li></ul><h3 id="6-trimming-state-data"><strong>6. Trimming State Data</strong></h3><p><strong><em>Clean Up Our Data</em></strong></p><ul><li><em>What Was Wrong</em><strong>:</strong>&#xA0;We had too much unnecessary stuff in our data.</li><li><em>What We Did</em>: We got rid of the clutter and made sure we only kept what we needed.</li></ul><h3 id="7-updating-the-canvas-only-when-needed"><strong>7. Updating the Canvas Only When Needed</strong></h3><p><strong><em>Smart Canvas Updates</em></strong></p><ul><li><em>What Was Wrong</em><strong>:</strong>&#xA0;Our canvas was updating too often, which was slow.</li><li><em>What We Did</em>: We got smarter about when to update the canvas, which helped speed things up.</li></ul><h2 id="the-results"><strong>The Results</strong></h2><p>After a week of hard work, we didn&#x2019;t just make small changes; we totally transformed Dashtoon Studio! It went from being slow and frustrating to fast and fun.</p><h2 id="what-we-learned"><strong>What We Learned</strong></h2><ul><li><strong>Keep an Eye on Things:</strong>&#xA0;It&#x2019;s super important to regularly check how things are running, just like you&#x2019;d check your car.</li><li><strong>Fix the Right Stuff:</strong>&#xA0;Like being a detective, we found what was really causing the problems and fixed those things.</li><li><strong>Keep It Simple:</strong>&#xA0;We made sure not to make our code too complicated while making these fixes.</li></ul><p></p>]]></content:encoded></item><item><title><![CDATA[Kubernetes at Seed Stage]]></title><description><![CDATA[<p>Now I know what you, dear reader, would be thinking just by reading the title, &#x201C;Kubernetes in an early stage startup? This is like bringing a gun a to a knife fight&#x201D; or &#x201C;Kubernetes is an overpowered solution at such a small scale and does not make</p>]]></description><link>http://insiders.dashtoon.com/kubernetes-at-seed-stage/</link><guid isPermaLink="false">66c2e24b8bb9860065517870</guid><category><![CDATA[infra]]></category><category><![CDATA[tech]]></category><dc:creator><![CDATA[Anmol Chawla]]></dc:creator><pubDate>Thu, 25 Apr 2024 11:13:04 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1605745341112-85968b19335b?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDd8fGt1YmVybmV0ZXN8ZW58MHx8fHwxNzEzOTYwNzU1fDA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1605745341112-85968b19335b?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDd8fGt1YmVybmV0ZXN8ZW58MHx8fHwxNzEzOTYwNzU1fDA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" alt="Kubernetes at Seed Stage"><p>Now I know what you, dear reader, would be thinking just by reading the title, &#x201C;Kubernetes in an early stage startup? This is like bringing a gun a to a knife fight&#x201D; or &#x201C;Kubernetes is an overpowered solution at such a small scale and does not make sense&#x201D; and so on. But do give me a chance to present its benefits for early stage startups before you decide to move on.</p><p>Before we begin, it would be prudent to introduce Kubernetes to everyone, just on the off-chance that you&#x2019;re not familiar with it. Kubernetes, or k8s as it is fondly known to its users, is a at its core a container orchestration framework which allows us to automate deployment, management and scaling of services. This allows us to automate the effort that would go into handling operations such as rolling updates and high availability.</p><p>The traditional stereotypes associated with k8s are that it is a massive framework requiring a dedicated team to handle the cluster as well as ensure its continued operation. Another common stereotype associated with the framework is that it is time taking and painstakingly difficult to setup. But these are not really that accurate anymore.</p><p>While k8s definitely requires dedicated teams and engineers to maintain at a scale, the same is not true when used to orchestrate the small number of workloads at an early stage startup. At Dashtoon we are a team of 5 engineers, working on our own product tasks, who are also responsible for the continued operation of the cluster. Each and every one of us is comfortable with making changes to the cluster, be they for deploying a new service, or creating a new ingress and so on.</p><p>Coming to the aspect of setting up the cluster, it has now become ridiculously easy to be up and running with a production scale cluster with the help of managed solutions provided by cloud providers such as Azure and AWS. In fact, we were able to bring up our cluster and serve production traffic within an hour using one of the managed solutions.</p><p>Now that I&#x2019;ve mentioned about the existing stereotypes and their relevance, lets move on to how we use the framework at Dashtoon and how it makes our life easier as compared to the previous setup that we had.</p><p>First, a bit of an introduction to Dashtoon. We are a generative AI startup aiming to make it easier to tell visual stories for creators and delighting users with visual content. The idea is to reduce the time and effort it takes to create visual stories and allow the authors to focus on the storytelling.</p><p>Due to the small team and scale, we made a conscious decision to go with a mono-repo setup for both the backend and frontend. Our language of choice has been Kotlin for back-end and Dart (via Flutter) for the front-end. Along with this, we&#x2019;re also self-hosting a setup for stable-diffusion-webui to allow for quick prototyping of model changes and new technologies. Now with all this, we&#x2019;ve got separation of dev and prod setups to handle along with respective ingresses for each of the service.</p><p>At the start, we had started out with running Docker on a VM with each service running in a container. At that time, we had the same bias that k8s is an overpowered solution which would not be needed at such a small scale and would be more hassle than it is worth (how wrong we were!).</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="http://insiders.dashtoon.com/content/images/2024/08/Screenshot_2023-03-08_at_18.45.41.png" class="kg-image" alt="Kubernetes at Seed Stage" loading="lazy" width="2000" height="1011" srcset="http://insiders.dashtoon.com/content/images/size/w600/2024/08/Screenshot_2023-03-08_at_18.45.41.png 600w, http://insiders.dashtoon.com/content/images/size/w1000/2024/08/Screenshot_2023-03-08_at_18.45.41.png 1000w, http://insiders.dashtoon.com/content/images/size/w1600/2024/08/Screenshot_2023-03-08_at_18.45.41.png 1600w, http://insiders.dashtoon.com/content/images/2024/08/Screenshot_2023-03-08_at_18.45.41.png 2000w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Docker Setup</span></figcaption></figure><p>So, here is how the setup was :</p><ol><li>A VM hosted on Azure</li><li>Running Docker containers</li><li>nginx container to front the incoming requests, with individual configs for each sub-domain</li><li>watchtower to update the service on each image push</li><li>Secondary VM running docker and basic prometheus and grafana for monitoring</li></ol><p>While this was perfectly serviceable, there were several gripes with the setup :</p><ol><li>To scale up a service would mean to bring up another VM with the same set of services</li><li>There were multiple nginx config files, with a lot of boilerplate code. To give you an idea, we had 3 active services and 2 sub-domains for each. This meant that the number of config files was 6 just to start with.</li><li>Separating out dev and prod environments was difficult</li><li>Almost impossible to do rolling updates. For example, to do rolling updates while staying within the docker setup would have meant moving to a docker swarm setup, just to gain the ability to control replicas for each service. To add to the difficulty, watchtower works at a machine level and hence would not be aware of the different machines on the docker swarm. This would have meant finding an alternative which would be aware of the swarm setup.</li><li>RBAC for access to logs and configuration was difficult</li><li>Managing secrets and environment variables required editing the base docker compose file</li></ol><p>Taking all of this into account, we decided to give k8s a try due to our prior experience with it while handling infrastructure at udaan and knowing that it provides a solution for each of the above mentioned points. Let me list out the changes to the setup and the subsequent ease that came with k8s.</p><p>With k8s now the setup changes to be:</p><ol><li>An k8s cluster, with two nodepools (read VMs). One for controlplane and another for workloads. You would have noticed that I&#x2019;ve not mentioned this anywhere on the above diagram, and that is because k8s abstracts away the nodes and takes care of the scheduling and scaling for us.</li><li>Three main namespaces :<ol><li>dev</li><li>prod</li><li>monitoring</li></ol></li><li>Both dev and prod namespace has the back-end and the web front-end</li><li>Monitoring now includes open-telemetry and pushes to prometheus which is them visualised on grafana.</li><li>Rolling updates, at 25% unavailability</li><li>RBAC, integrated with Azure AD. This allows us to manage access at AAD group level</li><li>Secrets and config maps mounted as environment variables on the deployments</li><li>Ingress is handled by k8s using ingress-nginx. This allows us to just mention the sub-domain, certificates and the host path</li><li>Ingress is handled by k8s using ingress-nginx. This allows us to just mention the sub-domain, certificates and the host path</li><li>CI/CD pipeline with the ability to target dev and production deployments</li></ol><figure class="kg-card kg-image-card kg-card-hascaption"><img src="http://insiders.dashtoon.com/content/images/2024/08/k8s-setup.png" class="kg-image" alt="Kubernetes at Seed Stage" loading="lazy" width="2000" height="1056" srcset="http://insiders.dashtoon.com/content/images/size/w600/2024/08/k8s-setup.png 600w, http://insiders.dashtoon.com/content/images/size/w1000/2024/08/k8s-setup.png 1000w, http://insiders.dashtoon.com/content/images/size/w1600/2024/08/k8s-setup.png 1600w, http://insiders.dashtoon.com/content/images/2024/08/k8s-setup.png 2000w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">k8s setup</span></figcaption></figure><p>Looking at this list should now give you an idea of how easy k8s makes it to manage infrastructure and the various components involved. Migrating to k8s freed up the time that was earlier spent writing nginx configurations and fiddling with docker compose yamls to deploy the new service. To put that into perspective, we had spent about 3-4 man hours to setup the docker workflow and ensure it worked as compared to the 1 man hour it took to setup k8s. And not to forget, reduction in upkeep and maintenance time that k8s automates for us.</p><p>Now by this point you must be realising that benefits that k8s brings, but would also be wondering if all of this magic comes at a cost. And to assuage your fears, no it does not increase the costs by much. On most platforms, there are no additional costs for setting up and running the cluster. The costs come purely from the VMs which are used for the node pools. Then why the increase in costs? Well, that is because we end up provisioning an extra VM to host the the system (control plane, if you will) components, according to the good practices for a k8s cluster. Hence compared to the previous docker setup, our k8s cluster comes in at roughly 5-10% additional cost due to the additional VM.</p><p>So to summarise,</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="http://insiders.dashtoon.com/content/images/2024/08/image.png" class="kg-image" alt="Kubernetes at Seed Stage" loading="lazy" width="2000" height="1680" srcset="http://insiders.dashtoon.com/content/images/size/w600/2024/08/image.png 600w, http://insiders.dashtoon.com/content/images/size/w1000/2024/08/image.png 1000w, http://insiders.dashtoon.com/content/images/size/w1600/2024/08/image.png 1600w, http://insiders.dashtoon.com/content/images/2024/08/image.png 2000w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Summary</span></figcaption></figure><p></p><p></p><p></p><p><br></p>]]></content:encoded></item></channel></rss>