appshot-cli 1.0.2 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (151) hide show
  1. package/README.md +300 -559
  2. package/dist/cli.js +5 -3
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/backgrounds.d.ts.map +1 -1
  5. package/dist/commands/backgrounds.js +164 -9
  6. package/dist/commands/backgrounds.js.map +1 -1
  7. package/dist/commands/build.d.ts.map +1 -1
  8. package/dist/commands/build.js +154 -54
  9. package/dist/commands/build.js.map +1 -1
  10. package/dist/commands/caption.d.ts.map +1 -1
  11. package/dist/commands/caption.js +350 -6
  12. package/dist/commands/caption.js.map +1 -1
  13. package/dist/commands/check.d.ts.map +1 -1
  14. package/dist/commands/check.js +174 -97
  15. package/dist/commands/check.js.map +1 -1
  16. package/dist/commands/clean.d.ts.map +1 -1
  17. package/dist/commands/clean.js +16 -0
  18. package/dist/commands/clean.js.map +1 -1
  19. package/dist/commands/fonts.d.ts.map +1 -1
  20. package/dist/commands/fonts.js +44 -26
  21. package/dist/commands/fonts.js.map +1 -1
  22. package/dist/commands/gradients.d.ts.map +1 -1
  23. package/dist/commands/gradients.js +32 -15
  24. package/dist/commands/gradients.js.map +1 -1
  25. package/dist/commands/init.d.ts.map +1 -1
  26. package/dist/commands/init.js +18 -16
  27. package/dist/commands/init.js.map +1 -1
  28. package/dist/commands/migrate.d.ts.map +1 -1
  29. package/dist/commands/migrate.js +51 -104
  30. package/dist/commands/migrate.js.map +1 -1
  31. package/dist/commands/preset.d.ts.map +1 -1
  32. package/dist/commands/preset.js +16 -14
  33. package/dist/commands/preset.js.map +1 -1
  34. package/dist/commands/presets.d.ts.map +1 -1
  35. package/dist/commands/presets.js +15 -0
  36. package/dist/commands/presets.js.map +1 -1
  37. package/dist/commands/quickstart.d.ts.map +1 -1
  38. package/dist/commands/quickstart.js +40 -53
  39. package/dist/commands/quickstart.js.map +1 -1
  40. package/dist/commands/style.d.ts.map +1 -1
  41. package/dist/commands/style.js +101 -57
  42. package/dist/commands/style.js.map +1 -1
  43. package/dist/commands/template.d.ts.map +1 -1
  44. package/dist/commands/template.js +68 -80
  45. package/dist/commands/template.js.map +1 -1
  46. package/dist/commands/validate.d.ts.map +1 -1
  47. package/dist/commands/validate.js +141 -0
  48. package/dist/commands/validate.js.map +1 -1
  49. package/dist/commands/wizard.d.ts +25 -0
  50. package/dist/commands/wizard.d.ts.map +1 -0
  51. package/dist/commands/wizard.js +366 -0
  52. package/dist/commands/wizard.js.map +1 -0
  53. package/dist/core/compose.d.ts +60 -1
  54. package/dist/core/compose.d.ts.map +1 -1
  55. package/dist/core/compose.js +150 -0
  56. package/dist/core/compose.js.map +1 -1
  57. package/dist/core/device-strategies/index.d.ts +8 -0
  58. package/dist/core/device-strategies/index.d.ts.map +1 -0
  59. package/dist/core/device-strategies/index.js +22 -0
  60. package/dist/core/device-strategies/index.js.map +1 -0
  61. package/dist/core/device-strategies/ipad.d.ts +3 -0
  62. package/dist/core/device-strategies/ipad.d.ts.map +1 -0
  63. package/dist/core/device-strategies/ipad.js +13 -0
  64. package/dist/core/device-strategies/ipad.js.map +1 -0
  65. package/dist/core/device-strategies/iphone.d.ts +3 -0
  66. package/dist/core/device-strategies/iphone.d.ts.map +1 -0
  67. package/dist/core/device-strategies/iphone.js +13 -0
  68. package/dist/core/device-strategies/iphone.js.map +1 -0
  69. package/dist/core/device-strategies/mac.d.ts +3 -0
  70. package/dist/core/device-strategies/mac.d.ts.map +1 -0
  71. package/dist/core/device-strategies/mac.js +13 -0
  72. package/dist/core/device-strategies/mac.js.map +1 -0
  73. package/dist/core/device-strategies/watch.d.ts +3 -0
  74. package/dist/core/device-strategies/watch.d.ts.map +1 -0
  75. package/dist/core/device-strategies/watch.js +13 -0
  76. package/dist/core/device-strategies/watch.js.map +1 -0
  77. package/dist/core/files.d.ts +3 -3
  78. package/dist/core/files.d.ts.map +1 -1
  79. package/dist/core/files.js.map +1 -1
  80. package/dist/core/layouts/device-fit.d.ts +10 -0
  81. package/dist/core/layouts/device-fit.d.ts.map +1 -0
  82. package/dist/core/layouts/device-fit.js +18 -0
  83. package/dist/core/layouts/device-fit.js.map +1 -0
  84. package/dist/core/layouts/index.d.ts +4 -0
  85. package/dist/core/layouts/index.d.ts.map +1 -0
  86. package/dist/core/layouts/index.js +4 -0
  87. package/dist/core/layouts/index.js.map +1 -0
  88. package/dist/core/layouts/math.d.ts +23 -0
  89. package/dist/core/layouts/math.d.ts.map +1 -0
  90. package/dist/core/layouts/math.js +63 -0
  91. package/dist/core/layouts/math.js.map +1 -0
  92. package/dist/core/layouts/text-layout.d.ts +10 -0
  93. package/dist/core/layouts/text-layout.d.ts.map +1 -0
  94. package/dist/core/layouts/text-layout.js +60 -0
  95. package/dist/core/layouts/text-layout.js.map +1 -0
  96. package/dist/mcp/cli-options.d.ts +15 -0
  97. package/dist/mcp/cli-options.d.ts.map +1 -1
  98. package/dist/mcp/cli-options.js +16 -0
  99. package/dist/mcp/cli-options.js.map +1 -1
  100. package/dist/mcp/server.d.ts.map +1 -1
  101. package/dist/mcp/server.js +268 -52
  102. package/dist/mcp/server.js.map +1 -1
  103. package/dist/services/caption-enhancement.d.ts +32 -0
  104. package/dist/services/caption-enhancement.d.ts.map +1 -0
  105. package/dist/services/caption-enhancement.js +156 -0
  106. package/dist/services/caption-enhancement.js.map +1 -0
  107. package/dist/services/compose-bridge.d.ts +3 -3
  108. package/dist/services/compose-bridge.d.ts.map +1 -1
  109. package/dist/services/compose-bridge.js +64 -21
  110. package/dist/services/compose-bridge.js.map +1 -1
  111. package/dist/services/doctor.d.ts.map +1 -1
  112. package/dist/services/doctor.js +13 -2
  113. package/dist/services/doctor.js.map +1 -1
  114. package/dist/services/translation.d.ts +8 -0
  115. package/dist/services/translation.d.ts.map +1 -1
  116. package/dist/services/translation.js +117 -29
  117. package/dist/services/translation.js.map +1 -1
  118. package/dist/services/watch-service.d.ts.map +1 -1
  119. package/dist/services/watch-service.js.map +1 -1
  120. package/dist/templates/registry.d.ts +18 -59
  121. package/dist/templates/registry.d.ts.map +1 -1
  122. package/dist/templates/registry.js +138 -500
  123. package/dist/templates/registry.js.map +1 -1
  124. package/dist/types.d.ts +35 -0
  125. package/dist/types.d.ts.map +1 -1
  126. package/dist/utils/config-migration.d.ts +7 -0
  127. package/dist/utils/config-migration.d.ts.map +1 -0
  128. package/dist/utils/config-migration.js +58 -0
  129. package/dist/utils/config-migration.js.map +1 -0
  130. package/dist/utils/config-version.d.ts +5 -0
  131. package/dist/utils/config-version.d.ts.map +1 -0
  132. package/dist/utils/config-version.js +10 -0
  133. package/dist/utils/config-version.js.map +1 -0
  134. package/dist/utils/language.d.ts +2 -2
  135. package/dist/utils/language.d.ts.map +1 -1
  136. package/dist/utils/language.js +1 -1
  137. package/dist/utils/language.js.map +1 -1
  138. package/dist/utils/spinner.d.ts +21 -0
  139. package/dist/utils/spinner.d.ts.map +1 -0
  140. package/dist/utils/spinner.js +60 -0
  141. package/dist/utils/spinner.js.map +1 -0
  142. package/dist/utils/v2-banner.d.ts +2 -0
  143. package/dist/utils/v2-banner.d.ts.map +1 -0
  144. package/dist/utils/v2-banner.js +14 -0
  145. package/dist/utils/v2-banner.js.map +1 -0
  146. package/dist/utils/validation.d.ts.map +1 -1
  147. package/dist/utils/validation.js +4 -3
  148. package/dist/utils/validation.js.map +1 -1
  149. package/package.json +1 -1
  150. package/skill/SKILL.md +5 -1
  151. package/skill/references/templates.md +26 -0
package/README.md CHANGED
@@ -10,19 +10,13 @@
10
10
  [![Node.js Version](https://img.shields.io/node/v/appshot-cli.svg)](https://nodejs.org)
11
11
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
12
12
 
13
- 🆕 **Version 1.0.0** - **MCP Server & Agent-First Architecture**
13
+ 🆕 **Version 2.0.0** - **Layout v2 + Agent-First Architecture**
14
14
  - **MCP Server**: Full Model Context Protocol support for AI agents (Claude Desktop, Claude Code, etc.)
15
- - **17 MCP Tools**: Complete coverage - init, build, captions, gradients, backgrounds, fonts, config, validate, specs, doctor, presets, localize, languages, frame, export, clean, projectInfo
15
+ - **20 MCP Tools**: Complete coverage - init, build, wizard, quickstart, template, captions, gradients, backgrounds, fonts, config, validate, specs, doctor, presets, localize, languages, frame, export, clean, projectInfo
16
16
  - **Claude Code Skill**: Install with `appshot skill` - includes templates, troubleshooting guides
17
17
  - **Auto-Caption**: Generate captions from filenames with `--auto-caption` or MCP `action: "auto"`
18
18
  - **Direct Tool Access**: Agents can manage entire screenshot workflows without shell access
19
19
 
20
- **Version 0.9.x** - **Layout Engine, Templates & Fastlane**
21
- - **Fastlane Export**: Seamless integration with `appshot export` and screenshot ordering
22
- - **8 Professional Templates**: modern, minimal, bold, elegant, showcase, playful, corporate, nerdy
23
- - **Unified Layout Engine**: Single planner for all caption/device combinations
24
- - **Safety Insets**: Automatic 40px protection for App Store cropping
25
-
26
20
  ## 📖 Table of Contents
27
21
 
28
22
  - [Why Appshot?](#-why-appshot)
@@ -30,7 +24,9 @@
30
24
  - [Quick Start](#-quick-start)
31
25
  - [Prerequisites](#prerequisites)
32
26
  - [Installation](#installation)
27
+ - [Wizard (Recommended)](#wizard-recommended)
33
28
  - [Your First Screenshot](#your-first-screenshot)
29
+ - [Cleaning & Reset](#cleaning--reset)
34
30
  - [MCP Server & Agent Integration](#-mcp-server--agent-integration)
35
31
  - [Core Concepts](#-core-concepts)
36
32
  - [Visual Customization](#-visual-customization)
@@ -38,7 +34,6 @@
38
34
  - [Font System](#font-system)
39
35
  - [Device Frames](#device-frames)
40
36
  - [Caption System](#caption-system)
41
- - [Style System Guide](#style-system-guide)
42
37
  - [Localization & Translation](#-localization--translation)
43
38
  - [Device Support](#-device-support)
44
39
  - [Fastlane Integration](#-fastlane-integration)
@@ -55,7 +50,7 @@
55
50
 
56
51
  Appshot is the only **agent-first CLI tool** designed for automated App Store screenshot generation. Built for LLM agents, CI/CD pipelines, and developers who value automation over GUIs.
57
52
 
58
- **NEW in v0.9.0**: One-line preset commands! Generate professional screenshots instantly with `appshot preset bold --caption "Amazing App" --devices iphone,watch`
53
+ **NEW in v2.0.0**: Fixed layout zones and v2 templates for clean, predictable screenshots out of the box.
59
54
 
60
55
  ### Key Differentiators
61
56
 
@@ -66,6 +61,20 @@ Appshot is the only **agent-first CLI tool** designed for automated App Store sc
66
61
  - ⚡ **Fast & Parallel** - Process hundreds of screenshots with configurable concurrency
67
62
  - 🛠️ **Pure CLI** - No web UI, no GUI, just predictable commands perfect for automation
68
63
 
64
+ ## 📱 iPhone Screenshot Examples (v2)
65
+
66
+ These are generated by the v2 templates included in `template-samples/iphone/`:
67
+
68
+ | Ocean Header | Sunset Footer | Clean Screenshot |
69
+ | --- | --- | --- |
70
+ | ![Ocean Header](template-samples/iphone/ocean-header-iphone.png) | ![Sunset Footer](template-samples/iphone/sunset-footer-iphone.png) | ![Clean Screenshot](template-samples/iphone/clean-screenshot-iphone.png) |
71
+ | Pastel Header | Noir Footer | Silver Header |
72
+ | ![Pastel Header](template-samples/iphone/pastel-header-iphone.png) | ![Noir Footer](template-samples/iphone/noir-footer-iphone.png) | ![Silver Header](template-samples/iphone/silver-header-iphone.png) |
73
+ | Slate Footer | Midnight Header | Tropical Header |
74
+ | ![Slate Footer](template-samples/iphone/slate-footer-iphone.png) | ![Midnight Header](template-samples/iphone/midnight-header-iphone.png) | ![Tropical Header](template-samples/iphone/tropical-header-iphone.png) |
75
+
76
+ > For the full template gallery, open `template-samples/index.html`.
77
+
69
78
  ## ✨ Features
70
79
 
71
80
  - 🖼️ **Smart Frames** - Automatically detects portrait/landscape and selects appropriate device frame
@@ -89,7 +98,7 @@ Appshot is the only **agent-first CLI tool** designed for automated App Store sc
89
98
 
90
99
  ### Prerequisites
91
100
 
92
- - **Node.js 16+** - Required for ESM modules
101
+ - **Node.js 18+** - Required for ESM modules
93
102
  - **npm** or **yarn** - Package manager
94
103
  - **Operating System** - macOS, Linux, or Windows
95
104
  - **Optional**: OpenAI API key for translation features
@@ -109,6 +118,25 @@ appshot --version
109
118
 
110
119
  > **Note**: The package is called `appshot-cli` on NPM, but the command is `appshot`
111
120
 
121
+ ### Wizard (Recommended)
122
+
123
+ The wizard is the fastest way to get v2 screenshots, because it:
124
+ - **Applies a template** (optional) for layout + background + caption styling
125
+ - **Auto-detects orientation** from your screenshots and sets `resolution`
126
+ - **Generates captions** (from filenames or manual entry)
127
+ - **Localizes + enhances** (optional)
128
+ - **Builds** in one pass
129
+
130
+ ```bash
131
+ # Interactive wizard (templates included)
132
+ appshot wizard
133
+
134
+ # Non-interactive (CI)
135
+ appshot wizard --no-interactive --devices iphone,ipad --template ocean-header --caption-source filenames --langs en,es,fr
136
+ ```
137
+
138
+ > **Tip:** If no screenshots exist yet, the wizard keeps `resolution` unset so build uses the real screenshot dimensions later.
139
+
112
140
  ### Your First Screenshot - Two Ways
113
141
 
114
142
  #### Option 1: Quick Start with Templates (NEW! 🎨)
@@ -119,8 +147,11 @@ The fastest way to get professional screenshots:
119
147
  # One command interactive setup
120
148
  appshot quickstart
121
149
 
150
+ # One-shot v2 flow (layout → captions → build)
151
+ appshot wizard
152
+
122
153
  # Or apply a specific template
123
- appshot template modern --caption "Your Amazing App"
154
+ appshot template ocean-header --caption "Your Amazing App"
124
155
 
125
156
  # Build your screenshots
126
157
  appshot build
@@ -197,6 +228,23 @@ final/
197
228
  └── dashboard.png # 2048×2732 iPad Pro screenshot
198
229
  ```
199
230
 
231
+ ### Cleaning & Reset
232
+
233
+ When you want a clean slate without deleting screenshots:
234
+
235
+ ```bash
236
+ # Remove outputs + .appshot/ but keep screenshots/
237
+ appshot clean --reset --yes
238
+
239
+ # Remove outputs + .appshot/ + temp files
240
+ appshot clean --all --yes
241
+
242
+ # Clear caption history only
243
+ appshot clean --history
244
+ ```
245
+
246
+ `--reset` is safe for projects: it keeps `screenshots/` intact and wipes generated files.
247
+
200
248
  ## 🤖 MCP Server & Agent Integration
201
249
 
202
250
  Appshot provides a full Model Context Protocol (MCP) server, enabling AI agents like Claude Desktop and Claude Code to manage screenshot workflows directly through tool calls.
@@ -234,8 +282,11 @@ Edit `~/Library/Application Support/Claude/claude_desktop_config.json`:
234
282
  |------|-------------|
235
283
  | `appshot_projectInfo` | Get project metadata (devices, languages, config) |
236
284
  | `appshot_init` | Initialize new project structure |
285
+ | `appshot_quickstart` | Quick start setup with templates + captions |
286
+ | `appshot_wizard` | One-shot v2 flow (template/layout → captions → translate/enhance → build) |
237
287
  | `appshot_build` | Generate final screenshots |
238
288
  | `appshot_frame` | Apply device frames only (transparent background) |
289
+ | `appshot_template` | Apply v2 template presets |
239
290
  | `appshot_captions` | Read/write caption text, auto-generate from filenames |
240
291
  | `appshot_gradients` | List/apply gradient presets |
241
292
  | `appshot_backgrounds` | Configure background images |
@@ -268,13 +319,24 @@ Agent: I'll set up your App Store screenshots.
268
319
  **Auto-Caption Workflow** (generate captions from filenames):
269
320
  ```
270
321
  1. appshot_init with force: true
271
- 2. appshot_template with template: "modern"
322
+ 2. appshot_template with template: "ocean-header"
272
323
  3. appshot_captions with device: "iphone", action: "auto"
273
324
  4. appshot_build with devices: ["iphone"]
274
325
 
275
326
  ✓ Captions auto-generated: "home-screen.png" → "Home Screen"
276
327
  ```
277
328
 
329
+ **Wizard Workflow (single tool call):**
330
+ ```
331
+ appshot_wizard with {
332
+ devices: ["iphone", "ipad"],
333
+ template: "ocean-header",
334
+ captionSource: "filenames",
335
+ languages: ["en", "es", "fr"],
336
+ noInteractive: true
337
+ }
338
+ ```
339
+
278
340
  ### Claude Code Skill
279
341
 
280
342
  For Claude Code users, install the appshot skill for guided workflows:
@@ -292,9 +354,9 @@ appshot skill --uninstall
292
354
 
293
355
  The skill provides:
294
356
  - Project workflow guidance (init → captions → styling → build)
295
- - Template recommendations by app type (dev tools → nerdy, business → corporate)
357
+ - Template recommendations by app type (dev tools → midnight-header, business → slate-footer)
296
358
  - Troubleshooting guide for common errors
297
- - Reference files for all 24 gradients, 10 fonts, and 8 templates
359
+ - Reference files for all 24 gradients, 10 fonts, and 9 templates
298
360
 
299
361
  ### Agent-Friendly Features
300
362
 
@@ -305,7 +367,7 @@ The skill provides:
305
367
 
306
368
  ### Claude Desktop Support
307
369
 
308
- Claude Desktop is fully supported as of v1.0.1. Add appshot to your Claude Desktop configuration:
370
+ Claude Desktop is fully supported as of v2.0.0. Add appshot to your Claude Desktop configuration:
309
371
 
310
372
  **macOS:** `~/Library/Application Support/Claude/claude_desktop_config.json`
311
373
 
@@ -320,12 +382,19 @@ Claude Desktop is fully supported as of v1.0.1. Add appshot to your Claude Deskt
320
382
  }
321
383
  ```
322
384
 
323
- Restart Claude Desktop after adding the configuration. All 19 MCP tools will be available.
385
+ Restart Claude Desktop after adding the configuration. All MCP tools will be available.
324
386
 
325
387
  > **Tip:** When using Claude Desktop, always provide the full `configPath` parameter pointing to your project directory, since Claude Desktop runs from the home directory.
326
388
 
327
389
  ## 📘 Core Concepts
328
390
 
391
+ 🧭 **Layout v2** - **Fixed Zones + Three Layout Modes**
392
+ - **Modes**: header, footer, screenshot-only (overlay removed)
393
+ - **Fixed Regions**: Caption/device ratios are deterministic per device type
394
+ - **Device-Based Font Scaling**: Text size scales by output resolution (iPad/Mac larger, Watch smaller)
395
+ - **Config v2**: `version: 2` configs only allow styling, not layout proportions
396
+ - **Docs**: See `docs/layout-v2.md` for full rules
397
+
329
398
  ### Project Structure
330
399
 
331
400
  Appshot creates and manages the following directory structure in your project:
@@ -374,23 +443,27 @@ All settings are stored in `.appshot/config.json`:
374
443
 
375
444
  ```json
376
445
  {
377
- "output": "./final",
378
- "gradient": {
379
- "colors": ["#0077BE", "#33CCCC"],
380
- "direction": "diagonal"
381
- },
446
+ "version": 2,
447
+ "layout": "header",
382
448
  "caption": {
383
- "font": "SF Pro",
384
- "fontsize": 64,
385
- "color": "#FFFFFF",
386
- "position": "above"
449
+ "font": "SF Pro Display Bold",
450
+ "color": "#FFFFFF"
451
+ },
452
+ "background": {
453
+ "mode": "gradient",
454
+ "gradient": {
455
+ "colors": ["#0077BE", "#33CCCC"],
456
+ "direction": "diagonal"
457
+ }
387
458
  },
388
459
  "devices": {
389
460
  "iphone": {
390
- "resolution": "1290x2796",
391
- "autoFrame": true
461
+ "input": "./screenshots/iphone",
462
+ "resolution": "1290x2796"
392
463
  }
393
- }
464
+ },
465
+ "output": "./final",
466
+ "frames": "./frames"
394
467
  }
395
468
  ```
396
469
 
@@ -404,9 +477,9 @@ All settings are stored in `.appshot/config.json`:
404
477
 
405
478
  ## 🎨 Visual Customization
406
479
 
407
- ### Template System (NEW! 🚀)
480
+ ### Template System (v2)
408
481
 
409
- Appshot now includes professional screenshot templates that configure everything with a single command. Each template includes carefully designed backgrounds, device positioning, caption styling, and device-specific optimizations.
482
+ Appshot v2 templates map to fixed layout modes (header/footer/screenshot-only) plus curated gradients and caption styling defaults. Layout proportions are deterministic per device and **not** user-adjustable in v2. Overlay mode is removed. See `docs/layout-v2.md` for the full rules.
410
483
 
411
484
  #### Quick Start with Templates
412
485
 
@@ -415,85 +488,59 @@ Appshot now includes professional screenshot templates that configure everything
415
488
  appshot quickstart
416
489
 
417
490
  # Apply a specific template
418
- appshot template modern
491
+ appshot template ocean-header
419
492
 
420
493
  # Apply template with caption
421
- appshot template minimal --caption "Beautiful & Simple"
494
+ appshot template pastel-header --caption "Beautiful & Simple"
422
495
 
423
496
  # Preview template settings
424
- appshot template --preview bold
497
+ appshot template --preview noir-footer
425
498
 
426
499
  # List all templates
427
500
  appshot template --list
428
501
  ```
429
502
 
430
- #### Available Templates
431
-
432
- 📸 **[View Template Gallery](./template-samples/index.html)** - See visual examples of all templates
503
+ #### Available Templates (v2)
433
504
 
434
505
  | Template | Description | Best For |
435
506
  |----------|-------------|----------|
436
- | **modern** | Vibrant gradient with floating device and clean captions | Most apps, eye-catching |
437
- | **minimal** | Soft pastel background with elegant typography | Clean, simple apps |
438
- | **bold** | Dark dramatic gradient with overlay captions | Gaming, entertainment |
439
- | **elegant** | Sophisticated monochrome design | Professional, business |
440
- | **showcase** | Auto-detects custom backgrounds, partial frames | Apps with branded assets |
441
- | **playful** | Bright, fun gradients | Games, kids apps |
442
- | **corporate** | Clean, professional look | Business, productivity |
443
- | **nerdy** | JetBrains Mono typography with OSS grid background | Developer tools |
507
+ | **ocean-header** | Cool blue gradient + header layout | General purpose |
508
+ | **sunset-footer** | Warm sunset gradient + footer layout | Bold marketing |
509
+ | **clean-screenshot** | Minimal background + screenshot-only | Product-focused |
510
+ | **pastel-header** | Soft pastel gradient + header layout | Clean, friendly apps |
511
+ | **noir-footer** | Dark dramatic gradient + footer layout | Entertainment, gaming |
512
+ | **silver-header** | Elegant silver gradient + header layout | Professional apps |
513
+ | **tropical-header** | Bright tropical gradient + header layout | Playful brands |
514
+ | **slate-footer** | Professional slate gradient + footer layout | Business, productivity |
515
+ | **midnight-header** | Deep blue gradient + header layout | Developer tools |
444
516
 
445
- ![Template Gallery](./template-samples/gallery/template-gallery.png)
446
-
447
- ##### Rebuild the Gallery Locally
448
-
449
- ```bash
450
- # From repo root
451
- npm run samples
452
- ```
517
+ 📸 **Template Gallery (v2)**: Open `template-samples/index.html` to browse the current v2 template gallery.
453
518
 
454
- This generates:
455
- - Device samples: `template-samples/{iphone|ipad|watch|mac}/<template>-<device>.png`
456
- - Gallery cards: `template-samples/gallery/*-sample.png`
457
- - Combined image: `template-samples/gallery/template-gallery.png`
458
-
459
- #### Template Features
519
+ #### Template Features (v2)
460
520
 
461
521
  Each template automatically configures:
462
- - **Background**: Gradient colors and direction or image settings
463
- - **Device Scale**: Optimal size for visual balance (70-110%)
464
- - **Device Position**: Top, center, bottom, or custom percentage
465
- - **Caption Style**: Font, size, color, and position
466
- - **Caption Background**: Optional semi-transparent background with padding
467
- - **Caption Border**: Optional border with customizable radius
468
- - **Partial Frames**: Modern look with cut-off device bottoms
469
- - **Device Overrides**: Optimized settings for watch, iPad, etc.
522
+ - **Layout Mode**: header, footer, or screenshot-only
523
+ - **Background**: Gradient colors and direction
524
+ - **Caption Style**: Font family, color, background, and opacity
525
+ - **Device Strategies**: Fixed ratios, scaling, and line limits per device type
470
526
 
471
527
  #### Template Examples
472
528
 
473
529
  ```bash
474
- # Modern Template - Perfect for most apps
475
- appshot template modern
476
- # → Vibrant diagonal gradient (#667eea #764ba2 → #f093fb)
477
- # → 85% device scale, centered
478
- # → White captions with dark semi-transparent background
479
-
480
- # Minimal Template - Clean and simple
481
- appshot template minimal
482
- # → Soft pastel gradient (#ffecd2 → #fcb69f)
483
- # → 75% device scale, lower position
484
- # → Dark text on light background
530
+ # Ocean Header - General purpose
531
+ appshot template ocean-header
532
+ # → Header layout + cool blue gradient
533
+ # → Fixed zones, centered caption
485
534
 
486
- # Bold Template - Make a statement
487
- appshot template bold
488
- # → Dark gradient (#0f0c29 → #302b63 → #24243e)
489
- # → 110% device scale with partial frame
490
- # → Large overlay captions with border
535
+ # Clean Screenshot - Product-forward
536
+ appshot template clean-screenshot
537
+ # → Screenshot-only layout
538
+ # → Minimal background styling
491
539
 
492
- # Showcase Template - Feature your backgrounds
493
- appshot template showcase
494
- # → Auto-detects background.png in device folders
495
- # → 90% scale with 25% partial frame
496
- # → Glass-morphism caption effect
540
+ # Noir Footer - Bold marketing
541
+ appshot template noir-footer
542
+ # → Footer layout + dark gradient
543
+ # → High-contrast caption styling
497
544
  ```
498
545
 
499
546
  #### Customizing Templates
@@ -502,10 +549,10 @@ Templates provide a starting point that you can further customize:
502
549
 
503
550
  ```bash
504
551
  # 1. Apply a template
505
- appshot template modern
552
+ appshot template ocean-header
506
553
 
507
- # 2. Fine-tune specific settings
508
- appshot style --device iphone # Adjust positioning
554
+ # 2. Adjust styling (layout proportions are fixed in v2)
555
+ appshot style # Pick layout + gradient + caption color
509
556
  appshot fonts --set "Poppins Bold" # Change font
510
557
  appshot caption --device iphone # Update captions
511
558
 
@@ -844,266 +891,43 @@ When dimensions are ambiguous, use `--device` to specify the target device.
844
891
 
845
892
  ### Device Frames
846
893
 
847
- #### Smart Frame Selection
848
-
849
- Appshot automatically detects screenshot orientation and selects the appropriate frame:
850
-
851
- ```json
852
- {
853
- "devices": {
854
- "iphone": {
855
- "autoFrame": true, // Auto-detect orientation
856
- "preferredFrame": "iphone-16-pro-max-portrait" // Override
857
- }
858
- }
859
- }
860
- ```
861
-
862
- #### Partial Frames
863
-
864
- Create modern App Store screenshots with cut-off device frames:
865
-
866
- ```json
867
- {
868
- "devices": {
869
- "iphone": {
870
- "partialFrame": true,
871
- "frameOffset": 25, // Cut 25% from bottom
872
- "framePosition": 40, // Position at 40% from top
873
- "frameScale": 0.85 // Scale to 85%
874
- }
875
- }
876
- }
877
- ```
878
-
879
- #### Frame Positioning System
880
-
881
- **Important**: The `framePosition` value (0-100) behaves differently depending on your caption positioning mode.
882
-
883
- ##### Relative vs Absolute Positioning
884
-
885
- When using `captionPosition: "above"` or `"below"`:
886
- - **Frame positioning is RELATIVE to the remaining space** after accounting for the caption
887
- - `framePosition: 0` = Top of available space (immediately after/before caption)
888
- - `framePosition: 50` = Center of remaining space
889
- - `framePosition: 100` = Bottom of available space
890
-
891
- When using `captionPosition: "overlay"`:
892
- - **Frame positioning is ABSOLUTE to the entire canvas**
893
- - `framePosition: 0` = Top of canvas (pixel 0)
894
- - `framePosition: 50` = Center of entire canvas
895
- - `framePosition: 100` = Bottom of canvas
896
-
897
- ##### Visual Examples
898
-
899
- ```json
900
- // Example 1: Caption above with framePosition: 0
901
- {
902
- "devices": {
903
- "iphone": {
904
- "captionPosition": "above",
905
- "framePosition": 0 // Device starts right after caption
906
- }
907
- }
908
- }
909
- // Result: [Caption] then [Device at top of remaining space]
910
-
911
- // Example 2: Caption overlay with framePosition: 0
912
- {
913
- "devices": {
914
- "iphone": {
915
- "captionPosition": "overlay",
916
- "framePosition": 0 // Device at absolute top
917
- }
918
- }
919
- }
920
- // Result: [Device at canvas top] with [Caption overlaid at bottom]
921
- ```
922
-
923
- ##### The Math Behind Positioning
924
-
925
- For **"above" mode**, the device position is calculated as:
926
- ```
927
- deviceTop = topMargin + captionHeight + (availableSpace * framePosition/100)
928
- where availableSpace = canvasHeight - topMargin - captionHeight - bottomMargin - deviceHeight
929
- ```
930
-
931
- For **"overlay" mode**, the device position is calculated as:
932
- ```
933
- deviceTop = availableSpace * (framePosition/100)
934
- where availableSpace = canvasHeight - bottomMargin - deviceHeight
935
- ```
936
-
937
- ##### Practical Implications
938
-
939
- 1. **Same framePosition, Different Results**: A `framePosition: 0` will place the device at different absolute positions:
940
- - With `above` caption: Device starts after the caption (e.g., at pixel 198)
941
- - With `overlay` caption: Device starts at the top (pixel 0)
942
-
943
- 2. **Caption Height Affects Layout**: In `above`/`below` modes, varying caption lengths change the available space, affecting all frame positions. Use `overlay` mode for consistent device positioning across screenshots with different caption lengths.
944
-
945
- 3. **Best Practices**:
946
- - Use `above`/`below` for guaranteed caption-device separation
947
- - Use `overlay` for consistent device positioning across all screenshots
948
- - Set fixed caption heights (`minHeight`/`maxHeight`) for uniform layouts
949
-
950
- 📚 **[Visual Preset Showcase](./positioning-guide/preset-showcase.html)** - Interactive visual guide showing all available preset templates and their styles
951
-
952
- ### Caption System
953
-
954
- #### Dynamic Caption Box
955
-
956
- Intelligent caption rendering that adapts to content:
957
-
958
- ```json
959
- {
960
- "caption": {
961
- "position": "above", // above, below, or overlay
962
- "box": {
963
- "autoSize": true, // Dynamic height
964
- "maxLines": 3, // Line limit
965
- "lineHeight": 1.4, // Line spacing
966
- "minHeight": 100,
967
- "maxHeight": 500
968
- }
969
- }
970
- }
971
- ```
972
-
973
- #### Caption Positioning Options
974
-
975
- - **`above`** (default): Caption appears above the device frame
976
- - **`below`** (new in v0.7.0): Caption appears below the device frame
977
- - **`overlay`**: Caption overlays on the gradient background
894
+ Appshot auto-detects orientation and selects the best-fitting device frame for each screenshot. Frames are always based on the full device image; the screenshot is inset into the frame’s `screenRect`.
978
895
 
979
896
  ```bash
980
- # Configure caption below device
981
- appshot style --device iphone
982
- # → Select "Below device frame" option
897
+ # Disable frames entirely
898
+ appshot build --no-frame
983
899
 
984
- # Or set directly in config
985
- {
986
- "devices": {
987
- "iphone": {
988
- "captionPosition": "below"
989
- }
990
- }
991
- }
900
+ # Frame-only mode (no captions or gradients)
901
+ appshot frame ./screenshots
992
902
  ```
993
903
 
994
- #### Safe Layout Defaults (NEW in v0.9.2)
995
-
996
- - **40 px Safety Insets** automatically pad the top/bottom of every canvas so captions survive App Store rounding—no manual margins required.
997
- - **48 px Above / 36 px Below Gaps** keep the caption box visually detached from the device; override with `caption.box.marginTop` only if you truly need a different gap.
998
- - **Bottom breathing room**: Increase `caption.box.marginBottom` per device (e.g., 80 px for iPad, 140 px for MacBook) whenever App Store Connect crops the screenshot bottom edge; the planner pushes the device up while keeping captions pinned.
999
- - **Templates Only Style**: Built-in presets now just set fonts/colors; spacing always comes from the planner, so switching templates won’t break compliance.
1000
- - **Verbose Metrics**: Run `appshot build --dry-run --verbose` to see `Insets`, `Caption gap`, and `Overlay bottom spacing` lines for each device, then tweak the per-device `captionBox` margins without touching the template math.
1001
-
1002
- #### Caption Styling (Enhanced in v0.8.7)
904
+ ### Caption System (v2)
1003
905
 
1004
- Create professional captions with customizable backgrounds and borders:
906
+ Captions render inside fixed layout zones (header/footer only). Text is centered within the caption region and truncated with ellipsis if it exceeds the max line count for the device. Font size is computed from output dimensions, with device-specific min/max bounds.
1005
907
 
1006
908
  ```json
1007
909
  {
910
+ "version": 2,
911
+ "layout": "header",
1008
912
  "caption": {
1009
- "color": "#FFFFFF", // Text color (hex)
1010
- "background": {
1011
- "color": "#000000", // Background color (hex)
1012
- "opacity": 0.8, // Transparency (0-1)
1013
- "padding": 20 // Padding around text
1014
- },
1015
- "border": {
1016
- "color": "#FFFFFF", // Border color (hex)
1017
- "width": 2, // Border thickness (1-10)
1018
- "radius": 12 // Rounded corners (0-30); used for background too
1019
- }
1020
- }
1021
- }
1022
- ```
1023
-
1024
- **Key Features:**
1025
- - **Full-width styling** - Backgrounds and borders span device width for uniformity
1026
- - **Flexible positioning** - Works with above, below, and overlay positions
1027
- - **Device-specific overrides** - Customize styling per device type
1028
- - **Professional appearance** - Rounded corners and padding for polished look
1029
- - **Vertical anchoring (NEW)** - Align caption text to top or center of the box
1030
- - **Unified side margins (NEW)** - Control caption box width with `caption.background.sideMargin`
1031
-
1032
- **Interactive Configuration:**
1033
- ```bash
1034
- # Configure caption styling interactively
1035
- appshot style --device iphone
1036
- # → Choose caption position (above/below/overlay)
1037
- # → Configure background color and opacity
1038
- # → Set border color, width, and radius
1039
- # → Set vertical alignment (top/center)
1040
- # → Set side margin, min/max height, max lines
1041
- ```
1042
-
1043
- **Examples:**
1044
-
1045
- ```json
1046
- // Dark background with white border
1047
- {
1048
- "caption": {
913
+ "font": "SF Pro Display Bold",
1049
914
  "color": "#FFFFFF",
1050
915
  "background": {
1051
916
  "color": "#000000",
1052
- "opacity": 0.9,
1053
- "padding": 30
1054
- },
1055
- "border": {
1056
- "color": "#FFFFFF",
1057
- "width": 3,
1058
- "radius": 16
1059
- }
1060
- }
1061
- }
1062
-
1063
- // Subtle gradient-matched styling
1064
- {
1065
- "caption": {
1066
- "color": "#FFFFFF",
1067
- "background": {
1068
- "color": "#FF5733",
1069
- "opacity": 0.6,
1070
- "padding": 25,
1071
- "sideMargin": 24
917
+ "opacity": 0.75
1072
918
  }
1073
919
  }
1074
920
  }
1075
921
  ```
1076
922
 
1077
- #### Fixed vs Adaptive Caption Height
1078
-
1079
- ```json
1080
- {
1081
- "caption": {
1082
- "position": "above",
1083
- "box": {
1084
- "autoSize": false, // Fixed height banner
1085
- "minHeight": 320,
1086
- "maxHeight": 320,
1087
- "verticalAlign": "top" // Pin text to top of banner
1088
- }
1089
- }
1090
- }
1091
- ```
923
+ Tips:
924
+ - Use `appshot build --dry-run --verbose` to inspect computed regions and sizes.
925
+ - Use `appshot style` to pick layout + gradient + caption color.
926
+ - Use `appshot caption` to edit caption text per device.
1092
927
 
1093
- - Set `autoSize: true` plus `minHeight`/`maxHeight` clamps for adaptive banners.
1094
- - Use `verticalAlign: 'top'` to avoid recenters when height changes.
928
+ ### Template Gallery
1095
929
 
1096
- ### Preset Templates Guide
1097
-
1098
- An interactive showcase of all available preset templates is available at `positioning-guide/preset-showcase.html`.
1099
-
1100
- - Visual preview of all 7 professional templates (modern, minimal, bold, elegant, showcase, playful, corporate)
1101
- - Side-by-side comparison across iPhone, iPad, Mac, and Watch devices
1102
- - Shows gradient backgrounds, device positioning, and caption styles
1103
- - Helps you choose the perfect template for your app's style
1104
- - One-line command examples for each preset
1105
-
1106
- Open the file in a browser to explore all available templates before applying them via `appshot preset` or `appshot template`.
930
+ Browse the current v2 template gallery in `template-samples/index.html`.
1107
931
 
1108
932
  #### Caption Autocomplete
1109
933
 
@@ -1558,7 +1382,7 @@ appshot quickstart [options]
1558
1382
  ```
1559
1383
 
1560
1384
  **Options:**
1561
- - `--template <id>` - Template to use (default: modern)
1385
+ - `--template <id>` - Template to use (default: ocean-header)
1562
1386
  - `--caption <text>` - Main caption for screenshots
1563
1387
  - `--no-interactive` - Skip interactive prompts
1564
1388
  - `--force` - Overwrite existing configuration
@@ -1575,10 +1399,48 @@ appshot quickstart [options]
1575
1399
  appshot quickstart
1576
1400
 
1577
1401
  # Quick setup with template
1578
- appshot quickstart --template minimal --caption "My App"
1402
+ appshot quickstart --template pastel-header --caption "My App"
1579
1403
 
1580
1404
  # Non-interactive
1581
- appshot quickstart --template bold --no-interactive
1405
+ appshot quickstart --template noir-footer --no-interactive
1406
+ ```
1407
+
1408
+ ### `appshot wizard` (NEW!)
1409
+
1410
+ One-shot v2 flow that sets layout, captions, translations, enhancement, and build in a single pass.
1411
+
1412
+ ```bash
1413
+ appshot wizard [options]
1414
+ ```
1415
+
1416
+ **Options:**
1417
+ - `--devices <list>` - Comma-separated device list (default: iphone)
1418
+ - `--layout <mode>` - header | footer | screenshot-only
1419
+ - `--template <id>` - Apply a v2 template preset (ocean-header, sunset-footer, clean-screenshot, etc.)
1420
+ - `--caption-source <mode>` - filenames | manual
1421
+ - `--langs <codes>` - Languages to build (default: en,es,fr)
1422
+ - `--model <name>` - OpenAI model (default: gpt-5-mini)
1423
+ - `--enhance` / `--no-enhance` - Toggle caption enhancement (default: on)
1424
+ - `--no-interactive` - Skip prompts (CI-friendly)
1425
+ - `--dry-run` - Print the planned commands only
1426
+ - `--require-ai` - Fail if AI steps are requested but OPENAI_API_KEY is missing
1427
+
1428
+ **What it does:**
1429
+ 1. Ensures v2 config
1430
+ 2. Applies a template (optional) or sets layout
1431
+ 3. Auto-detects screenshot resolution + orientation (when available)
1432
+ 4. Generates captions (auto or manual)
1433
+ 5. Translates (if languages > 1)
1434
+ 6. Enhances captions (optional)
1435
+ 7. Builds screenshots
1436
+
1437
+ **Examples:**
1438
+ ```bash
1439
+ # Interactive wizard
1440
+ appshot wizard
1441
+
1442
+ # Non-interactive with template + translations
1443
+ appshot wizard --no-interactive --devices iphone,ipad --template ocean-header --caption-source filenames --langs en,es,fr
1582
1444
  ```
1583
1445
 
1584
1446
  ### `appshot template` (NEW!)
@@ -1590,7 +1452,7 @@ appshot template [template] [options]
1590
1452
  ```
1591
1453
 
1592
1454
  **Arguments:**
1593
- - `[template]` - Template ID (modern, minimal, bold, elegant, showcase, playful, corporate)
1455
+ - `[template]` - Template ID (ocean-header, sunset-footer, clean-screenshot, pastel-header, noir-footer, silver-header, tropical-header, slate-footer, midnight-header)
1594
1456
 
1595
1457
  **Options:**
1596
1458
  - `--list` - List all available templates
@@ -1606,16 +1468,16 @@ appshot template [template] [options]
1606
1468
  appshot template --list
1607
1469
 
1608
1470
  # Apply template
1609
- appshot template modern
1471
+ appshot template ocean-header
1610
1472
 
1611
1473
  # With caption
1612
- appshot template minimal --caption "Beautiful App"
1474
+ appshot template pastel-header --caption "Beautiful App"
1613
1475
 
1614
1476
  # Preview settings
1615
- appshot template --preview bold
1477
+ appshot template --preview noir-footer
1616
1478
 
1617
1479
  # Device-specific
1618
- appshot template elegant --device iphone
1480
+ appshot template silver-header --device iphone
1619
1481
  ```
1620
1482
 
1621
1483
  ### `appshot preset` (NEW!)
@@ -1627,7 +1489,7 @@ appshot preset <preset-name> [options]
1627
1489
  ```
1628
1490
 
1629
1491
  **Arguments:**
1630
- - `<preset-name>` - Template to use (modern, bold, minimal, elegant, showcase, playful, corporate)
1492
+ - `<preset-name>` - Template to use (ocean-header, sunset-footer, clean-screenshot, pastel-header, noir-footer, silver-header, tropical-header, slate-footer, midnight-header)
1631
1493
 
1632
1494
  **Options:**
1633
1495
  - `-c, --caption <text>` - Add caption to all screenshots
@@ -1640,22 +1502,22 @@ appshot preset <preset-name> [options]
1640
1502
  **Examples:**
1641
1503
  ```bash
1642
1504
  # Quick professional screenshots
1643
- appshot preset modern --caption "Amazing Features"
1505
+ appshot preset ocean-header --caption "Amazing Features"
1644
1506
 
1645
1507
  # Multiple devices
1646
- appshot preset bold --devices iphone,ipad,watch
1508
+ appshot preset noir-footer --devices iphone,ipad,watch
1647
1509
 
1648
1510
  # Multiple languages
1649
- appshot preset minimal --langs en,es,fr,de
1511
+ appshot preset pastel-header --langs en,es,fr,de
1650
1512
 
1651
1513
  # Custom output
1652
- appshot preset elegant --output ./marketing/screenshots
1514
+ appshot preset silver-header --output ./marketing/screenshots
1653
1515
 
1654
1516
  # Preview mode
1655
- appshot preset corporate --dry-run
1517
+ appshot preset slate-footer --dry-run
1656
1518
 
1657
1519
  # Full example
1658
- appshot preset showcase \
1520
+ appshot preset clean-screenshot \
1659
1521
  --caption "Summer Sale!" \
1660
1522
  --devices iphone,ipad \
1661
1523
  --langs en,es,fr \
@@ -1741,6 +1603,9 @@ appshot caption --device <name> [options]
1741
1603
  - `--translate` - Enable real-time AI translation
1742
1604
  - `--langs <codes>` - Target languages for translation
1743
1605
  - `--model <name>` - OpenAI model (default: gpt-4o-mini)
1606
+ - `--auto-caption` - Generate captions from filenames (non-interactive)
1607
+
1608
+ > If OPENAI_API_KEY is missing, translation is skipped with a warning.
1744
1609
 
1745
1610
  **Examples:**
1746
1611
  ```bash
@@ -1750,10 +1615,40 @@ appshot caption --device iphone
1750
1615
  # With translation
1751
1616
  appshot caption --device iphone --translate --langs es,fr,de
1752
1617
 
1618
+ # Auto-generate captions and translate (non-interactive)
1619
+ appshot caption --device iphone --auto-caption --translate --langs es,fr
1620
+
1753
1621
  # Custom model
1754
1622
  appshot caption --device ipad --translate --langs ja --model gpt-5
1755
1623
  ```
1756
1624
 
1625
+ ### `appshot caption enhance`
1626
+
1627
+ Enhance existing captions using OpenAI without translating languages.
1628
+
1629
+ ```bash
1630
+ appshot caption enhance --device <name> [options]
1631
+ ```
1632
+
1633
+ **Options:**
1634
+ - `--device <name>` - Device name (required)
1635
+ - `--lang <code>` - Primary language (default: en)
1636
+ - `--langs <codes>` - Languages to enhance (comma-separated)
1637
+ - `--model <name>` - OpenAI model (default: gpt-5-mini)
1638
+ - `--dry-run` - Preview changes without writing
1639
+
1640
+ **Examples:**
1641
+ ```bash
1642
+ # Enhance English captions
1643
+ appshot caption enhance --device iphone
1644
+
1645
+ # Enhance only French + Japanese captions
1646
+ appshot caption enhance --device ipad --langs fr,ja
1647
+
1648
+ # Explicit GPT-5 model selection
1649
+ appshot caption enhance --device mac --model gpt-5-mini
1650
+ ```
1651
+
1757
1652
  ### `appshot check`
1758
1653
 
1759
1654
  Validate project configuration and assets.
@@ -1782,6 +1677,7 @@ appshot clean [options]
1782
1677
 
1783
1678
  **Options:**
1784
1679
  - `--all` - Remove all generated files including `.appshot/`
1680
+ - `--reset` - Remove generated files but keep `screenshots/`
1785
1681
  - `--history` - Clear caption autocomplete history
1786
1682
  - `--keep-history` - Preserve history when using `--all`
1787
1683
  - `--yes` - Skip confirmation prompt
@@ -1794,6 +1690,9 @@ appshot clean
1794
1690
  # Full reset
1795
1691
  appshot clean --all --yes
1796
1692
 
1693
+ # Reset but keep screenshots
1694
+ appshot clean --reset --yes
1695
+
1797
1696
  # Clear history
1798
1697
  appshot clean --history
1799
1698
  ```
@@ -2022,7 +1921,7 @@ appshot skill --uninstall
2022
1921
 
2023
1922
  **Skill contents:**
2024
1923
  - `SKILL.md` - Main documentation with workflows and scenarios
2025
- - `references/templates.md` - All 8 templates with recommendations by app type
1924
+ - `references/templates.md` - v2 template guidance and recommendations by app type
2026
1925
  - `references/gradients.md` - All 24 gradient presets with colors
2027
1926
  - `references/fonts.md` - All 10 embedded font families
2028
1927
  - `references/troubleshooting.md` - Common errors and solutions
@@ -2151,31 +2050,6 @@ appshot init [options]
2151
2050
  - `screenshots/` directories
2152
2051
  - Default configuration
2153
2052
 
2154
- ### `appshot migrate`
2155
-
2156
- Migrate project structure to latest version.
2157
-
2158
- ```bash
2159
- appshot migrate [options]
2160
- ```
2161
-
2162
- **Options:**
2163
- - `--output-structure` - Migrate to language subdirectory structure
2164
- - `--dry-run` - Preview changes without making them
2165
- - `--lang <code>` - Language to use for migration (default: system language)
2166
-
2167
- **Examples:**
2168
- ```bash
2169
- # Migrate existing screenshots to language subdirectories
2170
- appshot migrate --output-structure
2171
-
2172
- # Preview migration without changes
2173
- appshot migrate --output-structure --dry-run
2174
-
2175
- # Specify target language
2176
- appshot migrate --output-structure --lang fr
2177
- ```
2178
-
2179
2053
  ### `appshot localize`
2180
2054
 
2181
2055
  Batch translate all captions using AI.
@@ -2278,35 +2152,6 @@ This is particularly useful for:
2278
2152
  - Automating screenshot generation pipelines
2279
2153
  - Planning resource allocation for new devices
2280
2154
 
2281
- ### `appshot style`
2282
-
2283
- Configure device styling interactively.
2284
-
2285
- ```bash
2286
- appshot style --device <name> [options]
2287
- ```
2288
-
2289
- **Options:**
2290
- - `--device <name>` - Device name (required)
2291
- - `--reset` - Reset to defaults
2292
-
2293
- **Configures:**
2294
- - Font selection
2295
- - Frame settings
2296
- - Partial frames
2297
- - Frame positioning
2298
- - Frame scaling
2299
- - Caption settings
2300
-
2301
- **Examples:**
2302
- ```bash
2303
- # Configure iPhone
2304
- appshot style --device iphone
2305
-
2306
- # Reset to defaults
2307
- appshot style --device iphone --reset
2308
- ```
2309
-
2310
2155
  ### `appshot validate`
2311
2156
 
2312
2157
  Validate screenshots against App Store requirements.
@@ -2327,132 +2172,33 @@ appshot validate [options]
2327
2172
 
2328
2173
  ## ⚙️ Configuration Reference
2329
2174
 
2330
- ### Complete Schema
2331
-
2332
2175
  ```json
2333
2176
  {
2334
- "output": "./final", // Output directory
2335
- "frames": "./frames", // Frame directory
2336
- "defaultLanguage": "en", // Default language for builds (optional)
2337
- "gradient": {
2338
- "colors": ["#hex1", "#hex2"],
2339
- "direction": "top-bottom" // or diagonal, left-right
2340
- },
2177
+ "version": 2,
2178
+ "layout": "header", // header | footer | screenshot-only
2341
2179
  "caption": {
2342
- "font": "Font Name",
2343
- "fontsize": 64, // Pixels
2344
- "color": "#FFFFFF", // Text color (hex)
2345
- "align": "center", // left, center, right
2346
- "position": "above", // above, below, overlay
2347
- "paddingTop": 100,
2348
- "paddingBottom": 60,
2349
- "background": { // Optional background styling
2350
- "color": "#000000", // Background color (hex)
2351
- "opacity": 0.8, // Transparency (0-1)
2352
- "padding": 20 // Padding around text
2353
- },
2354
- "border": { // Optional border styling
2355
- "color": "#FFFFFF", // Border color (hex)
2356
- "width": 2, // Border thickness (1-10)
2357
- "radius": 12 // Rounded corners (0-30)
2358
- },
2359
- "box": {
2360
- "autoSize": true, // Dynamic height
2361
- "maxLines": 3,
2362
- "lineHeight": 1.4,
2363
- "minHeight": 100,
2364
- "maxHeight": 500
2365
- }
2180
+ "font": "SF Pro Display Bold",
2181
+ "color": "#FFFFFF"
2366
2182
  },
2367
- "devices": {
2368
- "iphone": {
2369
- "input": "./screenshots/iphone",
2370
- "resolution": "1290x2796",
2371
- "autoFrame": true,
2372
- "preferredFrame": "frame-name",
2373
- "partialFrame": false,
2374
- "frameOffset": 25, // Percentage
2375
- "framePosition": "center", // or top, bottom, 0-100
2376
- "frameScale": 0.9, // 0.5-2.0
2377
- "captionFont": "Override",
2378
- "captionSize": 72,
2379
- "captionPosition": "above",
2380
- "captionBox": {
2381
- "autoSize": false,
2382
- "minHeight": 320,
2383
- "maxHeight": 320
2384
- }
2183
+ "background": {
2184
+ "mode": "gradient",
2185
+ "gradient": {
2186
+ "colors": ["#667eea", "#764ba2"],
2187
+ "direction": "top-bottom"
2385
2188
  }
2386
- }
2387
- }
2388
- ```
2389
-
2390
- ### Device Configuration
2391
-
2392
- Each device can override global settings:
2393
-
2394
- ```json
2395
- {
2189
+ },
2396
2190
  "devices": {
2397
- "iphone": {
2398
- // Required
2399
- "input": "./screenshots/iphone",
2400
- "resolution": "1290x2796",
2401
-
2402
- // Frame options
2403
- "autoFrame": true,
2404
- "preferredFrame": "iphone-16-pro-max-portrait",
2405
- "partialFrame": true,
2406
- "frameOffset": 25,
2407
- "framePosition": 40,
2408
- "frameScale": 0.85,
2409
-
2410
- // Caption overrides
2411
- "captionFont": "SF Pro",
2412
- "captionSize": 64,
2413
- "captionPosition": "above",
2414
- "captionBackground": { // Device-specific background
2415
- "color": "#FF5733",
2416
- "opacity": 0.7,
2417
- "padding": 25
2418
- },
2419
- "captionBorder": { // Device-specific border
2420
- "color": "#FFFFFF",
2421
- "width": 3,
2422
- "radius": 16
2423
- },
2424
- "captionBox": {
2425
- "autoSize": false,
2426
- "minHeight": 320,
2427
- "maxHeight": 320,
2428
- "maxLines": 3
2429
- }
2430
- }
2431
- }
2191
+ "iphone": "./screenshots/iphone",
2192
+ "ipad": "./screenshots/ipad",
2193
+ "mac": "./screenshots/mac",
2194
+ "watch": "./screenshots/watch"
2195
+ },
2196
+ "output": "./final",
2197
+ "frames": "./frames"
2432
2198
  }
2433
2199
  ```
2434
2200
 
2435
- ### Fixed Layout Configuration
2436
-
2437
- For consistent screenshots regardless of caption length:
2438
-
2439
- ```json
2440
- {
2441
- "devices": {
2442
- "iphone": {
2443
- "autoFrame": false,
2444
- "preferredFrame": "iphone-16-pro-max-portrait",
2445
- "frameScale": 0.85,
2446
- "framePosition": 40,
2447
- "captionBox": {
2448
- "autoSize": false, // Critical
2449
- "minHeight": 320, // Fixed height
2450
- "maxHeight": 320 // Same as min
2451
- }
2452
- }
2453
- }
2454
- }
2455
- ```
2201
+ > v2 uses fixed layout zones and per-device strategies. See `docs/layout-v2.md`.
2456
2202
 
2457
2203
  ## 🤖 Agent & Automation Guide
2458
2204
 
@@ -2695,26 +2441,25 @@ appshot validate --strict
2695
2441
 
2696
2442
  ### Consistent Marketing Screenshots
2697
2443
 
2698
- For identical device positioning across all screenshots:
2444
+ For identical device positioning across all screenshots (v2 uses fixed zones):
2699
2445
 
2700
2446
  ```json
2701
2447
  {
2702
- "devices": {
2703
- "iphone": {
2704
- "resolution": "1290x2796",
2705
- "autoFrame": false,
2706
- "preferredFrame": "iphone-16-pro-max-portrait",
2707
- "frameScale": 0.85,
2708
- "framePosition": 40,
2709
- "partialFrame": true,
2710
- "frameOffset": 25,
2711
- "captionBox": {
2712
- "autoSize": false,
2713
- "minHeight": 320,
2714
- "maxHeight": 320,
2715
- "maxLines": 3
2716
- }
2448
+ "version": 2,
2449
+ "layout": "header",
2450
+ "caption": {
2451
+ "font": "SF Pro Display Bold",
2452
+ "color": "#FFFFFF"
2453
+ },
2454
+ "background": {
2455
+ "mode": "gradient",
2456
+ "gradient": {
2457
+ "colors": ["#111111", "#333333"],
2458
+ "direction": "top-bottom"
2717
2459
  }
2460
+ },
2461
+ "devices": {
2462
+ "iphone": "./screenshots/iphone"
2718
2463
  }
2719
2464
  }
2720
2465
  ```
@@ -2723,15 +2468,18 @@ For identical device positioning across all screenshots:
2723
2468
 
2724
2469
  ```json
2725
2470
  {
2726
- "gradient": {
2727
- "colors": ["#BrandColor1", "#BrandColor2"],
2728
- "direction": "diagonal"
2471
+ "version": 2,
2472
+ "layout": "header",
2473
+ "background": {
2474
+ "mode": "gradient",
2475
+ "gradient": {
2476
+ "colors": ["#BrandColor1", "#BrandColor2"],
2477
+ "direction": "diagonal"
2478
+ }
2729
2479
  },
2730
2480
  "caption": {
2731
2481
  "font": "Brand Font Name",
2732
- "fontsize": 72,
2733
- "color": "#BrandTextColor",
2734
- "align": "center"
2482
+ "color": "#BrandTextColor"
2735
2483
  }
2736
2484
  }
2737
2485
  ```
@@ -2832,14 +2580,9 @@ appshot caption --device iphone --translate --model gpt-4o-mini
2832
2580
  # Ensure high-res input
2833
2581
  # Minimum: 1242x2208 for iPhone
2834
2582
 
2835
- # Check scaling
2836
- {
2837
- "devices": {
2838
- "iphone": {
2839
- "frameScale": 1.0 // No scaling
2840
- }
2841
- }
2842
- }
2583
+ # v2 uses fixed layout zones and deterministic device scaling.
2584
+ # If output is blurry, use higher-res inputs or match the exact device resolution.
2585
+ # You can also try --no-frame to remove any frame scaling.
2843
2586
  ```
2844
2587
 
2845
2588
  #### Memory Issues with Large Batches
@@ -3030,32 +2773,30 @@ See [CONTRIBUTING.md](CONTRIBUTING.md) for details.
3030
2773
 
3031
2774
  ### Completed ✅
3032
2775
  - [x] Official App Store specifications
3033
- - [x] Caption positioning (above/below/overlay)
3034
- - [x] Partial frame support
2776
+ - [x] Layout v2 fixed zones (header/footer/screenshot-only)
3035
2777
  - [x] Intelligent caption autocomplete
3036
2778
  - [x] Apple Watch optimizations
3037
2779
  - [x] Gradient presets system (24+ gradients)
3038
2780
  - [x] AI-Powered Translations (GPT-4o, GPT-5, o1, o3)
3039
2781
  - [x] Comprehensive Font System (v0.4.0)
3040
2782
  - [x] Frame-Only Mode (v0.8.0)
3041
- - [x] MCP Server with 17 tools (v1.0.0)
3042
- - [x] Claude Code Skill (v1.0.0)
3043
- - [x] Fastlane Export Integration (v0.9.1)
3044
- - [x] Professional Template System (v0.9.0)
3045
- - [x] Auto-Caption from Filenames (v0.9.2)
2783
+ - [x] MCP Server with 17 tools (v2.0.0)
2784
+ - [x] Claude Code Skill (v2.0.0)
2785
+ - [x] Fastlane Export Integration
2786
+ - [x] Professional Template System (v2)
2787
+ - [x] Auto-Caption from Filenames
3046
2788
 
3047
2789
  ### In Progress 🚧
3048
- - [x] Claude Desktop MCP compatibility ✅ (v1.0.1)
2790
+ - [x] Claude Desktop MCP compatibility ✅ (v2.0.0)
3049
2791
  - [ ] Android Device Support (Google Play Store)
3050
2792
 
3051
2793
  ### Planned 📋
3052
2794
  - [ ] GitHub Actions Marketplace Action
3053
2795
  - [ ] CI/CD Templates (Jenkins, GitLab CI, CircleCI)
3054
- - [ ] AI-Powered Caption Enhancement
2796
+ - [ ] AI-Powered Caption Enhancement (OpenAI)
3055
2797
  - [ ] WebP/AVIF Support
3056
2798
  - [ ] Screenshot A/B Testing Framework
3057
2799
  - [ ] Differential Builds
3058
- - [ ] Screenshot A/B Testing Framework
3059
2800
 
3060
2801
  ## 📄 License & Support
3061
2802
 
@@ -3077,7 +2818,7 @@ For security vulnerabilities, please see [SECURITY.md](SECURITY.md).
3077
2818
  ### NPM Package
3078
2819
 
3079
2820
  - 📦 [appshot-cli on NPM](https://www.npmjs.com/package/appshot-cli)
3080
- - 🔄 Latest version: 1.0.1
2821
+ - 🔄 Latest version: 2.0.0
3081
2822
 
3082
2823
  ---
3083
2824