Not in the top 1,000 by GitHub stars

samyost1/3dicon

One prompt in, a looping animated 3D icon out — with real transparency. A Claude Code skill.

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/3dicon/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Network or broad shell → After Network or broad shell

9539d3a79ae6 → 9539d3a79ae6

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 9539d3a79ae6

No earlier version was observed for comparison.

Compare on GitHub

View on GitHubAdd to my skills

Verified commit 9539d3a79ae6937205bf44f6b102af5ea15b9d49

git clone --filter=blob:none --no-checkout https://github.com/samyost1/3dicon.git .hotskills/samyost1-3dicon && git -C .hotskills/samyost1-3dicon checkout --detach 9539d3a79ae6937205bf44f6b102af5ea15b9d49 # Copy each selected skill directory from .hotskills/samyost1-3dicon into .claude/skills/<skill-name>/
568GitHub stars
2stars in 7 days
1skill in this repository
0commits in 30 days

Heat

2.5
  • Star growth, last 7 daysNot available
  • Star growth, last 24 hoursNot available
  • Rank movement, last 7 daysNot available
  • Commits, last 30 daysNot available
  • Accounts asking about it through MCP, last 7 daysNot available
  • Hot votes this weekNot available

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

Stars over time

Oct 25, 2026Nov 3, 2026568

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

Individual skills in this repository

How it works

3dicon

When your agent uses it

Turn a prompt or a still image into a looping animated icon with real transparency — GPT Image / Nano Banana for the art, Seedance via OpenRouter for the motion, exact-unpremultiply matting for the alpha, animated WebP out. Use when asked to animate an app icon, make a 3D icon loop, produce a transparent animated asset, or add motion to flat icon art.

What it loads into context

Frontmatter

89 tokens

Always available to the agent

SKILL.md

2,713 tokens

When the skill is activated

Reference documents

1,074 tokens

Loaded on request

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

The playbook

  1. Before anything
  2. Always stop after the still
  3. How to report back
  4. The pipeline
  5. Choosing the motion
  6. How much it moves
  7. Rules that matter
  8. What it cannot do

Scripts executed separately

  • iconloop/__init__.py
  • iconloop/__main__.py
  • iconloop/cli.py
  • iconloop/config.py
  • iconloop/encode.py
  • iconloop/http.py
  • iconloop/kling.py
  • iconloop/matte.py
  • iconloop/motion.py
  • iconloop/providers.py
  • iconloop/verify.py

Files

  • ../../.claude-plugin/marketplace.jsonasset536 bytes
  • .env.exampleasset1,815 bytes
  • SKILL.mdcore11,097 bytes
  • SKILL.mdcore11,097 bytes
  • SKILL.mdcore11,097 bytes
  • docs/limitations.mddoc2,306 bytes
  • examples/banner.mp4asset469,532 bytes
  • examples/banner.webpasset940,942 bytes
  • examples/demo.mp4asset380,961 bytes
  • examples/social.mp4asset815,634 bytes
  • examples/timer/README.mddoc1,735 bytes
  • examples/timer/contact_sheet.pngasset134,676 bytes
  • examples/timer/still.pngasset142,883 bytes
  • examples/timer/timer.webpasset877,328 bytes
  • iconloop/__init__.pyruns103 bytes
  • iconloop/__main__.pyruns30 bytes
  • iconloop/cli.pyruns10,688 bytes
  • iconloop/config.pyruns1,825 bytes
  • iconloop/encode.pyruns4,030 bytes
  • iconloop/http.pyruns2,957 bytes
  • iconloop/kling.pyruns9,101 bytes
  • iconloop/matte.pyruns5,833 bytes
  • iconloop/motion.pyruns16,292 bytes
  • iconloop/providers.pyruns7,612 bytes
  • iconloop/verify.pyruns5,417 bytes
  • requirements.txtdoc204 bytes
Read SKILL.md

# 3dicon

Generate a still, animate it into a seamless loop, key the background out
properly, and encode it as an animated WebP with true soft alpha — the format
`expo-image`, Chrome and Safari all render natively, with no Lottie conversion
and no new native dependency.

## Before anything

1. `pip install -r requirements.txt` (or `uv pip install -r requirements.txt`).
2. `cp .env.example .env` and fill in the keys for the backend you want.
3. `ffmpeg` must be on PATH.

Check the keys are present *before* running — `animate` costs money, and a run
View the complete source on GitHub

Skills included

  • 3dicon

Repository facts

License
MIT
Created
Sep 23, 2026
Last pushed
Sep 23, 2026
Forks
46
Open issues
2
Project activity
Active

Before you install

Network or broad shell

Automated signals, not a guarantee

Checked Nov 5, 2026

Not fully analyzed: some files were too long, unreadable or missing. This never lowers the level.

Show 2 notes
  • skills/3dicon/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/3dicon/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
Show all 68 signals by file

skills/3dicon/.env.example

  • Access to secretsline 1
    [Credential-related source omitted]
  • Access to secretsline 14
    [Credential-related source omitted]
  • Access to secretsline 15
    [Credential-related source omitted]
  • Access to secretsline 16
    [Credential-related source omitted]
  • Access to secretsline 26
    [Credential-related source omitted]

skills/3dicon/iconloop/__init__.py

  • Executable scriptline 1
    Executable file

skills/3dicon/iconloop/__main__.py

  • Executable scriptline 1
    Executable file

skills/3dicon/iconloop/cli.py

  • Executable scriptline 1
    Executable file

skills/3dicon/iconloop/config.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 3
    [Credential-related source omitted]
  • Access to secretsline 10
    [Credential-related source omitted]
  • Access to secretsline 14
    [Credential-related source omitted]
  • Access to secretsline 27
    [Credential-related source omitted]
  • Access to secretsline 28
    [Credential-related source omitted]
  • Access to secretsline 38
    [Credential-related source omitted]
  • Access to secretsline 42
    [Credential-related source omitted]
  • Access to secretsline 48
    [Credential-related source omitted]

skills/3dicon/iconloop/encode.py

  • Executable scriptline 1
    Executable file

skills/3dicon/iconloop/http.py

  • Executable scriptline 1
    Executable file
  • Network accessline 47
    UA = "icon-loop/0.1 (+https://github.com/samyost/animated-3d-icon)"
  • Network accessline 52
    headers = {"User-Agent": UA, **headers}     for attempt in range(retries):         req = urllib.request.Request(url, data=body, headers=headers, method=method)
  • Network accessline 53
    for attempt in range(retries):         req = urllib.request.Request(url, data=body, headers=headers, method=method)         try:
  • Network accessline 54
    req = urllib.request.Request(url, data=body, headers=headers, method=method)
  • Network accessline 55
    try:             with urllib.request.urlopen(req, timeout=timeout) as r:                 return json.loads(r.read().decode())
  • Network accessline 56
    with urllib.request.urlopen(req, timeout=timeout) as r:
  • Network accessline 71
    def download(url, path, timeout=600):     req = urllib.request.Request(url, headers={"User-Agent": UA})
  • Network accessline 72
    req = urllib.request.Request(url, headers={"User-Agent": UA})
  • Network accessline 73
    with urllib.request.urlopen(req, timeout=timeout) as r, open(path, "wb") as f:

skills/3dicon/iconloop/kling.py

  • Executable scriptline 1
    Executable file
  • Network accessline 22
    API = "https://api.replicate.com/v1"
  • Network accessline 92
    OR_API = "https://openrouter.ai/api/v1/videos"
  • Access to secretsline 117
    [Credential-related source omitted]
  • Network accessline 147
    [Credential-related source omitted]
  • Network accessline 148
    [Credential-related source omitted]
  • Network accessline 149
    "User-Agent": http.UA})     with urllib.request.urlopen(req, timeout=600) as r, open(out_path, "wb") as f:         f.write(r.read())
  • Network accessline 150
    with urllib.request.urlopen(req, timeout=600) as r, open(out_path, "wb") as f:

skills/3dicon/iconloop/matte.py

  • Executable scriptline 1
    Executable file

skills/3dicon/iconloop/motion.py

  • Executable scriptline 1
    Executable file

skills/3dicon/iconloop/providers.py

  • Executable scriptline 1
    Executable file
  • Network accessline 50
    if backend == "openai":         k = config.key("OPENAI_API_KEY", "generate the still with GPT Image")         data = http.get_json("https://api.openai.com/v1/models",
  • Network accessline 51
    [Credential-related source omitted]
  • Access to secretsline 51
    [Credential-related source omitted]
  • Network accessline 52
    data = http.get_json("https://api.openai.com/v1/models",
  • Network accessline 61
    [Credential-related source omitted]
  • Access to secretsline 61
    [Credential-related source omitted]
  • Network accessline 62
    data = http.get_json(             f"https://generativelanguage.googleapis.com/v1beta/models?key={k}&pageSize=200")         ids = [m["name"].split("/")[-1] for m in data.get("models", [])]
  • Network accessline 63
    f"https://generativelanguage.googleapis.com/v1beta/models?key={k}&pageSize=200")
  • Network accessline 79
    [Credential-related source omitted]
  • Access to secretsline 79
    [Credential-related source omitted]
  • Network accessline 80
    data = http.get_json("https://openrouter.ai/api/v1/images/models",
  • Network accessline 92
    "No gpt-image or Gemini image model is listed on this OpenRouter "             "account. Set ICONLOOP_IMAGE_MODEL explicitly — the catalogue is at "             "https://openrouter.ai/collections/image-models")
  • Network accessline 94
    "https://openrouter.ai/collections/image-models")
  • Possible obfuscationline 106
    f.write(base64.b64decode(b64))
  • Access to secretsline 111
    [Credential-related source omitted]
  • Network accessline 117
    "quality": "high", "input_fidelity": "high", "background": "transparent"}         files = [("image[]", p) for p in references]         d = http.post_multipart("https://api.openai.com/v1/images/edits", fields, files, h)
  • Network accessline 118
    files = [("image[]", p) for p in references]         d = http.post_multipart("https://api.openai.com/v1/images/edits", fields, files, h)     else:
  • Network accessline 119
    d = http.post_multipart("https://api.openai.com/v1/images/edits", fields, files, h)
  • Network accessline 120
    else:         d = http.post_json("https://api.openai.com/v1/images/generations", {             "model": model, "prompt": prompt, "size": size,
  • Network accessline 121
    d = http.post_json("https://api.openai.com/v1/images/generations", {
  • Access to secretsline 129
    [Credential-related source omitted]
  • Network accessline 134
    "data": base64.b64encode(open(p, "rb").read()).decode()}})     parts.append({"text": prompt})     url = (f"https://generativelanguage.googleapis.com/v1beta/models/"
  • Network accessline 135
    parts.append({"text": prompt})     url = (f"https://generativelanguage.googleapis.com/v1beta/models/"            f"{model}:generateContent?key={k}")
  • Network accessline 136
    url = (f"https://generativelanguage.googleapis.com/v1beta/models/"
  • Access to secretsline 153
    [Credential-related source omitted]
  • Network accessline 158
    for p in references         ]     d = http.post_json("https://openrouter.ai/api/v1/images", payload,
  • Network accessline 159
    [Credential-related source omitted]
  • Network accessline 160
    d = http.post_json("https://openrouter.ai/api/v1/images", payload,

skills/3dicon/iconloop/verify.py

  • Executable scriptline 1
    Executable file

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: 4 facts
Signal confidence: 63 facts

and 13 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/3dicon/SKILL.md.agents/skills/<skill-name>/
CursorCompatibleStandard SKILL.md skills/3dicon/SKILL.md.cursor/skills/<skill-name>/
Gemini CLICompatibleStandard SKILL.md skills/3dicon/SKILL.md.gemini/skills/<skill-name>/
GitHub CopilotCompatibleStandard SKILL.md skills/3dicon/SKILL.md.github/skills/<skill-name>/
OpenCodeCompatibleStandard SKILL.md skills/3dicon/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.