Community이미지github.com

SaaS 로고

Notion, Linear, Vercel, Slack, Miro, Airtable, Intercom, PostHog, Webflow, Mintlify, Claude 스타일의 소프트웨어 제품 로고마크를 생성합니다. 평평한 기하학적 심볼 하나를 이미지 모델로 생성하고, 여러 컨셉 중에서 선택한 뒤 투명 PNG로 잘라내어 사이트에 바로 사용할 수 있게 합니다.

SaaS 로고란 무엇인가요?

이 스킬은 사용자가 요청한 제품에 대해 '진짜 SaaS 로고처럼 보이는' 평면 기하학적 로고마크를 생성합니다. 11개의 유명 SaaS 브랜드(Notion, Linear, Vercel 등)의 로고를 분석하여 8가지 공통 규칙과 5가지 패밀리(단일 기본형, 반복 기본형, 문자형, 다면체형, 부드러운 선형)를 도출했으며, 이 분류체계를 기반으로 이미지 모델에 프롬프트를 전달합니다. 사용자는 제품의 간략한 설명을 제공하면 스킬이 적절한 패밀리와 컨셉을 선택하여 여러 개의 로고 후보를 생성하고, 최종적으로 선택된 하나를 투명 배경의 마크와 앱 아이콘 타일 PNG로 잘라서 제공합니다. OpenRouter API를 통해 Gemini 이미지 모델을 사용하며, 생성 결과물은 로고 디자인의 6가지 평가 기준(평면성, 모서리 일관성, 기본 요소 개수, 실루엣, 의미 전달력, 캔버스)에 따라 검토됩니다.

지원 대상✓Claude Code~Codex CLI✓Cursor✓Gemini CLI
npx skills add https://github.com/paralect/saas-skills/tree/HEAD/skills/saas-logo

Installed? Explore more 이미지 skills: steipete/songsee, affaan-m/frontend-design, mattpocock/improve-codebase-architecture · View all 6 →

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

SaaS 로고은(는) 무엇을 하나요?

이 스킬이 사용하는 모든 파일은 이 SKILL.md 파일과 같은 폴더에 있으며, 경로는 해당 폴더를 기준으로 합니다. 다른 스킬이나 폴더에서 파일을 가져올 필요가 없습니다. 사용자가 다른 위치를 지정하지 않는 한, 생성된 모든 결과물은 현재 프로젝트의 out/saas-logo/ 디렉토리에 저장합니다.

하나의 심볼, 평면. 결과물은 투명 배경 위에 마크만 잘라낸 파일과, 앱 아이콘 타일에 마크가 포함된 파일 두 가지입니다. 즉시 사이트에 적용할 수 있는 파일들입니다. 이 스킬이 참고하는 마크들은 references/analysis.md에서 분석되어 있습니다. 각 11개 마크가 기하학적으로 어떤 형태인지, 모든 마크가 따르는 8가지 규칙, 그리고 5가지 패밀리에 대한 설명이 있습니다. 첫 번째 로고를 생성하기 전에 이 파일을 한 번 읽어보세요. 이것이 여기서 '진짜 SaaS 로고처럼 보인다'는 의미입니다.

이미지 모델로 보내는 프롬프트는 prompt.md에 있으며, 모델이 필요한 모든 정보(공유 규칙: 캔버스, 타일, 평면 채우기, 굵기, 색상; 참고 마크들이 속한 5개 패밀리와 각각의 규칙)를 포함합니다. 당신의 역할은 프롬프트 전에 (패밀리와 심볼 선택) 그리고 결과물을 평가하는 것입니다.

단계

1. 제품 파악하기

브리핑, README, 랜딩 페이지 카피 등 존재하는 모든 자료를 읽으세요. 한 줄로 요약하세요: "이름 — 사용자가 그것으로 무엇을 하는가, 동사 하나와 대상 하나로." "작업을 코딩 에이전트에 전달한다" → 전달하다, 작업 카드. "폴더를 사이트로 게시한다" → 게시하다, 페이지. 마크는 동사나 대상을 보여주어야 하며, 카테고리(기어, 구름, 로켓, 차트 등)를 보여주면 안 됩니다. 제품에 브랜드 색상(CSS 토큰, 파비콘)과 이니셜이 있다면 기록하세요.

2. 패밀리 선택하기

prompt.md 섹션 3에 있는 5개 패밀리와 각각의 용도:

  • 단일 기본형 (Solid primitive) (Vercel, Miro): 인프라, 개발자 도구, 필연적으로 느껴져야 하는 제품. 하나의 모양이 아이디어를 전달합니다.
  • 반복 기본형 (Repeated primitive) (Slack, Claude, Linear, Intercom, PostHog): 협업, 커뮤니케이션, AI, 여러 부분이 함께 움직이는 제품.
  • 문자형 (Letterform) (Webflow, Miro, Notion): 제품명 자체가 브랜드이며, 이니셜이 강한 형태(A, M, N, W, K, Z, S, V)를 가질 때.
  • 다면체형 (Faceted object) (Airtable, Notion의 페이지): 데이터, 저장소, 문서, 채우거나 쌓는 무언가가 있는 제품.
  • 부드러운 선형 (Soft stroke) (Mintlify, Intercom): 친근한 소비자 지향 제품, 문서, 지원, 기술적이기보다는 따뜻한 느낌.

사용자가 참조 브랜드를 언급하면 패밀리가 결정됩니다: "Slack처럼" 또는 "Claude처럼" → 반복 기본형; "Vercel처럼" → 단일 기본형; "Webflow처럼" 또는 "Notion처럼" → 문자형; "Airtable처럼" → 다면체형; "Mintlify처럼" 또는 "Intercom처럼" → 부드러운 선형. 사용자가 패밀리를 직접 언급하면 그대로 사용합니다. 어떤 힌트도 없으면 컨셉을 2-3개 패밀리에 분산시킵니다; 시트가 결정합니다.

3. 3-4개 컨셉 작성하기

각 컨셉은 이미지 모델이 추측 없이 그릴 수 있는 2-3문장으로 구성합니다:

  • 명사가 아닌 기하학적 형태로서의 심볼. "작업 카드"가 아니라 "더 넓은 둥근 사각형 하나, 그리고 그것보다 4분의 1 높이만큼 위 오른쪽으로 오프셋된 동일한 사각형 하나 더". "해시"가 아니라 "각각 한쪽 끝이 둥근 돌기인 네 개의 알약 모양, 중심을 기준으로 90° 회전".
  • 반복 기본형의 개수와 리듬: "다섯 개의 세로 막대, 높이가 왼쪽에서 오른쪽으로 3-5-4-2-3 순서".
  • 패밀리 이름, 문자형의 경우 어떤 글자와 어떤 2-3개의 획.
  • 색상: 브랜드 색상이 있으면 16진수로, 아니면 "검은 타일에 흰색 마크" 또는 "금잔화 타일에 검은색 마크".
  • 제외 사항: 컨셉이 부가 요소를 유발할 때 "점 없음", "막대 주위에 프레임 없음", "카운터(내부 빈 공간)는 비어 있음".

실루엣이 컨셉 간에 다르게 만드세요 (높은 것 vs 넓은 것, 하나의 덩어리 vs 흩어진 형태). 패밀리가 허용하는 기본 요소보다 더 많이 필요하거나 패밀리가 금지하는 색상을 사용하는 컨셉은 버리세요.

4. 구성하고 생성하기

각 컨셉에 대해 prompt.md를 가져와 {{input}}을 다음으로 교체하세요:

<Product> — <제품이 무엇이고 무엇을 하는지>. 동사는 <동사>; 대상은 <대상>.
브랜드 색상: <16진수 또는 "없음">. 이니셜: <글자>.
패밀리: <5개 중 하나>

컨셉: <3단계의 컨셉>

모든 컨셉을 OpenRouter를 통해 한 번에 병렬로 생성하세요 (아래 참조). 각각 하나의 이미지, 정사각형. <concept>.png 또는 .jpg로 저장하세요 (아래 스니펫이 구분합니다).

기본 모델: google/gemini-3.1-flash-lite-image (Nano Banana 2 Lite), 가장 저렴하고 빠릅니다. 평면 기하학을 충분히 잘 처리하며, 이 모델에서 실패하는 컨셉은 대개 다른 모델에서도 실패합니다. 요청이 있을 때만 업그레이드하거나, 최종 선정작이 두 번의 라운드 후에도 더 깔끔한 렌더링이 필요할 때만 google/gemini-3.1-flash-image (Nano Banana 2), 그 다음 google/gemini-3-pro-image (Nano Banana Pro)를 사용하세요. Pro 모델이 가장 깔끔한 기하학(평평한 끝, 균일한 굵기, 진정한 평면 채우기)을 그립니다.

5. 살펴보기

bash <this skill folder>/scripts/sheet.sh sheet.png a.png b.png … 명령어로 타일들을 나란히 배열하고 엽니다. 참조 이미지와 함께 보려면 bash <this skill folder>/scripts/fetch-references.sh out/saas-logo/references 명령어로 Brandfetch를 통해 11개 마크를 가져와 자체 시트를 만듭니다 (Brandfetch 클라이언트 ID 필요; 스크립트 헤더 참조). 각 타일을 분석 문서가 참조 이미지를 평가하는 방식과 동일하게 평가하세요:

  • 평면 (Flat) — 각 모양당 하나의 채우기, 그라데이션, 그림자, 베벨 없음. 그 외는 재생성 대상, 선정 불가.
  • 일관된 모서리 (Committed corners) — 패밀리가 지정한 대로 모두 날카롭거나 모두 둥글어야 함.
  • 개수 (Count) — 컨셉이 지정한 기본 요소의 수와 정확히 일치해야 함. 추가 점, 프레임, 노치는 재생성 시 명시적으로 제외해야 함 ("막대 주위에 프레임 없음").
  • 실루엣 (Silhouette) — 눈을 가늘게 뜨고 보세요. 16px에서 하나의 명확한 형태여야 하며, 우연히 다른 그림이 생성되면 안 됨: 세 개의 막대와 곡선이 얼굴이 되거나, 갈매기형과 점이 커서가 되거나, 네 개의 알약이 풍차가 되면 안 됨.
  • 의미 (Meaning) — 이름 없이도 동사나 대상을 알 수 있습니까? 카테고리 아이콘으로 읽힌다면 렌더링 문제가 아니라 컨셉이 잘못된 것입니다.
  • 캔버스 (Canvas) — 타일이 평평한 회색 위에 중앙에 위치하고, 그 위에 다른 것은 없으며 텍스트도 없어야 함. 타일 크기와 정확한 색상은 렌더링마다 약간 다를 수 있습니다. 이는 정상입니다. 세트가 정확히 일치해야 하는 경우 한 번에 한 모델로 모두 생성하거나 타일로 크롭하세요.

실패한 것만 재생성하되, 컨셉을 구체화하여 실패 원인을 명시하세요. 두 번의 라운드는 정상입니다. 두 번 실패하는 컨셉은 보통 모델 문제가 아니라 컨셉 자체의 문제입니다. 교체하세요.

6. 자르기

렌더링은 작업 파일입니다: 타일이 있는 회색 캔버스. 선정된 각 결과물을 실제 사용할 파일로 자릅니다:

bash <this skill folder>/scripts/cut.sh <concept>.png out/saas-logo/<product> --name <product>

이 스크립트는 <product>-mark.png (투명 배경에 마크만, 여백 없이 가장자리까지 잘림)와 <product>-tile.png (모서리가 둥근 앱 아이콘 타일, 투명 모서리)를 생성합니다. 캔버스 색상은 렌더링의 모서리에서 읽어오고 타일 색상은 타일 가장자리 안쪽 띠에서 읽어옵니다. 가장자리 픽셀은 이 색상들로부터 언믹스(unmix)되어 부드러운 가장자리를 유지하며 헤일로가 생기지 않습니다. 여러 컨셉을 제공할 때는 이름을 구분하세요 (--name relay-bars, --name relay-block). 첫 번째 실행 시 이 스킬 내 scripts/.venv에 Pillow와 NumPy가 포함된 작은 Python venv를 만듭니다. 이후에는 즉시 실행됩니다.

두 파일을 어두운 배경과 밝은 배경 위에 열어 확인하세요: 마크 가장자리를 따라 타일 색상의 프린지가 없어야 하고, 타일 모서리에 캔버스 조각이 없어야 하며, 마크가 잘려나간 부분이 없어야 합니다. 프린지가 있으면 렌더링의 타일이 평평하지 않다는 뜻입니다(그라데이션이나 비네트가 침투한 것). 패치 컷 대신 렌더링을 다시 생성하세요. 가장자리에서만 희미한 색상 틴트가 보이고 확대했을 때만 보인다면 Lite 및 Flash 모델의 JPEG 노이즈입니다. 중요한 경우 google/gemini-3-pro-image로 한 번 더 렌더링하세요. 이 모델은 PNG로 응답합니다.

7. 전달하기

마크와 타일 PNG를 out/saas-logo/<product>/에 넣습니다. 사용자가 요청할 때만 제품의 브랜드 에셋 디렉토리(public/, brand/, assets/)로 복사합니다. 렌더링 파일과 sheet.png는 그 옆에 있는 renders/ 폴더에 보관하세요. 요약에서는 권장하는 -mark.png와 -tile.png의 경로를 명시하고, 어떤 컨셉을 권장하는지 한 줄과 이유를 설명하며, 다른 컨셉을 대안으로 파일과 함께 나열하세요.

OpenRouter를 통한 생성

API 키는 OPENROUTER_API_KEY에서 가져옵니다. 설정되어 있지 않으면 중단하고 사용자에게 설정하도록 요청하세요. 다른 제공자를 추측하지 마세요.

KEY="$OPENROUTER_API_KEY"

# request.json: {"model": "google/gemini-3.1-flash-lite-image", "prompt": "<구성된 프롬프트>", "aspect_ratio": "1:1"}
curl -sS https://openrouter.ai/api/v1/images \
  -H "Authorization: Bearer $KEY" \
  -H "Content-Type: application/json" \
  -d @request.json > response.json

python3 - <<'PY'
import base64, json, pathlib
data = json.loads(pathlib.Path("response.json").read_text())["data"][0]
image = base64.b64decode(data["b64_json"])
# Lite와 Flash는 JPEG 바이트로, Pro는 PNG로 응답합니다. 파일 확장자를 이에 맞게 지정합니다.
ext = "png" if image.startswith(b"\x89PNG") else "jpg"
pathlib.Path(f"concept.{ext}").write_bytes(image)
PY

scripts/sheet.sh와 scripts/cut.sh는 두 형식 모두 처리할 수 있습니다.

파일

  • prompt.md — 프롬프트 템플릿; {{input}}이 제품 라인, 패밀리, 컨셉을 받습니다. 섹션 3에는 5개 패밀리가 있습니다.
  • references/analysis.md — 11개 마크에 대한 분석: 각각의 기하학적 형태, 공유 규칙, 5개 패밀리.
  • scripts/fetch-references.sh — Brandfetch의 Logo API(클라이언트 ID는 BRANDFETCH_CLIENT_ID에서 가져옴)를 통해 참조 마크를 가져와 폴더와 시트로 만듭니다. 다른 참조 세트를 위해 모든 도메인 목록에서 작동합니다.
  • scripts/sheet.sh — 타일들을 회색 캔버스에 나란히 배열합니다 (rsvg-convert 필요; brew install librsvg).
  • scripts/cut.sh, scripts/cut.py — 렌더링을 투명 마크와 타일 PNG로 잘라내어 전달합니다.

Individual skills in this repo

This repo contains 3 individual skills — each has its own dedicated page.

관련 스킬