Community이미지github.com

image-riff — 빌린 시각 언어로 창작하는 오리지널 아트

하나 이상의 참조 이미지를 해당 이미지 고유의 시각 언어로 변환하여 오리지널 아트를 생성하고, 목적에 맞게 자르기까지 수행하는 스킬입니다. "이 이미지를 베이스로 사용해줘", "이 아트에서 영감 받은 작품 만들어줘", "배너/아바타/커버 만들어줘" 등의 요청에 사용합니다.

image-riff — 빌린 시각 언어로 창작하는 오리지널 아트란 무엇인가요?

이 스킬은 참조 이미지의 시각적 언어(렌더링 스타일, 색상 팔레트, 선 처리, 질감 등)를 분석하여 원본 이미지의 주제를 복사하지 않으면서 동일한 스타일로 완전히 새로운 구성을 생성하는 방법을 제공합니다. `make-art` 스킬을 엔진으로 사용하며, 이 스킬은 방법론과 워크플로우를 정의합니다. 주요 특징으로는 세 부분(STEM, SUBJECT, TAIL)으로 구성된 프롬프트 구조, 네 가지 시점(spire, wreck, descent, mandala)을 활용한 다양한 옵션 생성, 그리고 생성 결과를 실제 사용처(유튜브 채널 배너, 아바타, 인스타그램 등)에 맞게 정확한 크기로 자르는 과정을 포함합니다. 특히 작은 크기에서의 가독성을 검증하기 위한 다운스케일 테스트와, 각 플레이트를 순위별로 정리하고 README를 작성하는 체계적인 결과물 관리가 핵심입니다. 사진이 베이스인 경우에는 더 신중한 접근이 필요하며, 프롬프트의 부정어 목록을 통해 엔진이 자체적으로 추가하는 요소(종이 테두리, 비네트 등)를 방지하는 방법도 다룹니다.

지원 대상~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/2016judea/brick-mortar-skills/tree/HEAD/skills/image-riff

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

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

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

문서

image-riff — 빌린 시각 언어로 창작하는 오리지널 아트은(는) 무엇을 하나요?

엔진, API 키, 플래그 및 주의사항은 make-art 스킬에 있습니다. 먼저 그것을 읽으십시오. 이 스킬은 방법입니다: 참조 이미지를 실제 선택 가능한 옵션 세트로 변환하고, 실제로 사용될 표면에 맞게 적용하는 방법입니다.

완료는 예쁜 이미지 네 장이 아닙니다. 완료는 다음과 같습니다: N개의 플레이트 생성, 모든 프레임 검토, 정직한 비평으로 순위 매기기, 대상물에 맞게 자르기, 그리고 아래 소스 폴더에 작업 결과를 저장하는 것입니다. "여기 네 개의 이미지가 있습니다"에서 멈추는 실행은 사용자에게 마지막 두 작업을 떠넘기는 것입니다.

작업 결과물이 저장되는 위치

art/<source-slug>/
  README.md                 날짜가 포함된 제목, 브리프, 순위별 플레이트 표, 그리고 왜 해당 작품이 선택되었는지에 대한 이유
  1-<slug>.jpg ...          최종본, 풀 해상도 마스터, **순위별로 번호 매김**
  upload-1024/              실제 크기로 제공되는 파일, 표면이 특정 크기를 필요로 할 때
  small-size-test.png       증명 자료, 작은 크기에서 가독성이 결정적일 때
  prompts/                  최종본의 프롬프트를 정확히 그대로 저장
  candidates/<round>/       탈락한 라운드, 각각 자체 prompts/ 폴더 포함

<source-slug>는 날짜가 아닌 작업의 본체를 나타냅니다. 같은 레벨의 폴더가 이미 존재하면 그 규칙을 따르십시오.

  • README는 선택 사항이 아닙니다. 폴더는 몇 주 후에 차갑게 검토됩니다. README 없이 번호가 매겨진 JPEG 폴더만으로는 어떤 것이 배송되었고, 어떤 것이 거절되었으며, 그 이유를 알 수 없습니다.
  • 탈락한 라운드를 유지하십시오. candidates/는 재사용 가능한 지식이 있는 곳입니다.
  • 프롬프트를 그대로 유지하십시오. 그것들은 재현 지침이자 출처입니다.
  • 최종본은 생성 순서가 아닌 순위별로 번호를 매기십시오. 파일 이름은 대화가 사라진 후에도 순위가 유지되는 방법입니다.
  • 생성된 아트를 요청받지 않았다면 개인 사진 라이브러리에 넣지 마십시오. 실제 사진과 섞입니다.

두 가지 질문을 한 다음 투자하십시오

4K 이미지당 약 $0.24, 네 장 플레이트는 약 $1입니다. 두 가지 질문이 전체 관문이 될 만큼 충분히 싸고, 질문이 전혀 없으면 낭비가 될 만큼 충분히 비쌉니다. 두 답변은 플레이트마다 달라지므로 추론할 수 없습니다:

  1. 용도는 무엇인가요? 종횡비와 텍스트를 위한 여백을 남길지 여부를 결정합니다.
  2. 베이스에서 얼마나 벗어날까요? 충실한 복제 <-> 자유로운 재해석.

주관적인 축에 대해 질문하고, 기술적인 축은 스스로 결정하십시오.

프롬프트는 세 부분으로 구성되며, 오직 하나만 변경됩니다

코드로 빌드하십시오. 주제당 하나의 파일:

STEM    (모든 플레이트에 동일)  — 이미지에서 읽어낸 렌더링 언어
SUBJECT (유일한 변수)          — 한 문단, 하나의 구성
TAIL    (모든 플레이트에 동일)  — 형상 + 부정어 목록

STEM 템플릿, 단어보다 움직임으로 표현:

첨부된 이미지를 스타일과 색상의 앵커로 엄격히 사용하십시오. 정확한 렌더링 언어를 재현하십시오: <시대 + 매체>, <색상이 어떻게 배치되는지>, <선 처리>, <질감 / 음영 기법>, <명명된 안료, 최대 2~3개, 그리고 작은 악센트>, <빛이 하는 일>. 첨부된 이미지의 주제를 복사하지 마십시오. 새로운 것을 구성하십시오.

SUBJECT:

그리고 TAIL:

<종횡비> 구성, 끝에서 끝까지 전체 블리드. 테두리 없음, 프레임 없음, 종이 질감 없음, 흰색 여백 없음. 텍스트 없음, 문자 없음, 서명 없음, 로고 없음.

사진 베이스는 더 까다로운 경우입니다: 스프레드에 투자하기 전에 2K로 먼저 테스트하십시오. "렌더링 언어는 재현하고 주제는 변경"은 스타일화된 베이스(만화 패널, 프린트)에서는 안정적으로 아트를 생성합니다. 사진에서는 완벽하게 실행되어도 실망스러울 수 있습니다. 베이스가 사진일 때 세 번째 질문을 하십시오 — 이 결과가 사진처럼 보여야 할까요, 아니면 다른 무언가처럼 보여야 할까요? — 그리고 4K 네 장을 생성하기 전에 2K 한두 장으로 먼저 소비하십시오.

베이스가 사진일 때 STEM의 슬롯은 변경되지만 역할은 동일합니다. 마킹 슬롯을 카메라가 결정하는 여섯 가지로 교체하십시오: <스톡 + 포맷>, <그림자 반응>, <빛의 품질과 각도>, <팔레트, 3~4개의 명명된 색상과 하나의 악센트>, <그레인 / 할레이션 / 비네트>, <이것이 아닌 것>. 마지막 슬롯이 가장 중요합니다. 엔진이 사진 프롬프트에 대해 기본값으로 사용하는 것은 현대 디지털이기 때문입니다: HDR 없음, 그림자 들어올림 없음, 디지털 선명도 없음, 시네마틱 틸-앤-오렌지 그레이딩 없음이라고 말하십시오. "깊고 으스러진 블랙, 그림자 디테일을 전혀 잡지 않음" 과 같은 절은 프롬프트에서 가장 중요한 라인이 될 수 있습니다.

또한 베이스에서 렌더링뿐만 아니라 암시된 주제도 읽으십시오 (예: 아무도 없는, 위에서 내려다본 사적인 장소). SUBJECT를 쓰기 전에 한 문장으로 이름을 지정하십시오. 프레임 어디에도 사람이 보이지 않음과 같은 불변 조건은 TAIL에 넣으십시오.

왜 이렇게 구성되었는지:

  • 이미지가 스타일을 전달합니다. STEM은 눈에 보이는 것만 이름을 지정합니다. 보이는 마킹을 설명하십시오 — 굵기가 다양한 검은색 외곽선, 눈에 보이는 벤데이 하프톤 점 음영, 에어브러시 기계적 블렌드만 사용, 사진적 빛 없음. 기법을 명명하면 모델이 현대화하는 것을 막습니다.
  • "주제를 복사하지 마십시오... 새로운 것을 구성하십시오"는 중요한 역할을 합니다. 이것 없이는 베이스의 변형만 얻습니다. 이것을 포함하면 베이스 언어로 된 오리지널 구성을 얻고, 그중 최고는 베이스를 반복하기보다 인용합니다.
  • 안료를 명명하고 악센트를 제한하십시오. 악센트에 대해 구체적으로 "작은"이라고 말하십시오. 그렇지 않으면 악센트가 프레임을 장악합니다.
  • 부정어 목록은 단순한 상용구가 아닙니다. 엔진은 자체적으로 종이/리소 테두리를 추가합니다. TAIL에 네 개의 부정어를 넣는 것은 비용이 들지 않습니다.
  • 동일한 STEM + TAIL은 세트를 비교 가능하게 만듭니다. 플레이트 간의 모든 차이는 사용자가 요청한 것입니다.

주제는 장식이 아닌 시점(VANTAGES)이어야 합니다

가장 중요한 창의적 결정. 카메라의 위치가 다른 네 가지 주제:

플레이트시점예시
spire수직 축을 따라 위로 올려다보기구름 바다에서 솟아오르는 탑, 원근법으로 좁아짐
wreck빈 평원을 가로질러 바라보기반쯤 묻힌 난파선, 그쪽으로 걸어가는 하나의 작은 인물
descent구름을 뚫고 가파르게 아래로 내려다보기구부러진 지평선까지 펼쳐진 접시들의 바다, 하나의 인물이 떨어져 내려감
mandala지평선 없는 순수한 패턴을 응시하기대칭적인 장미창, 구석에서 구석까지

플레이트는 시점을 위해 제공됩니다: 수직 기둥은 레터박스 배너 자르기를 견디고, 하늘을 배경으로 한 단일 실루엣은 정사각형 아바타 자르기를 견딥니다. 가구만 다른 네 개의 플레이트는 모두 같은 방식으로 잘립니다 — 네 가지 의상을 입은 하나의 옵션. 플레이트당 하나의 아이디어.

브리프에 대해 순위를 매기십시오 — 그런 다음 각 표면이 원하는 것을 말하십시오

두 가지 별개의 순서. 베이스에 대해 정직하게 순위를 매기고 표류한 플레이트를 명명하십시오. 그런 다음 대상 표면당 한 줄씩 추가하여 해당 표면이 어떤 플레이트를 원하는지와 자르기가 그 이유를 설명하십시오. 충실도에서 가장 낮은 순위의 플레이트가 올바른 배너가 될 수 있습니다. 낮은 순위는 거부가 아닙니다. 그것은 하나의 축일 뿐입니다.

자르기를 수행하십시오. 모든 표면에는 기하학이 있습니다.

소스 플레이트가 아닌 대상에 맞게 크기가 조정된 파일을 제공하십시오.

YouTube 채널 배너 — 16:9 업로드 하나; YouTube는 기기당 다른 슬라이스를 제공합니다.

  • 저장 / TV: 2560x1441.
  • 데스크톱 스트립: 2560x424, 수직 중간 ~29.4% (상단 35.3% -> 하단 64.7%). 보여야 할 모든 것이 이 띠 안에 있어야 합니다.
  • 긴 9:16 플레이트는 16:9 자르기가 필요한 것보다 약 3배 높이가 있습니다. 띠를 선택하고 기본적으로 중간을 수락하지 마십시오.

채널 아바타 — 정사각형, 900x900에서 88x88까지 제공됩니다. 88px에서 판단하십시오.

채널이 실제로 제공하는 것을 읽어내려면:

UA="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126 Safari/537.36"
curl -sL -A "$UA" "https://www.youtube.com/@<channel>" | grep -o '"banner".\{0,400\}'
# fcrop64 16진수는 0xffff의 네 16비트 분수: 왼쪽, 위쪽, 오른쪽, 아래쪽
python3 -c "h='00005a57ffffa5a8'; print([round(int(h[i:i+4],16)/0xffff,4) for i in range(0,16,4)])"

다른 표면의 경우, 기억에 의존한 사양 시트를 믿지 말고 자르기 전에 실제 제공되는 에셋을 측정하십시오.

메카닉스

  • 붙여넣은 베이스 이미지는 디스크에 없습니다. 세션 기록의 base64에서 추출하십시오 (make-art에 스니펫이 있습니다). 그런 다음 잘못된 이미지에 4K 생성을 소비하기 전에 확인하십시오.
  • 스프레드를 병렬로 생성하십시오, 플레이트당 하나의 셸 호출. 네 개의 4K 플레이트는 약 2분 안에 생성됩니다.
  • --out foo.png는 JPEG를 쓸 수 있습니다. 출력된 mime을 확인하고 이름을 바꾸십시오.
  • 사용자보다 먼저 모든 프레임을 직접 확인하고, 눈으로 확인하는 대신 종이 테두리를 프로브하십시오: 비대칭의 거의 흰색 가장자리 런은 프레임이 아니라 하늘이나 구름이 블리드에 닿는 것입니다.

베이스 이미지가 없을 때

동일한 세 부분 프롬프트가 앵커 없이도 작동합니다. STEM은 사용자가 정의하는 하우스 스타일이 됩니다. 사용자의 자료(인용 모음, 무드 보드)에서 주제적 앵커를 제공하여 일반적이지 않도록 하십시오.

아이콘과 아바타: 작은 크기 테스트가 유일한 테스트입니다

순위는 전체 크기와 실제 크기 사이에서 역전될 수 있습니다. 의견을 가지기 전에 콘택트 시트를 만드십시오: 실제 렌더 크기로 다운스케일하고, 앱이 하는 것처럼 원형 자르기를 한 다음, 최근접 이웃 업스케일하여 살아남는 것이 무엇인지 확인하십시오.

from PIL import Image, ImageDraw
for s in (110, 44, 32):                      # IG: 프로필 / DM 행 / 피드+스토리 링
    small = Image.open(f"{n}.jpg").convert("RGB").resize((s, s), Image.LANCZOS)
    mask = Image.new("L", (s*4, s*4), 0)
    ImageDraw.Draw(mask).ellipse((0, 0, s*4-1, s*4-1), fill=255)
    out = Image.new("RGB", (s, s), (245, 245, 247))
    out.paste(small, (0, 0), mask.resize((s, s), Image.LANCZOS))
    out.resize((s*5, s*5), Image.NEAREST).save(f"{n}_{s}.png")   # NEAREST = 픽셀을 볼 수 있음

110px에서 멋진 플레이트가 44px에서는 읽을 수 없는 얼룩이 될 수 있습니다. Instagram 기하학: 정사각형 업로드 (1024x1024 작동), 원형으로 렌더링, 프로필에서 ~110px, DM 행에서 44px, 피드 또는 스토리 링에서 32px. 32에서 판단하십시오.

전체 크기에서는 보이지 않는, 차이를 만드는 네 가지 제약:

  1. 세 가지 단색, 그리고 더 이상 없음. 추가 색상은 모두 중간 톤이며, 중간 톤은 합쳐집니다.
  2. 프레임의 1/40보다 얇은 것은 없음. 프롬프트에서 숫자로 말하십시오.
  3. 엠블럼은 너비의 >= 85%를 채워야 함. 대문자로 명시하십시오; 그렇지 않으면 엔진이 많은 빈 땅에 소박한 표시를 중앙에 배치합니다.
  4. 뜨거운 색상은 반짝임이 아닌 바탕(GROUND)에 속함. 반사 하이라이트는 32px에서 아무 가치가 없습니다. 뜨거운 색상의 전체 평면 필드는 엄지손가락을 멈춥니다. 메탈릭 쉰 지침은 축소되면 진흙으로 읽힙니다.

엔진이 자체적으로 추가하는 두 가지 사항

  • 프롬프트에 원형 자르기를 언급하지 마십시오. 엔진이 원을 그릴 것입니다. 대신 다음과 같이 말하십시오: "평평하고 끊기지 않은 바탕이 사각형의 네 모서리까지 모두 이어집니다. 엠블럼은 중앙 3/4 안에 잘 포함되어 있습니다.", 그리고 TAIL에 원 없음, 링 없음, 원형 장식 없음, 둘러싸는 모양 없음을 넣으십시오.
  • 금지하지 않으면 방사형 비네트를 추가합니다. *"모든 채우기는 절대적으로 평평해야 함 — 그라데이션 없음, 비네트 없음, 모서리나 가장자리에 방사형 어두워짐 없음."*을 요구하십시오.

스타일 설명에서 베이스 이미지에 크레딧을 절대 부여하지 마십시오

사용자가 작성한 스타일 문구("Moebius 전통으로")는 귀속이 아닙니다. 그것이 하류에서 크레딧이 되게 하지 마십시오. 크레딧이 공개적으로 갈 것이라면 실제 작가에게 물어보십시오. 실제 작가에 대한 잘못된 크레딧은 공백보다 더 나쁩니다.

두 개 이상의 베이스 이미지

--image는 반복 가능하므로 여러 앵커가 가능하지만 덜 테스트되었습니다. 프롬프트에서 어떤 이미지가 무엇을 제공하는지 말하십시오 ("이미지 1은 색상과 선 언어입니다; 이미지 2는 구조입니다") 그리고 첫 번째 스프레드를 프로브로 취급하십시오.

참조

brand-direction-plates (역방향 스프레드: 하나의 주제에 여러 언어) · make-art (엔진, 플래그, 붙여넣기 추출, 테두리 프로브).

Individual skills in this repo

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

2016judea/ascii-charts

Build charts as plain Unicode-block text — bar, range, bullet, gap-bracket, star-histogram, heatmap, line, Venn, pie, donut and scatter — with a dependency-free Python script, for anywhere only monospace text survives (newsletter code blocks, Markdown, terminals, plain-text email, chat). Use when a chart has to embed as literal text instead of an image or a third-party chart service, or when you want a hand-made terminal look with no branding footer.

2016judea/buffett-checklist

Apply Warren Buffett's investment framework as a discipline lens when weighing a buy, hold, or sell decision — circle of competence, economic moat, owner earnings & intrinsic value, margin of safety, management/capital-allocation quality, and market psychology (Mr. Market, fear vs greed, temperament). Use when asked to "run this through Buffett", "what would Buffett say", "does this pass the moat test", "is this cheap enough", or for a second, more skeptical read on a name being evaluated or already held. This is a discipline overlay, not a replacement for a strategy — it applies the Buffett lens to how someone actually invests, rather than issuing generic advice.

2016judea/leonardo

Draw the way Leonardo da Vinci drew — a study sheet, a notebook folio, a red-chalk or silverpoint study, a machine cutaway, a storm of vortices — in his real materials and page-logic, generated with the make-art engine and anchored on fifteen of his actual (public-domain) sheets. Use when you say "Leonardo", "da Vinci", "like his notebooks", "a codex page of X", "draw this as one of his study sheets", "sanguine", "silverpoint", or wants a design, diagram, or illustration in that hand. Also a reading guide to his notebooks (Richter's 1883 public-domain translation) for "what did Leonardo say about shadow / trees / water". This is a TASK skill; the engine is `make-art`.

2016judea/mcp-stack

Which free MCP server or framework to reach for, and its traps — finance/gov data (SEC EDGAR, Yahoo, SAM.gov, USAspending), web research (Exa, Firecrawl, Crawl4AI, Jina reader), design/art/brand (Canva, Inkscape, Penpot, Figma, Orshot, Hugging Face image gen, vectorizing, charts), data/spatial (DuckDB spatial, live ArcGIS layers, OpenStreetMap/Overpass, Census, MapLibre), and ops (PostHog, iMessage, context7 docs). Use when making a social post, OG card, poster, logo/vector, chart, map, or brand asset; when querying parquet/geojson/duckdb or a city's open-data layer; when an MCP "needs authentication" or fails; or when asked "what tools do we have", "is there an MCP for X", "should we add X".

2016judea/records-request

Get a specific record out of a US government office by public-records request — "request the assessor's model", "file a data practices request", "FOIA this", "open records request", "can we just ask the county for it", "who do I write to at <county>", "chase that request", "did they ever answer". Covers checking the website first, finding the right office and statute, the carve-out paragraph that makes a request answerable instead of refused, web-form traps (hidden character caps, WAFs that reject apostrophes), chasing (there is usually no deadline), whether what comes back may be republished, and parsing multi-year tables without silent errors.

2016judea/sms-native-product

Build a product whose interface is text messages rather than an app or a website — "no app, no website", "they just text a number", "chat with our agent natively in Text Messages", "can we do this over text", "an SMS bot", "a Telegram bot", "make it a group chat", "minimum viable friction". Fires equally when it has already gone wrong — "my campaign got rejected", "our number is blocked", "the texts aren't arriving", "why do I need to register". Covers the gate that decides whether such a product can send at all (US A2P 10DLC registration, SHAFT content rules, permanent rejection codes), group MMS from code, what each channel can't do, an architecture that survives losing the channel, and guarding model-rewritten user content.

2016judea/vertical-market-agent

Build a chat agent that knows one industry in one metro better than any general model because it carries a precomputed digest of real public records (or a mined review corpus) and can pull live records mid-conversation — finding the moat, building a byte-stable substrate, enumerating what the records can't, the data traps that produce plausible wrong numbers, deterministic math in tools, measured prompt cost and cache TTL, shipping as an ad destination, an off-sector ending, and a precomputed spatial "what is this next to" layer. Use when building a vertical AI agent grounded in records rather than general knowledge.

관련 스킬