appshot-cli 1.0.0 → 1.0.1
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 +23 -23
- package/dist/mcp/server.js +19 -19
- package/package.json +1 -1
- package/skill/SKILL.md +51 -51
- package/skill/references/fonts.md +3 -3
- package/skill/references/gradients.md +2 -2
- package/skill/references/templates.md +14 -14
- package/skill/references/troubleshooting.md +19 -19
package/README.md
CHANGED
|
@@ -232,23 +232,23 @@ Edit `~/Library/Application Support/Claude/claude_desktop_config.json`:
|
|
|
232
232
|
|
|
233
233
|
| Tool | Description |
|
|
234
234
|
|------|-------------|
|
|
235
|
-
| `
|
|
236
|
-
| `
|
|
237
|
-
| `
|
|
238
|
-
| `
|
|
239
|
-
| `
|
|
240
|
-
| `
|
|
241
|
-
| `
|
|
242
|
-
| `
|
|
243
|
-
| `
|
|
244
|
-
| `
|
|
245
|
-
| `
|
|
246
|
-
| `
|
|
247
|
-
| `
|
|
248
|
-
| `
|
|
249
|
-
| `
|
|
250
|
-
| `
|
|
251
|
-
| `
|
|
235
|
+
| `appshot_projectInfo` | Get project metadata (devices, languages, config) |
|
|
236
|
+
| `appshot_init` | Initialize new project structure |
|
|
237
|
+
| `appshot_build` | Generate final screenshots |
|
|
238
|
+
| `appshot_frame` | Apply device frames only (transparent background) |
|
|
239
|
+
| `appshot_captions` | Read/write caption text, auto-generate from filenames |
|
|
240
|
+
| `appshot_gradients` | List/apply gradient presets |
|
|
241
|
+
| `appshot_backgrounds` | Configure background images |
|
|
242
|
+
| `appshot_fonts` | List/validate available fonts |
|
|
243
|
+
| `appshot_config` | Modify device-specific settings |
|
|
244
|
+
| `appshot_validate` | Check App Store compliance |
|
|
245
|
+
| `appshot_specs` | View App Store specifications |
|
|
246
|
+
| `appshot_doctor` | Run system diagnostics |
|
|
247
|
+
| `appshot_presets` | Manage App Store presets |
|
|
248
|
+
| `appshot_localize` | AI-powered caption translation |
|
|
249
|
+
| `appshot_languages` | Discover available translations |
|
|
250
|
+
| `appshot_export` | Export for Fastlane |
|
|
251
|
+
| `appshot_clean` | Remove generated files |
|
|
252
252
|
|
|
253
253
|
### Example: Agent Workflow
|
|
254
254
|
|
|
@@ -1991,11 +1991,11 @@ appshot mcp
|
|
|
1991
1991
|
|
|
1992
1992
|
**Tools exposed:**
|
|
1993
1993
|
|
|
1994
|
-
- `
|
|
1995
|
-
- `
|
|
1996
|
-
- `
|
|
1997
|
-
- `
|
|
1998
|
-
- `
|
|
1994
|
+
- `appshot_projectInfo` – Returns `appshot_json` metadata (devices, languages, templates).
|
|
1995
|
+
- `appshot_doctor` – Runs diagnostics and returns console output.
|
|
1996
|
+
- `appshot_build` – Wraps `appshot build` with options for devices, languages, and rendering flags.
|
|
1997
|
+
- `appshot_frame` – Batch frames screenshots (including `--frame-tone neutral` support).
|
|
1998
|
+
- `appshot_export` – Runs the Fastlane export pipeline.
|
|
1999
1999
|
|
|
2000
2000
|
The server uses the stdio transport, so you can register it in Anthropic Desktop by pointing at `appshot mcp` (working directory = your Appshot project). The same entry point works for any MCP-compatible agent or automation.
|
|
2001
2001
|
|
|
@@ -3081,7 +3081,7 @@ For security vulnerabilities, please see [SECURITY.md](SECURITY.md).
|
|
|
3081
3081
|
### NPM Package
|
|
3082
3082
|
|
|
3083
3083
|
- 📦 [appshot-cli on NPM](https://www.npmjs.com/package/appshot-cli)
|
|
3084
|
-
- 🔄 Latest version: 1.0.
|
|
3084
|
+
- 🔄 Latest version: 1.0.1
|
|
3085
3085
|
|
|
3086
3086
|
---
|
|
3087
3087
|
|
package/dist/mcp/server.js
CHANGED
|
@@ -147,7 +147,7 @@ function registerProjectInfoTool(server) {
|
|
|
147
147
|
const inputSchema = z.object({
|
|
148
148
|
configPath: z.string().optional().describe('Path to appshot.json config file')
|
|
149
149
|
});
|
|
150
|
-
server.registerTool('
|
|
150
|
+
server.registerTool('appshot_projectInfo', {
|
|
151
151
|
title: 'Read project configuration',
|
|
152
152
|
description: 'Loads appshot.json and returns device + language metadata',
|
|
153
153
|
inputSchema,
|
|
@@ -183,7 +183,7 @@ function registerProjectInfoTool(server) {
|
|
|
183
183
|
});
|
|
184
184
|
}
|
|
185
185
|
function registerDoctorTool(server) {
|
|
186
|
-
server.registerTool('
|
|
186
|
+
server.registerTool('appshot_doctor', {
|
|
187
187
|
title: 'Run doctor checks',
|
|
188
188
|
description: 'Runs appshot doctor to validate the current project'
|
|
189
189
|
}, async () => {
|
|
@@ -211,7 +211,7 @@ function registerBuildTool(server) {
|
|
|
211
211
|
verbose: z.boolean().optional().describe('Show detailed output'),
|
|
212
212
|
concurrency: z.number().int().positive().optional().describe('Number of parallel builds')
|
|
213
213
|
});
|
|
214
|
-
server.registerTool('
|
|
214
|
+
server.registerTool('appshot_build', {
|
|
215
215
|
title: 'Run appshot build',
|
|
216
216
|
description: 'Generates screenshots for the configured devices and languages',
|
|
217
217
|
inputSchema
|
|
@@ -249,7 +249,7 @@ function registerFrameTool(server) {
|
|
|
249
249
|
verbose: z.boolean().optional().describe('Show detailed output'),
|
|
250
250
|
frameTone: z.enum(['original', 'neutral']).optional().describe('Frame color tone')
|
|
251
251
|
});
|
|
252
|
-
server.registerTool('
|
|
252
|
+
server.registerTool('appshot_frame', {
|
|
253
253
|
title: 'Apply device frames',
|
|
254
254
|
description: 'Wraps the frame CLI for MCP clients',
|
|
255
255
|
inputSchema
|
|
@@ -277,7 +277,7 @@ function registerExportTool(server) {
|
|
|
277
277
|
json: z.boolean().optional().describe('Output as JSON'),
|
|
278
278
|
configPath: z.string().optional().describe('Path to appshot.json config file')
|
|
279
279
|
});
|
|
280
|
-
server.registerTool('
|
|
280
|
+
server.registerTool('appshot_export', {
|
|
281
281
|
title: 'Export screenshots',
|
|
282
282
|
description: 'Runs appshot export fastlane with optional filters',
|
|
283
283
|
inputSchema
|
|
@@ -292,7 +292,7 @@ function registerInitTool(server) {
|
|
|
292
292
|
force: z.boolean().optional().describe('Overwrite existing configuration files'),
|
|
293
293
|
projectDir: z.string().optional().describe('Directory to initialize the project in')
|
|
294
294
|
});
|
|
295
|
-
server.registerTool('
|
|
295
|
+
server.registerTool('appshot_init', {
|
|
296
296
|
title: 'Initialize project',
|
|
297
297
|
description: 'Scaffold a new appshot project with default configuration',
|
|
298
298
|
inputSchema
|
|
@@ -310,7 +310,7 @@ function registerSpecsTool(server) {
|
|
|
310
310
|
device: z.string().optional().describe('Filter by device type: iphone, ipad, mac, watch, appletv, visionpro'),
|
|
311
311
|
required: z.boolean().optional().describe('Show only required App Store presets')
|
|
312
312
|
});
|
|
313
|
-
server.registerTool('
|
|
313
|
+
server.registerTool('appshot_specs', {
|
|
314
314
|
title: 'App Store specifications',
|
|
315
315
|
description: 'Get Apple App Store screenshot requirements and specifications (returns JSON)',
|
|
316
316
|
inputSchema
|
|
@@ -325,7 +325,7 @@ function registerValidateTool(server) {
|
|
|
325
325
|
strict: z.boolean().optional().describe('Validate against required presets only'),
|
|
326
326
|
fix: z.boolean().optional().describe('Suggest fixes for invalid screenshots')
|
|
327
327
|
});
|
|
328
|
-
server.registerTool('
|
|
328
|
+
server.registerTool('appshot_validate', {
|
|
329
329
|
title: 'Validate screenshots',
|
|
330
330
|
description: 'Validate screenshots against App Store requirements (returns JSON)',
|
|
331
331
|
inputSchema
|
|
@@ -343,7 +343,7 @@ function registerCleanTool(server) {
|
|
|
343
343
|
keepHistory: z.boolean().optional().describe('Keep history when using --all'),
|
|
344
344
|
configPath: z.string().optional().describe('Path to appshot config file or project directory')
|
|
345
345
|
});
|
|
346
|
-
server.registerTool('
|
|
346
|
+
server.registerTool('appshot_clean', {
|
|
347
347
|
title: 'Clean generated files',
|
|
348
348
|
description: 'Remove generated screenshots and optionally clear caches (auto-confirms)',
|
|
349
349
|
inputSchema
|
|
@@ -368,7 +368,7 @@ function registerLocalizeTool(server) {
|
|
|
368
368
|
sourceLanguage: z.string().optional().describe('Source language code (default: en)'),
|
|
369
369
|
overwrite: z.boolean().optional().describe('Overwrite existing translations')
|
|
370
370
|
});
|
|
371
|
-
server.registerTool('
|
|
371
|
+
server.registerTool('appshot_localize', {
|
|
372
372
|
title: 'Batch translate captions',
|
|
373
373
|
description: 'Translate captions to multiple languages using AI. Requires OPENAI_API_KEY environment variable.',
|
|
374
374
|
inputSchema
|
|
@@ -386,7 +386,7 @@ function registerPresetsTool(server) {
|
|
|
386
386
|
generate: z.array(z.string()).optional().describe('Generate config for specific preset IDs'),
|
|
387
387
|
outputFile: z.string().optional().describe('Output file for generated config')
|
|
388
388
|
});
|
|
389
|
-
server.registerTool('
|
|
389
|
+
server.registerTool('appshot_presets', {
|
|
390
390
|
title: 'List presets',
|
|
391
391
|
description: 'List available App Store presets and generate configuration (returns JSON)',
|
|
392
392
|
inputSchema
|
|
@@ -401,7 +401,7 @@ function registerLanguagesTool(server) {
|
|
|
401
401
|
device: z.string().optional().describe('Specific device to check (iphone/ipad/mac/watch), or omit for all devices'),
|
|
402
402
|
configPath: z.string().optional().describe('Path to appshot config file or project directory')
|
|
403
403
|
});
|
|
404
|
-
server.registerTool('
|
|
404
|
+
server.registerTool('appshot_languages', {
|
|
405
405
|
title: 'Discover available languages',
|
|
406
406
|
description: 'Scans caption files to discover which languages have translations available',
|
|
407
407
|
inputSchema
|
|
@@ -458,7 +458,7 @@ function registerConfigTool(server) {
|
|
|
458
458
|
marginTop: z.number().optional().describe('Top margin for caption box'),
|
|
459
459
|
marginBottom: z.number().optional().describe('Bottom margin for caption box')
|
|
460
460
|
});
|
|
461
|
-
server.registerTool('
|
|
461
|
+
server.registerTool('appshot_config', {
|
|
462
462
|
title: 'Update device configuration',
|
|
463
463
|
description: 'Modifies device-specific settings in the appshot config file',
|
|
464
464
|
inputSchema
|
|
@@ -570,7 +570,7 @@ function registerCaptionsTool(server) {
|
|
|
570
570
|
captions: z.string().optional().describe('JSON object of filename:caption pairs for bulk-set (e.g., {"file1.png": "Caption 1", "file2.png": "Caption 2"})'),
|
|
571
571
|
overwrite: z.boolean().optional().describe('Overwrite existing captions (for auto action, default: false)')
|
|
572
572
|
});
|
|
573
|
-
server.registerTool('
|
|
573
|
+
server.registerTool('appshot_captions', {
|
|
574
574
|
title: 'Manage captions',
|
|
575
575
|
description: 'Read and write caption text for screenshots',
|
|
576
576
|
inputSchema
|
|
@@ -845,7 +845,7 @@ function registerGradientsTool(server) {
|
|
|
845
845
|
category: z.enum(['warm', 'cool', 'vibrant', 'subtle', 'monochrome', 'brand']).optional().describe('Filter by category (for list action)'),
|
|
846
846
|
preset: z.string().optional().describe('Preset ID to apply (required for apply action)')
|
|
847
847
|
});
|
|
848
|
-
server.registerTool('
|
|
848
|
+
server.registerTool('appshot_gradients', {
|
|
849
849
|
title: 'Manage gradients',
|
|
850
850
|
description: 'List available gradient presets and apply them to config',
|
|
851
851
|
inputSchema
|
|
@@ -948,7 +948,7 @@ function registerBackgroundsTool(server) {
|
|
|
948
948
|
image: z.string().optional().describe('Path to background image (for set action)'),
|
|
949
949
|
fit: z.enum(['cover', 'contain', 'fill', 'scale-down']).optional().describe('Background fit mode (for set action)')
|
|
950
950
|
});
|
|
951
|
-
server.registerTool('
|
|
951
|
+
server.registerTool('appshot_backgrounds', {
|
|
952
952
|
title: 'Manage backgrounds',
|
|
953
953
|
description: 'Configure background images for screenshots',
|
|
954
954
|
inputSchema
|
|
@@ -1081,7 +1081,7 @@ function registerFontsTool(server) {
|
|
|
1081
1081
|
action: z.enum(['list', 'validate', 'embedded']).describe('Action to perform'),
|
|
1082
1082
|
font: z.string().optional().describe('Font name to validate (required for validate action)')
|
|
1083
1083
|
});
|
|
1084
|
-
server.registerTool('
|
|
1084
|
+
server.registerTool('appshot_fonts', {
|
|
1085
1085
|
title: 'Manage fonts',
|
|
1086
1086
|
description: 'List available fonts and check font availability',
|
|
1087
1087
|
inputSchema
|
|
@@ -1112,7 +1112,7 @@ function registerTemplateTool(server) {
|
|
|
1112
1112
|
dryRun: z.boolean().optional().describe('Preview changes without applying'),
|
|
1113
1113
|
projectDir: z.string().optional().describe('Project directory to apply template to')
|
|
1114
1114
|
});
|
|
1115
|
-
server.registerTool('
|
|
1115
|
+
server.registerTool('appshot_template', {
|
|
1116
1116
|
title: 'Apply template',
|
|
1117
1117
|
description: 'Apply professional screenshot templates for quick App Store setup',
|
|
1118
1118
|
inputSchema
|
|
@@ -1133,7 +1133,7 @@ function registerQuickstartTool(server) {
|
|
|
1133
1133
|
force: z.boolean().optional().describe('Overwrite existing configuration'),
|
|
1134
1134
|
projectDir: z.string().optional().describe('Directory to initialize the project in')
|
|
1135
1135
|
});
|
|
1136
|
-
server.registerTool('
|
|
1136
|
+
server.registerTool('appshot_quickstart', {
|
|
1137
1137
|
title: 'Quickstart',
|
|
1138
1138
|
description: 'Get started with App Store screenshots in seconds - initializes project, applies template, sets up captions',
|
|
1139
1139
|
inputSchema
|
package/package.json
CHANGED
package/skill/SKILL.md
CHANGED
|
@@ -13,29 +13,29 @@ AppShot generates App Store-ready screenshots with device frames, gradient backg
|
|
|
13
13
|
|
|
14
14
|
| Tool | Purpose |
|
|
15
15
|
|------|---------|
|
|
16
|
-
| `
|
|
17
|
-
| `
|
|
18
|
-
| `
|
|
19
|
-
| `
|
|
20
|
-
| `
|
|
21
|
-
| `
|
|
22
|
-
| `
|
|
23
|
-
| `
|
|
24
|
-
| `
|
|
25
|
-
| `
|
|
26
|
-
| `
|
|
27
|
-
| `
|
|
28
|
-
| `
|
|
29
|
-
| `
|
|
30
|
-
| `
|
|
31
|
-
| `
|
|
16
|
+
| `appshot_init` | Initialize new project structure |
|
|
17
|
+
| `appshot_captions` | Read/write/auto-generate caption text |
|
|
18
|
+
| `appshot_gradients` | List/apply gradient presets |
|
|
19
|
+
| `appshot_backgrounds` | Configure background images |
|
|
20
|
+
| `appshot_fonts` | List/validate available fonts |
|
|
21
|
+
| `appshot_config` | Modify device-specific settings |
|
|
22
|
+
| `appshot_build` | Generate final screenshots |
|
|
23
|
+
| `appshot_validate` | Check App Store compliance |
|
|
24
|
+
| `appshot_specs` | View App Store specifications |
|
|
25
|
+
| `appshot_doctor` | System diagnostics |
|
|
26
|
+
| `appshot_presets` | App Store preset configurations |
|
|
27
|
+
| `appshot_localize` | AI-powered caption translation |
|
|
28
|
+
| `appshot_languages` | Discover available translations |
|
|
29
|
+
| `appshot_frame` | Apply device frames only |
|
|
30
|
+
| `appshot_export` | Export for Fastlane |
|
|
31
|
+
| `appshot_clean` | Remove generated files |
|
|
32
32
|
|
|
33
33
|
## Project Workflow
|
|
34
34
|
|
|
35
35
|
### 1. Initialize Project
|
|
36
36
|
|
|
37
37
|
```
|
|
38
|
-
|
|
38
|
+
appshot_init with force: true
|
|
39
39
|
```
|
|
40
40
|
|
|
41
41
|
Creates the project structure:
|
|
@@ -59,131 +59,131 @@ final/ # Generated output
|
|
|
59
59
|
|
|
60
60
|
List existing captions:
|
|
61
61
|
```
|
|
62
|
-
|
|
62
|
+
appshot_captions with device: "iphone", action: "list"
|
|
63
63
|
```
|
|
64
64
|
|
|
65
65
|
Set a caption:
|
|
66
66
|
```
|
|
67
|
-
|
|
67
|
+
appshot_captions with device: "iphone", action: "set", filename: "home.png", caption: "Welcome Home", language: "en"
|
|
68
68
|
```
|
|
69
69
|
|
|
70
70
|
Auto-generate captions from filenames:
|
|
71
71
|
```
|
|
72
|
-
|
|
72
|
+
appshot_captions with device: "iphone", action: "auto"
|
|
73
73
|
```
|
|
74
74
|
This converts filenames like `home-screen.png` → "Home Screen"
|
|
75
75
|
|
|
76
76
|
Bulk set multiple captions:
|
|
77
77
|
```
|
|
78
|
-
|
|
78
|
+
appshot_captions with device: "iphone", action: "bulk-set", captions: "{\"home.png\": \"Welcome\", \"settings.png\": \"Settings\"}"
|
|
79
79
|
```
|
|
80
80
|
|
|
81
81
|
Add translations:
|
|
82
82
|
```
|
|
83
|
-
|
|
83
|
+
appshot_captions with device: "iphone", action: "set", filename: "home.png", caption: "Bienvenido", language: "es"
|
|
84
84
|
```
|
|
85
85
|
|
|
86
86
|
### 3. Apply Styling
|
|
87
87
|
|
|
88
88
|
List gradient presets:
|
|
89
89
|
```
|
|
90
|
-
|
|
90
|
+
appshot_gradients with action: "list"
|
|
91
91
|
```
|
|
92
92
|
|
|
93
93
|
Apply a gradient:
|
|
94
94
|
```
|
|
95
|
-
|
|
95
|
+
appshot_gradients with action: "apply", preset: "ocean"
|
|
96
96
|
```
|
|
97
97
|
|
|
98
98
|
Set background image:
|
|
99
99
|
```
|
|
100
|
-
|
|
100
|
+
appshot_backgrounds with action: "set", image: "./bg.jpg", fit: "cover"
|
|
101
101
|
```
|
|
102
102
|
|
|
103
103
|
Configure device settings:
|
|
104
104
|
```
|
|
105
|
-
|
|
105
|
+
appshot_config with device: "iphone", frameScale: 0.85, captionPosition: "above"
|
|
106
106
|
```
|
|
107
107
|
|
|
108
108
|
### 4. Build Screenshots
|
|
109
109
|
|
|
110
110
|
Build all devices and languages:
|
|
111
111
|
```
|
|
112
|
-
|
|
112
|
+
appshot_build
|
|
113
113
|
```
|
|
114
114
|
|
|
115
115
|
Build specific devices:
|
|
116
116
|
```
|
|
117
|
-
|
|
117
|
+
appshot_build with devices: ["iphone", "ipad"]
|
|
118
118
|
```
|
|
119
119
|
|
|
120
120
|
Build with App Store presets:
|
|
121
121
|
```
|
|
122
|
-
|
|
122
|
+
appshot_build with presets: ["iphone-6-9", "ipad-13"]
|
|
123
123
|
```
|
|
124
124
|
|
|
125
125
|
### 5. Frame Only (No Background)
|
|
126
126
|
|
|
127
127
|
Apply device frames without gradients or captions:
|
|
128
128
|
```
|
|
129
|
-
|
|
129
|
+
appshot_frame with input: "./screenshots/iphone"
|
|
130
130
|
```
|
|
131
131
|
|
|
132
132
|
Frame with output directory:
|
|
133
133
|
```
|
|
134
|
-
|
|
134
|
+
appshot_frame with input: "./screenshots/iphone", outputDir: "./framed"
|
|
135
135
|
```
|
|
136
136
|
|
|
137
137
|
Frame recursively:
|
|
138
138
|
```
|
|
139
|
-
|
|
139
|
+
appshot_frame with input: "./screenshots", recursive: true
|
|
140
140
|
```
|
|
141
141
|
|
|
142
142
|
Preview what would be framed:
|
|
143
143
|
```
|
|
144
|
-
|
|
144
|
+
appshot_frame with input: "./screenshots/iphone", dryRun: true
|
|
145
145
|
```
|
|
146
146
|
|
|
147
147
|
### 6. Validate
|
|
148
148
|
|
|
149
149
|
Check App Store compliance:
|
|
150
150
|
```
|
|
151
|
-
|
|
151
|
+
appshot_validate
|
|
152
152
|
```
|
|
153
153
|
|
|
154
154
|
## Common Scenarios
|
|
155
155
|
|
|
156
156
|
### New iPhone-Only Project
|
|
157
157
|
|
|
158
|
-
1. `
|
|
158
|
+
1. `appshot_init` with `force: true`
|
|
159
159
|
2. User adds screenshots to `screenshots/iphone/`
|
|
160
|
-
3. `
|
|
161
|
-
4. `
|
|
162
|
-
5. `
|
|
160
|
+
3. `appshot_captions` - set captions for each screenshot
|
|
161
|
+
4. `appshot_gradients` - apply preferred gradient
|
|
162
|
+
5. `appshot_build` with `devices: ["iphone"]`
|
|
163
163
|
|
|
164
164
|
### Multi-Language App Store Submission
|
|
165
165
|
|
|
166
|
-
1. `
|
|
167
|
-
2. `
|
|
168
|
-
3. `
|
|
169
|
-
4. `
|
|
170
|
-
5. `
|
|
166
|
+
1. `appshot_init` with `force: true`
|
|
167
|
+
2. `appshot_captions` - add English captions
|
|
168
|
+
3. `appshot_localize` with `languages: ["es", "fr", "de", "ja"]`
|
|
169
|
+
4. `appshot_build` with `languages: ["en", "es", "fr", "de", "ja"]`
|
|
170
|
+
5. `appshot_validate`
|
|
171
171
|
|
|
172
172
|
### Quick Styling Update
|
|
173
173
|
|
|
174
|
-
1. `
|
|
175
|
-
2. `
|
|
176
|
-
3. `
|
|
174
|
+
1. `appshot_gradients` with `action: "list"` to see options
|
|
175
|
+
2. `appshot_gradients` with `action: "apply", preset: "sunset"`
|
|
176
|
+
3. `appshot_build`
|
|
177
177
|
|
|
178
178
|
### Quick Auto-Caption Project
|
|
179
179
|
|
|
180
180
|
When filenames are descriptive (e.g., `home-screen.png`, `settings_page.png`):
|
|
181
181
|
|
|
182
|
-
1. `
|
|
182
|
+
1. `appshot_init` with `force: true`
|
|
183
183
|
2. User adds screenshots to `screenshots/iphone/`
|
|
184
|
-
3. `
|
|
185
|
-
4. `
|
|
186
|
-
5. `
|
|
184
|
+
3. `appshot_captions` with `device: "iphone", action: "auto"`
|
|
185
|
+
4. `appshot_gradients` with `action: "apply", preset: "ocean"`
|
|
186
|
+
5. `appshot_build` with `devices: ["iphone"]`
|
|
187
187
|
|
|
188
188
|
Captions are auto-generated from filenames (hyphens/underscores become spaces, title case applied).
|
|
189
189
|
|
|
@@ -191,7 +191,7 @@ Captions are auto-generated from filenames (hyphens/underscores become spaces, t
|
|
|
191
191
|
|
|
192
192
|
For quick device mockups without backgrounds or captions:
|
|
193
193
|
|
|
194
|
-
1. `
|
|
194
|
+
1. `appshot_frame` with `input: "./screenshots/iphone", outputDir: "./framed"`
|
|
195
195
|
|
|
196
196
|
Output has transparent background - perfect for presentations, design comps, or overlaying on custom backgrounds.
|
|
197
197
|
|
|
@@ -41,15 +41,15 @@
|
|
|
41
41
|
|
|
42
42
|
List embedded fonts:
|
|
43
43
|
```
|
|
44
|
-
|
|
44
|
+
appshot_fonts with action: "embedded"
|
|
45
45
|
```
|
|
46
46
|
|
|
47
47
|
Validate a font:
|
|
48
48
|
```
|
|
49
|
-
|
|
49
|
+
appshot_fonts with action: "validate", font: "Inter"
|
|
50
50
|
```
|
|
51
51
|
|
|
52
52
|
Configure font in project:
|
|
53
53
|
```
|
|
54
|
-
|
|
54
|
+
appshot_config with device: "iphone", font: "Montserrat Bold"
|
|
55
55
|
```
|
|
@@ -60,10 +60,10 @@
|
|
|
60
60
|
|
|
61
61
|
To apply a gradient:
|
|
62
62
|
```
|
|
63
|
-
|
|
63
|
+
appshot_gradients with action: "apply", preset: "<id>"
|
|
64
64
|
```
|
|
65
65
|
|
|
66
66
|
To list gradients by category:
|
|
67
67
|
```
|
|
68
|
-
|
|
68
|
+
appshot_gradients with action: "list", category: "warm"
|
|
69
69
|
```
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
- **Best for:** Consumer apps, social apps, general-purpose
|
|
28
28
|
|
|
29
29
|
```
|
|
30
|
-
|
|
30
|
+
appshot_template with template: "modern"
|
|
31
31
|
```
|
|
32
32
|
|
|
33
33
|
---
|
|
@@ -42,7 +42,7 @@ appshot.template with template: "modern"
|
|
|
42
42
|
- **Best for:** Health apps, wellness, lifestyle
|
|
43
43
|
|
|
44
44
|
```
|
|
45
|
-
|
|
45
|
+
appshot_template with template: "minimal"
|
|
46
46
|
```
|
|
47
47
|
|
|
48
48
|
---
|
|
@@ -57,7 +57,7 @@ appshot.template with template: "minimal"
|
|
|
57
57
|
- **Best for:** Finance apps, security, premium features
|
|
58
58
|
|
|
59
59
|
```
|
|
60
|
-
|
|
60
|
+
appshot_template with template: "bold"
|
|
61
61
|
```
|
|
62
62
|
|
|
63
63
|
---
|
|
@@ -72,7 +72,7 @@ appshot.template with template: "bold"
|
|
|
72
72
|
- **Best for:** Developer tools, CLI apps, open source projects
|
|
73
73
|
|
|
74
74
|
```
|
|
75
|
-
|
|
75
|
+
appshot_template with template: "nerdy"
|
|
76
76
|
```
|
|
77
77
|
|
|
78
78
|
**Note:** Place a grid/terminal background image at `screenshots/iphone/background.png` for best results.
|
|
@@ -89,7 +89,7 @@ appshot.template with template: "nerdy"
|
|
|
89
89
|
- **Best for:** Luxury apps, premium services, professional tools
|
|
90
90
|
|
|
91
91
|
```
|
|
92
|
-
|
|
92
|
+
appshot_template with template: "elegant"
|
|
93
93
|
```
|
|
94
94
|
|
|
95
95
|
---
|
|
@@ -104,7 +104,7 @@ appshot.template with template: "elegant"
|
|
|
104
104
|
- **Best for:** Apps with strong visual branding, custom marketing assets
|
|
105
105
|
|
|
106
106
|
```
|
|
107
|
-
|
|
107
|
+
appshot_template with template: "showcase"
|
|
108
108
|
```
|
|
109
109
|
|
|
110
110
|
**Tip:** Add your branded background to `screenshots/iphone/background.png`
|
|
@@ -121,7 +121,7 @@ appshot.template with template: "showcase"
|
|
|
121
121
|
- **Best for:** Games, kids apps, entertainment, social
|
|
122
122
|
|
|
123
123
|
```
|
|
124
|
-
|
|
124
|
+
appshot_template with template: "playful"
|
|
125
125
|
```
|
|
126
126
|
|
|
127
127
|
---
|
|
@@ -136,7 +136,7 @@ appshot.template with template: "playful"
|
|
|
136
136
|
- **Best for:** Business apps, B2B, enterprise, productivity
|
|
137
137
|
|
|
138
138
|
```
|
|
139
|
-
|
|
139
|
+
appshot_template with template: "corporate"
|
|
140
140
|
```
|
|
141
141
|
|
|
142
142
|
---
|
|
@@ -145,13 +145,13 @@ appshot.template with template: "corporate"
|
|
|
145
145
|
|
|
146
146
|
```
|
|
147
147
|
# Apply a template
|
|
148
|
-
|
|
148
|
+
appshot_template with template: "nerdy"
|
|
149
149
|
|
|
150
150
|
# Preview without applying
|
|
151
|
-
|
|
151
|
+
appshot_template with preview: "modern"
|
|
152
152
|
|
|
153
153
|
# List all templates
|
|
154
|
-
|
|
154
|
+
appshot_template with list: true
|
|
155
155
|
```
|
|
156
156
|
|
|
157
157
|
## Customizing After Template
|
|
@@ -160,11 +160,11 @@ Templates set a starting point. Customize further with:
|
|
|
160
160
|
|
|
161
161
|
```
|
|
162
162
|
# Change gradient
|
|
163
|
-
|
|
163
|
+
appshot_gradients with action: "apply", preset: "sunset"
|
|
164
164
|
|
|
165
165
|
# Adjust device positioning
|
|
166
|
-
|
|
166
|
+
appshot_config with device: "iphone", frameScale: 0.85, framePosition: 30
|
|
167
167
|
|
|
168
168
|
# Change caption position
|
|
169
|
-
|
|
169
|
+
appshot_config with device: "iphone", captionPosition: "below"
|
|
170
170
|
```
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Troubleshooting Guide
|
|
2
2
|
|
|
3
|
-
Common issues and solutions when using
|
|
3
|
+
Common issues and solutions when using appshot_
|
|
4
4
|
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -12,7 +12,7 @@ Common issues and solutions when using appshot.
|
|
|
12
12
|
|
|
13
13
|
**Solution:**
|
|
14
14
|
```
|
|
15
|
-
|
|
15
|
+
appshot_init with force: true
|
|
16
16
|
```
|
|
17
17
|
|
|
18
18
|
### "Input directory not found"
|
|
@@ -38,13 +38,13 @@ appshot.init with force: true
|
|
|
38
38
|
**Solutions:**
|
|
39
39
|
```
|
|
40
40
|
# Check current captions
|
|
41
|
-
|
|
41
|
+
appshot_captions with device: "iphone", action: "list"
|
|
42
42
|
|
|
43
43
|
# Auto-generate from filenames
|
|
44
|
-
|
|
44
|
+
appshot_captions with device: "iphone", action: "auto"
|
|
45
45
|
|
|
46
46
|
# Set manually
|
|
47
|
-
|
|
47
|
+
appshot_captions with device: "iphone", action: "set", filename: "screen.png", caption: "My Caption"
|
|
48
48
|
```
|
|
49
49
|
|
|
50
50
|
### Caption text cut off
|
|
@@ -55,7 +55,7 @@ appshot.captions with device: "iphone", action: "set", filename: "screen.png", c
|
|
|
55
55
|
1. Use shorter text (2-3 words ideal)
|
|
56
56
|
2. Adjust caption box settings:
|
|
57
57
|
```
|
|
58
|
-
|
|
58
|
+
appshot_config with device: "iphone", captionPosition: "above"
|
|
59
59
|
```
|
|
60
60
|
|
|
61
61
|
### Wrong font displaying
|
|
@@ -65,10 +65,10 @@ appshot.config with device: "iphone", captionPosition: "above"
|
|
|
65
65
|
**Solution:**
|
|
66
66
|
```
|
|
67
67
|
# Check font availability
|
|
68
|
-
|
|
68
|
+
appshot_fonts with action: "validate", font: "SF Pro Display"
|
|
69
69
|
|
|
70
70
|
# List embedded fonts (always available)
|
|
71
|
-
|
|
71
|
+
appshot_fonts with action: "embedded"
|
|
72
72
|
```
|
|
73
73
|
|
|
74
74
|
**Embedded fonts:** Inter, Poppins, Montserrat, DM Sans, Roboto, Open Sans, Lato, Work Sans, JetBrains Mono, Fira Code
|
|
@@ -109,7 +109,7 @@ appshot.fonts with action: "embedded"
|
|
|
109
109
|
**Solutions:**
|
|
110
110
|
```
|
|
111
111
|
# Run diagnostics
|
|
112
|
-
|
|
112
|
+
appshot_doctor
|
|
113
113
|
```
|
|
114
114
|
|
|
115
115
|
### "Failed to load screenshot"
|
|
@@ -126,13 +126,13 @@ appshot.doctor
|
|
|
126
126
|
**Solutions:**
|
|
127
127
|
```
|
|
128
128
|
# Reduce concurrency on low-memory systems
|
|
129
|
-
|
|
129
|
+
appshot_build with concurrency: 2
|
|
130
130
|
|
|
131
131
|
# Build specific devices only
|
|
132
|
-
|
|
132
|
+
appshot_build with devices: ["iphone"]
|
|
133
133
|
|
|
134
134
|
# Use preview mode for testing
|
|
135
|
-
|
|
135
|
+
appshot_build with preview: true
|
|
136
136
|
```
|
|
137
137
|
|
|
138
138
|
---
|
|
@@ -148,17 +148,17 @@ appshot.build with preview: true
|
|
|
148
148
|
**Solutions:**
|
|
149
149
|
```
|
|
150
150
|
# Set background explicitly
|
|
151
|
-
|
|
151
|
+
appshot_backgrounds with action: "set", image: "./bg.png", fit: "cover"
|
|
152
152
|
|
|
153
153
|
# Or use auto-detect (looks for background.png in device folders)
|
|
154
|
-
|
|
154
|
+
appshot_build with autoBackground: true
|
|
155
155
|
```
|
|
156
156
|
|
|
157
157
|
### Background looks stretched/cropped
|
|
158
158
|
|
|
159
159
|
**Solution:** Change fit mode:
|
|
160
160
|
```
|
|
161
|
-
|
|
161
|
+
appshot_backgrounds with action: "set", image: "./bg.png", fit: "contain"
|
|
162
162
|
```
|
|
163
163
|
|
|
164
164
|
Fit modes:
|
|
@@ -178,10 +178,10 @@ Fit modes:
|
|
|
178
178
|
**Solution:**
|
|
179
179
|
```
|
|
180
180
|
# Check required specs
|
|
181
|
-
|
|
181
|
+
appshot_specs with device: "iphone", required: true
|
|
182
182
|
|
|
183
183
|
# Use presets for correct sizing
|
|
184
|
-
|
|
184
|
+
appshot_build with presets: ["iphone-6-9", "ipad-13"]
|
|
185
185
|
```
|
|
186
186
|
|
|
187
187
|
### Missing required sizes
|
|
@@ -199,7 +199,7 @@ appshot.build with presets: ["iphone-6-9", "ipad-13"]
|
|
|
199
199
|
**Solution:**
|
|
200
200
|
```
|
|
201
201
|
# Run doctor to check system
|
|
202
|
-
|
|
202
|
+
appshot_doctor
|
|
203
203
|
|
|
204
204
|
# Reinstall if needed (in terminal)
|
|
205
205
|
npm rebuild sharp
|
|
@@ -217,7 +217,7 @@ npm rebuild sharp
|
|
|
217
217
|
|
|
218
218
|
Run the doctor command to check all systems:
|
|
219
219
|
```
|
|
220
|
-
|
|
220
|
+
appshot_doctor
|
|
221
221
|
```
|
|
222
222
|
|
|
223
223
|
This checks:
|