콘텐츠로 이동

FolderSkin은 설명만으로 스킨을 만들 수 있어요. 방법은 두 가지예요.

  • 로컬 모델은 내 컴퓨터에서 무료로 그려요. 한 번만 설정하면(FLUX.2 [klein] 4B, Mac에서는 4.6GB, 그 밖에서는 5.2GB를 내려받아요) 키 없이 오프라인에서 동작하고, 아무 데도 아무것도 보내지 않아요. macOS 14 이상의 Apple 실리콘 Mac과 Windows, Linux PC에서 돌아가요.
  • 내 키 쓰기: 이미 계정이 있는 제공업체의 API 키를 붙여 넣으면, 키는 내 컴퓨터의 비공개 파일에 저장되고 FolderSkin이 내 컴퓨터에서 그 제공업체와 직접 통신해요.

어느 쪽을 쓸지는 설정 → AI 제공업체에서 골라요. 체크 표시는 로컬 모델이 설정되어 있거나, 제공업체에 키가 있다는 뜻이에요.

설정의 AI 제공업체 화면: 로컬 모델과 제공업체 7곳이 각각 체크 표시나 키 없음으로 표시되고, 그 아래에 이 컴퓨터의 모델이 나와 있음

FolderSkin 서버도, 프록시도, 앱에 들어 있는 키도, FolderSkin이 비용을 대신 내주는 무료 사용량도 없어요. 키를 쓸 때는 생성을 누르기 전까지 아무것도 보내지 않아요. 보내는 건 내가 쓴 말로 FolderSkin이 만든 프롬프트, 모양에 필요한 크기, 그리고 함께 가는 이미지예요. 함께 가는 이미지는 내가 추가한 참고 이미지이고, 폴더 전체를 그릴 때는 그 폴더를 본뜬 FolderSkin 자체의 빈 템플릿이 그보다 먼저 가요.

키는 암호화되어 FolderSkin 전용 폴더에, 내 사용자 계정만 읽을 수 있게 저장돼요.

macOS~/Library/Application Support/app.folderskin.desktop/keys.json
Windows%APPDATA%\app.folderskin.desktop\keys.json
Linux~/.config/app.folderskin.desktop/keys.json

키는 파일에 쓰기 전에 AES-256-GCM으로 봉인해요. 암호화 키는 keys.json 옆의 keys.secret에 든 무작위 비밀 값과 이 컴퓨터의 하드웨어 ID로부터(HKDF-SHA256으로) 만들어요. 그래서 keys.json만으로는 아무것도 알아낼 수 없고, 두 파일을 다른 컴퓨터로 복사해도 거기서는 열리지 않아요. 새 컴퓨터에서는 키를 다시 입력하세요. 두 파일 모두 소유자만 접근할 수 있는 권한(0600)으로 만들고, 원자적으로 써요. 다만 이미 내 권한으로 실행 중인 프로그램은 두 파일을 모두 읽을 수 있고, 이건 어떤 파일로도 막을 수 없어요. 막을 수 있는 건 시스템 키체인뿐인데, 그러면 아래에서 설명할 비밀번호 입력 창이 뜨게 돼요.

시스템 키체인을 쓰지 않는 이유는 이래요. macOS는 키체인에 저장한 항목을, 그 항목을 저장한 앱의 서명과 정확히 묶어 둬요. 오픈 소스 빌드는 대개 서명이 없거나 애드혹 서명이라서, 다시 빌드하거나 업데이트할 때마다 다른 앱으로 인식되어 로그인 비밀번호를 또 물어보게 돼요. 방금 내려받은 앱이 비밀번호를 물어보면 딱 악성 앱처럼 보이죠. 그래서 FolderSkin은 키체인을 아예 쓰지 않아요.

키는 요청하는 순간에만 읽고, 오류 메시지에 넣지 않으며, 앱 창으로 돌려보내지도 않아요. 제공업체 대화상자에서 키 삭제를 누르면 파일에서 지워지고, keys.json을 지우면 모든 키가 사라져요.

모든 이미지는 한 가지 모양에 맞춰 만들어요. 프롬프트 입력란 아래, 모델 이름 옆의 칩이 지금 어떤 모양인지 작은 그림으로 보여 줘요. 칩을 클릭하거나 입력란에 @를 입력하면 다른 모양을 고를 수 있어요.

  • Mac 폴더: Finder에 보이는 그대로의 FolderSkin 폴더예요.
  • Windows 폴더: Windows가 그리는 폴더예요.
  • Linux 폴더: GNOME과 KDE가 그리는 폴더예요.
  • 드라이브: Mac의 시동 디스크부터 Linux의 USB 메모리나 RAID 세트까지, 각 시스템이 보여 주는 모든 드라이브를 FolderSkin이 그리는 모습 그대로 쓴 모양이에요. 드라이브 목록은 DRIVES.md(영어)에 있어요. 그림은 그 드라이브에 입혀지고, 라이브러리에서는 드라이브 스킨과 함께 놓여요.
  • 자유형 아이콘: 마스코트, 물건, 캐릭터처럼 둘레에 폴더 없이 그것 하나만 있는 아이콘이에요. 어떤 폴더에든 그대로 입힐 수 있어요.

@ 뒤에 이름의 일부(@win)를 입력하고 Return이나 Tab을 누르거나, 목록에서 하나를 클릭하세요. 칩이 바뀌고, @로 입력한 단어는 입력란에서 사라져요. 새 채팅은 폴더 패널이 드라이브를 보여 주고 있으면 그 드라이브로, 그렇지 않으면 폴더 패널이 스킨을 입혀 보여 주는 폴더로 시작해요.

모양은 채팅마다 정해져요. 각 이미지는 보낼 때 골라 둔 모양에 맞춰 만들어지고, 이전 채팅은 마지막 이미지의 모양으로 열리며, 스킨은 그 모양에 맞춰 만든 것으로 저장돼요. 프롬프트, 템플릿, 크기, 결과를 잘라 내는 방법은 모두 모양에 따라 정해지고, 모든 제공업체와 로컬 모델에서 똑같아요.

폴더를 그릴 때는 이게 가장 중요한 선택이지만, 품질에 관한 문제는 아니에요. 드라이브에도 그림만과 드라이브 전체라는 같은 선택이 있어요.

그림만 모드는 모델에게 그 폴더와 같은 비율의 평면 그림(Mac 폴더는 1024 × 960, Windows 폴더는 1024 × 800)을 요청하고, FolderSkin이 그 그림을 자체 폴더에 씌워요. 사진을 추가할 때와 똑같아요. 모양은 FolderSkin이 정하기 때문에, 모든 아이콘 크기에서 모든 스킨이 딱 맞게 정렬돼요. 투명도를 지원하지 않는 제공업체를 포함해 어떤 제공업체든 쓸 수 있어요. 이게 기본값이고, 대부분은 이게 정답이에요.

폴더 전체 모드는 모델에게 폴더 자체를 그리게 하고, 그 이미지를 컴포지터를 거치지 않고 바로 아이콘으로 써요. 픽셀 단위로 정확한 모양은 포기해야 하지만, 대신 진짜 입체감이 있고 폴더 위쪽 가장자리를 넘어서는 아트워크를 얻을 수 있어요.

모델이 이미지를 바탕으로 그릴 수 있으면(OpenAI, Grok, Gemini, FLUX.2, 그리고 로컬 모델), FolderSkin은 그 폴더를 본뜬 자체 빈 템플릿을 첫 번째 이미지로 보내요. 폴더를 밝은 회색 한 가지로 칠해 단색 키 색상 배경 한가운데에 놓은 이미지로, 비율은 그 폴더와 같고 긴 변은 1024픽셀을 넘지 않아요(Base::blank). 프롬프트는 모델에게 바로 그 폴더를 다시 그리되 윤곽선, 탭, 그 폴더 고유의 부분, 크기, 위치를 그대로 두고, 배경도 그대로 두라고 지시해요. 키 색상이 무엇인지는 절대 말하지 않아요. 마젠타라고 알려 주면 모델이 그 색으로 칠하기 때문이에요. 그런 다음 FolderSkin이 그림을 폴더 자체의 윤곽선을 따라 잘라 내요. 그래서 결과물은 FolderSkin의 실루엣을 유지하고, 그림의 색도 가장자리까지 그대로 살아 있어요. 폴더를 옮기거나 모양을 바꿔 그린 그림은 대신 키 색상으로 잘라 내요. 내가 추가한 참고 이미지는 템플릿 다음에 모델이 받을 수 있는 만큼 가고, 이미지마다 내가 정한 용도가 함께 붙어요.

드라이브도 똑같아요. 그림은 드라이브 앞면의 모양으로 요청하고(USB 메모리의 라벨은 세로로 길고, Windows 드라이브의 윗면은 가로로 넓어요), 템플릿은 앞면을 템플릿의 회색으로 칠하고 나머지 부분(커넥터, 띠, 표시등)은 FolderSkin이 그리는 그대로 둔 드라이브예요. 그래서 드라이브 전체를 그려도 이 부분들은 그대로 남아요. 윤곽은 템플릿이 드라이브를 놓은 자리 근처에서만 판단해요. 좁은 드라이브는 주위에 넓은 여백이 남고, 그곳에서는 배경 색이 달라지기 쉽기 때문이에요.

자유형 아이콘은 언제나 통째로 그려요. 정사각형 한가운데에 피사체 하나를 잘리는 곳 없이 온전하게, 투명한 배경이나 키 색상 위에 그린 다음 잘라 내요.

FolderSkin은 고른 모델에 맞는 방식을 써요.

  • 알파 지원: 요청에서 투명한 배경을 지정하면, 돌아오는 PNG에 이미 투명한 배경이 있어요. FolderSkin은 투명한 여백만 잘라 내요. GPT Image 2.5 Flare와 Sunburst가 이 방식이에요.
  • 알파 미지원: 프롬프트에서 단색 키 색상 위에 폴더만 그리라고 요청해요. 그런 다음 FolderSkin이 그 색을 지우고, 부드러운 가장자리로 번진 키 색상도 지우고(잘라 낸 이미지에 색 테두리가 생기지 않게 하는 단계예요), 여백을 잘라 내요. 배경이 빠졌을 때는 알아챌 수 있어요. 테두리가 키 색상이 아니면 모델이 지시를 무시했다는 뜻이라서, FolderSkin은 망가진 아이콘을 적용하는 대신 그 이미지를 자체 폴더에 씌울 아트워크로 남겨요. Recraft에는 이 색을 매개변수(controls.background_color)로도 알려 주기 때문에, 어떤 스타일을 요청해도 배경이 단색으로 나와요.

키 색상은 마젠타 #FF00FF예요. 폴더 그림에는 거의 나오지 않는 색이기 때문이에요. Gemini에는 초록 #00FF00을 써요. Gemini는 마젠타 위에 그린 피사체 둘레에 어두운 붉은빛 테두리를 남기기 때문이에요. 분홍이나 보라여야 하는 그림에도 초록을 써요. 마젠타를 잘라 내면 그 색까지 함께 잘려 나가기 때문이에요. 네온, 70년대 에어브러시, 팝아트, 신스웨이브 스타일, 그리고 FolderSkin이 지원하는 언어 중 하나로 분홍이나 보라를 말하는 아이디어(pink, lilac, rose, rosa, morado, ピンク, 보라, 粉红 같은 말)가 여기에 해당해요. 그런데 초록은 나뭇잎이나 들판처럼 폴더 그림에도 곧잘 나오는 색이에요. 그래서 초록 배경은 이미지 가장자리까지 이어진 부분만, 모델이 실제로 칠한 초록 색조를 기준으로 지워요. 폴더 위에 그린 초록은 그대로 남아요(matte::cutout_connected).

FolderSkin 템플릿 위에 그린 폴더 전체는 두 방식 어느 쪽도 거치지 않아요. 위에서 설명한 대로 템플릿 자체의 윤곽선을 따라 잘라 내고, 폴더가 움직였을 때만 키 색상으로 잘라 내요.

키잉 코드는 crates/folderskin-core/src/matte.rs에 있고, 마젠타 배경 위에 진짜 분홍색 피사체가 있는 경우까지 단위 테스트를 거쳤어요.

내가 쓴 말은 절대 고쳐 쓰지 않아요. crates/folderskin-ai/src/recipe.rs는 이미지 한 장에 필요한 것을 레시피 하나로 모아요. 내 아이디어, 모양과 그 모양에서 그대로 둘 것, 스타일, 넣을 글자, 내 이미지와 각 이미지의 용도, 그리고 피사체 둘레에 무엇을 둘지예요. 그러면 prompts.rs가 그 레시피를 모델 계열마다 가장 잘 알아듣는 방식으로 풀어 써요. 순서는 언제나 같아요. 무엇을 그릴지, 어떻게 보일지, 구도를 어떻게 잡을지, 이미지, 글자, 그리고 뺄 것이에요.

  • OpenAI와 Gemini에는 항목 이름을 붙인 줄(Style, Composition, Lettering, Constraints)로 쓰고, 이미지는 image 1, image 2처럼 불러요.
  • Grok에도 같은 방식으로 쓰되, 이미지는 Grok이 부르는 대로 <IMAGE_0>, <IMAGE_1>이라고 불러요.
  • FLUX(Black Forest Labs와 로컬 모델)에는 피사체를 맨 앞에 둔 평범한 문장으로 쓰고, 그리지 말아야 할 것에 대한 지시는 넣지 않아요. FLUX에는 네거티브 프롬프트가 없어서, 피하라고 한 것을 오히려 그리기 때문이에요. 로컬 모델의 프롬프트는 텍스트 인코더가 읽는 400토큰을 넘지 않게 하고, 넘칠 때는 스타일을 매체만 남기고 줄여요.
  • Ideogram과 Recraft에는 짧은 디자인 브리프로 쓰고, 글자는 앞쪽에 넣어요.
  • Stability에는 짧은 목록으로 써요. Stability와 Ideogram에는 뺄 것을 네거티브 프롬프트로 보내요(아래 참고).

실제로 효과를 내는 건 스타일에 관한 부분이 아니라 구조에 관한 부분이에요.

  • '그림만' 프롬프트는 프레임을 가득 채우는 하나로 이어진 그림을 요청해요. 피사체는 크게 가운데에 두고, 폴더 탭이 가리는 띠 부분에는 하늘이나 질감만 두게 해요. 템플릿이 그 부분을 잘라 내거나 휘게 만들기 때문이에요. Windows 폴더와 Linux 폴더에서는 왼쪽 위 모서리도 비워 둬요. 드라이브에는 탭이 없어서, 피사체 둘레에 여백을 조금 남겨 달라고만 해요.
  • '폴더 전체' 프롬프트는 폴더의 부분을 뒤에서 앞 순서로 하나하나 짚고, 무엇을 그대로 둘지 말해요. Mac 폴더라면 하나뿐인 탭과 옅은 종이 띠, Windows 폴더라면 곡선으로 된 단차예요. 이게 없으면 모델은 어김없이 겹쳐진 폴더나 탭이 두 개인 폴더를 그려요. 드라이브는 USB 메모리의 플러그, 파란 몸체, 고리 구멍처럼 드라이브 자체의 부분으로 설명해요.
  • '자유형 아이콘' 프롬프트는 정사각형 한가운데에 잘리지 않은 온전한 물체 하나를 요청하고, 둘레에는 바닥도, 풍경도, 액자도 두지 않게 해요.
  • 참고 이미지는 번호와 용도로 불러요. 대상 이미지는 알아볼 수 있게 그대로 유지하고, 스타일 이미지에서는 매체, 팔레트, 빛, 질감만 가져오고 내용은 하나도 가져오지 않으며, 색감 이미지에서는 색만 가져와요.
  • 뺄 것은 모양과 스타일에 맞춰 적어요. 테두리, 액자, 워터마크, 서명은 늘 빼고, 글자는 넣어 달라고 하지 않았다면 빼요. 스타일에 뻔하게 따라붙는 요소(목판화라면 후지산 같은 것)는 아이디어에서 요청하지 않았다면 빼고, 사실적인 스타일에서는 클립아트 같은 느낌을 빼요.
  • 어느 프롬프트에도 크기는 적지 않아요. 모델은 글로 읽은 픽셀 수에 맞춰 그리지 않기 때문에, 크기는 요청 자체의 매개변수로 보내요(아래 참고).

테스트는 모든 모델 계열과 모든 모양에서 핵심 문구가 들어 있는지 확인해요. 레시피에는 버전(RECIPE_VERSION)이 붙어 있어서, 스킨이 어떤 레시피로 만들어졌는지 알 수 있어요.

프롬프트 입력란에 /를 입력하면 다섯 그룹으로 나뉜 30가지 스타일이 나와요. 사진과 3D, 재료와 공예, 회화와 드로잉, 판화와 인쇄, 디지털과 그래픽이에요. 이름의 일부를 입력하면 목록이 좁혀져요. 스타일은 내가 쓴 말 속에 섞이지 않고 입력란 옆의 전용 칸에 들어가요. 그래서 아이디어는 쓴 그대로 남고, 스타일은 그 뒤에 덧붙어요. 칸의 x를 클릭하면 스타일이 빠져요.

스타일 하나하나는 crates/folderskin-ai/src/styles.json의 한 항목이에요. 앱, 명령줄(folderskin ai styles로 목록을 볼 수 있어요), 프롬프트를 쓰는 코드가 모두 이 파일을 읽어요. 항목마다 스타일 이름, 한 줄 설명, 프롬프트에서 그 스타일을 나타내는 문구(매체를 먼저, 그다음 기법, 빛, 색, 질감을 쓰고, 작가 이름은 절대 쓰지 않아요), 글자를 어떻게 쓰는지, 시키지 않아도 덧붙이기 쉬운 것, 결과물이 통과해야 할 확인 항목 세 가지, 그리고 제공업체에 그 스타일에 맞는 자체 프리셋이 있다면 그 값(Stability의 스타일 프리셋, Ideogram의 스타일 프리셋이나 스타일 유형)이 들어 있어요. 이전 버전의 스타일 이름도 여전히 쓸 수 있어요. travel은 이제 여행 포스터(screenprint)이고, ukiyoe는 목판화, diorama는 미니어처 사진이에요.

같은 메뉴에는 시작하기 좋은 아이디어(스타일 없이 주제만 하나씩 담겨 있어요)와 내 프롬프트도 있어요. 새 채팅에 나오는 스타일 버튼도 똑같이 동작해요. 누를 때마다 입력란에 다른 아이디어가 채워지고, 칸에는 그 버튼의 스타일이 들어가요.

스킨에 넣고 싶은 말은 큰따옴표로 감싸세요. 지도를 읽는 여우와 "ESCAPE"라는 단어처럼요. FolderSkin은 따옴표 안의 말을 정확히 그대로 한 번만, 그 스타일에 맞는 글씨로, 모양에 맞는 자리에 넣어요. 지시를 읽는 모델에게는 철자를 한 글자씩 풀어서 알려 줘요. 폴더라면 앞면 패널 한가운데를 가로질러 넣고, 자유형 아이콘이라면 물체에 직접 쓰거나 그 아래에 넣어요. 큰따옴표가 없으면 프롬프트는 글자를 전혀 넣지 말라고 요청해요. 긴 글은 아직도 뭉개져서 나오니, 짧은 단어 한두 개로만 쓰세요.

/ 메뉴의 프롬프트로 저장은 입력란의 내용을 스타일과 함께, 내가 붙인 이름으로 저장해요. 그때부터 내 프롬프트에 나오고, 고르면 입력란과 스타일 칸이 다시 채워져요. 이미 있는 이름을 입력하면 그렇다고 알려 준 다음 그 프롬프트를 바꿔요. 내 프롬프트에 있는 항목 옆의 x를 누르면 삭제되고, 그 뒤 몇 초 동안 되돌리기를 누를 수 있어요.

저장한 프롬프트는 skins 폴더 옆의 skills.json에 스킬로 보관돼요(skins 폴더의 위치는 ARCHITECTURE.md에 있어요). 형식은 crates/folderskin-ai/src/skill.rs에 설명된 folderskin.skill/1이에요. 스킬은 이미지에 무엇이 나오는지(idea)와 어떻게 보이는지(base_style, 또는 스킬 자체의 treatment, palette, light)를 따로 담아요. 그래서 저장해 둔 스타일 하나를 어떤 아이디어와도 함께 쓸 수 있어요. 모든 스킬은 파일에 쓰기 전에 검사해요. 60자 이하의 이름과 저장할 내용이 있어야 하고, 스타일은 FolderSkin에 있는 것이어야 해요. 스킬 자체의 treatment는 8단어에서 60단어 사이여야 하고, 모델에게 하지 말 것이 아니라 할 것을 말해야 해요. 스킬 전체는 4KB 안에 들어가야 해요. 누군가의 이름을 스타일로 쓴 프롬프트("in the style of" 뒤에 이름을 쓰거나 "by" 뒤에 이름을 쓴 경우)는 한마디 알려 준 다음에 저장해요. 기법을 설명하는 편이 더 잘 통하기 때문이에요.

프롬프트에 추가한 이미지는 따로 정하지 않으면 대상으로 쓰여요. 이미지의 칩을 클릭하면 스타일(모습만 맞추고 담긴 내용은 쓰지 않아요)이나 색감(색만 쓰고 나머지는 쓰지 않아요)으로 바꿀 수 있어요. 이미지는 템플릿 다음에 대상, 스타일, 색감 순서로 모델에게 가고, 프롬프트는 각 이미지를 번호와 용도로 불러요.

crates/folderskin-ai/src/request.rs는 모든 요청을 각 제공업체의 API 레퍼런스에 적힌 그대로 만들고, 제공업체에 공식 SDK가 있으면 그것과도 맞춰 봐요. 테스트는 요청 하나하나를 필드 단위로 확인해요. 또 crates/folderskin-ai/tests/providers.rs의 테스트는 모든 요청을 내 컴퓨터에서 도는 모의 서버로 보내요. 이 서버는 제공업체 문서에 적힌 대로 응답하기 때문에, 메서드, 주소, 키를 담는 헤더, 콘텐츠 유형, 모든 필드를 실제로 오가는 그대로 확인할 수 있어요.

설정값은 제공업체마다 정해진 매개변수로 보내고, 프롬프트 글에는 넣지 않아요. 크기는 모양에 맞춘 값이에요(Mac 폴더용 아트워크는 1024 × 960, Windows 폴더용은 1024 × 800, 폴더 전체는 그 폴더의 모양 그대로, 자유형 아이콘은 정사각형). 아무 크기나 받는 제공업체에는 그대로 보내고, 그렇지 않은 곳에는 그 제공업체가 지원하는 가장 가까운 크기나 가로세로 비율로 보내요.

제공업체요청크기함께 보내는 것
OpenAIimages/generations로 JSON, 또는 images/edits로 폼(이미지는 각각 image[]로)그대로, 16픽셀 단위(1024 × 960)quality: Flare는 high, Sunburst는 max, GPT Image 2는 medium. 가격을 미리 알 수 있게 하려는 거예요
xAI GrokJSON만. 이미지는 data URL로 넣어요(image, 여러 장이면 images)가장 가까운 aspect_ratio, 또는 템플릿 자체의 틀
Google GeminigenerateContent로 JSONgenerationConfig.imageConfig: 1K, 그리고 가장 가까운 aspectRatio나 템플릿의 틀responseModalities: ["IMAGE"]
Black Forest LabsJSON. 이미지는 input_image, input_image_2 같은 식으로그대로, 1메가픽셀 이내(FLUX.2는 1메가픽셀이 안 되는 부분도 1메가픽셀로 과금해요)프롬프트 재작성 끔(disable_pup, flex에서는 prompt_upsampling: false)
RecraftJSONV4.1 목록에서 가장 가까운 크기PNG 출력, 그리고 controls.background_color로 키 색상
Stability AI폼가장 가까운 aspect_ratio네거티브 프롬프트, 그리고 스타일에 맞는 프리셋이 있으면 스타일 프리셋
Ideogram폼3.0의 해상도 중 가장 가까운 것(1024 × 960)Magic Prompt 끔, 네거티브 프롬프트, 스타일 유형이나 프리셋

네거티브 프롬프트는 글자(글자를 넣어 달라고 한 경우는 빼고), 워터마크, 서명, 그리고 고른 스타일이 곧잘 덧붙이는 것들을 막아요. OpenAI, Gemini, Grok에는 네거티브 프롬프트가 없어서, 같은 내용을 프롬프트에 글로 적어요.

어떤 모델이 제공되던 때 저장한 선택은 그 모델을 대신하는 모델로 옮겨 가고, 스킨에는 그 스킨을 만든 모델의 이름이 그대로 남아요.

이전지금이유
OpenAI GPT Image 1GPT Image 2OpenAI가 2026년 10월 23일에 서비스를 종료해요
Gemini 2.5 Flash ImageGemini 3.1 Flash ImageGoogle이 2026년 10월 2일에 서비스를 종료해요
FLUX 1.1 ProFLUX.2 pro이전 세대로, 이미지를 받지 않았어요
Recraft V3Recraft V4.1이전 세대로, 프롬프트가 1,000자에서 잘리는데, FolderSkin의 자체 지시문만 해도 그보다 길어요

Ideogram 4.0은 아직 제공하지 않아요. 글로 쓴 프롬프트를 모두 고쳐 쓰는데, FolderSkin은 내가 쓴 아이디어를 그대로 지키기 때문이에요.

모든 요청은 제공업체가 내 계정으로 청구해요. 생성 화면에서는 버튼을 누르기 전에 모델의 대략적인 가격을 보여 주는데, FolderSkin이 보내는 설정값을 기준으로 제공업체의 가격 페이지에서 가져온 값이에요. 받은 이미지에도 요금을 매기는 제공업체(xAI, Black Forest Labs)에서는 폴더 전체가 조금 더 비싸요. 각 이미지 아래의 '세부 정보'에는 제공업체가 알려 준 요청 비용(xAI, Black Forest Labs, Recraft)이나 사용량(OpenAI, Gemini)이 나와요.

FolderSkin은 한 번 누를 때 정확히 한 번만 요청하고, 알아서 다시 시도하지 않아요. Gemini가 가끔 그러듯(NO_IMAGE) 제공업체가 그림 없이 끝냈을 때도 마찬가지예요. 채팅에 그렇다고 나오고 다시 시도가 보이지만, 요청을 다시 보내는 건 내가 누를 때뿐이에요.

제공업체 계층은 TLS에 rustls를 쓰는데, 이 라이브러리의 암호화 백엔드(aws-lc-sys)는 C 코드를 컴파일해요. 각 플랫폼의 CI 러너에서는 깔끔하게 빌드되고, FolderSkin의 릴리스도 그렇게 만들어요. 한 데스크톱 OS에서 다른 OS용으로 크로스 컴파일하려면(예를 들어 Mac에서 cargo check --target x86_64-pc-windows-msvc) 대상용 C 크로스 툴체인이 필요하고, 없으면 aws-lc-sys의 빌드 스크립트에서 실패해요. 워크스페이스의 나머지 부분은 툴체인 없이도 크로스 체크할 수 있어요.

메시지무슨 일이 있었나요
"add your … API key first"그 제공업체의 키가 저장되어 있지 않아요
"that key was rejected by …"제공업체가 키를 거부했어요
"… is rate limiting you right now"429예요. 잠시 기다렸다가 다시 시도하세요
"… finished without painting a picture"제공업체가 그림도, 이유도 없이 응답했어요(Gemini의 NO_IMAGE). 다시 시도하거나 아이디어를 다르게 표현해 보세요
"… declined that prompt: its filter blocked the picture"제공업체의 안전 필터가 프롬프트나 그림을 막았어요. Stability의 흐리게 처리된 그림이나 Ideogram의 안전 검사가 그런 경우예요. 표현을 바꿔 보세요
"… said: … (error 400)"제공업체가 보낸 말을 받은 그대로 보여 줘요. FolderSkin이 보낸 필드 이름이 나오면 알려 주세요
"the model drew a scene instead of a folder on a plain backdrop"폴더 전체 모드에서 키잉할 수 있는 배경이 없었어요. 다시 시도하거나 '그림만'으로 바꾸세요. 앱은 이런 이미지를 자체 폴더나 그림을 그린 대상 드라이브에 씌울 아트워크로 남기고, 자유형 아이콘이라면 받은 정사각형 이미지 그대로 남긴 다음 그렇다고 알려 줘요
"the provider returned something that is not an image"형식이 잘못되었거나 이미지가 아닌 응답이 왔어요

ChatGPT, Grok 같은 채팅 어시스턴트에서 폴더 전체를 그린 다음 사진 추가로 가져올 수도 있어요. 단색 #FF00FF 배경이나 투명한 배경 위에 폴더를 그려 달라고 하세요. FolderSkin은 둘 다 알아보고, 자체 폴더에 한 번 더 씌우는 대신 잘라 내고 여백을 다듬어서 이미지를 그대로 아이콘으로 써요. 그 밖의 이미지는 템플릿용 아트워크로 다뤄요. 정확한 규칙은 ARCHITECTURE.md에 있고, 마젠타 종이 위에 놓인 물건의 사진이 왜 그냥 이미지로 남는지도 설명해요.

생성한 스킨은 가져온 이미지처럼 도착하는 순간 제공업체, 모델, 프롬프트, 만들 때 정한 모양과 함께 저장돼요. 다시 시작해도 갤러리의 내 스킨에 있고, 거기서 지우면 디스크에서도 지워져요. 파일이 저장되는 곳은 ARCHITECTURE.md에 있어요. 저장에 실패해도(예를 들어 디스크가 가득 찬 경우) 스킨은 사라지지 않고 그 세션이 끝날 때까지 남아 있어요.

무엇으로 만들었는지도 스킨 인덱스의 recipe 아래에 남겨요. 그래서 결과물이 어떤 프롬프트에서 나왔는지 찾아보고 다시 만들 수 있어요. 보낸 그대로의 프롬프트, 네거티브 프롬프트를 받는 제공업체라면 그 네거티브 프롬프트, 스타일, 글자로 넣은 말, 각 이미지의 용도와 해시, 템플릿과 그 버전(mac-folder/1), 키 색상, 레시피 버전이 들어가요.

채팅은 다른 화면을 보는 동안에도 쓴 말과 이미지를 그대로 간직해요. 아직 만들고 있는 이미지도 마찬가지예요. FolderSkin을 다시 열면 새 채팅이 시작돼요. 이전 채팅은 채팅 목록에 있고, 저마다 그때 고른 모양으로 열려요.

생성한 스킨을 모두와 공유하려면 커뮤니티 팩에 넣으세요. 태그를 붙이고 앱에서 커뮤니티에 공유를 쓰거나, 저장해 둔 렌더링 폴더를 folderskin-tools packs make로 팩으로 만들면 돼요. 두 방법 모두 PACKS.md에 있고, 이미지가 폴더에 어떻게 올라가는지는 SKINS.md에 있어요.