"제일 새 걸 보여 주는 건 설계 결정이 아니야. 결정을 안 했을 때 나오는 모양이지. 그리고 조용히 '최신이 곧 순위' 라고 선언해 버리고."
아무도 안 고른 기본값
생성된 candidate 를 받는 작업실은 그걸 어딘가에 놓아야 해. 그리고 제일 손이 덜 가는 길은 제일 새 걸 제일 크게 보여 주거나, 최신순으로 늘어놓거나, 그냥 있던 걸 갈아치우는 거야. 중립처럼 느껴지지. 아닌데. 최신이 이기는 화면은 이미 화가 대신 순위를 정한 거야. 제일 최근 결과가 제일 흥미롭다고 정해 버린 거지. 그것도 눈에 안 보이게. 결정을 내리는 방식 중에 제일 나쁜 방식이고.
변형을 넷 뽑는 이유가 뭐야. 아직 어느 게 좋은지 모르니까 그런 거잖아. 네가 보기도 전에 '어느 거?' 에 답해 버리는 화면은 애초에 네 몫이었던 유일한 구간을 건너뛴 거야.
거울한테 없는 동사 셋
board 를 진짜로 판단하는 자리로 바꾸는 데 세 가지가 필요했어. 그리고 하나하나가 최신이 이기는 판에서는 말할 수조차 없던 동사야.
붙잡기. candidate 를 누르면 canvas 에 고정돼서 스쳐 지나가는 것이길 그만둬. 이게 없으면 새로 도착하는 것마다 네가 들여다보던 걸 밀어내. 보는 동안 계속 갈아치워지는 결과는 평가라는 걸 할 수가 없어.
견주기. canvas 를 누르고 있으면 화가 자기 Photoshop 미리보기가 나와. 손을 떼면 candidate 로 돌아오고. 슬라이더가 둘을 겹쳐서 섞어 주고. 여기서 무엇과 견주는지를 잘 봐. 다른 candidate 가 아니라 그림 자체야. 그리기 companion 이 답해야 하는 질문은 '이 넷 중에 뭐가 제일 예뻐' 가 아니거든. '이게 내가 만들던 걸 도왔어?' 지. 견주기의 반대쪽에 화가 자기 작업이 앉아 있고, 그렇게 만든 것 자체가 주장이 UI 조작으로 나타난 거야.
붙박아 두기. 카드에 잠금을 걸면 그 카드의 seed 가 이후 모든 생성의 기준 seed 가 돼. denoise 조절기 옆 칩으로 풀고.
seed 잠금이 셋 중에 제일 깊은 이유
이건 편의 기능처럼 보이는데 사실은 반복이랑 도박을 가르는 물건이야. prompt 를 살짝 건드리고 다시 생성해. 결과가 달라. 그런데 seed 도 새로 굴렀으면 둘이 바뀐 거고, 그 차이를 어느 쪽에도 못 돌려. 반복하는 게 아니라 분포에서 하나 뽑아 놓고 잘 나오길 비는 거지. seed 를 잠그면 실행 사이에 움직인 것 중에서 노이즈가 빠져. 남는 건 네가 실제로 바꾼 그거고. 그게 통제된 실험이고, 창작 loop 가 이미지만 쌓는 대신 앎을 쌓는 유일한 길이야.
자동 모드에서 제일 크게 갈려. 거기선 화가가 그리는 동안 companion 이 계속 다시 생성하잖아. 거기서 움직이길 바라는 변수는 canvas 야. 그림 자체, 획 하나하나. 매번 노이즈가 새로 굴러 버리면 canvas 가 기여한 몫이 매번 새 난수 벌판 밑에 파묻혀. 그러면 실시간 loop 가 응답이 아니라 슬라이드쇼를 보여 주는 거고. 자동 loop 는 언제나 candidate 를 하나만 달라고 하니까, 거기선 잠근 seed 가 잠근 그대로 쓰여.
손으로 돌리는 batch 는 일부러 만든 예외야. 버그로 접수하지 말고 왜 그런지 알아 두는 게 나아. seed 를 잠근 채로 candidate 넷을 달라고 하면, 그 batch 는 애초에 batch 인 채로 엔진에 안 가. 뇌가 그걸 엔진 job 넷으로 펼치면서 seed 를 하나씩 밀어. 그래서 job 하나하나는 여전히 고정된 seed 를 하나씩 받고. 미는 이유는 똑같은 seed 에 똑같은 prompt 로 넷을 뽑으면 같은 그림 넷이 나오기 때문이야. 그건 고를 거리가 아니잖아. 그 로직이 어디 사는지도 봐 둬. 달라고 한 작업실도 아니고 돌린 엔진도 아니고, 하나뿐인 그 문에 살아. batch 는 라우팅 결정이니까 라우팅이 있는 자리에 있는 거야. 그러니까 잠금은 기준 seed 지 얼린 seed 가 아니야. batch 가 우연이 고른 자리 말고 네가 고른 자리에서 부챗살처럼 퍼지는 거지. 변수 하나만 움직인다는 건 여전히 실행 사이 얘기고, 한 번의 실행 안에서는 퍼지는 게 목적이야.
batch, 그리고 거기 숨어 있던 버그
판단하려면 대안이 있어야 하니까 생성에 개수가 붙었어. 한 번에 하나에서 넷까지. 여기까지가 뻔한 절반이야. 안 뻔한 절반은 '끝났다' 가 무슨 뜻이냐는 거고. 첫 candidate 가 도착할 때 자기가 끝났다고 보고하는 job 은 이미지 셋이 아직 오고 있는 와중에 자동 loop 한테 빈 자리를 돌려줘. 그럼 다음 생성이 방금 띄운 batch 위에 올라타고. batch 는 약속한 candidate 가 전부 도착할 때까지 열려 있어야 해. 여기서 세는 건 장부 정리가 아니야. loop 가 자기랑 경주하지 않게 막는 물건이지.
잊혀야 마땅한 상태도 있어
일부러 비대칭으로 둔 게 하나 있어. 붙잡아 둔 건 저장 안 해. 보고 있는 동안만 살아 있고 candidate 를 지우거나 비우면 같이 풀려. 사용자가 건드린 건 다 저장하고 싶은 게 본능인데, 붙잡기는 약속이 아니야. '지금 이거 보고 있어' 지. 그걸 저장하면 흘긋 본 걸 화가가 한 적 없는 결정으로 바꿔 놓는 거고, 나중에 돌아왔을 때 자기가 가진 기억이 없는 선호를 주장하는 작업실을 만나게 돼. 반면에 seed 잠금이랑 batch 개수는 저장해. 그건 도구가 어떻게 굴러야 하는지에 대한 설정이니까. 같은 board, 두 종류 상태. 가르는 선은 사용자가 그게 남길 바랐느냐야.