#522 by GitHub stars

EverettFish/holo-card-studio

Create collectible holographic foil cards and two-image lenticular flip cards with AI-generated full-color ukiyo-e and colored sumi-e anime artwork, layered Blender scenes, renders, GLB export, and a flat white web viewer. Use for 镭射卡、闪卡、全息卡、光栅卡、一念神魔、双形态卡、角色收藏卡,或需要保持角色高度一致的 A/B 状态切换。

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

SKILL.md

Week of Oct 26, 2026 · +0 / −0 lines

Before Network or broad shell → After Network or broad shell

cce97187874f → cce97187874f

Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.

Compare on GitHub

View on GitHubAdd to my skills

Verified commit cce97187874f8aac53ab8374ed1d4decaa6c0116

2.1kGitHub stars
36stars in 7 days
1skill in this repository
0commits in 30 days

Heat

5.6
  • Star growth, last 7 daysAhead of 90% of tracked repositories
  • Star growth, last 24 hoursAhead of 86% of tracked repositories
  • Rank movement, last 7 daysAhead of 35% of tracked repositories
  • Commits, last 30 daysAhead of 0% of tracked repositories
  • Accounts asking about it through MCP, last 7 daysNot available
  • Hot votes this weekAhead of 0% of tracked repositories

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

Stars over time

Sep 6, 2026Nov 6, 20262,064

Individual skills in this repository

How it works

holo-card-studio

When your agent uses it

Create collectible holographic foil cards and two-image lenticular flip cards with AI-generated full-color ukiyo-e and colored sumi-e anime artwork, layered Blender scenes, renders, GLB export, and a flat white web viewer. Use for 镭射卡、闪卡、全息卡、光栅卡、一念神魔、双形态卡、角色收藏卡,或需要保持角色高度一致的 A/B 状态切换。

What it loads into context

Frontmatter

100 tokens

Always available to the agent

SKILL.md

1,169 tokens

When the skill is activated

Reference documents

8,726 tokens

Loaded on request

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

The playbook

  1. Route first
  2. Default art direction
  3. Generate images
  4. Build the project
  5. Verify and deliver
  6. References

Scripts executed separately

  • assets/web-holographic/app.js
  • assets/web-holographic/package.json
  • assets/web-holographic/server.mjs
  • assets/web-lenticular/app.js
  • assets/web-lenticular/package.json
  • assets/web-lenticular/server.mjs
  • assets/web-template/app.js
  • assets/web-template/package.json
  • assets/web-template/server.mjs
  • scripts/blender_compat.py
  • scripts/build_card.py
  • scripts/ensure_blender.py
  • scripts/export_web.py
  • scripts/generate_typography.py
  • scripts/holographic/build_card.py
  • scripts/holographic/ensure_blender.py
  • scripts/holographic/export_web.py
  • scripts/holographic/generate_typography.py
  • scripts/holographic/run_pipeline.py
  • scripts/holographic/validate_assets.py
  • scripts/lenticular/build_card.py
  • scripts/lenticular/ensure_blender.py
  • scripts/lenticular/export_web.py
  • scripts/lenticular/generate_typography.py
  • scripts/lenticular/prepare_fx.py
  • scripts/lenticular/prepare_pair.py
  • scripts/lenticular/run_pipeline.py
  • scripts/lenticular/validate_assets.py
  • scripts/package_skill.py
  • scripts/run_pipeline.py
  • scripts/validate_assets.py
  • tests/test_run_pipeline.py

Files

  • .gitignoreasset153 bytes
  • LICENSEasset1,232 bytes
  • README.en.mddoc9,382 bytes
  • README.mddoc9,097 bytes
  • SKILL.mdcore5,564 bytes
  • SKILL.mdcore5,564 bytes
  • SKILL.mdcore5,564 bytes
  • SKILL.mdcore5,564 bytes
  • agents/openai.yamlasset521 bytes
  • assets/web-holographic/app.jsruns12,036 bytes
  • assets/web-holographic/card-config.jsonasset652 bytes
  • assets/web-holographic/index.htmlasset2,314 bytes
  • assets/web-holographic/package-lock.jsonasset541 bytes
  • assets/web-holographic/package.jsonruns154 bytes
  • assets/web-holographic/server.mjsruns1,166 bytes
  • assets/web-holographic/style.cssasset3,855 bytes
  • assets/web-lenticular/app.jsruns9,172 bytes
  • assets/web-lenticular/card-config.jsonasset988 bytes
  • assets/web-lenticular/index.htmlasset2,303 bytes
  • assets/web-lenticular/package.jsonruns160 bytes
  • assets/web-lenticular/server.mjsruns1,172 bytes
  • assets/web-lenticular/style.cssasset3,541 bytes
  • assets/web-template/app.jsruns12,263 bytes
  • assets/web-template/card-config.jsonasset681 bytes
  • assets/web-template/index.htmlasset3,799 bytes
  • assets/web-template/package-lock.jsonasset562 bytes
  • assets/web-template/package.jsonruns155 bytes
  • assets/web-template/server.mjsruns1,174 bytes
  • assets/web-template/style.cssasset6,927 bytes
  • references/art-direction.mddoc2,349 bytes
  • references/config.example.jsonasset681 bytes
  • references/config.holographic.example.jsonasset511 bytes
  • references/config.lenticular.example.jsonasset834 bytes
  • references/gallery-distribution.mddoc2,699 bytes
  • references/holographic-route.mddoc1,540 bytes
  • references/lenticular-model.mddoc4,110 bytes
  • references/lenticular-route.mddoc1,493 bytes
  • references/verification.mddoc3,333 bytes
  • scripts/__pycache__/build_card.cpython-312.pycasset45,587 bytes
  • scripts/__pycache__/ensure_blender.cpython-312.pycasset10,041 bytes
  • scripts/__pycache__/export_web.cpython-312.pycasset3,792 bytes
  • scripts/__pycache__/generate_typography.cpython-312.pycasset4,868 bytes
  • scripts/__pycache__/package_skill.cpython-312.pycasset5,389 bytes
  • scripts/__pycache__/run_pipeline.cpython-312.pycasset4,444 bytes
  • scripts/__pycache__/validate_assets.cpython-312.pycasset3,123 bytes
  • scripts/blender_compat.pyruns2,155 bytes
  • scripts/build_card.pyruns22,205 bytes
  • scripts/ensure_blender.pyruns5,146 bytes
  • scripts/export_web.pyruns1,672 bytes
  • scripts/generate_typography.pyruns2,081 bytes
  • scripts/holographic/build_card.pyruns21,963 bytes
  • scripts/holographic/ensure_blender.pyruns5,145 bytes
  • scripts/holographic/export_web.pyruns1,645 bytes
  • scripts/holographic/generate_typography.pyruns2,080 bytes
  • scripts/holographic/run_pipeline.pyruns2,605 bytes
  • scripts/holographic/validate_assets.pyruns1,655 bytes
  • scripts/lenticular/build_card.pyruns33,892 bytes
  • scripts/lenticular/ensure_blender.pyruns5,151 bytes
  • scripts/lenticular/export_web.pyruns1,897 bytes
  • scripts/lenticular/generate_typography.pyruns2,753 bytes
  • scripts/lenticular/prepare_fx.pyruns2,145 bytes
  • scripts/lenticular/prepare_pair.pyruns3,507 bytes
  • scripts/lenticular/run_pipeline.pyruns3,175 bytes
  • scripts/lenticular/validate_assets.pyruns2,291 bytes
  • scripts/package_skill.pyruns2,295 bytes
  • scripts/run_pipeline.pyruns1,618 bytes
  • scripts/validate_assets.pyruns1,656 bytes
  • tests/test_run_pipeline.pyruns6,058 bytes

No excerpt is shown for this license. Read the source on GitHub.

View the complete source on GitHub

Skills included

  • holo-card-studio

Repository facts

License
No license detected
Created
Sep 7, 2026
Last pushed
Sep 22, 2026
Forks
264
Open issues
3
Project activity
Active

Rank over the last 12 weeks

Now #522 · best #444 · down 48 in 30 days

  1. #517 on Nov 2
  2. #519 on Nov 3
  3. #520 on Nov 4
  4. #519 on Nov 5
  5. #521 on Nov 6
  6. #522 since Nov 7
50 earlier periods
  1. #888 on Sep 6
  2. #652 on Sep 7
  3. #570 on Sep 8
  4. #529 on Sep 9
  5. #520 on Sep 10
  6. #504 on Sep 11
  7. #496 on Sep 12
  8. #493 on Sep 13
  9. #503 on Sep 14
  10. #498 on Sep 15
  11. #505 on Sep 16
  12. #485 on Sep 17
  13. #487 on Sep 18
  14. #469 on Sep 19
  15. #475 on Sep 20
  16. #473 on Sep 21
  17. #481 on Sep 22
  18. #469 on Sep 23
  19. #457 on Sep 24
  20. #455 on Sep 25
  21. #449 on Sep 26
  22. #466 on Sep 27
  23. #469 on Sep 28
  24. #471 from Sep 29 to Sep 30
  25. #465 on Oct 1
  26. #460 on Oct 2
  27. #447 on Oct 3
  28. #444 on Oct 4
  29. #454 on Oct 5
  30. #460 on Oct 6
  31. #466 on Oct 7
  32. #474 on Oct 8
  33. #476 on Oct 9
  34. #470 on Oct 10
  35. #472 on Oct 11
  36. #482 on Oct 12
  37. #479 on Oct 13
  38. #483 on Oct 14
  39. #485 on Oct 15
  40. #484 on Oct 16
  41. #474 on Oct 17
  42. #476 on Oct 18
  43. #491 from Oct 19 to Oct 20
  44. #496 on Oct 21
  45. #489 on Oct 22
  46. #484 on Oct 23
  47. #471 on Oct 24
  48. #511 on Oct 25
  49. #512 on Oct 28
  50. #513 from Oct 29 to Nov 1

Before you install

Network or broad shell

Automated signals, not a guarantee

Checked Nov 3, 2026

Changed on Oct 27, 2026

No longer found: Possible obfuscation

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

Show 5 notes
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • assets/web-template/style.css:2 Analysis incomplete: physical or joined line exceeds character limit
  • assets/web-template/style.css:1 Analysis incomplete: physical or joined line exceeds character limit
Show all 113 signals by file

.gitignore

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

README.md

  • Network accessline 130
    - 在线示例:<https://card.waterq.us/>
  • Network accessline 131
    - 配套项目:<https://github.com/chenweilie/holo-card-gallery>(私有仓库,需要所有者授权)

assets/web-holographic/app.js

  • Executable scriptline 1
    Executable file
  • Network accessline 77
    } async function init(){  config=await fetch('./card-config.json').then(r=>{if(!r.ok)throw Error('Card configuration was not found.');return r.json();});
  • Network accessline 78
    async function init(){  config=await fetch('./card-config.json').then(r=>{if(!r.ok)throw Error('Card configuration was not found.');return r.json();});  document.title=(config.title||'CARD TITLE')+' — HOLO CARD STUDIO';
  • Network accessline 79
    config=await fetch('./card-config.json').then(r=>{if(!r.ok)throw Error('Card configuration was not found.');return r.json();});

assets/web-holographic/package-lock.json

  • Network accessline 14
    "node_modules/three": {       "version": "0.180.0",       "resolved": "https://registry.npmjs.org/three/-/three-0.180.0.tgz",
  • Network accessline 15
    "version": "0.180.0",       "resolved": "https://registry.npmjs.org/three/-/three-0.180.0.tgz",       "integrity": "sha512-o+qycAMZrh+TsE01GqWUxUIKR1AL0S8pq7zDkYOQw8GqfX8b8VoCKYUoHbhiX5j+7hr8XsuHDVU6+gkQJQKg9w==",
  • Network accessline 16
    "resolved": "https://registry.npmjs.org/three/-/three-0.180.0.tgz",

assets/web-holographic/package.json

  • Executable scriptline 1
    Executable file

assets/web-holographic/server.mjs

  • Executable scriptline 1
    Executable file
  • Network accessline 6
    const port=Number(process.env.PORT||4173); const types={'.html':'text/html; charset=utf-8','.js':'text/javascript; charset=utf-8','.mjs':'text/javascript; charset=utf-8','.css':'text/css; charset=utf-8','.json':'application/json; charset=ut
  • Network accessline 8
    http.createServer(async(req,res)=>{try{let url=decodeURIComponent(new URL(req.url,'http://localhost').pathname);let filename=path.resolve(root,'.'+url);if(filename!==root&&!filename.startsWith(root+path.sep)){res.writeHead(403);return res.e

assets/web-lenticular/app.js

  • Executable scriptline 1
    Executable file
  • Network accessline 25
    function reset(){angle=0;tilt=0;back=false;auto=false;update();} function resize(){const w=stage.clientWidth,h=stage.clientHeight;renderer.setSize(w,h);composer.setSize(w,h);camera.aspect=w/h;camera.fov=2*Math.atan(Math.max(5.12,3.55/camera
  • Network accessline 26
    function resize(){const w=stage.clientWidth,h=stage.clientHeight;renderer.setSize(w,h);composer.setSize(w,h);camera.aspect=w/h;camera.fov=2*Math.atan(Math.max(5.12,3.55/camera.aspect)/32)*180/Math.PI;camera.updateProjectionMatrix();} async 
  • Network accessline 27
    async function init(){config=await fetch('card-config.json').then(r=>r.json());document.title=(config.title||'双生光栅')+' · 收藏卡';$("card-title").textContent=config.title||'一念神魔';$("card-description").textContent=config.description||'两个完整形态,藏在转
  • Possible obfuscationline 27
    async function init(){config=await fetch('card-config.json').then(r=>r.json());document.title=(config.title||'双生光栅')+' · 收藏卡';$("card-title").textContent=config.title||'一念神魔';$("card-description").textContent=config.description||'两个完整形态,藏在转

assets/web-lenticular/package.json

  • Executable scriptline 1
    Executable file

assets/web-lenticular/server.mjs

  • Executable scriptline 1
    Executable file
  • Network accessline 6
    const port=Number(process.env.PORT||4173); const types={'.html':'text/html; charset=utf-8','.js':'text/javascript; charset=utf-8','.mjs':'text/javascript; charset=utf-8','.css':'text/css; charset=utf-8','.json':'application/json; charset=ut
  • Network accessline 8
    http.createServer(async(req,res)=>{try{let url=decodeURIComponent(new URL(req.url,'http://localhost').pathname);let filename=path.resolve(root,'.'+url);if(filename!==root&&!filename.startsWith(root+path.sep)){res.writeHead(403);return res.e

assets/web-template/app.js

  • Executable scriptline 1
    Executable file
  • Network accessline 65
    function backTexture(){const c=document.createElement('canvas');c.width=1024;c.height=1536;const ctx=c.getContext('2d');ctx.clearRect(0,0,1024,1536);ctx.strokeStyle='#c2a368';ctx.lineWidth=2;ctx.strokeRect(74,74,876,1388);ctx.strokeRect(87,
  • Network accessline 66
    async function init(){  config=await fetch('./card-config.json').then(r=>{if(!r.ok)throw Error('找不到卡牌配置');return r.json();});  document.title=config.title+' · 幻光典藏';for(const [id,key]of Object.entries({'card-title':'title','collection':'col
  • Network accessline 67
    config=await fetch('./card-config.json').then(r=>{if(!r.ok)throw Error('找不到卡牌配置');return r.json();});

assets/web-template/package-lock.json

  • Network accessline 14
    "node_modules/three": {       "version": "0.180.0",       "resolved": "https://registry.npmjs.org/three/-/three-0.180.0.tgz",
  • Network accessline 15
    "version": "0.180.0",       "resolved": "https://registry.npmjs.org/three/-/three-0.180.0.tgz",       "integrity": "sha512-o+qycAMZrh+TsE01GqWUxUIKR1AL0S8pq7zDkYOQw8GqfX8b8VoCKYUoHbhiX5j+7hr8XsuHDVU6+gkQJQKg9w==",
  • Network accessline 16
    "resolved": "https://registry.npmjs.org/three/-/three-0.180.0.tgz",

assets/web-template/package.json

  • Executable scriptline 1
    Executable file

assets/web-template/server.mjs

  • Executable scriptline 1
    Executable file
  • Network accessline 6
    const port=Number(process.env.PORT||4173); const types={'.html':'text/html; charset=utf-8','.js':'text/javascript; charset=utf-8','.mjs':'text/javascript; charset=utf-8','.css':'text/css; charset=utf-8','.json':'application/json; charset=ut
  • Network accessline 8
    http.createServer(async(req,res)=>{try{let url=decodeURIComponent(new URL(req.url,'http://localhost').pathname);let filename=path.resolve(root,'.'+url);if(filename!==root&&!filename.startsWith(root+path.sep)){res.writeHead(403);return res.e

scripts/blender_compat.py

  • Executable scriptline 1
    Executable file

scripts/build_card.py

  • Executable scriptline 1
    Executable file

scripts/ensure_blender.py

  • Executable scriptline 1
    Executable file
  • Network accessline 2
    from pathlib import Path import argparse,hashlib,platform,re,shutil,subprocess,tarfile,urllib.request,zipfile BASE='https://download.blender.org/release/Blender4.5/'
  • Network accessline 3
    import argparse,hashlib,platform,re,shutil,subprocess,tarfile,urllib.request,zipfile BASE='https://download.blender.org/release/Blender4.5/' def find_blender(project,override=None):
  • Network accessline 4
    BASE='https://download.blender.org/release/Blender4.5/'
  • Network accessline 20
    def fetch(url,target):
  • Network accessline 21
    req=urllib.request.Request(url,headers={'User-Agent':'Holo-Card-Studio/1.0'})
  • Network accessline 22
    with urllib.request.urlopen(req,timeout=90) as response,target.open('wb') as out:shutil.copyfileobj(response,out)
  • Network accessline 33
    elif system=='Darwin':suffix='macos-arm64.dmg' if 'arm' in machine else 'macos-x64.dmg'     else:raise RuntimeError('Unsupported platform: '+system)     listing=urllib.request.urlopen(BASE,timeout=30).read().decode('utf8')
  • Network accessline 34
    else:raise RuntimeError('Unsupported platform: '+system)     listing=urllib.request.urlopen(BASE,timeout=30).read().decode('utf8')     found=set(re.findall(r'blender-(4\.5\.\d+)-'+re.escape(suffix),listing))
  • Network accessline 35
    listing=urllib.request.urlopen(BASE,timeout=30).read().decode('utf8')
  • Network accessline 38
    version=max(found,key=lambda v:tuple(map(int,v.split('.'))));name='blender-'+version+'-'+suffix     tools=project/'tools';tools.mkdir(parents=True,exist_ok=True);package=tools/name     checksum=tools/('blender-'+version+'.sha256');fetch(BAS
  • Network accessline 39
    tools=project/'tools';tools.mkdir(parents=True,exist_ok=True);package=tools/name     checksum=tools/('blender-'+version+'.sha256');fetch(BASE+checksum.name,checksum)     entries=[l.split() for l in checksum.read_text().splitlines()]
  • Network accessline 40
    checksum=tools/('blender-'+version+'.sha256');fetch(BASE+checksum.name,checksum)
  • Network accessline 49
    return h.hexdigest()     if not package.exists() or digest(package)!=expected:         partial=package.with_suffix(package.suffix+'.part');fetch(BASE+name,partial)
  • Network accessline 50
    if not package.exists() or digest(package)!=expected:         partial=package.with_suffix(package.suffix+'.part');fetch(BASE+name,partial)         if digest(partial)!=expected:raise RuntimeError('Official Blender SHA-256 mismatch; package n
  • Network accessline 51
    partial=package.with_suffix(package.suffix+'.part');fetch(BASE+name,partial)

scripts/export_web.py

  • Executable scriptline 1
    Executable file

scripts/generate_typography.py

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

scripts/holographic/build_card.py

  • Executable scriptline 1
    Executable file

scripts/holographic/ensure_blender.py

  • Executable scriptline 1
    Executable file
  • Network accessline 2
    from pathlib import Path import argparse,hashlib,platform,re,shutil,subprocess,tarfile,urllib.request,zipfile BASE='https://download.blender.org/release/Blender4.5/'
  • Network accessline 3
    import argparse,hashlib,platform,re,shutil,subprocess,tarfile,urllib.request,zipfile BASE='https://download.blender.org/release/Blender4.5/' def find_blender(project,override=None):
  • Network accessline 4
    BASE='https://download.blender.org/release/Blender4.5/'
  • Network accessline 20
    def fetch(url,target):
  • Network accessline 21
    req=urllib.request.Request(url,headers={'User-Agent':'Holo-Card-Studio/1.0'})
  • Network accessline 22
    with urllib.request.urlopen(req,timeout=90) as response,target.open('wb') as out:shutil.copyfileobj(response,out)
  • Network accessline 33
    elif system=='Darwin':suffix='macos-arm64.dmg' if 'arm' in machine else 'macos-x64.dmg'     else:raise RuntimeError('Unsupported platform: '+system)     listing=urllib.request.urlopen(BASE,timeout=30).read().decode('utf8')
  • Network accessline 34
    else:raise RuntimeError('Unsupported platform: '+system)     listing=urllib.request.urlopen(BASE,timeout=30).read().decode('utf8')     found=set(re.findall(r'blender-(4\.5\.\d+)-'+re.escape(suffix),listing))
  • Network accessline 35
    listing=urllib.request.urlopen(BASE,timeout=30).read().decode('utf8')
  • Network accessline 38
    version=max(found,key=lambda v:tuple(map(int,v.split('.'))));name='blender-'+version+'-'+suffix     tools=project/'tools';tools.mkdir(parents=True,exist_ok=True);package=tools/name     checksum=tools/('blender-'+version+'.sha256');fetch(BAS
  • Network accessline 39
    tools=project/'tools';tools.mkdir(parents=True,exist_ok=True);package=tools/name     checksum=tools/('blender-'+version+'.sha256');fetch(BASE+checksum.name,checksum)     entries=[l.split() for l in checksum.read_text().splitlines()]
  • Network accessline 40
    checksum=tools/('blender-'+version+'.sha256');fetch(BASE+checksum.name,checksum)
  • Network accessline 49
    return h.hexdigest()     if not package.exists() or digest(package)!=expected:         partial=package.with_suffix(package.suffix+'.part');fetch(BASE+name,partial)
  • Network accessline 50
    if not package.exists() or digest(package)!=expected:         partial=package.with_suffix(package.suffix+'.part');fetch(BASE+name,partial)         if digest(partial)!=expected:raise RuntimeError('Official Blender SHA-256 mismatch; package n
  • Network accessline 51
    partial=package.with_suffix(package.suffix+'.part');fetch(BASE+name,partial)

scripts/holographic/export_web.py

  • Executable scriptline 1
    Executable file

scripts/holographic/generate_typography.py

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

scripts/holographic/run_pipeline.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 15
    [Credential-related source omitted]
  • Network accessline 28
    if not npm:raise RuntimeError('Install Node.js/npm, then run npm install --ignore-scripts in web/')         subprocess.run([npm,'install','--ignore-scripts','--no-audit','--no-fund'],cwd=web,check=True)     print('Completed:',root/'card.ble
  • Network accessline 29
    subprocess.run([npm,'install','--ignore-scripts','--no-audit','--no-fund'],cwd=web,check=True)     print('Completed:',root/'card.blend');print('Preview: node',web/'server.mjs');print('Open http://127.0.0.1:4173 after starting the server') i
  • Network accessline 30
    print('Completed:',root/'card.blend');print('Preview: node',web/'server.mjs');print('Open http://127.0.0.1:4173 after starting the server')

scripts/holographic/validate_assets.py

  • Executable scriptline 1
    Executable file

scripts/lenticular/build_card.py

  • Executable scriptline 1
    Executable file

scripts/lenticular/ensure_blender.py

  • Executable scriptline 1
    Executable file
  • Network accessline 2
    from pathlib import Path import argparse,hashlib,platform,re,shutil,subprocess,tarfile,urllib.request,zipfile BASE='https://download.blender.org/release/Blender4.5/'
  • Network accessline 3
    import argparse,hashlib,platform,re,shutil,subprocess,tarfile,urllib.request,zipfile BASE='https://download.blender.org/release/Blender4.5/' def find_blender(project,override=None):
  • Network accessline 4
    BASE='https://download.blender.org/release/Blender4.5/'
  • Network accessline 20
    def fetch(url,target):
  • Network accessline 21
    req=urllib.request.Request(url,headers={'User-Agent':'Lenticular-Card-Studio/1.0'})
  • Network accessline 22
    with urllib.request.urlopen(req,timeout=90) as response,target.open('wb') as out:shutil.copyfileobj(response,out)
  • Network accessline 33
    elif system=='Darwin':suffix='macos-arm64.dmg' if 'arm' in machine else 'macos-x64.dmg'     else:raise RuntimeError('Unsupported platform: '+system)     listing=urllib.request.urlopen(BASE,timeout=30).read().decode('utf8')
  • Network accessline 34
    else:raise RuntimeError('Unsupported platform: '+system)     listing=urllib.request.urlopen(BASE,timeout=30).read().decode('utf8')     found=set(re.findall(r'blender-(4\.5\.\d+)-'+re.escape(suffix),listing))
  • Network accessline 35
    listing=urllib.request.urlopen(BASE,timeout=30).read().decode('utf8')
  • Network accessline 38
    version=max(found,key=lambda v:tuple(map(int,v.split('.'))));name='blender-'+version+'-'+suffix     tools=project/'tools';tools.mkdir(parents=True,exist_ok=True);package=tools/name     checksum=tools/('blender-'+version+'.sha256');fetch(BAS
  • Network accessline 39
    tools=project/'tools';tools.mkdir(parents=True,exist_ok=True);package=tools/name     checksum=tools/('blender-'+version+'.sha256');fetch(BASE+checksum.name,checksum)     entries=[l.split() for l in checksum.read_text().splitlines()]
  • Network accessline 40
    checksum=tools/('blender-'+version+'.sha256');fetch(BASE+checksum.name,checksum)
  • Network accessline 49
    return h.hexdigest()     if not package.exists() or digest(package)!=expected:         partial=package.with_suffix(package.suffix+'.part');fetch(BASE+name,partial)
  • Network accessline 50
    if not package.exists() or digest(package)!=expected:         partial=package.with_suffix(package.suffix+'.part');fetch(BASE+name,partial)         if digest(partial)!=expected:raise RuntimeError('Official Blender SHA-256 mismatch; package n
  • Network accessline 51
    partial=package.with_suffix(package.suffix+'.part');fetch(BASE+name,partial)

scripts/lenticular/export_web.py

  • Executable scriptline 1
    Executable file

scripts/lenticular/generate_typography.py

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

scripts/lenticular/prepare_fx.py

  • Executable scriptline 1
    Executable file

scripts/lenticular/prepare_pair.py

  • Executable scriptline 1
    Executable file

scripts/lenticular/run_pipeline.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 18
    [Credential-related source omitted]
  • Network accessline 34
    if not npm: raise RuntimeError('Install Node.js/npm, then run npm install --ignore-scripts in web/')         subprocess.run([npm, 'install', '--ignore-scripts', '--no-audit', '--no-fund'], cwd=web, check=True)     print('Completed:', root /
  • Network accessline 36
    print('Completed:', root / 'card.blend'); print('Renders:', root / 'renders'); print('Preview: node', web / 'server.mjs'); print('Open http://127.0.0.1:4173 after starting the server')

scripts/lenticular/validate_assets.py

  • Executable scriptline 1
    Executable file

scripts/package_skill.py

  • Executable scriptline 1
    Executable file

scripts/run_pipeline.py

  • Executable scriptline 1
    Executable file

scripts/validate_assets.py

  • Executable scriptline 1
    Executable file

tests/test_run_pipeline.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 109
    [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: 3 facts
Signal confidence: 106 facts

and 56 more

Works with

Agent compatibility, from the files in this repository
AgentStatusEvidenceInstall to
Claude CodeCompatibleStandard SKILL.md SKILL.md.claude/skills/<skill-name>/
CodexCompatibleStandard SKILL.md SKILL.md.agents/skills/<skill-name>/
CursorCompatibleStandard SKILL.md SKILL.md.cursor/skills/<skill-name>/
Gemini CLICompatibleStandard SKILL.md SKILL.md.gemini/skills/<skill-name>/
GitHub CopilotCompatibleStandard SKILL.md SKILL.md.github/skills/<skill-name>/
OpenCodeCompatibleStandard SKILL.md 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.

Explore alternatives and comparisons

Add this badge to your README

It updates every night and links to this page.

EverettFish/holo-card-studio: #522 on hotskills, 2.1k stars

[![EverettFish/holo-card-studio on hotskills](https://hotskills.dev/badge/everettfish-holo-card-studio.svg)](https://hotskills.dev/skill/everettfish-holo-card-studio/)