AI 어시스턴트
FolderSkin은 설명만으로 스킨을 만들 수 있어요. 방법은 두 가지예요.
- 로컬 모델은 내 컴퓨터에서 무료로 그려요. 한 번만 설정하면(FLUX.2 [klein] 4B, Mac에서는 4.6GB, 그 밖에서는 5.2GB를 내려받아요) 키 없이 오프라인에서 동작하고, 아무 데도 아무것도 보내지 않아요. macOS 14 이상의 Apple 실리콘 Mac과 Windows, Linux PC에서 돌아가요.
- 내 키 쓰기: 이미 계정이 있는 제공업체의 API 키를 붙여 넣으면, 키는 내 컴퓨터의 비공개 파일에 저장되고 FolderSkin이 내 컴퓨터에서 그 제공업체와 직접 통신해요.
어느 쪽을 쓸지는 설정 → AI 제공업체에서 골라요. 체크 표시는 로컬 모델이 설정되어 있거나, 제공업체에 키가 있다는 뜻이에요.

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을 지우면 모든 키가 사라져요.
두 가지 모양
섹션 제목: “두 가지 모양”가장 중요한 선택이지만, 품질에 관한 문제는 아니에요.
그림만 모드는 모델에게 1024 × 958 크기의 평면 그림을 요청하고, FolderSkin이 그 그림을 자체 폴더 템플릿에 씌워요. 사진을 추가할 때와 똑같아요. 모양은 FolderSkin이 정하기 때문에, 모든 아이콘 크기에서 모든 스킨이 딱 맞게 정렬돼요. 투명도를 지원하지 않는 제공업체를 포함해 어떤 제공업체든 쓸 수 있어요. 이게 기본값이고, 대부분은 이게 정답이에요.
폴더 전체 모드는 모델에게 투명한 배경이나 키잉용 배경 위에 폴더 자체를 그리게 하고, 그 이미지를 컴포지터를 거치지 않고 바로 아이콘으로 써요. 픽셀 단위로 정확한 모양은 포기해야 하지만, 대신 진짜 입체감이 있고 폴더 위쪽 가장자리를 넘어서는 아트워크를 얻을 수 있어요.
모델이 이미지를 바탕으로 그릴 수 있고(OpenAI, Grok, Gemini) 이미지를 첨부하지 않았다면, FolderSkin이 자체 빈 폴더 템플릿을 그 이미지로 보내요. 밝은 회색 한 가지로 칠한 FolderSkin 폴더를, 요청한 크기의 단색 마젠타 한가운데에 놓은 이미지예요(compositor::blank_template). 프롬프트는 모델에게 바로 그 폴더를 다시 그리되 윤곽선, 탭, 종이 띠, 크기, 위치를 그대로 두고, 마젠타는 단색으로 남기라고 지시해요. 그러면 결과물은 모델이 멋대로 지어낸 폴더가 아니라 FolderSkin의 실루엣을 유지해요. 템플릿이 마젠타 위에 있기 때문에, 투명도를 돌려줄 수 있는 모델이라도 이 경우에는 항상 아래의 키잉 방식을 거쳐요. 직접 첨부한 참고 이미지는 전과 같이 아트워크로 써요.
투명도 처리 방식
섹션 제목: “투명도 처리 방식”모델은 두 부류로 나뉘고, FolderSkin은 고른 모델에 맞는 방식을 써요.
- 알파 지원: 요청에서 투명한 배경을 지정하면, 돌아오는 PNG에 이미 투명한 배경이 있어요. FolderSkin은 투명한 여백만 잘라 내요.
- 알파 미지원: 프롬프트에서 단색 마젠타
#FF00FF위에 폴더만 그리라고 요청해요. 그런 다음 FolderSkin이 그 색을 지우고, 부드러운 가장자리로 번진 마젠타도 지우고(잘라 낸 이미지에 분홍색 테두리가 생기지 않게 하는 단계예요), 여백을 잘라 내요. 마젠타를 쓰는 이유는 두 가지예요. 폴더 그림에는 거의 나오지 않는 색이고, 배경이 빠졌을 때 알아챌 수 있기 때문이에요. 테두리가 마젠타가 아니면 모델이 지시를 무시했다는 뜻이라서, FolderSkin은 망가진 아이콘을 적용하는 대신 그렇다고 알려 줘요.
키잉 코드는 crates/folderskin-core/src/matte.rs에 있고, 마젠타 배경 위에 진짜 분홍색 피사체가 있는 경우까지 단위 테스트를 거쳤어요.
프롬프트
섹션 제목: “프롬프트”crates/folderskin-ai/src/prompts.rs는 내가 쓴 말에 정해진 조건을 더해 프롬프트를 만들어요. 실제로 효과를 내는 건 스타일에 관한 부분이 아니라 구조에 관한 부분이에요.
- '그림만' 프롬프트는 폴더, 아이콘, 기기, 목업을 그리지 못하게 하고, 위쪽 8분의 1과 6% 테두리를 빈 공간으로 남겨 둬요. 템플릿이 그 부분을 잘라 내거나 휘게 만들기 때문이에요.
- '폴더 전체' 프롬프트는 구조를 못 박아요. 정확히 세 부분, 즉 탭 하나, 보이는 종이 가장자리 하나, 앞면 패널 하나로 이루어지고, 레이어를 더하지 말라는 지시를 분명히 넣어요. 이 문장이 없으면 모델은 어김없이 겹쳐진 폴더나 탭이 두 개인 폴더를 그려요.
- 템플릿 프롬프트(
compose_on_template)는 빈 템플릿과 함께 써요. 첨부한 이미지가 다시 그려야 할 바로 그 폴더이고, 모양과 구도는 그대로 두고, 아이디어는 뒷면과 앞면 패널에 걸쳐 그리고, 마젠타는 단색으로 남기라고 지시해요. - 모든 프롬프트는 마지막에 엄격한 출력 조건으로 끝나요. 픽셀 크기, 피사체만 따로 그릴 것, 그리고 키 색상이나 투명한 배경 중 하나를 지정해요.
이 템플릿은 고칠 수 있어요. 평범한 Rust 문자열 상수이고, 핵심 문구가 들어 있는지 테스트로 확인해요.
모든 요청은 제공업체가 내 계정으로 청구해요. 생성 화면에서는 버튼을 누르기 전에 모델의 대략적인 가격을 보여 줘요. FolderSkin은 한 번 누를 때 정확히 한 번만 요청하고, 알아서 다시 시도하지 않아요.
빌드와 크로스 컴파일
섹션 제목: “빌드와 크로스 컴파일”제공업체 계층은 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 …" | 제공업체가 401 또는 403을 돌려줬어요 |
| "… is rate limiting you right now" | 429예요. 잠시 기다렸다가 다시 시도하세요 |
| "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에 있어요. 저장에 실패해도(예를 들어 디스크가 가득 찬 경우) 스킨은 사라지지 않고 그 세션이 끝날 때까지 남아 있어요.
생성한 스킨을 모두와 공유하려면 커뮤니티 팩에 넣으세요. 태그를 붙이고 앱에서 커뮤니티에 공유를 쓰거나, 저장해 둔 렌더링 폴더를 folderskin-tools packs make로 팩으로 만들면 돼요. 두 방법 모두 PACKS.md에 있고, 이미지가 폴더에 어떻게 올라가는지는 SKINS.md에 있어요.