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.
- package/README.md +300 -559
- package/dist/cli.js +5 -3
- package/dist/cli.js.map +1 -1
- package/dist/commands/backgrounds.d.ts.map +1 -1
- package/dist/commands/backgrounds.js +164 -9
- package/dist/commands/backgrounds.js.map +1 -1
- package/dist/commands/build.d.ts.map +1 -1
- package/dist/commands/build.js +154 -54
- package/dist/commands/build.js.map +1 -1
- package/dist/commands/caption.d.ts.map +1 -1
- package/dist/commands/caption.js +350 -6
- package/dist/commands/caption.js.map +1 -1
- package/dist/commands/check.d.ts.map +1 -1
- package/dist/commands/check.js +174 -97
- package/dist/commands/check.js.map +1 -1
- package/dist/commands/clean.d.ts.map +1 -1
- package/dist/commands/clean.js +16 -0
- package/dist/commands/clean.js.map +1 -1
- package/dist/commands/fonts.d.ts.map +1 -1
- package/dist/commands/fonts.js +44 -26
- package/dist/commands/fonts.js.map +1 -1
- package/dist/commands/gradients.d.ts.map +1 -1
- package/dist/commands/gradients.js +32 -15
- package/dist/commands/gradients.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +18 -16
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/migrate.d.ts.map +1 -1
- package/dist/commands/migrate.js +51 -104
- package/dist/commands/migrate.js.map +1 -1
- package/dist/commands/preset.d.ts.map +1 -1
- package/dist/commands/preset.js +16 -14
- package/dist/commands/preset.js.map +1 -1
- package/dist/commands/presets.d.ts.map +1 -1
- package/dist/commands/presets.js +15 -0
- package/dist/commands/presets.js.map +1 -1
- package/dist/commands/quickstart.d.ts.map +1 -1
- package/dist/commands/quickstart.js +40 -53
- package/dist/commands/quickstart.js.map +1 -1
- package/dist/commands/style.d.ts.map +1 -1
- package/dist/commands/style.js +101 -57
- package/dist/commands/style.js.map +1 -1
- package/dist/commands/template.d.ts.map +1 -1
- package/dist/commands/template.js +68 -80
- package/dist/commands/template.js.map +1 -1
- package/dist/commands/validate.d.ts.map +1 -1
- package/dist/commands/validate.js +141 -0
- package/dist/commands/validate.js.map +1 -1
- package/dist/commands/wizard.d.ts +25 -0
- package/dist/commands/wizard.d.ts.map +1 -0
- package/dist/commands/wizard.js +366 -0
- package/dist/commands/wizard.js.map +1 -0
- package/dist/core/compose.d.ts +60 -1
- package/dist/core/compose.d.ts.map +1 -1
- package/dist/core/compose.js +150 -0
- package/dist/core/compose.js.map +1 -1
- package/dist/core/device-strategies/index.d.ts +8 -0
- package/dist/core/device-strategies/index.d.ts.map +1 -0
- package/dist/core/device-strategies/index.js +22 -0
- package/dist/core/device-strategies/index.js.map +1 -0
- package/dist/core/device-strategies/ipad.d.ts +3 -0
- package/dist/core/device-strategies/ipad.d.ts.map +1 -0
- package/dist/core/device-strategies/ipad.js +13 -0
- package/dist/core/device-strategies/ipad.js.map +1 -0
- package/dist/core/device-strategies/iphone.d.ts +3 -0
- package/dist/core/device-strategies/iphone.d.ts.map +1 -0
- package/dist/core/device-strategies/iphone.js +13 -0
- package/dist/core/device-strategies/iphone.js.map +1 -0
- package/dist/core/device-strategies/mac.d.ts +3 -0
- package/dist/core/device-strategies/mac.d.ts.map +1 -0
- package/dist/core/device-strategies/mac.js +13 -0
- package/dist/core/device-strategies/mac.js.map +1 -0
- package/dist/core/device-strategies/watch.d.ts +3 -0
- package/dist/core/device-strategies/watch.d.ts.map +1 -0
- package/dist/core/device-strategies/watch.js +13 -0
- package/dist/core/device-strategies/watch.js.map +1 -0
- package/dist/core/files.d.ts +3 -3
- package/dist/core/files.d.ts.map +1 -1
- package/dist/core/files.js.map +1 -1
- package/dist/core/layouts/device-fit.d.ts +10 -0
- package/dist/core/layouts/device-fit.d.ts.map +1 -0
- package/dist/core/layouts/device-fit.js +18 -0
- package/dist/core/layouts/device-fit.js.map +1 -0
- package/dist/core/layouts/index.d.ts +4 -0
- package/dist/core/layouts/index.d.ts.map +1 -0
- package/dist/core/layouts/index.js +4 -0
- package/dist/core/layouts/index.js.map +1 -0
- package/dist/core/layouts/math.d.ts +23 -0
- package/dist/core/layouts/math.d.ts.map +1 -0
- package/dist/core/layouts/math.js +63 -0
- package/dist/core/layouts/math.js.map +1 -0
- package/dist/core/layouts/text-layout.d.ts +10 -0
- package/dist/core/layouts/text-layout.d.ts.map +1 -0
- package/dist/core/layouts/text-layout.js +60 -0
- package/dist/core/layouts/text-layout.js.map +1 -0
- package/dist/mcp/cli-options.d.ts +15 -0
- package/dist/mcp/cli-options.d.ts.map +1 -1
- package/dist/mcp/cli-options.js +16 -0
- package/dist/mcp/cli-options.js.map +1 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +268 -52
- package/dist/mcp/server.js.map +1 -1
- package/dist/services/caption-enhancement.d.ts +32 -0
- package/dist/services/caption-enhancement.d.ts.map +1 -0
- package/dist/services/caption-enhancement.js +156 -0
- package/dist/services/caption-enhancement.js.map +1 -0
- package/dist/services/compose-bridge.d.ts +3 -3
- package/dist/services/compose-bridge.d.ts.map +1 -1
- package/dist/services/compose-bridge.js +64 -21
- package/dist/services/compose-bridge.js.map +1 -1
- package/dist/services/doctor.d.ts.map +1 -1
- package/dist/services/doctor.js +13 -2
- package/dist/services/doctor.js.map +1 -1
- package/dist/services/translation.d.ts +8 -0
- package/dist/services/translation.d.ts.map +1 -1
- package/dist/services/translation.js +117 -29
- package/dist/services/translation.js.map +1 -1
- package/dist/services/watch-service.d.ts.map +1 -1
- package/dist/services/watch-service.js.map +1 -1
- package/dist/templates/registry.d.ts +18 -59
- package/dist/templates/registry.d.ts.map +1 -1
- package/dist/templates/registry.js +138 -500
- package/dist/templates/registry.js.map +1 -1
- package/dist/types.d.ts +35 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/config-migration.d.ts +7 -0
- package/dist/utils/config-migration.d.ts.map +1 -0
- package/dist/utils/config-migration.js +58 -0
- package/dist/utils/config-migration.js.map +1 -0
- package/dist/utils/config-version.d.ts +5 -0
- package/dist/utils/config-version.d.ts.map +1 -0
- package/dist/utils/config-version.js +10 -0
- package/dist/utils/config-version.js.map +1 -0
- package/dist/utils/language.d.ts +2 -2
- package/dist/utils/language.d.ts.map +1 -1
- package/dist/utils/language.js +1 -1
- package/dist/utils/language.js.map +1 -1
- package/dist/utils/spinner.d.ts +21 -0
- package/dist/utils/spinner.d.ts.map +1 -0
- package/dist/utils/spinner.js +60 -0
- package/dist/utils/spinner.js.map +1 -0
- package/dist/utils/v2-banner.d.ts +2 -0
- package/dist/utils/v2-banner.d.ts.map +1 -0
- package/dist/utils/v2-banner.js +14 -0
- package/dist/utils/v2-banner.js.map +1 -0
- package/dist/utils/validation.d.ts.map +1 -1
- package/dist/utils/validation.js +4 -3
- package/dist/utils/validation.js.map +1 -1
- package/package.json +1 -1
- package/skill/SKILL.md +5 -1
- package/skill/references/templates.md +26 -0
package/README.md
CHANGED
|
@@ -10,19 +10,13 @@
|
|
|
10
10
|
[](https://nodejs.org)
|
|
11
11
|
[](https://opensource.org/licenses/MIT)
|
|
12
12
|
|
|
13
|
-
🆕 **Version
|
|
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
|
-
- **
|
|
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
|
|
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
|
+
|  |  |  |
|
|
71
|
+
| Pastel Header | Noir Footer | Silver Header |
|
|
72
|
+
|  |  |  |
|
|
73
|
+
| Slate Footer | Midnight Header | Tropical Header |
|
|
74
|
+
|  |  |  |
|
|
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
|
|
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
|
|
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: "
|
|
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 →
|
|
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
|
|
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
|
|
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
|
|
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
|
-
"
|
|
378
|
-
"
|
|
379
|
-
"colors": ["#0077BE", "#33CCCC"],
|
|
380
|
-
"direction": "diagonal"
|
|
381
|
-
},
|
|
446
|
+
"version": 2,
|
|
447
|
+
"layout": "header",
|
|
382
448
|
"caption": {
|
|
383
|
-
"font": "SF Pro",
|
|
384
|
-
"
|
|
385
|
-
|
|
386
|
-
|
|
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
|
-
"
|
|
391
|
-
"
|
|
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 (
|
|
480
|
+
### Template System (v2)
|
|
408
481
|
|
|
409
|
-
Appshot
|
|
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
|
|
491
|
+
appshot template ocean-header
|
|
419
492
|
|
|
420
493
|
# Apply template with caption
|
|
421
|
-
appshot template
|
|
494
|
+
appshot template pastel-header --caption "Beautiful & Simple"
|
|
422
495
|
|
|
423
496
|
# Preview template settings
|
|
424
|
-
appshot template --preview
|
|
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
|
-
| **
|
|
437
|
-
| **
|
|
438
|
-
| **
|
|
439
|
-
| **
|
|
440
|
-
| **
|
|
441
|
-
| **
|
|
442
|
-
| **
|
|
443
|
-
| **
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
- **
|
|
463
|
-
- **
|
|
464
|
-
- **
|
|
465
|
-
- **
|
|
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
|
-
#
|
|
475
|
-
appshot template
|
|
476
|
-
# →
|
|
477
|
-
# →
|
|
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
|
-
#
|
|
487
|
-
appshot template
|
|
488
|
-
# →
|
|
489
|
-
# →
|
|
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
|
-
#
|
|
493
|
-
appshot template
|
|
494
|
-
# →
|
|
495
|
-
# →
|
|
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
|
|
552
|
+
appshot template ocean-header
|
|
506
553
|
|
|
507
|
-
# 2.
|
|
508
|
-
appshot style
|
|
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
|
-
|
|
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
|
-
#
|
|
981
|
-
appshot
|
|
982
|
-
# → Select "Below device frame" option
|
|
897
|
+
# Disable frames entirely
|
|
898
|
+
appshot build --no-frame
|
|
983
899
|
|
|
984
|
-
#
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
"
|
|
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.
|
|
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
|
-
|
|
1078
|
-
|
|
1079
|
-
|
|
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
|
-
|
|
1094
|
-
- Use `verticalAlign: 'top'` to avoid recenters when height changes.
|
|
928
|
+
### Template Gallery
|
|
1095
929
|
|
|
1096
|
-
|
|
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:
|
|
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
|
|
1402
|
+
appshot quickstart --template pastel-header --caption "My App"
|
|
1579
1403
|
|
|
1580
1404
|
# Non-interactive
|
|
1581
|
-
appshot quickstart --template
|
|
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 (
|
|
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
|
|
1471
|
+
appshot template ocean-header
|
|
1610
1472
|
|
|
1611
1473
|
# With caption
|
|
1612
|
-
appshot template
|
|
1474
|
+
appshot template pastel-header --caption "Beautiful App"
|
|
1613
1475
|
|
|
1614
1476
|
# Preview settings
|
|
1615
|
-
appshot template --preview
|
|
1477
|
+
appshot template --preview noir-footer
|
|
1616
1478
|
|
|
1617
1479
|
# Device-specific
|
|
1618
|
-
appshot template
|
|
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 (
|
|
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
|
|
1505
|
+
appshot preset ocean-header --caption "Amazing Features"
|
|
1644
1506
|
|
|
1645
1507
|
# Multiple devices
|
|
1646
|
-
appshot preset
|
|
1508
|
+
appshot preset noir-footer --devices iphone,ipad,watch
|
|
1647
1509
|
|
|
1648
1510
|
# Multiple languages
|
|
1649
|
-
appshot preset
|
|
1511
|
+
appshot preset pastel-header --langs en,es,fr,de
|
|
1650
1512
|
|
|
1651
1513
|
# Custom output
|
|
1652
|
-
appshot preset
|
|
1514
|
+
appshot preset silver-header --output ./marketing/screenshots
|
|
1653
1515
|
|
|
1654
1516
|
# Preview mode
|
|
1655
|
-
appshot preset
|
|
1517
|
+
appshot preset slate-footer --dry-run
|
|
1656
1518
|
|
|
1657
1519
|
# Full example
|
|
1658
|
-
appshot preset
|
|
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` -
|
|
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
|
-
"
|
|
2335
|
-
"
|
|
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": "
|
|
2343
|
-
"
|
|
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
|
-
"
|
|
2368
|
-
"
|
|
2369
|
-
|
|
2370
|
-
"
|
|
2371
|
-
"
|
|
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
|
-
|
|
2399
|
-
|
|
2400
|
-
|
|
2401
|
-
|
|
2402
|
-
|
|
2403
|
-
|
|
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
|
-
|
|
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
|
-
"
|
|
2703
|
-
|
|
2704
|
-
|
|
2705
|
-
|
|
2706
|
-
|
|
2707
|
-
|
|
2708
|
-
|
|
2709
|
-
|
|
2710
|
-
|
|
2711
|
-
"
|
|
2712
|
-
|
|
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
|
-
"
|
|
2727
|
-
|
|
2728
|
-
|
|
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
|
-
"
|
|
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
|
-
#
|
|
2836
|
-
|
|
2837
|
-
|
|
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]
|
|
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 (
|
|
3042
|
-
- [x] Claude Code Skill (
|
|
3043
|
-
- [x] Fastlane Export Integration
|
|
3044
|
-
- [x] Professional Template System (
|
|
3045
|
-
- [x] Auto-Caption from Filenames
|
|
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 ✅ (
|
|
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:
|
|
2821
|
+
- 🔄 Latest version: 2.0.0
|
|
3081
2822
|
|
|
3082
2823
|
---
|
|
3083
2824
|
|