<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>ComfyUI on To the Moon</title><link>https://junstellar.github.io/tags/comfyui/</link><description>Recent content in ComfyUI on To the Moon</description><generator>Hugo -- gohugo.io</generator><language>ko-kr</language><lastBuildDate>Mon, 10 Aug 2026 09:00:00 +0900</lastBuildDate><atom:link href="https://junstellar.github.io/tags/comfyui/index.xml" rel="self" type="application/rss+xml"/><item><title>AI로 게임 만들기 #8 — 심해 1,200m까지 내려가서 물고기 27종 도감 채우기 (공개빌드 #8)</title><link>https://junstellar.github.io/p/ai-game-lab-build-8/</link><pubDate>Mon, 10 Aug 2026 09:00:00 +0900</pubDate><guid>https://junstellar.github.io/p/ai-game-lab-build-8/</guid><description>&lt;img src="https://junstellar.github.io/p/ai-game-lab-build-8/deep-fishing-poster.webp" alt="Featured image of post AI로 게임 만들기 #8 — 심해 1,200m까지 내려가서 물고기 27종 도감 채우기 (공개빌드 #8)" /&gt;&lt;p&gt;&lt;a class="link" href="https://junstellar.github.io/p/ai-game-lab-build-7/" &gt;지난 편&lt;/a&gt;의 조차장에 이어, 여덟 번째 게임은 &lt;strong&gt;심해 낚시&lt;/strong&gt;입니다. 수면에서 &lt;strong&gt;1,200m 심연까지&lt;/strong&gt; 내려가 물고기를 낚고, &lt;strong&gt;27종 도감&lt;/strong&gt;을 채우는 게임이에요.&lt;/p&gt;
&lt;p&gt;게임 랩에 처음 생긴 **&amp;ldquo;모으는 재미&amp;rdquo;**입니다. 앞의 게임들은 판이 끝나면 기록만 남는데, 이건 잡은 물고기가 &lt;strong&gt;영구히 쌓여요.&lt;/strong&gt;&lt;/p&gt;
&lt;video autoplay loop muted playsinline preload="metadata" poster="/p/ai-game-lab-build-8/deep-fishing-poster.webp" style="width:100%;max-width:420px;display:block;margin:1.2rem auto;border-radius:14px;box-shadow:0 6px 24px rgba(0,0,0,.25)"&gt;
 &lt;source src="https://junstellar.github.io/p/ai-game-lab-build-8/deep-fishing-play.mp4" type="video/mp4"&gt;
&lt;/video&gt;
&lt;p&gt;👉 &lt;strong&gt;&lt;a class="link" href="https://junstellar.github.io/games/deep-fishing/" &gt;심해 낚시 직접 하러 가기&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="어떤-게임이냐면"&gt;어떤 게임이냐면
&lt;/h2&gt;&lt;p&gt;탭 세 번이면 한 마리입니다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;① &lt;strong&gt;깊이 정하기&lt;/strong&gt; — 움직이는 막대를 탭. 깊을수록 희귀하고 어렵습니다&lt;/li&gt;
&lt;li&gt;② &lt;strong&gt;챔질&lt;/strong&gt; — 물고기가 다가와 미끼를 &lt;strong&gt;툭툭 건드리다가&lt;/strong&gt;(가짜) &lt;strong&gt;확 무는 순간&lt;/strong&gt; 탭&lt;/li&gt;
&lt;li&gt;③ &lt;strong&gt;파이팅&lt;/strong&gt; — 누르면 감기고, 떼면 풀립니다. &lt;strong&gt;장력을 초록 구간에&lt;/strong&gt; 두세요&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;한 판은 캐스팅 12번. &lt;strong&gt;멸치부터 🐉크라켄까지 27종&lt;/strong&gt;이 있고, 가운데를 잘 유지할수록 &lt;strong&gt;정확도 보너스&lt;/strong&gt;(최대 +85%)가 붙습니다.&lt;/p&gt;
&lt;p&gt;&lt;img alt="도감 — 잡은 물고기는 컬러, 못 잡은 건 실루엣" class="gallery-image" data-flex-basis="138px" data-flex-grow="57" height="1252" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://junstellar.github.io/p/ai-game-lab-build-8/deep-fishing-dex.webp" width="720"&gt;&lt;/p&gt;
&lt;h2 id="물고기-27종은-comfyui로-직접-그렸다"&gt;물고기 27종은 ComfyUI로 직접 그렸다
&lt;/h2&gt;&lt;p&gt;&lt;a class="link" href="https://junstellar.github.io/p/claude-local-image-generation/" &gt;예전에 노트북에 설치해둔 &lt;strong&gt;ComfyUI&lt;/strong&gt;&lt;/a&gt;로 27종을 전부 뽑았습니다. 이번에도 생성이 끝이 아니었어요 — 고래상어는 흰 배경 박스를 달고 나오고, 가오리는 모래바닥까지 딸려왔고, 방어는 두 마리가 겹쳐 나왔습니다.&lt;/p&gt;
&lt;p&gt;배경색을 자동 감지해 투명 처리하고, 물체에 딱 맞게 다시 자르고, 그래도 안 되는 건 프롬프트를 바꿔 다시 뽑았어요. &lt;strong&gt;ComfyUI가 그려준 걸 게임에 맞게 다듬는 게 절반의 일&lt;/strong&gt;이라는 게 이번에도 확인됐습니다.&lt;/p&gt;
&lt;h2 id="첫-버전은-허공에-대고-챔질하는-것-같았다"&gt;첫 버전은 허공에 대고 챔질하는 것 같았다
&lt;/h2&gt;&lt;p&gt;일단 돌아가게 만들어놓고 직접 해봤는데, 이상했습니다. 화면엔 &lt;strong&gt;줄 하나만 덩그러니&lt;/strong&gt; 있고, 아무것도 안 보이는데 &amp;ldquo;지금 탭!&amp;ldquo;이라는 글자만 떴거든요. 뭘 보고 채라는 건지 알 수가 없었어요.&lt;/p&gt;
&lt;p&gt;그래서 &lt;strong&gt;물고기를 실제로 보여주기로&lt;/strong&gt; 했습니다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;물고기가 &lt;strong&gt;옆에서 헤엄쳐 다가오고&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;미끼를 &lt;strong&gt;툭툭 건드립니다&lt;/strong&gt;(찌가 살짝 흔들림 = 가짜 입질)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;확 무는 순간&lt;/strong&gt; 찌가 쑥 들어가고 물보라가 터집니다&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;이러니 &amp;ldquo;너무 일찍 채면 실패&amp;quot;라는 규칙이 &lt;strong&gt;눈으로 납득되는 규칙&lt;/strong&gt;이 됐어요. 가짜와 진짜를 구분하는 게 실력이 되고요.&lt;/p&gt;
&lt;h2 id="물고기에-검은-배경이-붙은-것-같았는데-재보니-아니었다"&gt;물고기에 검은 배경이 붙은 것 같았는데, 재보니 아니었다
&lt;/h2&gt;&lt;p&gt;계속 해보니 어떤 물고기는 &lt;strong&gt;검은 배경이 붙어 있는 것처럼&lt;/strong&gt; 보였습니다. 배경 제거가 덜 됐나 싶었죠. 그래서 27종을 전부 계측해봤습니다.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;배경이 남은 스프라이트는 하나도 없었습니다.&lt;/strong&gt; 제가 짚은 원인이 틀렸던 거예요.&lt;/p&gt;
&lt;p&gt;진짜 원인은 따로 있었습니다. &lt;strong&gt;물고기와 물의 밝기가 너무 비슷했던 겁니다.&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;물고기&lt;/th&gt;
					&lt;th&gt;물고기 밝기&lt;/th&gt;
					&lt;th&gt;그 깊이의 물 밝기&lt;/th&gt;
					&lt;th&gt;차이&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;바다거북&lt;/td&gt;
					&lt;td&gt;127&lt;/td&gt;
					&lt;td&gt;130&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;3&lt;/strong&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;흡혈오징어&lt;/td&gt;
					&lt;td&gt;45&lt;/td&gt;
					&lt;td&gt;20&lt;/td&gt;
					&lt;td&gt;25&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;심해는 물 밝기가 20 아래인데 심해어도 어둡습니다. &lt;strong&gt;검은 배경에 검은 물체&lt;/strong&gt;였던 거죠.&lt;/p&gt;
&lt;p&gt;그래서 &lt;strong&gt;바늘에 심해 랜턴&lt;/strong&gt;을 달았습니다. 미끼 주변을 비추니 물고기가 보이고, 심해 낚시 분위기도 살았어요. 물고기 외곽에 은은한 발광 테두리도 더했고요.&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;감으로 스프라이트를 다시 뽑았으면 시간만 날렸을 겁니다. 재보니 문제는 완전히 다른 곳에 있었어요.&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h2 id="줄은-그대로인데-물고기만-올라갔다"&gt;줄은 그대로인데 물고기만 올라갔다
&lt;/h2&gt;&lt;p&gt;끌어올릴 때 뭔가 따로 노는 느낌이라 코드를 열어봤더니, 줄 끝이 화면 중앙에 &lt;strong&gt;고정&lt;/strong&gt;돼 있었습니다. 물고기만 위로 움직이니 둘이 분리돼 보인 거예요.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;줄 끝을 &lt;strong&gt;물고기 입에 고정&lt;/strong&gt;했습니다. 올라오면 줄도 같이 짧아져요&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;장력에 따라 줄 모양이 변합니다&lt;/strong&gt; — 팽팽하면 직선, 느슨하면 축 처진 곡선, 한계 근처면 &lt;strong&gt;붉게 굵어짐&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;끌어올린 만큼 &lt;strong&gt;깊이 숫자도 줄고&lt;/strong&gt;, 덤으로 &lt;strong&gt;물이 밝아집니다&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt="잡은 순간 — 정확도 보너스까지" class="gallery-image" data-flex-basis="138px" data-flex-grow="57" height="1252" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://junstellar.github.io/p/ai-game-lab-build-8/deep-fishing-catch.webp" width="720"&gt;&lt;/p&gt;
&lt;h2 id="그래도-뭔가-계속-아쉬웠다--세-번째-진단"&gt;그래도 뭔가 계속 아쉬웠다 — 세 번째 진단
&lt;/h2&gt;&lt;p&gt;여기까지 고쳤는데도 뭔가 계속 아쉬웠습니다. 이번엔 감으로 짚지 않고 &lt;strong&gt;처음부터 코드를 뒤졌어요.&lt;/strong&gt; 세 가지가 나왔습니다.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;① 물고기가 헤엄치지 않았다.&lt;/strong&gt; 코드에 &lt;strong&gt;회전이 단 한 곳도 없었습니다.&lt;/strong&gt; 정지 이미지가 미끄러져 다니는 상태였죠. 헤엄칠 때 몸을 기울이고 발버둥칠 때 몸을 확 트는 것만 넣었는데 완전히 달라졌습니다.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;② 심해로 가는 여정이 없었다.&lt;/strong&gt; 하강 코드가 이랬어요.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-js" data-lang="js"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;curDepth&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;max&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;targetDepth&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mf"&gt;0.012&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;// 항상 1.4초
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;100m든 1,200m든 하강 시간이 똑같았습니다.&lt;/strong&gt; 심해 낚시인데 심해로 가는 느낌이 0이었죠. 깊이 비례 하강(최대 3.5초)으로 바꾸고, 배경이 위로 흐르게 하고, &lt;strong&gt;&lt;code&gt;200m 황혼대&lt;/code&gt; &lt;code&gt;500m 심해층&lt;/code&gt; &lt;code&gt;900m 심연&lt;/code&gt;&lt;/strong&gt; 이정표가 스쳐 지나가게 했습니다.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;③ 줄이 허공에서 시작했다.&lt;/strong&gt; 배도 수면도 없었어요. &lt;strong&gt;배와 물결&lt;/strong&gt;을 넣고 줄이 배에서 내려오게 했습니다. 깊어지면 수면이 어둠 속으로 사라지고, 끌어올리면 다시 나타나요.&lt;/p&gt;
&lt;p&gt;&lt;img alt="내려가는 중 — 구간 이정표가 스쳐 지나간다" class="gallery-image" data-flex-basis="164px" data-flex-grow="68" height="1050" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://junstellar.github.io/p/ai-game-lab-build-8/deep-fishing-descent.webp" width="720"&gt;&lt;/p&gt;
&lt;h2 id="크기가-무게를-말해준다"&gt;크기가 무게를 말해준다
&lt;/h2&gt;&lt;p&gt;물고기 크기를 &lt;strong&gt;희귀도&lt;/strong&gt; 기준으로 잡았더니 &lt;strong&gt;1kg 복어가 900kg 고래상어만 하게&lt;/strong&gt; 보였습니다. 무게(로그) 기준으로 바꾸고, &lt;strong&gt;입질 전에 무게를 미리 굴려서&lt;/strong&gt; 보이는 크기와 실제 잡는 무게를 일치시켰어요. 이제 화면만 봐도 대물인지 잔챙이인지 압니다.&lt;/p&gt;
&lt;h2 id="밀당을-넣었다가-게임을-망칠-뻔했다"&gt;밀당을 넣었다가 게임을 망칠 뻔했다
&lt;/h2&gt;&lt;p&gt;마지막에 &lt;strong&gt;물고기가 아래로 파고드는 순간&lt;/strong&gt;(손을 떼고 버텨야 하는)을 넣었습니다. 그런데 시뮬레이션을 돌려보니:&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;&lt;/th&gt;
					&lt;th&gt;넣기 전&lt;/th&gt;
					&lt;th&gt;넣은 직후&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;포획률&lt;/td&gt;
					&lt;td&gt;83%&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;33%&lt;/strong&gt;&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;포획률이 반토막 났고&lt;/strong&gt; 파이팅이 교착에 빠져 아예 안 끝나는 경우까지 생겼습니다. 저항력·진행도 손실·발동 횟수를 모두 낮춰 되돌렸어요. 지금은 긴장감만 주고 난이도는 그대로입니다.&lt;/p&gt;
&lt;p&gt;이번에도 &lt;strong&gt;&amp;ldquo;재미있을 것 같아서&amp;rdquo; 넣은 기능이 게임을 망가뜨릴 뻔한 걸 숫자가 잡아줬습니다.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="이제-게임-랩이-8개"&gt;이제 게임 랩이 8개
&lt;/h2&gt;&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;&lt;/th&gt;
					&lt;th&gt;게임&lt;/th&gt;
					&lt;th&gt;성격&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;🎨&lt;/td&gt;
					&lt;td&gt;&lt;a class="link" href="https://junstellar.github.io/games/guess-image/" &gt;AI 그림 맞히기&lt;/a&gt;&lt;/td&gt;
					&lt;td&gt;머리 (퀴즈)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;🟩&lt;/td&gt;
					&lt;td&gt;&lt;a class="link" href="https://junstellar.github.io/games/hangul-word/" &gt;한글 단어 맞히기&lt;/a&gt;&lt;/td&gt;
					&lt;td&gt;습관 (데일리)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;🍰&lt;/td&gt;
					&lt;td&gt;&lt;a class="link" href="https://junstellar.github.io/games/stack-tower/" &gt;디저트 탑 쌓기&lt;/a&gt;&lt;/td&gt;
					&lt;td&gt;손맛 (아케이드)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;🕹️&lt;/td&gt;
					&lt;td&gt;&lt;a class="link" href="https://junstellar.github.io/games/dodge/" &gt;낙하 회피&lt;/a&gt;&lt;/td&gt;
					&lt;td&gt;반사신경 (액션)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;🗑️&lt;/td&gt;
					&lt;td&gt;&lt;a class="link" href="https://junstellar.github.io/games/paper-hoop/" &gt;종이 농구&lt;/a&gt;&lt;/td&gt;
					&lt;td&gt;조준 (물리)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;🪐&lt;/td&gt;
					&lt;td&gt;&lt;a class="link" href="https://junstellar.github.io/games/space-merge/" &gt;우주 진화&lt;/a&gt;&lt;/td&gt;
					&lt;td&gt;최고점 (병합 퍼즐)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;🚂&lt;/td&gt;
					&lt;td&gt;&lt;a class="link" href="https://junstellar.github.io/games/shunting/" &gt;조차장&lt;/a&gt;&lt;/td&gt;
					&lt;td&gt;논리 (3D 퍼즐)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;🎣&lt;/td&gt;
					&lt;td&gt;&lt;a class="link" href="https://junstellar.github.io/games/deep-fishing/" &gt;심해 낚시&lt;/a&gt;&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;수집 (도감)&lt;/strong&gt;&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="이번-편에서-배운-것"&gt;이번 편에서 배운 것
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;&amp;ldquo;뭔가 어색하다&amp;quot;는 느낌은 그 자체로는 정보가 아닙니다. 하지만 그 아래엔 항상 구체적인 원인이 있어요.&lt;/strong&gt; 이번엔 세 번에 걸쳐 파고들었고, 그때마다 코드에서 원인을 찾았습니다 — 회전이 없었고, 하강 시간이 고정이었고, 줄 끝 좌표가 고정이었죠. 전부 &lt;strong&gt;한두 줄짜리 원인&lt;/strong&gt;이었습니다.&lt;/p&gt;
&lt;p&gt;그리고 한 번은 &lt;strong&gt;제가 짚은 원인이 틀렸어요.&lt;/strong&gt; &amp;ldquo;배경 제거가 실패했나?&amp;rdquo; 싶었는데 재보니 대비 문제였습니다. 고치기 전에 재보는 게 훨씬 빨랐습니다.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;&lt;a class="link" href="https://junstellar.github.io/games/deep-fishing/" &gt;심해 낚시 한 판&lt;/a&gt;&lt;/strong&gt; 해보시고 몇 종이나 잡았는지 알려주세요. 저는 아직 &lt;strong&gt;크라켄&lt;/strong&gt;을 못 봤습니다. 🐉&lt;/p&gt;
&lt;p&gt;&lt;em&gt;다음 편엔 아홉 번째 게임을 들고 오겠습니다.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>AI로 게임 만들기 #6 — 먼지에서 은하까지, 합쳐서 진화시키는 퍼즐 (공개빌드 #6)</title><link>https://junstellar.github.io/p/ai-game-lab-build-6/</link><pubDate>Mon, 03 Aug 2026 09:00:00 +0900</pubDate><guid>https://junstellar.github.io/p/ai-game-lab-build-6/</guid><description>&lt;p&gt;&lt;a class="link" href="https://junstellar.github.io/p/ai-game-lab-build-5/" &gt;지난 편&lt;/a&gt;의 종이 농구에 이어, 여섯 번째 게임은 &lt;strong&gt;우주 진화&lt;/strong&gt;입니다. 같은 천체끼리 합치면 한 단계씩 진화하는 낙하 퍼즐이에요. ✨먼지에서 시작해서 🌌은하까지 갑니다.&lt;/p&gt;
&lt;p&gt;이번 편의 진짜 이야기는 게임 자체보다 &lt;strong&gt;&amp;ldquo;너무 쉽다&amp;quot;는 피드백을 어떻게 잡았나&lt;/strong&gt;입니다. 결론부터 말하면, 감으로 고치지 않고 &lt;strong&gt;시뮬레이션을 돌렸어요.&lt;/strong&gt;&lt;/p&gt;
&lt;video autoplay loop muted playsinline preload="metadata" poster="/p/ai-game-lab-build-6/space-merge-play-poster.webp" style="width:100%;max-width:420px;display:block;margin:1.2rem auto;border-radius:14px;box-shadow:0 6px 24px rgba(0,0,0,.25)"&gt;
 &lt;source src="https://junstellar.github.io/p/ai-game-lab-build-6/space-merge-play.mp4" type="video/mp4"&gt;
&lt;/video&gt;
&lt;p&gt;👉 &lt;strong&gt;&lt;a class="link" href="https://junstellar.github.io/games/space-merge/" &gt;우주 진화 직접 하러 가기&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="어떤-게임이냐면"&gt;어떤 게임이냐면
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;탭해서 천체를 떨어뜨리면&lt;/strong&gt;, 같은 것끼리 닿을 때 &lt;strong&gt;합쳐지며 진화&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;✨먼지 → ☄️운석 → 소행성 → 🌑달 → 화성 → 🌍지구 → 목성 → 🪐토성 → 갈색왜성 → ⭐항성 → 🌌&lt;strong&gt;은하&lt;/strong&gt; (11단계)&lt;/li&gt;
&lt;li&gt;연달아 합치면 &lt;strong&gt;🔥ON FIRE&lt;/strong&gt;(2배 점수), &lt;strong&gt;보관(HOLD)&lt;/strong&gt; 한 칸에 넣어뒀다 나중에 쓰기&lt;/li&gt;
&lt;li&gt;통 위로 넘치면 끝. 📅&lt;strong&gt;데일리 챌린지&lt;/strong&gt;는 그날 모두 같은 순서로 나옵니다&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt="ON FIRE — 연쇄로 합치면 2배 점수" class="gallery-image" data-flex-basis="157px" data-flex-grow="65" height="1095" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://junstellar.github.io/p/ai-game-lab-build-6/space-merge-fire.webp" width="720"&gt;&lt;/p&gt;
&lt;h2 id="천체는-우리-집-그래픽카드가-그렸다"&gt;천체는 우리 집 그래픽카드가 그렸다
&lt;/h2&gt;&lt;p&gt;11종 전부 &lt;a class="link" href="https://junstellar.github.io/p/claude-local-image-generation/" &gt;예전에 깔아둔 ComfyUI&lt;/a&gt;로 뽑았습니다. 그런데 생성만으로 끝이 아니었어요:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;배경이 회색인 이미지가 섞여 있어서, 원형으로 자르니 &lt;strong&gt;천체 주위에 회색 접시&lt;/strong&gt;가 생김 → 배경색을 자동 감지해 &lt;strong&gt;투명 처리&lt;/strong&gt;하고 물체에 딱 맞게 다시 크롭&lt;/li&gt;
&lt;li&gt;달이 &lt;strong&gt;초승달처럼 그림자&lt;/strong&gt;가 져서 혼자 어색함 → &amp;ldquo;정면 균일 조명&amp;quot;으로 다시 생성 (세 번 만에 성공)&lt;/li&gt;
&lt;li&gt;화성이 한 장에 &lt;strong&gt;네 개&lt;/strong&gt; 들어가 있기도 했고, 목성은 배경 불꽃까지 딸려와서 더 확대해 잘라냄&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;AI가 그려준 걸 그대로 쓰는 게 아니라, &lt;strong&gt;게임에 맞게 다듬는 작업이 절반&lt;/strong&gt;이더라고요.&lt;/p&gt;
&lt;h2 id="너무-쉽다--감이-아니라-숫자로-잡기"&gt;&amp;ldquo;너무 쉽다&amp;rdquo; — 감이 아니라 숫자로 잡기
&lt;/h2&gt;&lt;p&gt;처음 만들고 나서 &amp;ldquo;좀 쉬운데?&amp;ldquo;라는 얘기를 들었습니다. 예전 같으면 대충 값을 바꿔봤겠지만, 이번엔 &lt;strong&gt;게임을 자동으로 플레이시켜서 측정&lt;/strong&gt;했어요. 아무렇게나 던지는 플레이어와, 같은 천체 근처에 놓는 플레이어를 각각 여러 판 돌렸습니다.&lt;/p&gt;
&lt;p&gt;결과가 충격적이었어요:&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;아무렇게나 던져도 매판 9번째 단계까지 도달하고, 한 판이 156번이나 이어짐&lt;/strong&gt;&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;원인도 숫자로 나왔습니다. &lt;strong&gt;합칠 때마다 공간이 22%씩 남고 있었어요.&lt;/strong&gt; 반지름이 1.25배씩 커지게 해놨는데, 그러면 두 개(면적 2)가 합쳐져도 1.56밖에 안 되거든요. 즉 &lt;strong&gt;합칠수록 통이 비어서&lt;/strong&gt; 영원히 안 차는 구조였습니다. 면적이 유지되려면 √2 ≈ 1.41배여야 했어요.&lt;/p&gt;
&lt;h2 id="12가지-조합을-다-돌려보고-고름"&gt;12가지 조합을 다 돌려보고 고름
&lt;/h2&gt;&lt;p&gt;반지름·통 크기·낙하 분포를 조합한 &lt;strong&gt;12가지 설정을 전부 시뮬레이션&lt;/strong&gt;해서 제일 나은 걸 골랐습니다. 기준은 두 가지였어요 — &lt;em&gt;판이 너무 늘어지지 않을 것&lt;/em&gt;, 그리고 &lt;em&gt;잘하는 사람이 확실히 더 잘 나올 것&lt;/em&gt;.&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;&lt;/th&gt;
					&lt;th&gt;무작위 플레이&lt;/th&gt;
					&lt;th&gt;도달 단계&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;처음&lt;/td&gt;
					&lt;td&gt;156번 만에 종료&lt;/td&gt;
					&lt;td&gt;9단계&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;고친 뒤&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;63번&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;6단계&lt;/strong&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;하드&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;48번&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;5단계&lt;/strong&gt;&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;중간에 재밌는 일도 있었어요. 하드에서 &amp;ldquo;전략적으로 두는 쪽이 아무렇게나 던지는 쪽보다 못하다&amp;quot;는 이상한 결과가 나왔거든요. 표본을 3판에서 8판으로 늘려 다시 돌리니 **그냥 운빨(노이즈)**이었습니다. 3판만 보고 튜닝했으면 엉뚱하게 고칠 뻔했어요.&lt;/p&gt;
&lt;h2 id="하드는-3개를-모아야-합쳐집니다"&gt;하드는 3개를 모아야 합쳐집니다
&lt;/h2&gt;&lt;p&gt;난이도를 이지/노멀/하드로 나눴는데, &lt;strong&gt;하드는 규칙 자체가 다릅니다&lt;/strong&gt; — 2개가 아니라 &lt;strong&gt;3개가 붙어야&lt;/strong&gt; 합쳐져요. 트리플 타운 같은 방식이죠. 이거 하나로 점수가 1/4로 떨어질 만큼 어려워집니다.&lt;/p&gt;
&lt;p&gt;구현은 맞닿은 같은 등급 천체들을 &lt;strong&gt;하나의 덩어리로 묶어서&lt;/strong&gt; 3개 이상이면 합치는 방식이라, 일렬이든 삼각형이든 붙어 있기만 하면 됩니다.&lt;/p&gt;
&lt;p&gt;&lt;img alt="게임 결과 화면 — 최고 단계와 기록" class="gallery-image" data-flex-basis="157px" data-flex-grow="65" height="1095" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://junstellar.github.io/p/ai-game-lab-build-6/space-merge-result.webp" width="720"&gt;&lt;/p&gt;
&lt;h2 id="이번-편에서-배운-것"&gt;이번 편에서 배운 것
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;&amp;ldquo;재미있나?&amp;ldquo;는 취향이지만, &amp;ldquo;너무 쉬운가?&amp;ldquo;는 측정할 수 있습니다.&lt;/strong&gt; 게임을 스스로 플레이하게 만들어 몇 판 돌려보면 숫자가 나오고, 그 숫자를 보고 고치면 훨씬 빠르고 정확해요. 이번엔 그 덕에 **&amp;ldquo;합칠수록 공간이 남는다&amp;rdquo;**는, 그냥 플레이해서는 절대 몰랐을 원인을 찾았습니다.&lt;/p&gt;
&lt;h2 id="이제-게임-랩이-6개"&gt;이제 게임 랩이 6개
&lt;/h2&gt;&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;&lt;/th&gt;
					&lt;th&gt;게임&lt;/th&gt;
					&lt;th&gt;성격&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;🎨&lt;/td&gt;
					&lt;td&gt;&lt;a class="link" href="https://junstellar.github.io/games/guess-image/" &gt;AI 그림 맞히기&lt;/a&gt;&lt;/td&gt;
					&lt;td&gt;머리 (퀴즈)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;🟩&lt;/td&gt;
					&lt;td&gt;&lt;a class="link" href="https://junstellar.github.io/games/hangul-word/" &gt;한글 단어 맞히기&lt;/a&gt;&lt;/td&gt;
					&lt;td&gt;습관 (데일리)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;🍰&lt;/td&gt;
					&lt;td&gt;&lt;a class="link" href="https://junstellar.github.io/games/stack-tower/" &gt;디저트 탑 쌓기&lt;/a&gt;&lt;/td&gt;
					&lt;td&gt;손맛 (아케이드)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;🕹️&lt;/td&gt;
					&lt;td&gt;&lt;a class="link" href="https://junstellar.github.io/games/dodge/" &gt;낙하 회피&lt;/a&gt;&lt;/td&gt;
					&lt;td&gt;반사신경 (액션)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;🗑️&lt;/td&gt;
					&lt;td&gt;&lt;a class="link" href="https://junstellar.github.io/games/paper-hoop/" &gt;종이 농구&lt;/a&gt;&lt;/td&gt;
					&lt;td&gt;조준 (물리)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;🪐&lt;/td&gt;
					&lt;td&gt;&lt;a class="link" href="https://junstellar.github.io/games/space-merge/" &gt;우주 진화&lt;/a&gt;&lt;/td&gt;
					&lt;td&gt;최고점 (병합 퍼즐)&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;&lt;a class="link" href="https://junstellar.github.io/games/space-merge/" &gt;우주 진화 한 판&lt;/a&gt;&lt;/strong&gt; 해보시고 어디까지 갔는지 알려주세요. 저는 아직 &lt;strong&gt;은하&lt;/strong&gt;를 못 봤습니다. 🌌&lt;/p&gt;
&lt;p&gt;&lt;em&gt;다음 편엔 일곱 번째 게임을 들고 오겠습니다.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>AI로 게임 만들기 #5 — 휴지통에 종이 던지기, 근데 '진짜 게임처럼' (공개빌드 #5)</title><link>https://junstellar.github.io/p/ai-game-lab-build-5/</link><pubDate>Tue, 28 Jul 2026 09:00:00 +0900</pubDate><guid>https://junstellar.github.io/p/ai-game-lab-build-5/</guid><description>&lt;p&gt;&lt;a class="link" href="https://junstellar.github.io/p/ai-game-lab-build-4/" &gt;지난 편&lt;/a&gt;까지 게임 랩엔 네 개가 쌓였습니다 — 🎨 그림 퀴즈, 🟩 한글 워들, 🍰 디저트 탑, 🕹️ 낙하 회피. 다섯 번째는 &lt;strong&gt;종이 농구&lt;/strong&gt;예요. 근데 이번 편은 좀 다릅니다. 새 게임을 하나 더 늘리기보다, &lt;strong&gt;게임 하나를 &amp;ldquo;그냥 되는&amp;rdquo; 상태에서 &amp;ldquo;진짜 게임처럼&amp;quot;까지 다듬는 것&lt;/strong&gt;에 집중했거든요.&lt;/p&gt;
&lt;p&gt;말보다 보는 게 빠르니 &lt;strong&gt;플레이 영상&lt;/strong&gt;부터 👇&lt;/p&gt;
&lt;video autoplay loop muted playsinline preload="metadata" poster="/p/ai-game-lab-build-5/paper-hoop-play-poster.webp" style="width:100%;max-width:420px;display:block;margin:1.2rem auto;border-radius:14px;box-shadow:0 6px 24px rgba(0,0,0,.25)"&gt;
 &lt;source src="https://junstellar.github.io/p/ai-game-lab-build-5/paper-hoop-play.mp4" type="video/mp4"&gt;
&lt;/video&gt;
&lt;p&gt;👉 &lt;strong&gt;&lt;a class="link" href="https://junstellar.github.io/games/paper-hoop/" &gt;종이 농구 직접 하러 가기&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="어떤-게임이냐면"&gt;어떤 게임이냐면
&lt;/h2&gt;&lt;p&gt;3초컷입니다:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;구겨진 종이를 &lt;strong&gt;화면 아무 곳이나 당겼다 놓아&lt;/strong&gt; 휴지통에 골인 (공을 안 짚어도 돼요)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;가운데로 쏙 = 스월(2점)&lt;/strong&gt;, 림이나 백보드 맞고 들어가면 &lt;strong&gt;뱅크(1점)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;바람&lt;/strong&gt; 주의! 연속 골인하면 &lt;strong&gt;🔥 ON FIRE&lt;/strong&gt;(2배 점수)&lt;/li&gt;
&lt;li&gt;3번 놓치면 끝. 점수는 누적·최고 기록·연속 출석까지 다른 게임처럼 쌓여요&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="처음엔-게임-같지가-않았다"&gt;처음엔 &amp;ldquo;게임 같지가 않았다&amp;rdquo;
&lt;/h2&gt;&lt;p&gt;솔직히 첫 버전은 별로였어요. 발사가 너무 빨라서 종이가 &lt;strong&gt;번쩍 사라지는&lt;/strong&gt; 수준이라 손맛이 0이었죠. 그래서:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;비행을 &lt;strong&gt;2배 느리게&lt;/strong&gt;(궤적·난이도는 그대로, 보이는 속도만)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;잔상 꼬리&lt;/strong&gt; + 바닥 그림자 + 빗나가면 &lt;strong&gt;바닥에 튕기는&lt;/strong&gt; 마무리&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;이것만 넣었는데 바로 &amp;ldquo;오, 게임이네&amp;rdquo; 소리가 나왔습니다. &lt;strong&gt;완성도의 8할은 손맛&lt;/strong&gt;이더라고요.&lt;/p&gt;
&lt;h2 id="그다음-고퀄로-끝까지-밀어봤다"&gt;그다음 &amp;lsquo;고퀄&amp;rsquo;로 끝까지 밀어봤다
&lt;/h2&gt;&lt;p&gt;여기서 멈춰도 됐는데, 어디까지 되나 궁금해서 다 넣어봤어요:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;🔊 &lt;strong&gt;사운드&lt;/strong&gt; — 에셋 파일 &lt;strong&gt;0개&lt;/strong&gt;. WebAudio로 발사 &amp;ldquo;휘익&amp;rdquo;, 스월 &amp;ldquo;사악~&amp;rdquo;, 뱅크 &amp;ldquo;통-딩&amp;quot;을 &lt;strong&gt;코드로 합성&lt;/strong&gt;했습니다&lt;/li&gt;
&lt;li&gt;🏀 &lt;strong&gt;물리&lt;/strong&gt; — 좌우 림에 튕겨 덜덜거리는 &lt;strong&gt;in&amp;amp;out&lt;/strong&gt;, 뒤 &lt;strong&gt;백보드 뱅크샷&lt;/strong&gt;, 입구엔 &lt;strong&gt;천 네트가 출렁&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;🔥 &lt;strong&gt;ON FIRE&lt;/strong&gt; — 연속 골인으로 게이지가 차고, 만렙이면 &lt;strong&gt;공에 불붙고 2배&lt;/strong&gt; (NBA Jam 오마주)&lt;/li&gt;
&lt;li&gt;🎯 &lt;strong&gt;3점 라인&lt;/strong&gt; — 먼 통일수록 고득점. **백스핀(마그누스)**으로 궤적이 살짝 휘어요&lt;/li&gt;
&lt;li&gt;✨ 그 외 히트스톱·카메라 펀치줌·리본 잔상 같은 자잘한 &lt;strong&gt;연출 주스&lt;/strong&gt;까지&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="우리-집-그래픽카드가-배경을-그렸다"&gt;우리 집 그래픽카드가 배경을 그렸다
&lt;/h2&gt;&lt;p&gt;제일 좋아하는 부분이에요. 배경 사무실 일러스트를 &lt;strong&gt;집에 있는 그래픽카드(ComfyUI/SDXL)로 직접 뽑아서&lt;/strong&gt; 깔았습니다. &lt;a class="link" href="https://junstellar.github.io/p/claude-local-image-generation/" &gt;예전에 노트북에 ComfyUI를 깔아둔 것&lt;/a&gt;을 이렇게 써먹네요. 브라우저에서 바로 돌아가는 가벼운 게임인데도 배경은 손그림풍이죠. 여기에 &lt;strong&gt;낮/밤 테마&lt;/strong&gt;까지 붙였어요.&lt;/p&gt;
&lt;p&gt;&lt;img alt="밤 테마 + ON FIRE — 불붙은 종이공" class="gallery-image" data-flex-basis="185px" data-flex-grow="77" height="930" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://junstellar.github.io/p/ai-game-lab-build-5/paper-hoop-fire.webp" width="720"&gt;&lt;/p&gt;
&lt;h2 id="오래-붙잡는-장치들"&gt;오래 붙잡는 장치들
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;📅 &lt;strong&gt;데일리 챌린지&lt;/strong&gt; — 날짜 시드라 그날은 &lt;strong&gt;모두 같은 통·바람&lt;/strong&gt;. &amp;ldquo;오늘 몇 점?&amp;rdquo; 공유용&lt;/li&gt;
&lt;li&gt;🏅 &lt;strong&gt;업적&lt;/strong&gt; · 🖼️ &lt;strong&gt;결과를 이미지 카드로 공유&lt;/strong&gt; · ▶️ &lt;strong&gt;베스트 샷 리플레이&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;♿ &lt;strong&gt;접근성&lt;/strong&gt; — 멀미 방지(모션 축소 존중), 색약 안전 파워 표시&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="마지막에-배운-것-작은-ux가-게임을-살린다"&gt;마지막에 배운 것: 작은 UX가 게임을 살린다
&lt;/h2&gt;&lt;p&gt;다 만들고 플레이하다가 치명적인 걸 발견했어요. 슬링샷이 &lt;strong&gt;공(좌하단 구석) 기준&lt;/strong&gt;이라 뒤로 당길 공간이 없었던 거예요. 그래서 **&amp;ldquo;화면 아무 곳이나 짚고 상대적으로 당기기&amp;rdquo;**로 바꾸니 완전히 달라졌습니다. 화려한 기능 20개보다 &lt;strong&gt;이 한 줄짜리 조작 수정&lt;/strong&gt;이 체감이 훨씬 컸어요.&lt;/p&gt;
&lt;h2 id="이제-게임-랩이-5개"&gt;이제 게임 랩이 5개
&lt;/h2&gt;&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;&lt;/th&gt;
					&lt;th&gt;게임&lt;/th&gt;
					&lt;th&gt;성격&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;🎨&lt;/td&gt;
					&lt;td&gt;&lt;a class="link" href="https://junstellar.github.io/games/guess-image/" &gt;AI 그림 맞히기&lt;/a&gt;&lt;/td&gt;
					&lt;td&gt;머리 (퀴즈)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;🟩&lt;/td&gt;
					&lt;td&gt;&lt;a class="link" href="https://junstellar.github.io/games/hangul-word/" &gt;한글 단어 맞히기&lt;/a&gt;&lt;/td&gt;
					&lt;td&gt;습관 (데일리)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;🍰&lt;/td&gt;
					&lt;td&gt;&lt;a class="link" href="https://junstellar.github.io/games/stack-tower/" &gt;디저트 탑 쌓기&lt;/a&gt;&lt;/td&gt;
					&lt;td&gt;손맛 (아케이드)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;🕹️&lt;/td&gt;
					&lt;td&gt;&lt;a class="link" href="https://junstellar.github.io/games/dodge/" &gt;낙하 회피&lt;/a&gt;&lt;/td&gt;
					&lt;td&gt;반사신경 (액션)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;🗑️&lt;/td&gt;
					&lt;td&gt;&lt;a class="link" href="https://junstellar.github.io/games/paper-hoop/" &gt;종이 농구&lt;/a&gt;&lt;/td&gt;
					&lt;td&gt;조준 (물리)&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;머리·습관·손맛·반사신경·조준 — &lt;a class="link" href="https://junstellar.github.io/games/" &gt;게임 랩&lt;/a&gt;이 5색이 됐습니다.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;&lt;a class="link" href="https://junstellar.github.io/games/paper-hoop/" &gt;종이 농구 한 판&lt;/a&gt;&lt;/strong&gt; 하고 몇 점인지 알려주세요. 스월로 3연속 넣으면 불붙습니다. 🔥&lt;/p&gt;
&lt;p&gt;&lt;em&gt;다음 편엔 여섯 번째 게임을 들고 오겠습니다.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>AI로 게임 만들어 돈 벌기, 진짜 될까? — 혼자 그림 퀴즈 게임 만든 이야기 (공개빌드 #1)</title><link>https://junstellar.github.io/p/ai-game-lab-build-1/</link><pubDate>Mon, 06 Jul 2026 22:00:00 +0900</pubDate><guid>https://junstellar.github.io/p/ai-game-lab-build-1/</guid><description>&lt;p&gt;얼마 전 유튜브를 보다가 우연히 흥미로운 이야기를 봤습니다. 어떤 사람이 &lt;strong&gt;AI로 며칠 만에 만든&lt;/strong&gt; 브라우저 비행 게임 하나로 &lt;strong&gt;큰돈을 벌었다&lt;/strong&gt;는 거예요. &lt;strong&gt;fly.pieter.com&lt;/strong&gt; 이라는 게임이었죠. 그래픽이 대단한 것도 아닌데, 게임 속 하늘에 뜬 &lt;strong&gt;광고판 자리를 팔아&lt;/strong&gt; 수익을 냈다고 하더라고요.&lt;/p&gt;
&lt;p&gt;만든 사람은 &lt;strong&gt;피터 레벨스(Pieter Levels)&lt;/strong&gt;, 네덜란드의 1인 개발자입니다. 투자도 직원도 없이 &lt;strong&gt;혼자&lt;/strong&gt; 여러 서비스(Nomad List, Remote OK, PhotoAI 등)를 만들어 운영하는 사람인데, 방식이 인상적이었어요 — &lt;strong&gt;혼자, 빠르게&lt;/strong&gt; 만들고, 첫날부터 매출을 내고, 기술은 극단적으로 단순하게 가고, 무엇보다 &lt;strong&gt;만드는 과정을 매일 공개(build in public)&lt;/strong&gt; 합니다. fly.pieter.com도 AI(이른바 &amp;lsquo;바이브 코딩&amp;rsquo;)로 뚝딱 만들어 그 과정을 공유하며 키운 게임이었죠.&lt;/p&gt;
&lt;p&gt;그 영상을 보고 나니 이런 생각이 들었습니다. &lt;em&gt;&amp;ldquo;나도 뭐라도 하나 더 해봐야겠다. 그럼… 게임을 한번 만들어볼까?&amp;rdquo;&lt;/em&gt; 이 글은 그 생각으로 실제로 만들어 본 게임 이야기입니다.&lt;/p&gt;
&lt;h2 id="내가-이-이야기에서-얻은-것"&gt;내가 이 이야기에서 얻은 것
&lt;/h2&gt;&lt;p&gt;솔직히 처음엔 &amp;lsquo;큰돈 벌었다&amp;rsquo;는 대목에 혹했습니다. 그런데 며칠 곱씹어 보니, 정작 제 마음에 남은 건 돈이 아니라 &lt;strong&gt;태도&lt;/strong&gt;였어요.&lt;/p&gt;
&lt;p&gt;거창한 계획이나 완벽한 결과물부터 준비하는 게 아니라, &lt;strong&gt;일단 작게 시작해서 만드는 과정을 공개하고, 거기서부터 한 걸음씩 쌓아 올린다&lt;/strong&gt; — 이 방식이요. 결과가 어떻게 되든, 시작을 해보고 그 과정을 기록으로 남기는 것만으로도 분명 남는 게 있겠다는 마음이 생겼습니다.&lt;/p&gt;
&lt;p&gt;마음을 그렇게 먹고 나니 방향은 분명해졌어요. 거창한 3D 게임 같은 건 한참 나중 일이고, 지금은 &lt;strong&gt;작고, 나만 할 수 있고, 재미있는&lt;/strong&gt; 걸 하나 만들어서 그 과정을 여기에 공개하기로요. 그렇게 만들기 시작했습니다.&lt;/p&gt;
&lt;h2 id="그래서-고른-전략--내-무기는-집에-있는-gpu"&gt;그래서 고른 전략 — 내 무기는 &amp;lsquo;집에 있는 GPU&amp;rsquo;
&lt;/h2&gt;&lt;p&gt;남들이 쉽게 못 하는 걸 해야 승산이 있죠. 저한테는 남들에게 없는 무기가 하나 있습니다. 바로 &lt;a class="link" href="https://junstellar.github.io/p/claude-local-image-generation/" &gt;지난 글에서 세팅한 &lt;strong&gt;집 게이밍 노트북의 로컬 이미지 생성기(ComfyUI)&lt;/strong&gt;&lt;/a&gt;예요.&lt;/p&gt;
&lt;p&gt;&amp;lsquo;AI 이미지로 하는 게임&amp;rsquo;은 보통 &lt;strong&gt;이미지 생성 API 비용&lt;/strong&gt; 때문에 개인이 하기 부담스럽습니다. 그런데 저는 RTX 4060 노트북으로 그림을 &lt;strong&gt;공짜로 무제한&lt;/strong&gt; 뽑을 수 있어요. 남들이 돈 때문에 못 하는 걸 전기값만 내고 하는 거죠. 이 무기를 살리는 게임이 뭘까 고민하다 나온 게 —&lt;/p&gt;
&lt;h2 id="첫-작품-ai-그림-맞히기"&gt;첫 작품: 「AI 그림 맞히기」
&lt;/h2&gt;&lt;p&gt;👉 &lt;strong&gt;지금 바로 플레이: &lt;a class="link" href="https://junstellar.github.io/games/guess-image/" &gt;AI 그림 맞히기&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;규칙은 단순합니다. &lt;strong&gt;AI가 그린 그림 한 장을 보고, 뭘 그린 건지 맞히면 됩니다.&lt;/strong&gt; 예를 들면 이런 그림들이에요.&lt;/p&gt;
&lt;p&gt;&lt;img alt="우주복 입은 고양이" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://junstellar.github.io/games/guess-image/img/astro-cat.webp"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="초밥으로 만든 용" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://junstellar.github.io/games/guess-image/img/sushi-dragon.webp"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="수박 속 바다" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://junstellar.github.io/games/guess-image/img/watermelon-sea.webp"&gt;&lt;/p&gt;
&lt;p&gt;(정답은&amp;hellip; 직접 맞혀보세요 😏)&lt;/p&gt;
&lt;p&gt;처음엔 4지선다 객관식으로 만들었는데, 테스트하던 지인이 **&amp;ldquo;이건 우리집 거북이도 맞히겠다&amp;rdquo;**고 해서 갈아엎었습니다. 그래서 지금은 이렇게 됐어요.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;한 문제에 기회 3번&lt;/strong&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;1차&lt;/strong&gt; — 그냥 직접 입력해서 맞히기 (&lt;code&gt;+3점&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;틀리면 &lt;strong&gt;힌트&lt;/strong&gt;를 주고 다시 (&lt;code&gt;+2점&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;또 틀리면 마지막으로 &lt;strong&gt;객관식&lt;/strong&gt; (&lt;code&gt;+1점&lt;/code&gt;)&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;빨리 맞힐수록 고득점, 최종 &lt;strong&gt;총점 /15&lt;/strong&gt;로 마무리&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;연속 출석&lt;/strong&gt;과 &lt;strong&gt;누적 점수&lt;/strong&gt;가 기기에 쌓이고 (계정·로그인 없이)&lt;/li&gt;
&lt;li&gt;결과는 &lt;code&gt;🟩🟨🟧🟥&lt;/code&gt; 이모지로 만들어 &lt;strong&gt;한 번에 공유&lt;/strong&gt; (워들 방식)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;현재 문제는 &lt;strong&gt;30개&lt;/strong&gt;, 한 판에 그중 &lt;strong&gt;무작위 5개&lt;/strong&gt;가 나옵니다. 그래서 &amp;ldquo;다시 하기&amp;quot;를 누를 때마다 다른 그림이 나와요.&lt;/p&gt;
&lt;h2 id="이미지-30장-어떻게-만들었나--집-gpu로-공짜"&gt;이미지 30장, 어떻게 만들었나 — 집 GPU로 공짜
&lt;/h2&gt;&lt;p&gt;여기가 이 프로젝트의 핵심입니다. 문제로 쓸 그림 30장을 전부 &lt;strong&gt;집 노트북에서 직접&lt;/strong&gt; 뽑았어요.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ComfyUI + SDXL로 프롬프트를 주고 그림 생성 (&lt;strong&gt;장당 약 30초&lt;/strong&gt;)&lt;/li&gt;
&lt;li&gt;클라우드 API였으면 수십 장에 돈이 나갔겠지만, 로컬이라 &lt;strong&gt;전기값 빼고 0원&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;뽑은 PNG 30장(48MB)을 &lt;strong&gt;WebP로 변환&lt;/strong&gt;해서 총 &lt;strong&gt;2.2MB&lt;/strong&gt;로 압축 (웹에서 빠르게 뜨도록)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;마음에 안 드는 그림은 프롬프트만 고쳐서 다시 뽑으면 되니까, 문제 풀을 늘리는 비용이 사실상 공짜예요. &lt;strong&gt;&amp;ldquo;AI 이미지 게임&amp;quot;에 로컬 GPU가 왜 강력한 무기인지&lt;/strong&gt;가 여기서 드러납니다.&lt;/p&gt;
&lt;h2 id="왜-게임-하나가-아니라-게임-랩인가"&gt;왜 &amp;lsquo;게임 하나&amp;rsquo;가 아니라 &amp;lsquo;게임 랩&amp;rsquo;인가
&lt;/h2&gt;&lt;p&gt;이 게임은 사실 &lt;a class="link" href="https://junstellar.github.io/games/" &gt;&lt;strong&gt;AI 게임 랩&lt;/strong&gt;&lt;/a&gt;이라는 미니게임 &lt;strong&gt;라이브러리&lt;/strong&gt;의 1번 작품입니다. 게임 하나만 딸랑 만들지 않고 라이브러리로 만든 이유는 —&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;게임 하나가 안 터져도 &lt;strong&gt;라이브러리 자체가 자산&lt;/strong&gt;으로 남고&lt;/li&gt;
&lt;li&gt;**&amp;ldquo;AI로 게임을 계속 찍어내는 사람&amp;rdquo;**이라는 이야기가 공개빌드에 딱 맞기 때문입니다&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;구조도 그렇게 짰어요. 새 게임을 추가하려면 &lt;strong&gt;폴더 하나 복사 + 목록에 한 줄&lt;/strong&gt; 추가면 끝나고, 점수 공유·누적 기록 같은 공통 기능은 모든 게임이 나눠 쓰도록 만들었습니다. 앞으로 여기에 게임을 계속 얹을 겁니다.&lt;/p&gt;
&lt;h2 id="앞으로도-계속-쌓아-나가려고요"&gt;앞으로도 계속 쌓아 나가려고요
&lt;/h2&gt;&lt;p&gt;게임을 만드는 것보다, 사실 이걸 &lt;strong&gt;꾸준히 이어가는 것&lt;/strong&gt;이 더 어려운 일이겠죠. 그래서 저는 완성한 다음에 &amp;ldquo;이제 뭐 하지?&amp;ldquo;를 고민하는 대신, &lt;strong&gt;만드는 과정부터 이렇게 글로 남기기로&lt;/strong&gt; 했습니다. 이 글이 그 1편이고요.&lt;/p&gt;
&lt;p&gt;계획은 거창하지 않습니다.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;만드는 과정을 계속 &lt;strong&gt;공개&lt;/strong&gt;하고 (공개빌드)&lt;/li&gt;
&lt;li&gt;게임에 &lt;strong&gt;공유 기능을 내장&lt;/strong&gt;해서 (플레이한 사람이 결과를 편하게 나눌 수 있게)&lt;/li&gt;
&lt;li&gt;게임을 &lt;strong&gt;하나씩 계속 얹어서&lt;/strong&gt; 라이브러리를 키운다&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;내세울 결과는 아직 없습니다. 이제 막 1편이니까요. 하지만 &lt;strong&gt;한 걸음씩 꾸준히 쌓아 나가는 것&lt;/strong&gt;, 그게 지금 저한테 제일 중요한 일입니다.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;그러니 이 글의 마무리는 부탁으로 하겠습니다. 👇&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a class="link" href="https://junstellar.github.io/games/guess-image/" &gt;「AI 그림 맞히기」 한 판 해보기&lt;/a&gt;&lt;/strong&gt; — 몇 점 나오는지, 어떤 그림에서 빵 터졌는지 알려주시면 다음 편에 반영하겠습니다. 여러분이 놀아주는 게, 이 실험의 진짜 연료입니다. 🚀&lt;/p&gt;
&lt;p&gt;&lt;em&gt;다음 편엔 두 번째 게임을 들고 오겠습니다.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>클로드가 내 노트북에서 직접 그림을 그리게 만들기 — ComfyUI + SDXL 로컬 설치기</title><link>https://junstellar.github.io/p/claude-local-image-generation/</link><pubDate>Thu, 02 Jul 2026 23:30:00 +0900</pubDate><guid>https://junstellar.github.io/p/claude-local-image-generation/</guid><description>&lt;p&gt;클로드(Claude)는 텍스트 AI라서 스스로 그림을 그리지 못한다. 하지만 &lt;strong&gt;로컬 PC에서 돌아가는 이미지 생성 서버를 붙여주면&lt;/strong&gt;, &amp;ldquo;고양이 그려줘&amp;rdquo; 한마디로 클로드가 프롬프트를 다듬어 그림을 만들어내게 할 수 있다. 오늘은 게이밍 노트북(RTX 4060)에 ComfyUI + SDXL을 설치해서 이걸 실제로 구축한 과정을 정리한다. 비용은 0원, 인터넷 없이도 동작한다.&lt;/p&gt;
&lt;h2 id="어떤-도구로-그리게-할까--선택지-3개"&gt;어떤 도구로 그리게 할까 — 선택지 3개
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Automatic1111 WebUI (로컬)&lt;/strong&gt; — 전통적인 웹 UI라 직접 만지기엔 가장 쉽지만, 메모리 관리가 헐거워 VRAM 8GB에서 SDXL이 버겁다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;나노바나나 (클라우드, Gemini API)&lt;/strong&gt; — 설치 없이 API 키만 있으면 되고 품질도 좋지만, 장당 약 50원 + 인터넷 필수 + 워터마크가 박힌다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ComfyUI (로컬) ← 최종 선택&lt;/strong&gt; — 노드 UI가 낯설지만 어차피 클로드가 API로 호출하니 상관없다. 세 후보 중 &lt;strong&gt;VRAM 효율이 가장 좋고&lt;/strong&gt;(8GB 노트북에 결정적), 워크플로 전체가 JSON이라 &lt;strong&gt;프로그램이 호출하기 가장 깔끔하며&lt;/strong&gt;, 무료·무제한·오프라인이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="전체-구조"&gt;전체 구조
&lt;/h2&gt;&lt;p&gt;핵심 아이디어는 간단하다. 클로드는 &amp;ldquo;지휘&amp;quot;만 하고, 그림은 로컬 GPU가 그린다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;span class="lnt"&gt;8
&lt;/span&gt;&lt;span class="lnt"&gt;9
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;사용자: &amp;#34;노을 지는 서울 야경 그려줘&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ↓
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;클로드: 한국어 요청 → 영어 프롬프트로 변환·보강
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ↓
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ComfyUI 서버 (로컬, http://127.0.0.1:8188)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ↓
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;SDXL 모델이 RTX 4060에서 이미지 생성 (20~40초)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ↓
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;클로드가 완성된 PNG를 채팅에 표시
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ComfyUI&lt;/strong&gt;: Stable Diffusion을 돌리는 오픈소스 프로그램. REST API를 제공해서 외부 프로그램(클로드)이 호출할 수 있다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SDXL&lt;/strong&gt;: Stability AI의 이미지 생성 모델. 1024×1024 네이티브 해상도.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="내-pc로-가능할까--사양-확인"&gt;내 PC로 가능할까? — 사양 확인
&lt;/h2&gt;&lt;p&gt;설치 전에 확인한 최소 조건과 내 노트북(HP Victus 16) 사양:&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;항목&lt;/th&gt;
					&lt;th&gt;필요 사양&lt;/th&gt;
					&lt;th&gt;내 노트북&lt;/th&gt;
					&lt;th&gt;판정&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;GPU VRAM&lt;/td&gt;
					&lt;td&gt;8GB 이상 권장 (SDXL)&lt;/td&gt;
					&lt;td&gt;RTX 4060 Laptop 8GB&lt;/td&gt;
					&lt;td&gt;통과&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;RAM&lt;/td&gt;
					&lt;td&gt;16GB&lt;/td&gt;
					&lt;td&gt;16GB&lt;/td&gt;
					&lt;td&gt;통과&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;디스크&lt;/td&gt;
					&lt;td&gt;약 20GB&lt;/td&gt;
					&lt;td&gt;351GB 여유&lt;/td&gt;
					&lt;td&gt;통과&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;VRAM 8GB가 SDXL의 사실상 마지노선이다. 6GB 이하면 더 가벼운 SD 1.5 모델을 쓰는 게 낫다.&lt;/p&gt;
&lt;h2 id="설치-과정-windows-11-기준"&gt;설치 과정 (Windows 11 기준)
&lt;/h2&gt;&lt;h3 id="1-comfyui-클론--가상환경"&gt;1. ComfyUI 클론 + 가상환경
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-powershell" data-lang="powershell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;git&lt;/span&gt; &lt;span class="n"&gt;clone&lt;/span&gt; &lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="n"&gt;-depth&lt;/span&gt; &lt;span class="mf"&gt;1&lt;/span&gt; &lt;span class="n"&gt;https&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="p"&gt;//&lt;/span&gt;&lt;span class="n"&gt;github&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;com&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="n"&gt;comfyanonymous&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="n"&gt;ComfyUI&lt;/span&gt; &lt;span class="n"&gt;C:&lt;/span&gt;&lt;span class="p"&gt;\&lt;/span&gt;&lt;span class="n"&gt;ComfyUI&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;python&lt;/span&gt; &lt;span class="n"&gt;-m&lt;/span&gt; &lt;span class="n"&gt;venv&lt;/span&gt; &lt;span class="n"&gt;C:&lt;/span&gt;&lt;span class="p"&gt;\&lt;/span&gt;&lt;span class="n"&gt;ComfyUI&lt;/span&gt;&lt;span class="p"&gt;\&lt;/span&gt;&lt;span class="n"&gt;venv&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="2-pytorch-cuda-버전-설치"&gt;2. PyTorch (CUDA 버전) 설치
&lt;/h3&gt;&lt;p&gt;일반 &lt;code&gt;pip install torch&lt;/code&gt;는 CPU 버전이 설치되므로, &lt;strong&gt;반드시 CUDA 인덱스를 지정&lt;/strong&gt;해야 GPU를 쓴다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-powershell" data-lang="powershell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;C:&lt;/span&gt;&lt;span class="p"&gt;\&lt;/span&gt;&lt;span class="n"&gt;ComfyUI&lt;/span&gt;&lt;span class="p"&gt;\&lt;/span&gt;&lt;span class="n"&gt;venv&lt;/span&gt;&lt;span class="p"&gt;\&lt;/span&gt;&lt;span class="n"&gt;Scripts&lt;/span&gt;&lt;span class="p"&gt;\&lt;/span&gt;&lt;span class="n"&gt;python&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;exe&lt;/span&gt; &lt;span class="n"&gt;-m&lt;/span&gt; &lt;span class="n"&gt;pip&lt;/span&gt; &lt;span class="n"&gt;install&lt;/span&gt; &lt;span class="n"&gt;torch&lt;/span&gt; &lt;span class="n"&gt;torchvision&lt;/span&gt; &lt;span class="n"&gt;torchaudio&lt;/span&gt; &lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="n"&gt;-index-url&lt;/span&gt; &lt;span class="n"&gt;https&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="p"&gt;//&lt;/span&gt;&lt;span class="n"&gt;download&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;pytorch&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;org&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="n"&gt;whl&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="n"&gt;cu128&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;설치 후 GPU 인식 확인:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-powershell" data-lang="powershell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;C:&lt;/span&gt;&lt;span class="p"&gt;\&lt;/span&gt;&lt;span class="n"&gt;ComfyUI&lt;/span&gt;&lt;span class="p"&gt;\&lt;/span&gt;&lt;span class="n"&gt;venv&lt;/span&gt;&lt;span class="p"&gt;\&lt;/span&gt;&lt;span class="n"&gt;Scripts&lt;/span&gt;&lt;span class="p"&gt;\&lt;/span&gt;&lt;span class="n"&gt;python&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;exe&lt;/span&gt; &lt;span class="n"&gt;-c&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;import torch; print(torch.cuda.is_available())&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# True 가 나와야 함&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="3-의존성--sdxl-모델-다운로드"&gt;3. 의존성 + SDXL 모델 다운로드
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-powershell" data-lang="powershell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;C:&lt;/span&gt;&lt;span class="p"&gt;\&lt;/span&gt;&lt;span class="n"&gt;ComfyUI&lt;/span&gt;&lt;span class="p"&gt;\&lt;/span&gt;&lt;span class="n"&gt;venv&lt;/span&gt;&lt;span class="p"&gt;\&lt;/span&gt;&lt;span class="n"&gt;Scripts&lt;/span&gt;&lt;span class="p"&gt;\&lt;/span&gt;&lt;span class="n"&gt;python&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;exe&lt;/span&gt; &lt;span class="n"&gt;-m&lt;/span&gt; &lt;span class="n"&gt;pip&lt;/span&gt; &lt;span class="n"&gt;install&lt;/span&gt; &lt;span class="n"&gt;-r&lt;/span&gt; &lt;span class="n"&gt;C:&lt;/span&gt;&lt;span class="p"&gt;\&lt;/span&gt;&lt;span class="n"&gt;ComfyUI&lt;/span&gt;&lt;span class="p"&gt;\&lt;/span&gt;&lt;span class="n"&gt;requirements&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;txt&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# SDXL base 모델 (~6.5GB) → models\checkpoints\ 에 저장&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;curl&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;exe&lt;/span&gt; &lt;span class="n"&gt;-L&lt;/span&gt; &lt;span class="n"&gt;-o&lt;/span&gt; &lt;span class="n"&gt;C:&lt;/span&gt;&lt;span class="p"&gt;\&lt;/span&gt;&lt;span class="n"&gt;ComfyUI&lt;/span&gt;&lt;span class="p"&gt;\&lt;/span&gt;&lt;span class="n"&gt;models&lt;/span&gt;&lt;span class="p"&gt;\&lt;/span&gt;&lt;span class="n"&gt;checkpoints&lt;/span&gt;&lt;span class="p"&gt;\&lt;/span&gt;&lt;span class="n"&gt;sd_xl_base_1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;safetensors&lt;/span&gt; &lt;span class="n"&gt;https&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="p"&gt;//&lt;/span&gt;&lt;span class="n"&gt;huggingface&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;co&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="n"&gt;stabilityai&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="nb"&gt;stable-diffusion&lt;/span&gt;&lt;span class="n"&gt;-xl-base&lt;/span&gt;&lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;1.0&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="n"&gt;resolve&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="n"&gt;sd_xl_base_1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;safetensors&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="4-서버-실행"&gt;4. 서버 실행
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-powershell" data-lang="powershell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;C:&lt;/span&gt;&lt;span class="p"&gt;\&lt;/span&gt;&lt;span class="n"&gt;ComfyUI&lt;/span&gt;&lt;span class="p"&gt;\&lt;/span&gt;&lt;span class="n"&gt;venv&lt;/span&gt;&lt;span class="p"&gt;\&lt;/span&gt;&lt;span class="n"&gt;Scripts&lt;/span&gt;&lt;span class="p"&gt;\&lt;/span&gt;&lt;span class="n"&gt;python&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;exe&lt;/span&gt; &lt;span class="n"&gt;C:&lt;/span&gt;&lt;span class="p"&gt;\&lt;/span&gt;&lt;span class="n"&gt;ComfyUI&lt;/span&gt;&lt;span class="p"&gt;\&lt;/span&gt;&lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;py&lt;/span&gt; &lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="n"&gt;-port&lt;/span&gt; &lt;span class="mf"&gt;8188&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;브라우저에서 &lt;code&gt;http://127.0.0.1:8188&lt;/code&gt;을 열면 노드 기반 UI가 뜨지만, 클로드 연동이 목적이라면 UI를 직접 만질 일은 거의 없다.&lt;/p&gt;
&lt;h2 id="클로드와-연결하기"&gt;클로드와 연결하기
&lt;/h2&gt;&lt;p&gt;ComfyUI의 API는 두 개 엔드포인트가 핵심이다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;POST /prompt&lt;/code&gt; — 워크플로(JSON)를 제출하면 &lt;code&gt;prompt_id&lt;/code&gt;를 돌려준다&lt;/li&gt;
&lt;li&gt;&lt;code&gt;GET /history/{prompt_id}&lt;/code&gt; — 생성이 끝나면 결과 이미지 파일명이 담겨 온다&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;이걸 호출하는 파이썬 스크립트(&lt;code&gt;generate.py&lt;/code&gt;)를 하나 만들고, 클로드 코드(Claude Code)에는 &lt;strong&gt;스킬(skill)&lt;/strong&gt; 하나를 등록했다. 스킬은 &amp;ldquo;이런 요청이 오면 이 스크립트를 실행해라&amp;quot;라는 지침서다:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;name: draw-local
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;description: 사용자가 그림을 요청하면 로컬 ComfyUI로 생성. 한국어 프롬프트는 영어로 번역.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;C:\ComfyUI\venv\Scripts\python.exe C:\ComfyUI\generate.py &amp;#34;PROMPT&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;실행 후 SAVED &amp;lt;경로&amp;gt;가 출력되면 그 PNG를 채팅에 표시할 것.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;이제 클로드에게 &amp;ldquo;~그려줘&amp;quot;라고 하면: ① 서버가 꺼져 있으면 자동 기동 → ② 한국어를 영어 프롬프트로 번역·보강 → ③ 생성 → ④ 채팅에 그림 표시까지 알아서 한다.&lt;/p&gt;
&lt;h2 id="결과물--프롬프트-예시-3개"&gt;결과물 — 프롬프트 예시 3개
&lt;/h2&gt;&lt;p&gt;실제로 이 노트북에서 생성한 이미지들이다. 프롬프트를 어떻게 쓰느냐가 품질의 절반이다.&lt;/p&gt;
&lt;h3 id="예시-1--인물동물--조명-지정"&gt;예시 1 — 인물/동물 + 조명 지정
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;a cute orange cat sitting on a windowsill, warm sunlight, photorealistic
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;img alt="창가의 고양이" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://junstellar.github.io/images/comfyui/orange-cat.jpg"&gt;&lt;/p&gt;
&lt;h3 id="예시-2--풍경--분위기-키워드"&gt;예시 2 — 풍경 + 분위기 키워드
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;a serene mountain lake at sunrise, mist over the water, photorealistic
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;img alt="새벽 산정호수" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://junstellar.github.io/images/comfyui/mountain-lake.jpg"&gt;&lt;/p&gt;
&lt;h3 id="예시-3--실존-장소--시간대--스타일"&gt;예시 3 — 실존 장소 + 시간대 + 스타일
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Seoul city skyline at sunset, Namsan Tower and Han River, glowing orange and purple sky,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;city lights turning on at dusk, skyscrapers, photorealistic, cinematic lighting, high detail
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;img alt="노을 지는 서울 야경" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://junstellar.github.io/images/comfyui/seoul-sunset.jpg"&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;프롬프트 팁&lt;/strong&gt;: ① 영어로 쓸 것(SDXL은 영어 학습 비중이 압도적) ② &lt;code&gt;photorealistic&lt;/code&gt;, &lt;code&gt;cinematic lighting&lt;/code&gt; 같은 스타일 키워드를 뒤에 붙일 것 ③ 피하고 싶은 요소는 네거티브 프롬프트(&lt;code&gt;blurry, low quality, watermark...&lt;/code&gt;)로 분리할 것.&lt;/p&gt;
&lt;h2 id="실측-성능-rtx-4060-laptop-8gb"&gt;실측 성능 (RTX 4060 Laptop, 8GB)
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;첫 생성: 약 1분 (서버 기동 + 모델 VRAM 로딩 포함)&lt;/li&gt;
&lt;li&gt;이후: &lt;strong&gt;장당 20~40초&lt;/strong&gt; (1024×1024, 28스텝)&lt;/li&gt;
&lt;li&gt;스텝을 20으로 줄이면 ~24초, 품질 차이는 크지 않음&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="정리"&gt;정리
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;8GB VRAM 노트북이면 SDXL 로컬 생성이 충분히 실용적이다.&lt;/li&gt;
&lt;li&gt;클로드 연동의 핵심은 &amp;ldquo;ComfyUI API를 부르는 스크립트 + 스킬 등록&amp;rdquo; 두 가지뿐.&lt;/li&gt;
&lt;li&gt;클라우드 API(나노바나나 등) 대비 장점: 무료·무제한·오프라인. 단점: 품질과 텍스트 렌더링은 클라우드 모델이 우세.&lt;/li&gt;
&lt;li&gt;다음 단계: 나노바나나(Gemini 이미지 API) 연동을 추가해서 로컬/클라우드를 골라 쓰는 것도 고려 중.&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>