{"id":11210,"date":"2026-09-22T14:47:19","date_gmt":"2026-09-22T12:47:19","guid":{"rendered":"https:\/\/www.enoni.de\/wp\/?p=11210"},"modified":"2026-09-22T21:59:45","modified_gmt":"2026-09-22T19:59:45","slug":"move-furniture","status":"publish","type":"post","link":"https:\/\/www.enoni.de\/wp\/move-furniture\/","title":{"rendered":"MOVE.FURNITURE"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<h2 class=\"wp-block-heading small_highlight\"><em>\u00bb A Funny WebApp for replacing parts in Photos. USING a fully local AI pipeline \u00ab<\/em><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Moving furniture? WTF? <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The idea was pretty simple: my wife wanted to know what a potential new shelf might look like\u2014one that would replace another one in the hallway of our apartment. She told me about apps and said it would be great to have a tool like that, to test some virtual replacements. I took this as an opportunity to run everything locally on our network with open local AIs and build it myself. I was already very invested in customizing my AgenticWorkflows anyway.<\/p>\n\n\n\n<h2 class=\"wp-block-heading small_highlight\"><em>&#8220;NOTHING GOES OUTSIDE !!!&#8221;<\/em><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">That was the motto for using it. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">On one of my 3D render nodes, the ComfyUI scripts are running, which can address 2&#215;3090 RTX cards. The image models use only one card; unlike the language models, they cannot be split across multiple cards. But it runs 2 seperate ComfyUI instances each GPU, which is nice.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">It can actually replace and complement just about anything in a picture. Not just furniture, of course.<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-vimeo wp-block-embed-vimeo wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe title=\"PROMO_MOVE.FURNITURE_220926\" src=\"https:\/\/player.vimeo.com\/video\/1229154380?dnt=1&amp;app_id=122963\" width=\"1000\" height=\"563\" frameborder=\"0\" allow=\"autoplay; fullscreen; picture-in-picture; clipboard-write; encrypted-media; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\"><\/iframe>\n<\/div><figcaption class=\"wp-element-caption\">Here&#8217;s a quick overview of how it works. Of course, there are no furniture items, but a nice breakfast. The results show how much better Qwen-Image 2.1 is than Flux.2 KLEIN.<\/figcaption><\/figure>\n\n\n\n<p class=\"small_highlight wp-block-paragraph\">Here&#8217;s a quick overview of the stack:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The backend and frontend are currently running in a single <strong>Docker<\/strong> container on the same machine. Since this is a prototype, it hasn&#8217;t been broken down further. The whole thing has a typical AI vibe-code, prototype character. &#x1f604;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The backend is Python <strong>FastAPI<\/strong>, which forwards and handles requests to <strong>ComfyUI<\/strong>. The frontend is <strong>React<\/strong>. The ComfyUI preset scripts were initially <strong>FLUX.2 KLEIN<\/strong> and <strong>Qwen-Image<\/strong>. FLUX.2 KLEIN was the default because it offered the best quality and speed. The scripts also helds an upscaler setup, which is OKish.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">FLUX is generally very good at maintaining image stability and holding proportions while making selective changes to parts of an image. The segmentation is very good.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">As of yesterday, I also implemented <strong>Qwen-Image 2.1<\/strong> as a beta preset\u2014it looks very, very good in terms of quality, but it still needs a bit more testing. It was really easy to set up and implement to the pipeline chain.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I implemented a pre-pass where LLM-Studio and Qwen 3.6 made some prompt enhancements. But the cost-benefit factor was too low to include it as a feature. Quality improvements could always be achieved with the actual text and a precise text prompt.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Now for what&#8217;s really remarkable. The entire framework was built using <strong>Hermes and Qwen 3.6 27B<\/strong>\u2014frontend and backend. Qwen 3.6! And it worked very well right from the start. I polished the ComfyUI scripts using <strong>Claude Sonnet and ClaudeCode<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Deployment creating Dockerfiles\u2014was also be done with ClaudeCode + Sonnet. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">FLUX.2 KLEIN runs in about 24 seconds; Qwen-Image 2.1 takes about 60 seconds. The predecessor of the Qwen-Image on the &#8220;High&#8221; preset takes around four minutes. (single 3090-RTX)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"small_highlight wp-block-paragraph\">CONCLUSION: <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Just for fun! I pulled off a really cool project on a Saturday. Moving furniture is just the hook\u2014you can basically replace anything you want, as long as the models allow it. A token system, queue, upscaler and user account are already implemented, maybe i will push this little bit further in the future.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><a href=\"https:\/\/www.enoni.de\/wp\/wp-content\/uploads\/2026\/09\/Cappuccino.jpg\"><img decoding=\"async\" width=\"680\" height=\"1080\" src=\"https:\/\/www.enoni.de\/wp\/wp-content\/uploads\/2026\/09\/Cappuccino-680x1080.jpg\" alt=\"\" class=\"wp-image-11269\" srcset=\"https:\/\/www.enoni.de\/wp\/wp-content\/uploads\/2026\/09\/Cappuccino-680x1080.jpg 680w, https:\/\/www.enoni.de\/wp\/wp-content\/uploads\/2026\/09\/Cappuccino-768x1219.jpg 768w, https:\/\/www.enoni.de\/wp\/wp-content\/uploads\/2026\/09\/Cappuccino.jpg 892w\" sizes=\"(max-width: 680px) 100vw, 680px\" \/><\/a><figcaption class=\"wp-element-caption\">Cappuccino with latte art<\/figcaption><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u00bb A Funny WebApp for replacing parts in Photos. USING a fully local AI pipeline \u00ab Moving furniture? WTF? The idea was pretty simple: my wife wanted to know what a potential new shelf might look like\u2014one that would replace another one in the hallway of our apartment. She told me about apps and said <\/p>\n","protected":false},"author":1,"featured_media":11213,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[87,85,74,72,56,42,73,75],"tags":[],"class_list":["post-11210","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-agenticai","category-comfyui","category-docker","category-fastapi","category-pipeline","category-project","category-reactjs","category-webapp"],"_links":{"self":[{"href":"https:\/\/www.enoni.de\/wp\/wp-json\/wp\/v2\/posts\/11210","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.enoni.de\/wp\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.enoni.de\/wp\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.enoni.de\/wp\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.enoni.de\/wp\/wp-json\/wp\/v2\/comments?post=11210"}],"version-history":[{"count":59,"href":"https:\/\/www.enoni.de\/wp\/wp-json\/wp\/v2\/posts\/11210\/revisions"}],"predecessor-version":[{"id":11273,"href":"https:\/\/www.enoni.de\/wp\/wp-json\/wp\/v2\/posts\/11210\/revisions\/11273"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.enoni.de\/wp\/wp-json\/wp\/v2\/media\/11213"}],"wp:attachment":[{"href":"https:\/\/www.enoni.de\/wp\/wp-json\/wp\/v2\/media?parent=11210"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.enoni.de\/wp\/wp-json\/wp\/v2\/categories?post=11210"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.enoni.de\/wp\/wp-json\/wp\/v2\/tags?post=11210"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}