#Screenshot Tools (νκ΅μ΄)
App Store λ‘컬λΌμ΄μ μ΄μ μ μν μ± μ€ν¬λ¦°μ· λ²μ λ° λ¦¬μ¬μ΄μ§ λꡬμ λλ€.
#κ°μ
μ€ν¬λ¦°μ· μν¬νλ‘μ°λ λ κ°μ λ³λ λκ΅¬λ‘ κ΅¬μ±λ©λλ€:
- translate-screenshots: Gemini APIλ₯Ό μ¬μ©νμ¬ μ€ν¬λ¦°μ·μ ν μ€νΈ λ²μ
- resize-screenshots: λ²μλ μ€ν¬λ¦°μ·μ App Store κ·κ²©μΌλ‘ 리μ¬μ΄μ§
μ΄λ κ² λΆλ¦¬νλ©΄:
- μ΅μ’ μ²λ¦¬ μ μ μλ³Έ λ²μ μ΄λ―Έμ§ κ²ν κ°λ₯
- μ¬λ²μ μμ΄ λ¦¬μ¬μ΄μ§λ§ λ€μ μ€ν (API λΉμ© μ μ½)
- λ‘μΌμΌλ³λ‘ λ€λ₯Έ 리μ¬μ΄μ§ μ€μ μ¬μ© κ°λ₯
#μν¬νλ‘μ°
1. translate-screenshots β raw/ ν΄λμ μ μ₯
2. resize-screenshots β raw/μμ μ½μ΄μ μ΅μ’
μμΉμ μ μ₯
#λλ ν 리 ꡬ쑰
public/products/{app-slug}/screenshots/
βββ en-US/ # μμ€ (κΈ°λ³Έ λ‘μΌμΌ)
β βββ phone/
β βββ 1.png
β βββ 2.png
βββ ko-KR/
β βββ phone/
β βββ raw/ # λ²μλ¨ (리μ¬μ΄μ§ μλ¨)
β β βββ 1.png
β β βββ 2.png
β βββ 1.png # μ΅μ’
(리μ¬μ΄μ§λ¨)
β βββ 2.png
βββ ja-JP/
βββ phone/
βββ raw/
βββ ...
#translate-screenshots
Gemini APIλ₯Ό μ¬μ©νμ¬ μ± μ€ν¬λ¦°μ·μ ν μ€νΈλ₯Ό μ¬λ¬ μΈμ΄λ‘ λ²μν©λλ€.
#μꡬμ¬ν
GEMINI_API_KEYλλGOOGLE_API_KEYνκ²½ λ³μ- μμ€ μ€ν¬λ¦°μ·:
public/products/{slug}/screenshots/{locale}/phone/λ°/tablet/ - λ‘μΌμΌ νμΌ:
public/products/{slug}/locales/
#λͺ¨λΈ μ ν
imageModel: "flash"(κΈ°λ³Έκ°):gemini-3.1-flash-image-previewμ¬μ© (μλ/λΉμ© ν¨μ¨)imageModel: "pro":gemini-3-pro-image-previewμ¬μ© (μ§μ μΆ©μ€λ μ°μ )
#μ λ ₯ νλΌλ―Έν°
| νλΌλ―Έν° | νμ | νμ | κΈ°λ³Έκ° | μ€λͺ |
|---|---|---|---|---|
| appName | string | μ | - | μ± μ΄λ¦, slug, bundleId, λλ packageName |
| targetLocales | string[] | μλμ€ | μ 체 λ‘μΌμΌ | λ²μν νΉμ λ‘μΌμΌ |
| deviceTypes | ("phone" | "tablet")[] | μλμ€ | ["phone", "tablet"] | μ²λ¦¬ν λλ°μ΄μ€ νμ |
| dryRun | boolean | μλμ€ | false | μ€μ λ²μ μμ΄ λ―Έλ¦¬λ³΄κΈ° |
| skipExisting | boolean | μλμ€ | true | raw νμΌμ΄ μμΌλ©΄ 건λλ°κΈ° |
| screenshotNumbers | number[] | μλμ€ | μ 체 | μ²λ¦¬ν νΉμ μ€ν¬λ¦°μ· |
| preserveWords | string[] | μλμ€ | - | λ²μνμ§ μμ λ¨μ΄ (λΈλλλͺ ) |
| imageModel | ("flash" | "pro") | μλμ€ | "flash" | Gemini μ΄λ―Έμ§ λͺ¨λΈ μ ν |
#μ¬μ© μμ
{
"appName": "my-app",
"targetLocales": ["ko-KR", "ja-JP"],
"deviceTypes": ["phone"],
"preserveWords": ["MyApp", "Pro"],
"imageModel": "pro"
}
#μ§μ μΈμ΄
Gemini API μ§μ: μμ΄, μλμ΄, λ μΌμ΄, μ€νμΈμ΄, νλμ€μ΄, νλμ΄, μΈλλ€μμμ΄, μ΄ν리μμ΄, μΌλ³Έμ΄, νκ΅μ΄, ν¬λ₯΄ν¬κ°μ΄, λ¬μμμ΄, μ°ν¬λΌμ΄λμ΄, λ² νΈλ¨μ΄, μ€κ΅μ΄
#resize-screenshots
λ²μλ μ€ν¬λ¦°μ·μ App Store κ·κ²©μΌλ‘ 리μ¬μ΄μ§ν©λλ€.
#λͺ©ν ν¬κΈ°
| λλ°μ΄μ€ | λλΉ | λμ΄ | λΉμ¨ |
|---|---|---|---|
| Phone | 1242 | 2688 | 6.5" iPhone |
| Tablet | 2048 | 2732 | 12.9" iPad Pro |
#μ λ ₯ νλΌλ―Έν°
| νλΌλ―Έν° | νμ | νμ | κΈ°λ³Έκ° | μ€λͺ |
|---|---|---|---|---|
| appName | string | μ | - | μ± μ΄λ¦, slug, bundleId, λλ packageName |
| sourceLocale | string | μλμ€ | κΈ°λ³Έ λ‘μΌμΌ | ν¬κΈ° μ°Έμ‘°μ© λ‘μΌμΌ |
| targetLocales | string[] | μλμ€ | raw/κ° μλ μ 체 | 리μ¬μ΄μ§ν λ‘μΌμΌ |
| deviceTypes | ("phone" | "tablet")[] | μλμ€ | ["phone", "tablet"] | μ²λ¦¬ν λλ°μ΄μ€ νμ |
| screenshotNumbers | number[] | μλμ€ | μ 체 | μ²λ¦¬ν νΉμ μ€ν¬λ¦°μ· |
| skipExisting | boolean | μλμ€ | false | μ΅μ’ νμΌμ΄ μμΌλ©΄ 건λλ°κΈ° |
| dryRun | boolean | μλμ€ | false | 미리보기 λͺ¨λ |
#λ°°κ²½μ
리μ¬μ΄μ¦ λꡬλ λΉ κ³΅κ°μ λ°°κ²½μμΌλ‘ μ±μλλ€. config.jsonμμ μ€μ ν μ μμ΅λλ€:
{
"metadata": {
"screenshotBgColor": "#FFFFFF"
}
}
μ§μ νμ§ μμΌλ©΄ μ΄λ―Έμ§ λͺ¨μ리μμ μ£Όμ μμμ μλ κ°μ§ν©λλ€.
#μ¬μ© μμ
{
"appName": "my-app",
"targetLocales": ["ko-KR"],
"deviceTypes": ["phone"]
}
#μ€μ
#config.json
μ νμ config.jsonμ μ€ν¬λ¦°μ· μ€μ μ μΆκ°ν©λλ€:
{
"slug": "my-app",
"metadata": {
"screenshotBgColor": "#000000"
}
}