本文へ移動
cccskills
無料GitHub で公開

photo-poster-stylist

当使用者说"把照片做成极简海报"、"做一张几何风格的海报"、"把这张照片抽象成海报"时使用。

Turn a photographer-provided description of an existing photo into a minimal, geometric SVG poster with an explicit visual abstraction, restrained palette, grid, typography, bleed, and deterministic validation. Use when the user wants to reinterpret one of their photos as a stylized poster rather than retouch or reproduce the photo.

インストール方法を見る

含まれるファイル(3)

  • SKILL.md7.8 KB
  • references/layout-rules.md2.4 KB
  • scripts/poster_tool.py36.8 KB

SKILL.md(原文)

インストールする前に、エージェントに与えられる指示の中身を確認できます。

Photo Poster Stylist

Create a minimal poster from an existing photo plus the photographer's account of it. Translate; do not pretend to infer intent that was not supplied.

Use this skill when

  • The user wants a geometric, minimal poster based on one photographed scene.
  • The desired deliverable is editable SVG, optionally converted to PNG/PDF by a renderer available in the host environment.
  • Human judgment can confirm whether the abstraction still represents the source image.

Do not use it for

  • Photo retouching, compositing, restoration, or faithful vector tracing.
  • Inventing a photographer's emotions, symbolism, location, identity, or story.
  • A multi-photo layout: use photo-series-layout for 3–9 photos on one page, or photo-spread-composer for a publication-style spread with bands and credits.
  • Work where the user has no right to use the source image or requested branding assets.

Required inputs

Ask only for missing decisions that change the output:

  1. Source: the photo if the environment can inspect images; otherwise a factual description from the photographer.
  2. Visual anchors: subject silhouette, dominant light/dark masses, and one detail that must survive abstraction.
  3. Output: trim width/height, orientation, and intended medium (screen or print).
  4. Copy: title/subtitle/credit exactly as supplied, or confirmation that the poster has no text.
  5. Constraints: preferred/forbidden colors, typeface availability, and required bleed.

If image inspection is unavailable, say so and request the three visual anchors. Never fill them in from stereotypes.

Workflow

1. Build an evidence-bound visual brief

Separate inputs into:

  • Observed/provided facts — objects, approximate positions, colors, light direction, text.
  • Interpretive choices — crop, geometric simplification, hierarchy, palette reduction.
  • Unknowns — anything requiring photographer confirmation.

Write one sentence for the concept: “Preserve X, reduce Y to Z, and use W as the focal contrast.” Get confirmation when a mistaken anchor would invalidate the design.

2. Reduce the image

Make a mass map before drawing details:

  1. Choose one dominant silhouette or negative-space shape.
  2. Reduce remaining tonal structure to 2–5 supporting masses.
  3. Preserve at most one identifying detail.
  4. Remove texture that does not affect recognition or rhythm.

Prefer subtraction. Do not reproduce faces or logos as detailed vectors unless explicitly required and authorized.

3. Choose the system

Use references/layout-rules.md. Default limits:

  • no more than 3 visible colors;
  • no more than 24 graphic elements, excluding metadata;
  • one focal area;
  • at most 2 type sizes and 2 font weights;
  • all intentional alignments land on the declared grid.

For ordinary text, target contrast ratio 4.5:1; for large text, 3:1. Treat these as accessibility checks, not guarantees of legibility in every print process.

4. Produce a poster specification

Create a UTF-8 JSON file accepted by the deterministic renderer:

{
  "width": 1080,
  "height": 1350,
  "bleed": 0,
  "palette": {"background": "#F3EFE6", "foreground": "#151515", "accent": "#D95336"},
  "title": "NORTH WINDOW",
  "subtitle": "Shanghai · 2026",
  "credit": "Photograph: supplied by user",
  "shapes": [
    {"type": "circle", "cx": 760, "cy": 410, "r": 210, "fill": "accent"},
    {"type": "rect", "x": 90, "y": 620, "width": 900, "height": 360, "fill": "foreground"}
  ]
}

Allowed shape types are rect, circle, ellipse, polygon, and path. Colors in shapes may use palette role names or six-digit hex values already present in the palette. Keep paths simple; every shape counts as one element.

5. Render and validate

From this skill directory:

python3 scripts/poster_tool.py render poster.json poster.svg
python3 scripts/poster_tool.py validate poster.svg

The script uses only the Python standard library. It checks parseability, dimensions, color count, graphic-element count, text hierarchy, bounds, and foreground/background text contrast. A zero exit status means the deterministic checks passed, not that the design is aesthetically successful.

Bounds are checked in the SVG's viewBox coordinates, so with bleed the canvas runs from -bleed to trim + bleed: a shape may fill the bleed, but not go past it. Paths are measured by their exact outline (M L H V C S Q T A Z, absolute and relative), curves by their extremes rather than their control points. Text is checked with an estimated box (full-width CJK characters 1 em, spaces 0.3 em, other characters 0.6 em): its anchor must be on the canvas and the box inside the trim. Warnings, which do not fail the check, cover text reaching into the 5% side margins of the safe area and, with bleed, a shape that crosses the trim edge but stops short of the bleed edge. The validator rejects transform, style, and stroke attributes, and any element other than rect, circle, ellipse, polygon, path, text, g, title, desc, and metadata, because these checks cannot follow them; hand-edited SVG must stay within the renderer's subset. Run python3 scripts/poster_tool.py --selftest after changing the script.

If another renderer is available, PNG/PDF conversion is optional. Do not claim those formats were produced unless the conversion was actually run and inspected.

6. Human review

Show the SVG and ask the photographer to verify:

  • Does the silhouette still identify the intended subject?
  • Was the must-keep detail preserved?
  • Does any interpretation imply a story not provided?
  • Is small text legible at final size?
  • For print, are bleed, safe area, color handling, and printer requirements confirmed?

Revise the brief before adding detail. Extra decoration is not the default fix.

Deliverables

Return:

  1. the confirmed one-sentence concept;
  2. the editable JSON specification;
  3. the SVG poster;
  4. the validator result and any unresolved warnings;
  5. a short record of factual inputs versus design choices.

Failure handling

  • No usable visual description: stop after a neutral input checklist; do not invent the scene.
  • More than three essential colors: ask which hierarchy matters, or offer two separate three-color directions.
  • Validator failure: fix the specification and rerender; do not hand-edit around the checker without explaining why.
  • Unsupported SVG feature: simplify it to supported geometry or validate the external SVG separately.
  • Aesthetic disagreement: present at most two materially different abstractions and state the tradeoff.

变更记录 / Changelog

版本日期变更类型
0.1.12026-09-26validate 改按 viewBox 坐标查边界(有出血时满出血形状不再误报、越出出血边的形状不再放过),补 path 精确外框(M/L/H/V/C/S/Q/T/A/Z,含相对命令)和文字估算框检查,transform/style/stroke 等查不了的写法直接报错;加 --selftest;多图排版改点名 photo-series-layout / photo-spread-composer,description 前加中文触发语;目录内测试副本并入 tests/cases 后删除patch
0.1.02026-09-09初始版本minor

レビュー

まだレビューはありません。使ってみた感想をお寄せください。

同じリポジトリのスキル

概要と使いどころ

当学生说"Common App 活动栏写不下"、"这段活动描述超字数了"、"帮我把这几条压到限制内"时使用。先按官方申请表核对当季字符限额,再逐条检查;一次把所有条目量完并直接给出压缩版,只在需要砍掉实质内容时才用选择题问该保哪部分。每改一版都用工具重新数一遍字符,绝不凭感觉说"这样应该够了"。只压缩,不代写空白。

日本語の概要は準備中です。原文の説明を表示しています。

ChromiteCr/Skills42026年10月16日 更新

当学生说"我参加过一些活动但没整理过"、"帮我把经历录进去"、"我的活动档案是空的"时使用。让学生一口气把记得的活动说出来,直接把这段话拆成结构化的长期事项(角色、组织、起止时间、做了什么、结果、级别),说不清的字段留空标"待补"而不是编,再用一张选择题卡把级别判定与是否重复这类关键项一次问完,然后提案入库。只记录学生真正说出口的内容,级别按事实判定,绝不往高了写。

日本語の概要は準備中です。原文の説明を表示しています。

ChromiteCr/Skills42026年10月16日 更新

当学生问"招生官会怎么看我的档案"、"我的背景还差什么"、"帮我评估一下现在的申请竞争力"时使用。以顶尖大学招生官的视角通读学生的档案、长期活动与已写下的反思,不问任何前置问题直接产出一份指名道姓的坦诚点评:这份材料的亮点、招生官真实的解读方式、明显的短板与空白、以及接下来最值得做的一到两件事。只读不写,不修改学生的任何数据,也不代写任何申请材料。

日本語の概要は準備中です。原文の説明を表示しています。

ChromiteCr/Skills42026年10月16日 更新

当使用者说"帮我填词"、"按这个字数模板写歌词"、"用多Agent对抗式写词"、"这首副歌帮我想几句"时使用,前提是字数骨架和这首歌写什么都已经有了;只有主题、还没定写什么时先用 lyric-concept-builder。拿一份字数骨架和意象系统,派三个 sonnet 子代理按不同路子并行独立起草(场景派 / 口语派 / 意象派),再派一个红队子代理逐句挑毛病,主 Agent 按句裁决拼稿,最后统一辙口与意象。收敛判据卡死:字数用 lyric-doctor 的脚本对模板数、每段同辙、hook 不含陈词、主歌二对主歌一有推进。不抄现有歌词,不替使用者决定这首歌要说什么。

日本語の概要は準備中です。原文の説明を表示しています。

ChromiteCr/Skills42026年10月16日 更新

当想知道一段 AI 回答"哪些能直接用、哪些必须先验证、哪些只能当建议"时使用。按声明类型分四级——低风险草稿材料、观点与策略建议、可查证的事实声明、会改变状态的可执行指令——每级配一句默认处置动作;再按影响半径排序,给出最小的下一步检查。可执行类一律标"不能直接执行;先做代码审阅/沙箱测试/回滚准备",其中破坏性或提权的命令排在最前。教的是一套可复用的复查习惯,不是替使用者把所有内容都核实一遍:本 skill 只分级、排序、定处置,要逐条核实走 ai-output-fact-checker,整段代码要做入库体检走 ai-code-onboarding-checklist。

日本語の概要は準備中です。原文の説明を表示しています。

ChromiteCr/Skills42026年10月16日 更新

当拿到一段 AI 生成的代码,还没决定要不要信、要不要跑、要不要往上继续加东西时使用。先做一遍客观体检:行数与嵌套深度、有没有测试、有没有硬编码密钥或遗留 TODO、依赖是不是真实存在、有没有危险调用(eval/exec、shell=True、递归删除、反序列化、提权、外发网络,按正文给的 grep 模式逐类查);再给风险评级和下一步动作。老实写明它查不了算法正确性——体检通过不等于代码是对的。回答里文字、事实和代码混在一起时先用 ai-answer-triage 分级;只审相对已有代码的一份改动用 ai-diff-review-protocol。

日本語の概要は準備中です。原文の説明を表示しています。

ChromiteCr/Skills42026年10月16日 更新

ChromiteCr のスキルをすべて見る

このスキルの問題を報告する