{
  "schemaVersion": "1.0",
  "item": {
    "slug": "nano-banana-korean-rendering",
    "name": "Nano banana korean rendering",
    "source": "tencent",
    "type": "skill",
    "category": "AI 智能",
    "sourceUrl": "https://clawhub.ai/wonyoung-Huh/nano-banana-korean-rendering",
    "canonicalUrl": "https://clawhub.ai/wonyoung-Huh/nano-banana-korean-rendering",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/nano-banana-korean-rendering",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=nano-banana-korean-rendering",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md",
      "package.json",
      "render.mjs",
      "setup.mjs"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-30T16:55:25.780Z",
      "expiresAt": "2026-05-07T16:55:25.780Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
        "contentDisposition": "attachment; filename=\"network-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/nano-banana-korean-rendering"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/nano-banana-korean-rendering",
    "agentPageUrl": "https://openagent3.xyz/skills/nano-banana-korean-rendering/agent",
    "manifestUrl": "https://openagent3.xyz/skills/nano-banana-korean-rendering/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/nano-banana-korean-rendering/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "다국어 텍스트 프리렌더링 스킬",
        "body": "AI 이미지 모델은 한글·한자·일본어 등 비라틴 문자를 직접 그리면 글자가 깨지거나 오타가 생깁니다.\n이 스킬은 웹앱과 완전히 동일한 파이프라인을 제공합니다:\n\ndetect — 프롬프트에 비라틴 문자가 있는지 감지\nanalyze — Gemini LLM으로 프롬프트에서 텍스트와 스타일 추출\nrender — Canvas로 정확한 폰트를 사용해 텍스트를 PNG 프리렌더링\ngenerate — 프리렌더링 PNG를 Gemini 이미지 생성에 인풋으로 넣어 최종 이미지 생성"
      },
      {
        "title": "최초 설정 (한 번만)",
        "body": "cd {baseDir} && node setup.mjs\n\ncanvas + @google/generative-ai npm 패키지 설치\nNoto Sans 폰트 파일을 {baseDir}/fonts/에 준비"
      },
      {
        "title": "환경 변수",
        "body": "변수필수설명GEMINI_API_KEY⭐ 필수Gemini Flash(분석) + Gemini Image(생성) 모두에 사용GEMINI_IMAGE_MODEL선택이미지 생성 모델 (기본: gemini-3-pro-image-preview)"
      },
      {
        "title": "한 번에 실행: pipeline",
        "body": "전체 파이프라인을 한 명령어로 실행합니다:\n\nnode {baseDir}/render.mjs pipeline \"욎홎 뙤앾뼡이라는 지역 축제 포스터 만들어줘\" \\\n  --output /tmp/final-image.png --no-base64\n\n결과:\n\n{\n  \"detect\": { \"needsRendering\": true, \"primaryScript\": \"hangul\", ... },\n  \"analyze\": { \"texts\": [...], \"style\": {...}, \"reasoning\": \"...\" },\n  \"render\": { \"success\": true, \"outputPath\": \"/tmp/text-render-xxx.png\", ... },\n  \"generate\": { \"success\": true, \"outputPath\": \"/tmp/final-image.png\", ... }\n}"
      },
      {
        "title": "단계별 실행",
        "body": "Step 1: 비라틴 문자 감지 (detect)\n\nnode {baseDir}/render.mjs detect \"사용자 프롬프트 전체\"\n\nneedsRendering: false → 프리렌더링 없이 일반 이미지 생성 진행\nneedsRendering: true → Step 2로 진행\n\nStep 2: Gemini LLM 프롬프트 분석 (analyze)\n\nnode {baseDir}/render.mjs analyze \"욎홎 뙤앾뼡이라는 지역 축제 포스터 만들어줘\"\n\nGemini Flash가 프롬프트를 분석하여:\n\n이미지에 들어갈 텍스트 추출 (따옴표, 레이블, 맥락 기반)\n디자인 맥락에 맞는 스타일 결정 (폰트, 크기, 색상)\n각 텍스트의 역할(headline/subheadline/body/caption) 지정\n각 텍스트의 스크립트·언어 자동 감지\n\nGEMINI_API_KEY가 없으면 규칙 기반 fallback이 동작합니다.\n\nStep 3: Canvas 프리렌더링 (render)\n\nanalyze 결과를 그대로 render에 전달합니다:\n\nnode {baseDir}/render.mjs render \\\n  --json '{\"texts\":[...],\"style\":{...}}' \\\n  --output /tmp/rendered-text.png\n\n또는 JSON 파일로:\n\nnode {baseDir}/render.mjs render --input /tmp/analysis.json --output /tmp/rendered-text.png\n\nStep 4: Gemini 이미지 생성 (generate)\n\n프리렌더링된 텍스트 PNG를 Gemini에 인풋 이미지로 넣어서 최종 이미지를 생성합니다.\n\nnode {baseDir}/render.mjs generate \\\n  --prompt \"욎홎 뙤앾뼡이라는 지역 축제 포스터 만들어줘\" \\\n  --rendered /tmp/rendered-text.png \\\n  --analysis '{\"texts\":[...],\"style\":{...}}' \\\n  --output /tmp/final-image.png \\\n  --no-base64\n\n이 명령어는 내부적으로:\n\n프리렌더링 PNG를 첫 번째 참조 이미지로 Gemini에 전달\nbuildTextRenderFinalPrompt로 프롬프트를 구성 (텍스트 목록 + 스타일 + \"텍스트를 다시 그리지 말고 그대로 사용하라\" 지침)\nGemini가 텍스트를 자연스럽게 통합한 최종 이미지를 생성\n\n추가 참조 이미지가 있으면 --ref로 전달:\n\nnode {baseDir}/render.mjs generate \\\n  --prompt \"포스터 만들어줘\" \\\n  --rendered /tmp/rendered-text.png \\\n  --ref /tmp/user-reference.jpg \\\n  --output /tmp/final-image.png"
      },
      {
        "title": "지원 폰트",
        "body": "언어sans-serifserifdisplayhandwriting한국어Noto Sans KRNoto Serif KRBlack Han SansNanum Pen Script일본어Noto Sans JPNoto Serif JPNoto Sans JPNoto Sans JP중국어Noto Sans SCNoto Serif SCNoto Sans SCNoto Sans SC태국어Noto Sans Thai———영어InterGeorgiaImpactComic Sans MS"
      },
      {
        "title": "텍스트 역할별 크기",
        "body": "role용도크기 비율headline메인 제목1.0xsubheadline부제목0.7xbody본문0.5xcaption캡션/설명0.4x"
      },
      {
        "title": "폰트 크기 매핑",
        "body": "fontSize픽셀small24pxmedium36pxlarge48pxxlarge72px"
      },
      {
        "title": "트리거 키워드",
        "body": "이 스킬은 사용자 프롬프트에 다음 키워드가 포함되어 있을 때 자동 활성화됩니다:\n\n텍스트, 글자, 문구, 로고, 워터마크, 브랜드, 글씨, 제목, 헤드라인,\ntext, logo, title, headline,\n또는 프롬프트에 한글/한자/일본어/태국어/아랍어 등 비라틴 문자가 포함된 경우."
      },
      {
        "title": "규칙 (Do)",
        "body": "비라틴 문자가 감지되면 반드시 전체 파이프라인 (detect→analyze→render→generate)을 실행한다\nanalyze로 LLM이 텍스트와 스타일을 추출하도록 한다\nrender로 Canvas 프리렌더링 PNG를 생성한다\ngenerate로 프리렌더링 PNG를 Gemini에 인풋으로 넣어 최종 이미지를 생성한다"
      },
      {
        "title": "금지사항 (Don't)",
        "body": "AI 모델에게 비라틴 문자를 직접 그리라고 요청하지 않는다\n프리렌더링 없이 한글/한자/일본어 텍스트를 이미지 프롬프트에 포함하지 않는다\nrender 단계를 건너뛰고 바로 generate하지 않는다\nanalyze 결과에서 텍스트를 임의로 수정하지 않는다"
      }
    ],
    "body": "다국어 텍스트 프리렌더링 스킬\n\nAI 이미지 모델은 한글·한자·일본어 등 비라틴 문자를 직접 그리면 글자가 깨지거나 오타가 생깁니다. 이 스킬은 웹앱과 완전히 동일한 파이프라인을 제공합니다:\n\ndetect — 프롬프트에 비라틴 문자가 있는지 감지\nanalyze — Gemini LLM으로 프롬프트에서 텍스트와 스타일 추출\nrender — Canvas로 정확한 폰트를 사용해 텍스트를 PNG 프리렌더링\ngenerate — 프리렌더링 PNG를 Gemini 이미지 생성에 인풋으로 넣어 최종 이미지 생성\n최초 설정 (한 번만)\ncd {baseDir} && node setup.mjs\n\ncanvas + @google/generative-ai npm 패키지 설치\nNoto Sans 폰트 파일을 {baseDir}/fonts/에 준비\n환경 변수\n변수\t필수\t설명\nGEMINI_API_KEY\t⭐ 필수\tGemini Flash(분석) + Gemini Image(생성) 모두에 사용\nGEMINI_IMAGE_MODEL\t선택\t이미지 생성 모델 (기본: gemini-3-pro-image-preview)\n사용 흐름 (Step-by-Step)\n한 번에 실행: pipeline\n\n전체 파이프라인을 한 명령어로 실행합니다:\n\nnode {baseDir}/render.mjs pipeline \"욎홎 뙤앾뼡이라는 지역 축제 포스터 만들어줘\" \\\n  --output /tmp/final-image.png --no-base64\n\n\n결과:\n\n{\n  \"detect\": { \"needsRendering\": true, \"primaryScript\": \"hangul\", ... },\n  \"analyze\": { \"texts\": [...], \"style\": {...}, \"reasoning\": \"...\" },\n  \"render\": { \"success\": true, \"outputPath\": \"/tmp/text-render-xxx.png\", ... },\n  \"generate\": { \"success\": true, \"outputPath\": \"/tmp/final-image.png\", ... }\n}\n\n단계별 실행\nStep 1: 비라틴 문자 감지 (detect)\nnode {baseDir}/render.mjs detect \"사용자 프롬프트 전체\"\n\nneedsRendering: false → 프리렌더링 없이 일반 이미지 생성 진행\nneedsRendering: true → Step 2로 진행\nStep 2: Gemini LLM 프롬프트 분석 (analyze)\nnode {baseDir}/render.mjs analyze \"욎홎 뙤앾뼡이라는 지역 축제 포스터 만들어줘\"\n\n\nGemini Flash가 프롬프트를 분석하여:\n\n이미지에 들어갈 텍스트 추출 (따옴표, 레이블, 맥락 기반)\n디자인 맥락에 맞는 스타일 결정 (폰트, 크기, 색상)\n각 텍스트의 역할(headline/subheadline/body/caption) 지정\n각 텍스트의 스크립트·언어 자동 감지\n\nGEMINI_API_KEY가 없으면 규칙 기반 fallback이 동작합니다.\n\nStep 3: Canvas 프리렌더링 (render)\n\nanalyze 결과를 그대로 render에 전달합니다:\n\nnode {baseDir}/render.mjs render \\\n  --json '{\"texts\":[...],\"style\":{...}}' \\\n  --output /tmp/rendered-text.png\n\n\n또는 JSON 파일로:\n\nnode {baseDir}/render.mjs render --input /tmp/analysis.json --output /tmp/rendered-text.png\n\nStep 4: Gemini 이미지 생성 (generate)\n\n프리렌더링된 텍스트 PNG를 Gemini에 인풋 이미지로 넣어서 최종 이미지를 생성합니다.\n\nnode {baseDir}/render.mjs generate \\\n  --prompt \"욎홎 뙤앾뼡이라는 지역 축제 포스터 만들어줘\" \\\n  --rendered /tmp/rendered-text.png \\\n  --analysis '{\"texts\":[...],\"style\":{...}}' \\\n  --output /tmp/final-image.png \\\n  --no-base64\n\n\n이 명령어는 내부적으로:\n\n프리렌더링 PNG를 첫 번째 참조 이미지로 Gemini에 전달\nbuildTextRenderFinalPrompt로 프롬프트를 구성 (텍스트 목록 + 스타일 + \"텍스트를 다시 그리지 말고 그대로 사용하라\" 지침)\nGemini가 텍스트를 자연스럽게 통합한 최종 이미지를 생성\n\n추가 참조 이미지가 있으면 --ref로 전달:\n\nnode {baseDir}/render.mjs generate \\\n  --prompt \"포스터 만들어줘\" \\\n  --rendered /tmp/rendered-text.png \\\n  --ref /tmp/user-reference.jpg \\\n  --output /tmp/final-image.png\n\n지원 폰트\n언어\tsans-serif\tserif\tdisplay\thandwriting\n한국어\tNoto Sans KR\tNoto Serif KR\tBlack Han Sans\tNanum Pen Script\n일본어\tNoto Sans JP\tNoto Serif JP\tNoto Sans JP\tNoto Sans JP\n중국어\tNoto Sans SC\tNoto Serif SC\tNoto Sans SC\tNoto Sans SC\n태국어\tNoto Sans Thai\t—\t—\t—\n영어\tInter\tGeorgia\tImpact\tComic Sans MS\n텍스트 역할별 크기\nrole\t용도\t크기 비율\nheadline\t메인 제목\t1.0x\nsubheadline\t부제목\t0.7x\nbody\t본문\t0.5x\ncaption\t캡션/설명\t0.4x\n폰트 크기 매핑\nfontSize\t픽셀\nsmall\t24px\nmedium\t36px\nlarge\t48px\nxlarge\t72px\n트리거 키워드\n\n이 스킬은 사용자 프롬프트에 다음 키워드가 포함되어 있을 때 자동 활성화됩니다:\n\n텍스트, 글자, 문구, 로고, 워터마크, 브랜드, 글씨, 제목, 헤드라인, text, logo, title, headline, 또는 프롬프트에 한글/한자/일본어/태국어/아랍어 등 비라틴 문자가 포함된 경우.\n\n규칙 (Do)\n비라틴 문자가 감지되면 반드시 전체 파이프라인 (detect→analyze→render→generate)을 실행한다\nanalyze로 LLM이 텍스트와 스타일을 추출하도록 한다\nrender로 Canvas 프리렌더링 PNG를 생성한다\ngenerate로 프리렌더링 PNG를 Gemini에 인풋으로 넣어 최종 이미지를 생성한다\n금지사항 (Don't)\nAI 모델에게 비라틴 문자를 직접 그리라고 요청하지 않는다\n프리렌더링 없이 한글/한자/일본어 텍스트를 이미지 프롬프트에 포함하지 않는다\nrender 단계를 건너뛰고 바로 generate하지 않는다\nanalyze 결과에서 텍스트를 임의로 수정하지 않는다"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/wonyoung-Huh/nano-banana-korean-rendering",
    "publisherUrl": "https://clawhub.ai/wonyoung-Huh/nano-banana-korean-rendering",
    "owner": "wonyoung-Huh",
    "version": "1.0.3",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/nano-banana-korean-rendering",
    "downloadUrl": "https://openagent3.xyz/downloads/nano-banana-korean-rendering",
    "agentUrl": "https://openagent3.xyz/skills/nano-banana-korean-rendering/agent",
    "manifestUrl": "https://openagent3.xyz/skills/nano-banana-korean-rendering/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/nano-banana-korean-rendering/agent.md"
  }
}