자막에 맞춰 그림이 하나씩 그려지는 화이트보드 영상을 만들었다. 내용은 다섯 토막이었다. 그래서 화면에도 칸 다섯 개를 미리 정하고, 이미지 생성기에 각 칸 안에 그림을 하나씩 넣어달라고 했다.
한 장을 만드는 데 34.2초가 걸렸다. 결과도 좋아 보였다. 글자와 로고는 0개였고, 다섯 그림의 선 굵기와 화풍도 같았다. 하단 자막 자리도 비워뒀다.
좌표를 재자 전부 밀려 있었다
그림을 미리 정한 칸으로 잘라 애니메이션을 만들기 전에, 검은 잉크가 실제로 어디 있는지 x축으로 투영해봤다. 계획한 위치와 실제 그림은 60~108픽셀씩 어긋나 있었다.
더 큰 문제도 있었다. 내용은 다섯 토막인데 잉크 덩어리는 여섯 개였다. 두 갈래 화살표 하나가 가운데가 비어 있다는 이유로 서로 다른 그림 두 개처럼 검출된 것이다.
원본 크기도 내가 예상한 1920×1080이 아니라 1672×941이었다. 말로 지정한 위치와 픽셀 좌표는 같은 것이 아니었다.
그림을 칸에 맞추는 방향을 버렸다
처음 생각은 “정해둔 칸에 맞게 다시 그려라”였다. 하지만 생성기는 좌표를 계약처럼 지키는 도구가 아니다. 같은 요구를 다시 보내도 다른 데 그릴 수 있다.
방향을 뒤집었다. 그림이 나온 뒤 잉크 위치를 직접 재서 칸을 만든다. 서로 가까운 덩어리는 실제 간격으로 병합한다. 이번 그림은 합쳐야 하는 틈이 24픽셀이고, 나머지 틈은 51·73·73·88픽셀이어서 구분할 근거도 있었다.
그림 수가 자막 토막 수와 맞지 않으면 억지로 끼우지 않고 다른 방식으로 넘긴다. 생성 결과를 계획에 맞다고 우기는 대신, 결과를 측정해 다음 단계의 입력으로 삼았다.
① 생성 이미지의 위치·크기는 프롬프트가 아니라 픽셀로 재서 쓴다.
② 예상 개수와 검출 개수가 다르면 바로 자르지 말고 분리된 한 물체인지 확인한다.
③ 출력 해상도와 종횡비를 먼저 읽고 좌표를 변환한다.
④ 통제되지 않는 출력을 고정 좌표에 강제로 맞추지 않는다. 실측 결과가 다음 계획을 만든다.