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
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.
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>/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
30-day change not yet available: not enough history.
Individual skills in this repository
- 3dicon
skills/3dicon
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 tokensAlways available to the agent
SKILL.md
2,713 tokensWhen the skill is activated
Reference documents
1,074 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Before anything
- Always stop after the still
- How to report back
- The pipeline
- Choosing the motion
- How much it moves
- Rules that matter
- What it cannot do
Scripts executed separately
iconloop/__init__.pyiconloop/__main__.pyiconloop/cli.pyiconloop/config.pyiconloop/encode.pyiconloop/http.pyiconloop/kling.pyiconloop/matte.pyiconloop/motion.pyiconloop/providers.pyiconloop/verify.py
Files
../../.claude-plugin/marketplace.jsonasset536 bytes.env.exampleasset1,815 bytesSKILL.mdcore11,097 bytesSKILL.mdcore11,097 bytesSKILL.mdcore11,097 bytesdocs/limitations.mddoc2,306 bytesexamples/banner.mp4asset469,532 bytesexamples/banner.webpasset940,942 bytesexamples/demo.mp4asset380,961 bytesexamples/social.mp4asset815,634 bytesexamples/timer/README.mddoc1,735 bytesexamples/timer/contact_sheet.pngasset134,676 bytesexamples/timer/still.pngasset142,883 bytesexamples/timer/timer.webpasset877,328 bytesiconloop/__init__.pyruns103 bytesiconloop/__main__.pyruns30 bytesiconloop/cli.pyruns10,688 bytesiconloop/config.pyruns1,825 bytesiconloop/encode.pyruns4,030 bytesiconloop/http.pyruns2,957 bytesiconloop/kling.pyruns9,101 bytesiconloop/matte.pyruns5,833 bytesiconloop/motion.pyruns16,292 bytesiconloop/providers.pyruns7,612 bytesiconloop/verify.pyruns5,417 bytesrequirements.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 runView the complete source on GitHubSkills 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 shellAutomated 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:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/3dicon/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzed
- No broad tool permissions
- No dangerous shell commands
- 36 network referencesin 3 files: 3dicon/iconloop/providers.py:50 3dicon/iconloop/http.py:47 3dicon/iconloop/kling.py:22
- 1 obfuscation signalin 1 file: 3dicon/iconloop/providers.py:106
- No instruction overrides
- 11 executable scriptsin 11 files: 3dicon/iconloop/__init__.py:1 3dicon/iconloop/__main__.py:1 3dicon/iconloop/cli.py:1 and 8 more
- 20 references to secretsin 4 files: 3dicon/iconloop/config.py:3 3dicon/iconloop/providers.py:51 3dicon/.env.example:1 and 1 more
- No requests to vote in Hot
Show all 68 signals by file
skills/3dicon/.env.example
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
- Contacts github.com, which SKILL.md, the README and the plugin manifest do not mention3dicon/iconloop/http.py:47High confidence
- Contacts api.replicate.com, which SKILL.md, the README and the plugin manifest do not mention3dicon/iconloop/kling.py:22High confidence
- Contacts api.openai.com, which SKILL.md, the README and the plugin manifest do not mention3dicon/iconloop/providers.py:52High confidence
- Contacts generativelanguage.googleapis.com, which SKILL.md, the README and the plugin manifest do not mention3dicon/iconloop/providers.py:63High confidence
Signal confidence: 63 facts
- Executable script in prose of a file that runs3dicon/iconloop/__init__.py:1Low confidence
- Executable script in code of a file that runs3dicon/iconloop/__main__.py:1High confidence
- Executable script in prose of a file that runs3dicon/iconloop/cli.py:1Low confidence
- Executable script in prose of a file that runs3dicon/iconloop/config.py:1Low confidence
- Access to secrets in prose of a file that runs3dicon/iconloop/config.py:3Low confidence
- Access to secrets in code of a file that runs3dicon/iconloop/config.py:10High confidence
- Access to secrets in prose of a file that runs: a variable, placeholder or call, not a stored value3dicon/iconloop/config.py:14Low confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored value3dicon/iconloop/config.py:27Low confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored value3dicon/iconloop/config.py:28Low confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored value3dicon/iconloop/config.py:38Low confidence
- Access to secrets in code of a file that runs3dicon/iconloop/config.py:42High confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored value3dicon/iconloop/config.py:48Low confidence
- Executable script in prose of a file that runs3dicon/iconloop/encode.py:1Low confidence
- Executable script in prose of a file that runs3dicon/iconloop/http.py:1Low confidence
- Network access in code of a file that runs3dicon/iconloop/http.py:47High confidence
- Network access in code of a file that runs3dicon/iconloop/http.py:52High confidence
- Network access in code of a file that runs3dicon/iconloop/http.py:53High confidence
- Network access in code of a file that runs3dicon/iconloop/http.py:54High confidence
- Network access in code of a file that runs3dicon/iconloop/http.py:55High confidence
- Network access in code of a file that runs3dicon/iconloop/http.py:56High confidence
- Network access in code of a file that runs3dicon/iconloop/http.py:71High confidence
- Network access in code of a file that runs3dicon/iconloop/http.py:72High confidence
- Network access in code of a file that runs3dicon/iconloop/http.py:73High confidence
- Executable script in prose of a file that runs3dicon/iconloop/kling.py:1Low confidence
- Network access in code of a file that runs3dicon/iconloop/kling.py:22High confidence
- Network access in code of a file that runs3dicon/iconloop/kling.py:92High confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored value3dicon/iconloop/kling.py:117Low confidence
- Network access in code of a file that runs3dicon/iconloop/kling.py:147High confidence
- Network access in code of a file that runs3dicon/iconloop/kling.py:148High confidence
- Network access in code of a file that runs3dicon/iconloop/kling.py:149High confidence
- Network access in code of a file that runs3dicon/iconloop/kling.py:150High confidence
- Executable script in prose of a file that runs3dicon/iconloop/matte.py:1Low confidence
- Executable script in prose of a file that runs3dicon/iconloop/motion.py:1Low confidence
- Executable script in prose of a file that runs3dicon/iconloop/providers.py:1Low confidence
- Network access in code of a file that runs3dicon/iconloop/providers.py:50High confidence
- Network access in code of a file that runs3dicon/iconloop/providers.py:51High confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored value3dicon/iconloop/providers.py:51Low confidence
- Network access in code of a file that runs3dicon/iconloop/providers.py:52High confidence
- Network access in code of a file that runs3dicon/iconloop/providers.py:61High confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored value3dicon/iconloop/providers.py:61Low confidence
- Network access in code of a file that runs3dicon/iconloop/providers.py:62High confidence
- Network access in code of a file that runs3dicon/iconloop/providers.py:63High confidence
- Network access in code of a file that runs3dicon/iconloop/providers.py:79High confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored value3dicon/iconloop/providers.py:79Low confidence
- Network access in code of a file that runs3dicon/iconloop/providers.py:80High confidence
- Network access in code of a file that runs3dicon/iconloop/providers.py:92High confidence
- Network access in code of a file that runs3dicon/iconloop/providers.py:94High confidence
- Possible obfuscation in code of a file that runs3dicon/iconloop/providers.py:106High confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored value3dicon/iconloop/providers.py:111Low confidence
- Network access in code of a file that runs3dicon/iconloop/providers.py:117High confidence
and 13 more
Works with
| Agent | Status | Evidence | Install to |
|---|---|---|---|
| Claude Code | Native | Manifest .claude-plugin/marketplace.json | .claude/skills/<skill-name>/ |
| Codex | Compatible | Standard SKILL.md skills/3dicon/SKILL.md | .agents/skills/<skill-name>/ |
| Cursor | Compatible | Standard SKILL.md skills/3dicon/SKILL.md | .cursor/skills/<skill-name>/ |
| Gemini CLI | Compatible | Standard SKILL.md skills/3dicon/SKILL.md | .gemini/skills/<skill-name>/ |
| GitHub Copilot | Compatible | Standard SKILL.md skills/3dicon/SKILL.md | .github/skills/<skill-name>/ |
| OpenCode | Compatible | Standard 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.