Agent skill
figma-screenshot-extractor
Extract and save Figma screenshots from Codex session logs when user needs to recover images captured by the Figma MCP server
Stars
163
Forks
31
Install this agent skill to your Project
npx add-skill https://github.com/majiayu000/claude-skill-registry/tree/main/skills/development/figma-screenshot-extractor
SKILL.md
Figma Screenshot Extractor
Extract screenshots from Figma MCP server outputs stored in Codex session logs.
When to Use
Use this Skill when:
- User requests screenshots export (novo design, faturamento, etc.)
- Imagens foram geradas via MCP do Figma e precisam ser salvas a partir dos logs
- Script padrão não está presente, mas o log JSONL contém o base64
- Há IDs/nodes específicos para nomear arquivos
Instructions
-
Entender requisitos
- Diretório de saída (default atualizado:
docs/jornada-do-usuario/faturamentoquando o tema é faturamento; caso contráriodocs/contas-a-receber). - Log alvo: usar o mais recente em
~/.codex/sessions/YYYY/MM/DD/*.jsonlsalvo que o usuário forneça outro. - Mapeamento de nodeId → nome de arquivo (opcional). Se não houver, nomeie sequencialmente
01-...png.
- Diretório de saída (default atualizado:
-
Caminho A: script existente
- Se
figma_screenshot_extractor.pyexistir no repo, execute:bashpython figma_screenshot_extractor.py --output-dir <path> [--session-log <log-file>] [--nodes <json-map>]
- Se
-
Caminho B: fallback manual (script ausente)
- Use Python inline para extrair base64 (
iVBOR) do log e salvar PNGs:bashpython - <<'PY' import json,re,base64,os,pathlib log=os.path.expanduser('~/.codex/sessions/2025/12/05/rollout-*.jsonl') out=pathlib.Path('docs/jornada-do-usuario/faturamento'); out.mkdir(parents=True, exist_ok=True) idx=0 import glob for logpath in sorted(glob.glob(log), reverse=True): for line in open(logpath): if 'iVBOR' not in line: continue try: obj=json.loads(line); text=str(obj.get('payload',{}).get('output',''))+str(obj.get('payload',{}).get('content','')) except Exception: text=line for b64 in re.findall(r'iVBOR[a-zA-Z0-9+/=]+', text): try: data=base64.b64decode(b64) except Exception: continue if not data.startswith(b'\x89PNG'): continue idx+=1; (out/f"{idx:02d}-faturamento.png").write_bytes(data) if idx: break print('saved', idx, 'pngs to', out) PY - Renomeie depois se precisar de rótulos mais claros.
- Use Python inline para extrair base64 (
-
Mapeamento padrão (quando aplicável)
python{ "31:3": "lista.png", "31:457": "adicionar-nova-conta.png", "33:524": "editar-conta.png", "31:204": "encaminhar-parcela.png", "34:672": "acao-rapida-icon.png" } -
Relate o resultado
- Liste arquivos gravados + diretório final.
- Se nada for encontrado: confirme se o log certo contém
mcp__figma_desktop__get_screenshotouiVBOR. - Se houver duplicatas, considere rodar um
md5para evitar cópias.
Examples
Extract to Default Directory
bash
python figma_screenshot_extractor.py
Extract to Custom Directory
bash
python figma_screenshot_extractor.py --output-dir docs/screenshots
Extract from Specific Session Log
bash
python figma_screenshot_extractor.py \
--output-dir docs/contas-a-receber \
--session-log ~/.codex/sessions/2025/11/10/session_2025-11-10_143022.jsonl
Extract with Custom Node Mapping
bash
python figma_screenshot_extractor.py \
--output-dir docs/images \
--nodes '{"31:3": "custom-name.png", "31:457": "another-image.png"}'
How It Works
The script:
- Reads Codex session logs in JSONL format
- Finds calls to
mcp__figma_desktop__get_screenshot - Extracts base64-encoded images from the responses
- Decodes and saves images to the specified directory
- Maps Figma node IDs to meaningful filenames
Troubleshooting
- No screenshots found: Check if the session log contains Figma MCP calls
- File not found: Verify the session log path exists
- Permission errors: Ensure the output directory is writable
- Missing dependencies: The script requires Python 3 with standard libraries only
Usando via Command
- Command sugerido:
/zord:figma-screenshot-extractor - Parâmetros esperados pelo command:
output-dir(obrigatório): caminho destino. Se ausente, o command aborta pedindo o valor.session-log(opcional): caminho do JSONL; se ausente, usa o mais recente em~/.codex/sessions.nodes(opcional): JSON string nodeId → filename; se ausente, nomeia sequencialmente.
- O command só executa a extração se
output-direstiver presente e o log for encontrado; caso contrário, retorna instruções claras de correção.
Didn't find tool you were looking for?