artdesk 편에서, 그림 연습 앱에 붙였던 NovelAI 이미지 생성 탭을 따로 떼어 냈다고 썼습니다. 이번 글은 그렇게 떨어져 나온 앱, gendesk 이야기예요.
gendesk 는 NovelAI 웹에서 하던 이미지 생성을 내 PC 에서, 반복 작업에 맞게 하는 데스크탑 앱입니다.

무엇을 하는 앱인가
- 프롬프트를 칸으로 나눠 쓴다 — 스타일, 인물, 자세, 표정처럼 묶음(세그먼트)으로 나누고, 칸마다 켜고 끄고 순서를 바꿉니다. 켜진 칸만 이어 붙여 최종 프롬프트가 돼요. 위 화면에서
배경칸은 꺼져 있어서 이번 생성에는 빠집니다. - 재료를 쌓아 둔다 — 자주 쓰는 프롬프트 조각과 설정 묶음을 폴더로 정리해 두고 꺼내 씁니다.
- 결과를 크게 보고 넘긴다 — 방금 만든 한 장을 크게 보여 주고, 최근 80장을 띠로 넘겨 봐요. 간격과 장수를 정해 연속으로 생성할 수도 있습니다.
- 기록 화면 — 저장 폴더에 쌓인 그림을 날짜별로 보고, 프롬프트 낱말이나 시드로 찾아서 그 그림의 설정을 다시 불러옵니다.
만든 그림은 저장 폴더에 PNG 로 쌓여요. 그림 연습 소스로 쓰고 싶으면 artdesk 에서 그 폴더를 라이브러리로 등록하면 됩니다. 두 앱은 이렇게 폴더로만 이어져 있어요.
왜 떼어 냈나
artdesk 는 그림 연습을 관리하는 앱입니다. 라이브러리, 구도·포즈 연습, 크로키, 입체, 인형, 일지. 그런데 생성 탭만 성격이 달랐어요.
- 바깥의 유료 API 를 부르고
- API 키를 안전하게 보관해야 하고
- 몇십 장씩 연속 실행을 돌리고
- 프롬프트 재료를 따로 관리해야 했습니다
이 탭이 커질수록 연습 도구와 생성 도구가 한 저장 파일, 한 화면 틀에 얽혀서 어느 한쪽을 고치기가 점점 어려워졌어요. 그래서 저장 파일도 화면 틀도 생성만 남긴 새 앱으로 뺐습니다. artdesk 를 그만둔 게 아니라, 각자 자기 목적에 맞게 나눈 거예요.
두 앱은 데이터를 공유하지 않습니다. artdesk 에서 쓰던 재료가 필요하면 artdesk 에서 내보내기한 파일 한 장을 gendesk 에서 가져오기하면 돼요. 다만 API 키는 옮길 수 없습니다. 키는 운영체제의 암호화 기능으로 앱마다 따로 잠가 두기 때문에, gendesk 에서 한 번 다시 넣어야 해요.
재료는 다섯 갈래에서 둘로
떼어 내면서 가장 크게 바꾼 건 재료 보관함입니다.
artdesk 시절엔 재료가 다섯 갈래였어요. 프롬프트 조각 세 종류, 설정 블록, 프리셋. 문제는 넣었을 때 무엇이 덧붙고 무엇이 덮이는지가 종류마다 달랐다는 거예요. 버튼을 누르기 전에 "이걸 누르면 뭐가 바뀌지?"를 외워야 했습니다.
그래서 종류가 아니라 넣었을 때 일어나는 일로 둘만 남겼어요.
| 🧩 조각 | 📦 프리셋 | |
|---|---|---|
| 넣으면 | 지금 폼에 덧붙는다 — 있던 건 그대로 | 담은 부분만 바뀐다 — 안 담은 부분은 그대로 |
| 무엇을 | 프롬프트 몇 칸, 또는 캐릭터 한 명 | 저장할 때 고른 부분 (프롬프트·네거티브·캐릭터·모델·해상도·샘플링·시드) |
| 예 | "앉기" 자세 조각, "밤 거리" 배경 조각 | "세로 일러스트 기본" — 해상도와 샘플링만 |

예전의 "설정 블록"은 결국 "모델·해상도·샘플링만 담은 프리셋"이었고, "베이스 조각"도 "프롬프트와 샘플링을 담은 프리셋"이었어요. 이름만 달랐지 모두 일부만 바꾸는 프리셋이었던 거죠. 그래서 프리셋은 하나로 합치고, 저장할 때 담을 부분을 고르게 했습니다. 프리셋을 열면 "불러오면 이것만 바뀌고 나머지는 그대로"를 먼저 보여 줘요.
조각도 문자열 한 줄로 납작하게 저장하지 않고, 칸 구조(라벨·켜짐 상태)를 그대로 담아 그대로 넣습니다.
프롬프트는 칸이 유일한 원본
비슷한 문제가 프롬프트 자체에도 있었어요.
예전엔 칸으로 나눈 프롬프트와, 그걸 합친 최종 문자열을 둘 다 저장했습니다. 그러다 둘이 어긋나는 일이 생겼어요. 칸을 고쳤는데 저장된 최종 문자열은 옛날 것이라, 예전 프롬프트로 생성되는 일이요.
지금은 칸이 유일한 원본입니다. 합친 문자열은 저장하지 않고, 생성 요청을 보내기 직전에만 이어 붙여요. 원본이 하나면 어긋날 일도 없습니다.
생성 기록 — "이 그림을 무엇으로 만들었나"
마음에 드는 그림이 나오면 "이거 어떻게 만들었더라?"가 꼭 궁금해집니다. 그래서 한 장 만들 때마다 실제로 쓴 시드, 설정, 칸 구조, 보낸 최종 프롬프트를 기록해 둬요.
- 기록은 그림이 저장되는 폴더 안에 함께 둡니다. 폴더째 옮겨도 기록이 따라가요.
- 한 장에 한 줄씩 덧붙이기만 해서, 저장 도중에 꺼져도 마지막 한 줄만 버려집니다.
- 결과 화면이나 기록 화면에서
설정 불러오기를 누르면, 그 그림을 만든 폼이 칸 구조 그대로, 시드까지 고정해서 돌아와요.
DB 나 서버는 쓰지 않았습니다. 설정 파일은 수십 KB, 기록은 한 장에 1~2KB 라 파일로 충분해요. 개인이 혼자 쓰는 로컬 도구에 서버를 두면 키를 맡겨야 하고 이미지 저장 비용도 드니 오히려 손해고요. 기록이 수만 장을 넘어 검색이나 태그가 필요해지면 그때 다시 볼 생각입니다.
썸네일 — 567장에 메모리 918MB
기록 화면을 만들고 나서 문제가 하나 터졌어요. 그림 567장을 격자로 띄우자 앱이 쓰는 메모리가 215MB 에서 918MB 로 뛰었습니다. 원본 그림(한 장에 1MB 남짓)을 격자 칸에 그대로 띄우고 있었고, 화면 밖 그림은 나중에 읽어 주길 기대했던 장치가 이 구조에서는 한꺼번에 다 읽어 버리고 있었어요.
두 가지를 바꿨습니다.
- 썸네일은 Windows 에게 맡긴다 — 탐색기가 쓰는 썸네일 기능으로 한 장에 10~20KB 짜리 작은 그림을 받아 씁니다.
- 화면 근처에 온 칸만 그린다 — 스크롤해서 가까이 온 칸에만 그림을 붙여요.
다시 재 보니 기록 화면에 들어간 직후 메모리가 918MB → 228MB, 들어갈 때 읽는 그림이 567장 → 27장이 됐습니다. 원본은 크게 볼 때만 씁니다.
키는 앱 본체만 안다
NovelAI API 키는 운영체제의 암호화 기능으로 잠가서 PC 에만 저장합니다. 앱 화면 쪽은 키의 값을 모르고 "키가 있다 / 없다"만 알아요. 생성 요청도 화면이 아니라 앱 본체가 대신 보내고, 받은 결과를 PNG 로 저장합니다. 설정 파일을 복사하거나 공유해도 키는 따라가지 않아요.
그리고 생성은 한 장마다 NovelAI 크레딧(Anlas)이 드는 일이라, 생성 버튼 아래에 이번 생성에 들 예상 크레딧을 보여 줍니다.
아직 못 한 것
- 기록 이전 그림은 설정을 되살리지 못합니다. artdesk 시절에 만든 그림은 시드와 시각만 보여요. PNG 안에 NovelAI 가 넣어 둔 정보를 읽으면 살릴 수 있을 것 같아 다음 후보로 두었습니다.
- Windows 에서만 확인했고, macOS 는 아직 확인하지 못했어요.
다음 편에서는 칸으로 나눈 프롬프트를 실제로 어떻게 쓰는지, 조각과 프리셋을 조합해 반복 생성하는 흐름을 이야기해 보려고 합니다.