<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Pipeline on ICE-ICE-BEAR-BLOG</title><link>https://ice-ice-bear.github.io/tags/pipeline/</link><description>Recent content in Pipeline on ICE-ICE-BEAR-BLOG</description><generator>Hugo -- gohugo.io</generator><language>en</language><lastBuildDate>Thu, 16 Apr 2026 00:00:00 +0900</lastBuildDate><atom:link href="https://ice-ice-bear.github.io/tags/pipeline/index.xml" rel="self" type="application/rss+xml"/><item><title>popcon Dev Log #8 — Archive Page, Start-Frame Review, and BiRefNet VFX Recovery</title><link>https://ice-ice-bear.github.io/posts/2026-04-16-popcon-dev8/</link><pubDate>Thu, 16 Apr 2026 00:00:00 +0900</pubDate><guid>https://ice-ice-bear.github.io/posts/2026-04-16-popcon-dev8/</guid><description>&lt;img src="https://ice-ice-bear.github.io/" alt="Featured image of post popcon Dev Log #8 — Archive Page, Start-Frame Review, and BiRefNet VFX Recovery" /&gt;&lt;h2 id="overview"&gt;Overview
&lt;/h2&gt;&lt;p&gt;Added an archive page to browse past jobs and resume from any pipeline step. Introduced a per-action start-frame review flow so each action&amp;rsquo;s results can be inspected before moving to refine. Discovered that BiRefNet matting was stripping VFX elements like motion lines and sparks along with backgrounds, and implemented a &lt;code&gt;rescue_vfx_elements()&lt;/code&gt; post-processing step to recover them.&lt;/p&gt;
&lt;p&gt;Previous post: &lt;a class="link" href="https://ice-ice-bear.github.io/posts/2026-04-15-popcon-dev7/" &gt;popcon Dev Log #7 — RunPod GPU Worker, BiRefNet Matting, and Parallel Frame Inference&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="archive-page--browse-past-jobs-and-resume"&gt;Archive Page — Browse Past Jobs and Resume
&lt;/h2&gt;&lt;p&gt;As the pipeline grew longer, revisiting intermediate results or re-running from a specific step became a frequent need. A new archive page solves this.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;/archive&lt;/code&gt; route displays past jobs as cards&lt;/li&gt;
&lt;li&gt;Each card shows current status (which step was last completed)&lt;/li&gt;
&lt;li&gt;Selecting a step resumes the pipeline from that point&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The layout was updated to include an Archive link in the navigation for easy access.&lt;/p&gt;
&lt;h2 id="per-action-start-frame-review-flow"&gt;Per-Action Start-Frame Review Flow
&lt;/h2&gt;&lt;p&gt;Previously, start-frames for all actions were generated in bulk and reviewed together. This release switches to a per-action flow where each action&amp;rsquo;s start-frame is reviewed individually, with the option to jump straight into refine if corrections are needed.&lt;/p&gt;
&lt;pre class="mermaid" style="visibility:hidden"&gt;flowchart LR
 A["Select Action"] --&gt; B["Generate Start-Frame"]
 B --&gt; C["Tile Review"]
 C --&gt;|Approve| D["Next Action"]
 C --&gt;|Needs Edit| E["Refine Step"]
 E --&gt; C&lt;/pre&gt;&lt;h3 id="key-changes"&gt;Key Changes
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;backend/pipeline/start_frame_gen.py&lt;/code&gt; — split start-frame generation to run per action&lt;/li&gt;
&lt;li&gt;&lt;code&gt;frontend/components/StartFrameReview.tsx&lt;/code&gt; — redesigned tile layout with inline per-emoji video preview&lt;/li&gt;
&lt;li&gt;&lt;code&gt;frontend/components/ActionSelector.tsx&lt;/code&gt; — integrated action selection UI into the review flow&lt;/li&gt;
&lt;li&gt;&lt;code&gt;backend/models.py&lt;/code&gt; — extended models for per-action state tracking&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Refine resume logic was also improved so that an interrupted refine session can pick up from the last saved state.&lt;/p&gt;
&lt;h2 id="birefnet-vfx-recovery-problem"&gt;BiRefNet VFX Recovery Problem
&lt;/h2&gt;&lt;p&gt;BiRefNet produces much cleaner background removal than rembg, but it has a blind spot: it classifies VFX elements (motion lines, sparks, speed lines) as background and removes them.&lt;/p&gt;
&lt;h3 id="problem-analysis"&gt;Problem Analysis
&lt;/h3&gt;&lt;p&gt;VFX element characteristics:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Small non-white blobs&lt;/li&gt;
&lt;li&gt;Scattered around the main character&lt;/li&gt;
&lt;li&gt;From BiRefNet&amp;rsquo;s salient object detection perspective, these are &amp;ldquo;background noise&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="rescue_vfx_elements-implementation"&gt;rescue_vfx_elements() Implementation
&lt;/h3&gt;&lt;p&gt;A post-processing function was added to recover VFX elements dropped by BiRefNet matting.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Detect non-white pixel regions in the original image&lt;/li&gt;
&lt;li&gt;Identify blobs below a size threshold that were removed by the BiRefNet mask&lt;/li&gt;
&lt;li&gt;Re-add blobs likely to be VFX elements back into the mask&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Comparative testing of rembg vs. BiRefNet confirmed that BiRefNet + VFX recovery produces the best results.&lt;/p&gt;
&lt;h2 id="start-frame-tile-redesign"&gt;Start-Frame Tile Redesign
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;StartFrameReview.tsx&lt;/code&gt; was fully redesigned.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Grid tile layout for at-a-glance comparison of each emoji&amp;rsquo;s start-frame&lt;/li&gt;
&lt;li&gt;Inline video preview per tile to immediately check animation results&lt;/li&gt;
&lt;li&gt;Per-tile approve/regenerate buttons&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="commit-log"&gt;Commit Log
&lt;/h2&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Message&lt;/th&gt;
 &lt;th&gt;Changes&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;feat(archive): browse past jobs and resume any step&lt;/td&gt;
 &lt;td&gt;2 files&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;feat(pipeline): per-action start-frame review + refine resume&lt;/td&gt;
 &lt;td&gt;12 files&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;feat(gpu-worker): replace rembg with BiRefNet matting&lt;/td&gt;
 &lt;td&gt;7 files&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;feat(review): redesign start-frame tiles and inline per-emoji video&lt;/td&gt;
 &lt;td&gt;1 file&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="insights"&gt;Insights
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;BiRefNet&amp;rsquo;s limitations can be patched with post-processing.&lt;/strong&gt; Salient object detection models focus on the primary subject, so small VFX elements get lost. A blob-recovery pass is a reusable pattern for any matting pipeline.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Resume capability becomes essential as pipelines grow.&lt;/strong&gt; Without the archive page, every iteration meant starting from scratch. Persisting intermediate state and allowing re-entry at any step dramatically speeds up development.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Smaller review units make for faster feedback loops.&lt;/strong&gt; Reviewing all actions at once made it hard to spot issues. Switching to per-action review tightened the iteration cycle.&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>