Not in the top 1,000 by GitHub stars

gongnyang/stickerforge

캐릭터 이미지 한 장으로 인쇄용 스티커 수백 장을 뽑는 Codex, Claude Code 스킬

History

Review weekly changes to SKILL.md before updating. Dates mark the weeks in which we observed each version; checks apply to the recorded commits.

View weekly changes

skills/stickerforge/SKILL.md

Week of Nov 2, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 7f4ef91840a6

No earlier version was observed for comparison.

Compare on GitHub

View on GitHubAdd to my skills

Verified commit 7f4ef91840a66b72de444b5c25fb5f14c97218a8

git clone --filter=blob:none --no-checkout https://github.com/gongnyang/stickerforge.git .hotskills/gongnyang-stickerforge && git -C .hotskills/gongnyang-stickerforge checkout --detach 7f4ef91840a66b72de444b5c25fb5f14c97218a8 # Copy each selected skill directory from .hotskills/gongnyang-stickerforge into .claude/skills/<skill-name>/
30GitHub stars
Not availablestars in 7 days
1skill in this repository
3commits in 30 days

Heat

Insufficient history

Not enough history yet to measure heat. It appears after a few days of data.

Heat never changes the order by stars, and sponsorship never touches it. How heat works

Stars over time

Nov 6, 2026Nov 7, 202630

30-day change not yet available: not enough history.

Individual skills in this repository

How it works

stickerforge

When your agent uses it

Turns one character image into hundreds of print-ready transparent PNG stickers. Plans concepts, checks duplicates, runs a pilot, batch-generates with Codex image generation or an OpenAI/Gemini key, gates alpha and fake-checkerboard backgrounds, retries failures twice, exports a contact sheet and die-cut notes. Use for sticker packs, character sticker sets, emoji or messenger stickers, print stickers, mascot sticker sheets. Korean triggers - 스티커 만들어, 스티커 팩, 캐릭터 스티커 대량 생성, 이모티콘 스티커, 인쇄용 스티커, 칼선, 스티커 시트, 투명 PNG 스티커, 컨셉 100개.

What it loads into context

Frontmatter

181 tokens

Always available to the agent

SKILL.md

1,264 tokens

When the skill is activated

Reference documents

9,405 tokens

Loaded on request

Token counts are estimates. Scripts run separately; they are not counted as reference context.

The playbook

  1. Invariants
  2. Stages
  3. When to read what
  4. Runtime
  5. Output contract

Scripts executed separately

  • scripts/alpha_clean.py
  • scripts/cleanup.py
  • scripts/doctor.py
  • scripts/gates/_common.py
  • scripts/gates/g01_size.py
  • scripts/gates/g02_alpha.py
  • scripts/gates/g03_checker.py
  • scripts/gates/g04_margin.py
  • scripts/gates/g05_outline.py
  • scripts/gates/g06_dup.py
  • scripts/manifest.py
  • scripts/postprocess.py
  • scripts/providers/__init__.py
  • scripts/providers/codex.py
  • scripts/providers/gemini.py
  • scripts/providers/openai.py
  • scripts/run.py
  • scripts/sheet.py
  • tests/make_fixtures.py
  • tests/run_tests.py

Files

  • ../../.claude-plugin/marketplace.jsonasset279 bytes
  • ../../.claude-plugin/plugin.jsonasset466 bytes
  • SKILL.mdcore4,911 bytes
  • agents/openai.yamlasset282 bytes
  • examples/tiny-project/refs/gongnyang.jpgasset46,352 bytes
  • examples/tiny-project/spec.jsonasset937 bytes
  • references/failure-playbook.mddoc3,054 bytes
  • references/print-guide.mddoc2,277 bytes
  • references/providers.mddoc3,940 bytes
  • references/s0-intake.mddoc2,447 bytes
  • references/s1-concepts.mddoc2,436 bytes
  • references/s2-pilot.mddoc1,445 bytes
  • references/s3-generate.mddoc2,894 bytes
  • references/s4-gates.mddoc1,969 bytes
  • references/s5-retry.mddoc1,448 bytes
  • references/s6-export.mddoc1,340 bytes
  • schemas/manifest.schema.jsonasset1,028 bytes
  • schemas/spec.schema.jsonasset3,510 bytes
  • scripts/CODEX_ONLY_RESULT.mddoc2,675 bytes
  • scripts/alpha_clean.pyruns1,516 bytes
  • scripts/cleanup.pyruns1,678 bytes
  • scripts/doctor.pyruns2,793 bytes
  • scripts/gates/README.mddoc1,701 bytes
  • scripts/gates/_common.pyruns1,825 bytes
  • scripts/gates/g01_size.pyruns1,127 bytes
  • scripts/gates/g02_alpha.pyruns1,296 bytes
  • scripts/gates/g03_checker.pyruns3,559 bytes
  • scripts/gates/g04_margin.pyruns1,440 bytes
  • scripts/gates/g05_outline.pyruns4,031 bytes
  • scripts/gates/g06_dup.pyruns2,562 bytes
  • scripts/manifest.pyruns1,946 bytes
  • scripts/postprocess.pyruns1,690 bytes
  • scripts/providers/PROVIDER_STATUS.mddoc1,777 bytes
  • scripts/providers/__init__.pyruns418 bytes
  • scripts/providers/codex.pyruns4,190 bytes
  • scripts/providers/gemini.pyruns2,889 bytes
  • scripts/providers/openai.pyruns3,671 bytes
  • scripts/run.pyruns19,981 bytes
  • scripts/sheet.pyruns1,739 bytes
  • styles/chibi-soft.mddoc825 bytes
  • styles/flat-vector.mddoc816 bytes
  • styles/mono-ink.mddoc823 bytes
  • styles/original-match.mddoc986 bytes
  • styles/retro-mission-patch.mddoc897 bytes
  • styles/toy-3d.mddoc911 bytes
  • templates/concept-lines.example.mddoc1,384 bytes
  • templates/spec.example.jsonasset884 bytes
  • tests/REAL_RESULT.mddoc1,241 bytes
  • tests/make_fixtures.pyruns4,351 bytes
  • tests/run_tests.pyruns7,558 bytes
Read SKILL.md

# stickerforge

One reference character in, a gated set of transparent PNG stickers out. Work in a project folder outside this skill folder. Scripts live in `scripts/` and are run, not read. Run `scripts/doctor.py` first; it detects the runtime and stops when image generation is unavailable.

## Invariants

1. Three human checks only: style (A), pilot (B), final (C). No batch run before B.
2. The reference is always the original character image. Generated images are never used as references.
3. Transparent output: ask for `transparent_background=true`, then clean alpha (12 and below to 0, 240 and above to 255). A checkerboard painted into pixels is a fail, not a transparent image.
4. Never add text on top of an image afterwards. A wrong glyph means regenerate.
5. Concepts are compared against the full concept list before generation. Duplicates are dropped.
6. Front model for the Codex path: gpt-6.1-terra at medium effort. Pass the prompt verbatim. No lighter model; quality drops in practice.
7. Collect images by the `thread_id` from `codex exec --json`, never by time window.
8. Resume from `manifest.jsonl`: append one row per state change, the last row for an id wins. Retry limit is 2 per sticker.
View the complete source on GitHub

Skills included

  • stickerforge

Repository facts

License
MIT
Created
Nov 6, 2026
Last pushed
Nov 6, 2026
Forks
6
Open issues
0
Project activity
Active

Before you install

Network or broad shell

Automated signals, not a guarantee

Checked Nov 7, 2026

Show all 75 signals by file

.claude-plugin/plugin.json

  • Network accessline 4
    "version": "0.1.0",   "author": { "name": "kongnyang" },   "homepage": "https://github.com/gongnyang/stickerforge",
  • Network accessline 5
    "author": { "name": "kongnyang" },   "homepage": "https://github.com/gongnyang/stickerforge",   "repository": "https://github.com/gongnyang/stickerforge",
  • Network accessline 6
    "homepage": "https://github.com/gongnyang/stickerforge",
  • Network accessline 7
    "repository": "https://github.com/gongnyang/stickerforge",

skills/stickerforge/SKILL.md

  • Access to secretsline 59
    [Credential-related source omitted]

skills/stickerforge/references/providers.md

  • Access to secretsline 9
    [Credential-related source omitted]
  • Access to secretsline 10
    [Credential-related source omitted]
  • Access to secretsline 20
    [Credential-related source omitted]
  • Access to secretsline 21
    [Credential-related source omitted]

skills/stickerforge/schemas/manifest.schema.json

  • Network accessline 1
    {   "$schema": "https://json-schema.org/draft/2020-12/schema",
  • Network accessline 2
    "$schema": "https://json-schema.org/draft/2020-12/schema",

skills/stickerforge/schemas/spec.schema.json

  • Network accessline 1
    {   "$schema": "https://json-schema.org/draft/2020-12/schema",
  • Network accessline 2
    "$schema": "https://json-schema.org/draft/2020-12/schema",

skills/stickerforge/scripts/alpha_clean.py

  • Executable scriptline 1
    #!/usr/bin/env python3

skills/stickerforge/scripts/cleanup.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Access to secretsline 13
    [Credential-related source omitted]

skills/stickerforge/scripts/doctor.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Access to secretsline 27
    [Credential-related source omitted]
  • Access to secretsline 35
    [Credential-related source omitted]
  • Access to secretsline 36
    [Credential-related source omitted]
  • Access to secretsline 52
    [Credential-related source omitted]
  • Access to secretsline 53
    [Credential-related source omitted]

skills/stickerforge/scripts/gates/_common.py

  • Executable scriptline 1
    Executable file

skills/stickerforge/scripts/gates/g01_size.py

  • Executable scriptline 1
    #!/usr/bin/env python3

skills/stickerforge/scripts/gates/g02_alpha.py

  • Executable scriptline 1
    #!/usr/bin/env python3

skills/stickerforge/scripts/gates/g03_checker.py

  • Executable scriptline 1
    #!/usr/bin/env python3

skills/stickerforge/scripts/gates/g04_margin.py

  • Executable scriptline 1
    #!/usr/bin/env python3

skills/stickerforge/scripts/gates/g05_outline.py

  • Executable scriptline 1
    #!/usr/bin/env python3

skills/stickerforge/scripts/gates/g06_dup.py

  • Executable scriptline 1
    #!/usr/bin/env python3

skills/stickerforge/scripts/manifest.py

  • Executable scriptline 1
    #!/usr/bin/env python3

skills/stickerforge/scripts/postprocess.py

  • Executable scriptline 1
    #!/usr/bin/env python3

skills/stickerforge/scripts/providers/PROVIDER_STATUS.md

  • Access to secretsline 8
    [Credential-related source omitted]
  • Access to secretsline 9
    [Credential-related source omitted]

skills/stickerforge/scripts/providers/__init__.py

  • Executable scriptline 1
    Executable file

skills/stickerforge/scripts/providers/codex.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 11
    [Credential-related source omitted]

skills/stickerforge/scripts/providers/gemini.py

  • Network accessline 1
    [Credential-related source omitted]
  • Executable scriptline 1
    [Credential-related source omitted]
  • Access to secretsline 1
    [Credential-related source omitted]
  • Network accessline 2
    엔드포인트: POST https://generativelanguage.googleapis.com/v1beta/models/<model>:generateContent
  • Access to secretsline 17
    [Credential-related source omitted]
  • Access to secretsline 19
    [Credential-related source omitted]
  • Network accessline 25
    "data": base64.b64encode(Path(r).read_bytes()).decode()}})     body = {"contents": [{"parts": parts}], "generationConfig": {"responseModalities": ["IMAGE"]}}     base = os.environ.get("GEMINI_BASE_URL", "https://generativelanguage.googleapi
  • Network accessline 26
    body = {"contents": [{"parts": parts}], "generationConfig": {"responseModalities": ["IMAGE"]}}     base = os.environ.get("GEMINI_BASE_URL", "https://generativelanguage.googleapis.com/v1beta")     req = urllib.request.Request(f"{base}/models
  • Network accessline 27
    [Credential-related source omitted]
  • Access to secretsline 27
    [Credential-related source omitted]
  • Network accessline 28
    req = urllib.request.Request(f"{base}/models/{model}:generateContent", data=json.dumps(body).encode(),
  • Network accessline 29
    [Credential-related source omitted]
  • Network accessline 30
    try:         with urllib.request.urlopen(req, timeout=int(cfg.get("timeout", 420))) as r:             resp = json.load(r)
  • Network accessline 31
    with urllib.request.urlopen(req, timeout=int(cfg.get("timeout", 420))) as r:
  • Possible obfuscationline 37
    img = base64.b64decode(d["data"]); break

skills/stickerforge/scripts/providers/openai.py

  • Executable scriptline 1
    [Credential-related source omitted]
  • Access to secretsline 1
    [Credential-related source omitted]
  • Access to secretsline 32
    [Credential-related source omitted]
  • Access to secretsline 34
    [Credential-related source omitted]
  • Network accessline 38
    chroma = job["transparent"] and not native     prompt = job["prompt"] + (CHROMA_NOTE if chroma else "")     base = os.environ.get("OPENAI_BASE_URL", "https://api.openai.com/v1")
  • Network accessline 39
    prompt = job["prompt"] + (CHROMA_NOTE if chroma else "")     base = os.environ.get("OPENAI_BASE_URL", "https://api.openai.com/v1")     fields = {"model": model, "prompt": prompt, "n": "1", "size": size, "output_format": "png"}
  • Network accessline 40
    [Credential-related source omitted]
  • Access to secretsline 40
    [Credential-related source omitted]
  • Network accessline 46
    if refs:             data, ct = _multipart(fields, [("image[]", r) for r in refs])             req = urllib.request.Request(base + "/images/edits", data=data, headers={"Content-Type": ct})
  • Network accessline 47
    data, ct = _multipart(fields, [("image[]", r) for r in refs])             req = urllib.request.Request(base + "/images/edits", data=data, headers={"Content-Type": ct})         else:
  • Network accessline 48
    req = urllib.request.Request(base + "/images/edits", data=data, headers={"Content-Type": ct})
  • Network accessline 49
    else:             req = urllib.request.Request(base + "/images/generations", data=json.dumps(fields).encode(),                                          headers={"Content-Type": "application/json"})
  • Network accessline 50
    req = urllib.request.Request(base + "/images/generations", data=json.dumps(fields).encode(),
  • Network accessline 51
    headers={"Content-Type": "application/json"})         req.add_header("Authorization", "Bearer " + key)         with urllib.request.urlopen(req, timeout=int(cfg.get("timeout", 420))) as r:
  • Network accessline 52
    req.add_header("Authorization", "Bearer " + key)         with urllib.request.urlopen(req, timeout=int(cfg.get("timeout", 420))) as r:             body = json.load(r)
  • Network accessline 53
    with urllib.request.urlopen(req, timeout=int(cfg.get("timeout", 420))) as r:
  • Possible obfuscationline 55
    img = base64.b64decode(body["data"][0]["b64_json"])

skills/stickerforge/scripts/run.py

  • Executable scriptline 1
    #!/usr/bin/env python3

skills/stickerforge/scripts/sheet.py

  • Executable scriptline 1
    #!/usr/bin/env python3

skills/stickerforge/tests/make_fixtures.py

  • Executable scriptline 1
    #!/usr/bin/env python3

skills/stickerforge/tests/run_tests.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Access to secretsline 42
    [Credential-related source omitted]
  • Access to secretsline 63
    [Credential-related source omitted]
  • Access to secretsline 67
    [Credential-related source omitted]

How the signals fit together

Facts from a static read of the files at the pinned commit. They describe what the code does, not why.

Some files could not be read; the facts below still hold.

Declared and executed: 2 facts
Signal confidence: 67 facts

and 17 more

Works with

Agent compatibility, from the files in this repository
AgentStatusEvidenceInstall to
Claude CodeNativeManifest .claude-plugin/marketplace.json.claude/skills/<skill-name>/
CodexCompatibleStandard SKILL.md skills/stickerforge/SKILL.md.agents/skills/<skill-name>/
CursorCompatibleStandard SKILL.md skills/stickerforge/SKILL.md.cursor/skills/<skill-name>/
Gemini CLICompatibleStandard SKILL.md skills/stickerforge/SKILL.md.gemini/skills/<skill-name>/
GitHub CopilotCompatibleStandard SKILL.md skills/stickerforge/SKILL.md.github/skills/<skill-name>/
OpenCodeCompatibleStandard SKILL.md skills/stickerforge/SKILL.md.opencode/skills/<skill-name>/
  • Native The repository ships a manifest, folder or frontmatter field for this agent.
  • Compatible A standard SKILL.md that this agent can read.
  • Unknown No evidence either way.

Derived automatically from paths, manifests and frontmatter. Not tested on each agent.