summer-engine 3.4.1 → 3.5.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/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +5 -1
- package/.codex-plugin/plugin.json +5 -1
- package/.cursor-plugin/plugin.json +5 -1
- package/.factory-plugin/plugin.json +5 -1
- package/CHANGELOG.md +23 -0
- package/README.md +5 -1
- package/dist/cli/commands/setup.js +24 -4
- package/dist/core/capabilities/capture-gameplay.d.ts +72 -7
- package/dist/core/capabilities/capture-gameplay.js +386 -25
- package/dist/core/capabilities/export-engine-version.d.ts +7 -0
- package/dist/core/capabilities/export-engine-version.js +9 -0
- package/dist/core/capabilities/export-game.d.ts +4 -0
- package/dist/core/capabilities/export-game.js +50 -7
- package/dist/core/capabilities/image-generation.d.ts +12 -2
- package/dist/core/capabilities/image-generation.js +31 -2
- package/dist/core/capabilities/publish-build.js +17 -3
- package/dist/core/capabilities/summer-bundle.d.ts +9 -0
- package/dist/core/capabilities/summer-bundle.js +19 -0
- package/dist/core/capabilities/tool-dispatch.js +13 -2
- package/dist/core/library-read.d.ts +7 -0
- package/dist/core/library-read.js +59 -7
- package/dist/core/library-search.d.ts +2 -0
- package/dist/installer/agent-config.d.ts +25 -0
- package/dist/installer/agent-config.js +114 -3
- package/dist/installer/agent-table.d.ts +12 -0
- package/dist/installer/agent-table.js +9 -0
- package/dist/mcp/tools/creator-tools.js +32 -3
- package/dist/mcp/tools/generate-tools.js +11 -30
- package/dist/mcp/tools/library-tools.d.ts +2 -1
- package/dist/mcp/tools/library-tools.js +1 -0
- package/gemini-extension.json +5 -1
- package/library/references/mcp-tools-reference/mcp-tools-reference.md +1 -1
- package/library/skills/README.md +11 -1
- package/library/skills/export-and-ship/SKILL.md +1 -1
- package/library/skills/export-and-ship/resource.yaml +2 -1
- package/library/skills/grow-analytics/SKILL.md +21 -0
- package/library/skills/grow-analytics/resource.yaml +27 -0
- package/library/skills/publish-your-game/SKILL.md +21 -0
- package/library/skills/publish-your-game/resource.yaml +29 -0
- package/library/skills/store-art/SKILL.md +23 -0
- package/library/skills/store-art/resource.yaml +30 -0
- package/library/skills/store-listing/SKILL.md +21 -0
- package/library/skills/store-listing/resource.yaml +25 -0
- package/library/skills/summer-analytics/resource.yaml +1 -0
- package/library/tools/capture-gameplay/resource.yaml +66 -1
- package/library/tools/export-game/resource.yaml +3 -0
- package/library/tools/generate-image/resource.yaml +4 -2
- package/package.json +1 -1
- package/registry/generated/counts.json +2 -2
- package/registry/generated/gemini-extension.json +5 -1
- package/registry/generated/index.json +153 -10
- package/registry/generated/marketplace.claude.json +1 -1
- package/registry/generated/plugin.claude.json +5 -1
- package/registry/generated/plugin.codex.json +5 -1
- package/registry/generated/plugin.cursor.json +5 -1
- package/registry/generated/plugin.factory.json +5 -1
- package/registry/generated/skills-index.md +11 -1
- package/registry/generated/skills-registry.json +52 -0
- package/registry/schemas/skill.schema.json +5 -0
|
@@ -40,7 +40,7 @@ async function creatorResult(operation) {
|
|
|
40
40
|
}
|
|
41
41
|
}
|
|
42
42
|
export function registerCreatorTools(server) {
|
|
43
|
-
server.tool("summer_export_game", "Export the game in the exact file the Summer Games store takes, with the installed Summer Engine headless (no window). format \"bundle\" (default): the summer.games .zip the Summer apps run on iPhone, Android, macOS and Windows; targets picks the platforms (a game without a server: ios and android only); upload it with summer_publish_build. format \"download\" with one target: web (an HTML5 .zip on Summer's WebGPU Forward+ web template, played on summer.games), macos (.app zip, macos-universal) or windows (.exe zip, windows-x64); these need the export template from summer_export_templates and are uploaded as store versions. Needs Summer Engine 0.7.0 or newer: an older engine is refused before anything is written (code engine_too_old). Works without the editor running. Returns path, sha256, size, the manifest or store platform, and warnings.", {
|
|
43
|
+
server.tool("summer_export_game", "Export the game in the exact file the Summer Games store takes, with the installed Summer Engine headless (no window). format \"bundle\" (default): the summer.games .zip the Summer apps run on iPhone, Android, macOS and Windows; targets picks the platforms (a game without a server: ios and android only); upload it with summer_publish_build. format \"download\" with one target: web (an HTML5 .zip on Summer's WebGPU Forward+ web template, played on summer.games), macos (.app zip, macos-universal) or windows (.exe zip, windows-x64); these need the export template from summer_export_templates and are uploaded as store versions. Needs Summer Engine 0.7.0 or newer: an older engine is refused before anything is written (code engine_too_old). A target the installed engine cannot build (android needs 0.7.1) is left out: the other targets export, and skippedTargets plus a warning name it. A game with a server declares its platforms in summer.build.json; when they differ from the exported targets a warning says so (summer_publish_build would be refused), and alignDeclaration:true aligns them. Works without the editor running. Returns path, sha256, size, the manifest or store platform, and warnings.", {
|
|
44
44
|
project: z.string().optional().describe("Project folder with project.godot. Defaults to the MCP's bound project, then the working directory."),
|
|
45
45
|
out: z.string().optional().describe("Output .zip path. Defaults to <project>/.summer/exports/."),
|
|
46
46
|
targets: z
|
|
@@ -53,7 +53,11 @@ export function registerCreatorTools(server) {
|
|
|
53
53
|
.describe("bundle (default): the summer.games store build. download: a web build or native download; the default when targets is [\"web\"]."),
|
|
54
54
|
debug: z.boolean().default(false).describe("Export a debug build (--export-debug)."),
|
|
55
55
|
timeoutSeconds: z.number().int().min(10).max(7200).optional().describe("Stop the engine after this many seconds (default 900; a first export imports every asset)."),
|
|
56
|
-
|
|
56
|
+
alignDeclaration: z
|
|
57
|
+
.boolean()
|
|
58
|
+
.optional()
|
|
59
|
+
.describe("A game with a server: set summer.build.json targetPlatforms to targets before exporting. The store refuses an upload whose declaration differs from the exported platforms (declaration_mismatch) and that spends the version."),
|
|
60
|
+
}, async ({ project, out, targets, format, debug, timeoutSeconds, alignDeclaration }) => creatorResult(() => exportGame({ project, out, targets, format, debug, alignDeclaration, ...(timeoutSeconds ? { timeoutMs: timeoutSeconds * 1000 } : {}) })));
|
|
57
61
|
server.tool("summer_export_templates", "List, download and install Summer Engine export templates from Summer's CDN into the folder the installed engine reads, checking each file's sha256. Needed only for summer_export_game format \"download\": web (Summer's WebGPU Forward+ template), macos, windows. Store bundles (format \"bundle\") need no template. action list shows what is installed and published; action install fetches the platforms asked (default web).", {
|
|
58
62
|
action: z.enum(["list", "install"]).describe("list: installed and published templates. install: download and install."),
|
|
59
63
|
platforms: z
|
|
@@ -66,7 +70,7 @@ export function registerCreatorTools(server) {
|
|
|
66
70
|
.optional()
|
|
67
71
|
.describe("The installed Summer Engine version (Help > About, e.g. 0.7.1). Read automatically on macOS; needed on Windows and Linux."),
|
|
68
72
|
}, async ({ action, platforms, includeDebug, summerVersion }) => creatorResult(() => exportTemplates({ action, platforms, includeDebug, summerVersion })));
|
|
69
|
-
server.tool("summer_capture_gameplay", "Capture real gameplay frames without a running editor: starts the game in Summer Engine's offscreen verify instance (a real renderer, a window parked offscreen with no focus, never on screen), lets it run waitSeconds, and saves PNG frames of what the game draws, HUD included. Use for store screenshots (1920x1080 landscape or 1080x1920 portrait). With an editor open, summer_screenshot target game also works. Returns each frame's path, width and height; look at them before using them.", {
|
|
73
|
+
server.tool("summer_capture_gameplay", "Capture real gameplay frames without a running editor: starts the game in Summer Engine's offscreen verify instance (--summer-offscreen: a real renderer, a window parked offscreen with no focus, never on screen), lets it run waitSeconds, runs steps, and saves PNG frames of what the game draws, HUD included. Use for store screenshots (1920x1080 landscape or 1080x1920 portrait). The main scene is often a title menu: pass the game's own flags in args (after \"--\", e.g. [\"--autostart\"]), a gameplay scene, or steps that play like a player: [{press:\"Play\"}, {wait:3000}, {key:\"Space\"}, {action:\"jump\"}, {click:[960,540]}, {drag:{from:[400,800],to:[1400,800]}}, {shot:true}]. With a shot step, only shot steps save frames; without one, frames are saved after the steps. A step that cannot run (no such button, key or action) becomes a warning. With an editor open, summer_screenshot target game also works. Returns each frame's path, width and height; look at them before using them.", {
|
|
70
74
|
project: z.string().optional().describe("Project folder with project.godot. Defaults to the MCP's bound project, then the working directory."),
|
|
71
75
|
scene: z.string().optional().describe("Scene to start (res://... or uid://...). Default: the project's main scene, which is often a title menu; pass the gameplay scene for gameplay frames."),
|
|
72
76
|
resolution: z.string().optional().describe("Window size WIDTHxHEIGHT (default 1920x1080; 1080x1920 for portrait)."),
|
|
@@ -74,6 +78,31 @@ export function registerCreatorTools(server) {
|
|
|
74
78
|
waitSeconds: z.number().min(0).max(120).optional().describe("Seconds the game runs before the first frame (default 3)."),
|
|
75
79
|
intervalSeconds: z.number().min(0.1).max(60).optional().describe("Seconds between frames (default 1)."),
|
|
76
80
|
out: z.string().optional().describe("Output folder. Defaults to <project>/.summer/captures/<time>/ (ignored by git)."),
|
|
81
|
+
args: z
|
|
82
|
+
.array(z.string())
|
|
83
|
+
.max(32)
|
|
84
|
+
.optional()
|
|
85
|
+
.describe('The game\'s own command-line flags, passed after "--" (OS.get_cmdline_user_args()), e.g. ["--autostart", "--solo"] to skip the title screen.'),
|
|
86
|
+
steps: z
|
|
87
|
+
.array(z
|
|
88
|
+
.object({
|
|
89
|
+
press: z.string().optional().describe("Press the visible button with this text (or node name); waits up to timeoutSeconds (default 10) for it."),
|
|
90
|
+
timeoutSeconds: z.number().min(0).max(60).optional(),
|
|
91
|
+
key: z.string().optional().describe("Press a key by Godot name: Space, Enter, Escape, A, Up."),
|
|
92
|
+
action: z.string().optional().describe("Press an input action from the project's InputMap, e.g. jump."),
|
|
93
|
+
holdMs: z.number().min(0).max(10000).optional().describe("How long key or action is held (default 100)."),
|
|
94
|
+
click: z.tuple([z.number(), z.number()]).optional().describe("Left-click at [x, y] in frame pixels."),
|
|
95
|
+
drag: z
|
|
96
|
+
.object({ from: z.tuple([z.number(), z.number()]), to: z.tuple([z.number(), z.number()]), ms: z.number().min(0).max(10000).optional() })
|
|
97
|
+
.optional()
|
|
98
|
+
.describe("Drag with the left button from [x, y] to [x, y] over ms (default 300)."),
|
|
99
|
+
wait: z.number().min(0).max(60000).optional().describe("Wait this many milliseconds."),
|
|
100
|
+
shot: z.boolean().optional().describe("true: save a frame now."),
|
|
101
|
+
})
|
|
102
|
+
.strict())
|
|
103
|
+
.max(50)
|
|
104
|
+
.optional()
|
|
105
|
+
.describe("What to do after waitSeconds, in order; exactly one of press, key, action, click, drag, wait, shot per step."),
|
|
77
106
|
}, async (args) => creatorResult(() => captureGameplay(args)));
|
|
78
107
|
server.tool("summer_publish_build", "Upload an export from summer_export_game to the creator's game on summer.games, through the same store upload Studio uses, straight from disk. A store bundle (format bundle): declare, upload parts, seal, wait until Summer makes the Build, name its client pack, and with publish=true approve it. A web build or native download (format download): upload it as the game's store version for its platform (web, macos-universal, windows-x64, linux-x64; read from the last export) and wait until Summer has checked it. First call with confirm=false: it checks that the game exists for this account and warns when its store page does not list the export's platforms, then returns the target (game name and id, file, digest, size, version) to show the user; set confirm only after they approve. Needs \"summer login --store\". A retry with the same file and clientVersion continues the same upload. Nothing here makes a game live: the owner approves publishing (summer_store_submit).", {
|
|
79
108
|
gameId: z.string().optional().describe("The store game id (from summer_store_list_games, or the Studio store page URL). Without it the call fails with game_required and lists your store games, or says why the store did not list them."),
|
|
@@ -1,10 +1,7 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { BOARD_ENDPOINT, boardArgsSchema, boardContent, boardQuery } from "../../core/capabilities/board.js";
|
|
3
|
-
import { imageGenerationArgsSchema } from "../../core/capabilities/image-generation.js";
|
|
3
|
+
import { IMAGE_GENERATION_TIMEOUT_MS, imageGenerationArgsSchema, saveGeneratedImage } from "../../core/capabilities/image-generation.js";
|
|
4
4
|
import { buildMotionRequestBody, motionErrorHint, motionGenerationArgsSchema, motionJobFailureHint, } from "../../core/capabilities/motion-generation.js";
|
|
5
|
-
import { writeFile, mkdir } from "fs/promises";
|
|
6
|
-
import { tmpdir } from "os";
|
|
7
|
-
import { join } from "path";
|
|
8
5
|
import { getAuthToken } from "../../core/auth.js";
|
|
9
6
|
import { resolveGatewayUrl } from "../../core/config.js";
|
|
10
7
|
import { readJsonResponse } from "../../core/util/http.js";
|
|
@@ -151,26 +148,6 @@ async function mcpGet(endpoint, searchParams, timeoutMs = 30_000) {
|
|
|
151
148
|
}
|
|
152
149
|
return { data, status: res.status };
|
|
153
150
|
}
|
|
154
|
-
/**
|
|
155
|
-
* Download an image URL to a temp file so the AI can Read it and show the user.
|
|
156
|
-
*/
|
|
157
|
-
async function downloadToTemp(url, prefix, ext = "png") {
|
|
158
|
-
try {
|
|
159
|
-
const dir = join(tmpdir(), "summer-gen");
|
|
160
|
-
await mkdir(dir, { recursive: true });
|
|
161
|
-
const filename = `${prefix}-${Date.now()}.${ext}`;
|
|
162
|
-
const filepath = join(dir, filename);
|
|
163
|
-
const res = await fetch(url, { signal: AbortSignal.timeout(30_000) });
|
|
164
|
-
if (!res.ok)
|
|
165
|
-
return null;
|
|
166
|
-
const buffer = Buffer.from(await res.arrayBuffer());
|
|
167
|
-
await writeFile(filepath, buffer);
|
|
168
|
-
return filepath;
|
|
169
|
-
}
|
|
170
|
-
catch {
|
|
171
|
-
return null;
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
151
|
/**
|
|
175
152
|
* Poll a job until completed, failed, or timeout.
|
|
176
153
|
* Returns the final job status object.
|
|
@@ -281,7 +258,8 @@ Requires authentication: run 'npx -y summer-engine@latest login' first.`, boardA
|
|
|
281
258
|
server.tool("summer_generate_image", `Generate an image using AI models via Summer Engine Studio.
|
|
282
259
|
|
|
283
260
|
Known models:
|
|
284
|
-
- "nano-banana-2"
|
|
261
|
+
- "nano-banana-2" — High quality, supports txt2img and img2img (used when no
|
|
262
|
+
model and no size is asked)
|
|
285
263
|
- "gemini-flash" — Google Gemini 2.5 Flash, fast
|
|
286
264
|
- "flux-2" — FLUX.2, good for specific styles
|
|
287
265
|
|
|
@@ -300,17 +278,20 @@ guarantee transparency; background removal runs server-side after generation.
|
|
|
300
278
|
Size: aspectRatio (1:1, 16:9, 9:16, 4:3, 3:4, ...) or width + height (the
|
|
301
279
|
smallest size you need). For store art ask width 1920 height 1080 (key art)
|
|
302
280
|
or width 1080 height 1920 (tall cover): the server picks a model that reaches
|
|
303
|
-
that size, or refuses a named model that cannot, before
|
|
281
|
+
that size when model is omitted, or refuses a named model that cannot, before
|
|
282
|
+
anything is spent. Larger models can take over a minute; the call waits up to
|
|
283
|
+
3 minutes.
|
|
304
284
|
Each result reports the real width and height and the model that ran.
|
|
305
285
|
|
|
306
286
|
'options' carries extra model params (seed, negative_prompt, ...); the result
|
|
307
287
|
lists any the server did not use in ignoredOptions.
|
|
308
288
|
|
|
309
|
-
Returns the asset with fileUrl (hosted) and localPath
|
|
289
|
+
Returns the asset with fileUrl (hosted) and localPath: the file on disk, in
|
|
290
|
+
'out' (a folder, or a .png/.jpg/.webp path) or else <TMPDIR>/summer-gen/.
|
|
310
291
|
Use the Read tool on localPath to show the image to the user for approval.
|
|
311
292
|
|
|
312
293
|
Cloud tool — runs on Summer's servers and works WITHOUT the Summer Engine app open.
|
|
313
|
-
Requires authentication: run 'npx -y summer-engine@latest login' first.`, imageGenerationArgsSchema.shape, async ({ prompt, model, style, referenceImageUrl, removeBackground, aspectRatio, width, height, options }) => {
|
|
294
|
+
Requires authentication: run 'npx -y summer-engine@latest login' first.`, imageGenerationArgsSchema.shape, async ({ prompt, model, style, referenceImageUrl, removeBackground, aspectRatio, width, height, options, out }) => {
|
|
314
295
|
const result = await mcpGenerate("/api/mcp/generate/image", {
|
|
315
296
|
prompt,
|
|
316
297
|
model,
|
|
@@ -321,7 +302,7 @@ Requires authentication: run 'npx -y summer-engine@latest login' first.`, imageG
|
|
|
321
302
|
width,
|
|
322
303
|
height,
|
|
323
304
|
options,
|
|
324
|
-
});
|
|
305
|
+
}, IMAGE_GENERATION_TIMEOUT_MS);
|
|
325
306
|
if (result.error) {
|
|
326
307
|
return errorResult(result.error, result.data);
|
|
327
308
|
}
|
|
@@ -329,7 +310,7 @@ Requires authentication: run 'npx -y summer-engine@latest login' first.`, imageG
|
|
|
329
310
|
const imageUrl = result.data?.asset?.fileUrl || result.data?.asset?.thumbnailUrl;
|
|
330
311
|
let localPath = null;
|
|
331
312
|
if (imageUrl) {
|
|
332
|
-
localPath = await
|
|
313
|
+
localPath = await saveGeneratedImage(imageUrl, out);
|
|
333
314
|
}
|
|
334
315
|
return successResult({
|
|
335
316
|
...result.data,
|
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
* librarian. Behavior lives in src/core/library-search.ts and
|
|
4
4
|
* src/core/library-read.ts; `summer tool search-library|read-library`
|
|
5
5
|
* (src/core/capabilities/tool-dispatch.ts) calls the same functions.
|
|
6
|
-
* Engine-free: both read the library shipped with this package
|
|
6
|
+
* Engine-free: both read the library shipped with this package; a hosted
|
|
7
|
+
* skill's body comes from the hosted Summer Engine MCP when signed in.
|
|
7
8
|
*/
|
|
8
9
|
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
9
10
|
export declare const SEARCH_LIBRARY_DESCRIPTION: string;
|
|
@@ -15,6 +15,7 @@ export const READ_LIBRARY_DESCRIPTION = "Load one library entry by id (<kind>/<s
|
|
|
15
15
|
"Skills: the SKILL.md body plus metadata (status, use_when, related) and how to invoke the skill in your host (bare slug). " +
|
|
16
16
|
"Tools: how to call it (MCP name, `summer tool <slug> --args`, engine requirement, authority) plus the descriptor. " +
|
|
17
17
|
"Templates: the pinned repo @ commit and tree digest (or built-in) and the `summer create <slug>` command. References: the markdown body. " +
|
|
18
|
+
"Hosted skills (publish-your-game, store-listing, store-art, grow-analytics; also by their summer://skills/<slug> URI): the current text from the hosted Summer Engine MCP with the store sign-in, else the local summary plus why and how to load the rest. " +
|
|
18
19
|
"Linked files: a body ends with its relative links and the id that loads each; a file an entry links loads by <entry id>/<link as written> " +
|
|
19
20
|
"(e.g. skill/spatial-placement/references/kit-placement-tools.md), by the relative path alone when one entry ships it, inside library/ only. " +
|
|
20
21
|
"part: 'skill' = body only, 'resource' = the resource.yaml descriptor only, 'all' (default) = both. " +
|
package/gemini-extension.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"_generated": "GENERATED from integrations/gemini — do not edit; npm run generate:registry",
|
|
3
3
|
"name": "summer",
|
|
4
|
-
"version": "3.
|
|
4
|
+
"version": "3.5.0",
|
|
5
5
|
"description": "Agent tooling for Summer Engine: MCP bridge, context primer, and game-dev skills. Use with the npm CLI for skill files on disk.",
|
|
6
6
|
"contextFileName": "GEMINI.md",
|
|
7
7
|
"mcpServers": {
|
|
@@ -68,6 +68,7 @@
|
|
|
68
68
|
"./library/skills/gdscript-patterns/",
|
|
69
69
|
"./library/skills/generate-motion/",
|
|
70
70
|
"./library/skills/godogen-visual-proof-game-generation/",
|
|
71
|
+
"./library/skills/grow-analytics/",
|
|
71
72
|
"./library/skills/headless-scripting/",
|
|
72
73
|
"./library/skills/in-game-purchases/",
|
|
73
74
|
"./library/skills/instantiate-asset-pack/",
|
|
@@ -90,6 +91,7 @@
|
|
|
90
91
|
"./library/skills/procedural-animation/",
|
|
91
92
|
"./library/skills/prop-model/",
|
|
92
93
|
"./library/skills/psx-retro-rendering/",
|
|
94
|
+
"./library/skills/publish-your-game/",
|
|
93
95
|
"./library/skills/realtime-wet-surfaces/",
|
|
94
96
|
"./library/skills/remote-deploy/",
|
|
95
97
|
"./library/skills/retarget/",
|
|
@@ -107,6 +109,8 @@
|
|
|
107
109
|
"./library/skills/sound-effect/",
|
|
108
110
|
"./library/skills/spatial-placement/",
|
|
109
111
|
"./library/skills/sprite-sheet/",
|
|
112
|
+
"./library/skills/store-art/",
|
|
113
|
+
"./library/skills/store-listing/",
|
|
110
114
|
"./library/skills/summer-analytics/",
|
|
111
115
|
"./library/skills/summer-friends/",
|
|
112
116
|
"./library/skills/summer-leaderboards/",
|
|
@@ -248,7 +248,7 @@ Preview. One fast, read-only call that walks every node of a 3D scene and lists
|
|
|
248
248
|
| `summer_creator_publish` | **Deprecated** (use the two tools above). Compute the exact `.pck` digest and size, require user confirmation, then run versioned prepare → write-once upload → finalize. The server independently verifies `publish` scope, ownership, bytes, and review state. |
|
|
249
249
|
| `summer_creator_releases` | **Deprecated.** Lists releases on the legacy creator API. For summer.games use `summer_store_releases` (hosted, mounted after `summer login --store`). |
|
|
250
250
|
| `summer_creator_config` | Read or confirm updates to the shared non-secret `~/.summer/config.json`. It never accepts or returns tokens. |
|
|
251
|
-
| `summer_capture_gameplay` | Real gameplay frames without a running editor: starts the game (main scene or `scene`) in the engine's offscreen verify instance (`--summer-verify`, real renderer, window parked offscreen, no focus) at `resolution` (default `1920x1080`), waits `waitSeconds`, saves `frames` PNGs (HUD included) to `<project>/.summer/captures/<time>/`. Imports the project first when `.godot/` is missing. Returns each path with its real width and height; warns when the stretch settings render another size. For store screenshots. |
|
|
251
|
+
| `summer_capture_gameplay` | Real gameplay frames without a running editor: starts the game (main scene or `scene`) in the engine's offscreen verify instance (`--summer-verify`, real renderer, window parked offscreen, no focus) (`--summer-offscreen`) at `resolution` (default `1920x1080`), waits `waitSeconds`, runs `steps` (`press` a button by text, `key`, `action`, `click`, `drag`, `wait`, `shot`), saves `frames` PNGs (HUD included; with a `shot` step, one per shot) to `<project>/.summer/captures/<time>/`. `args` are the game's own flags, passed after `--` (e.g. `["--autostart"]` to skip the title screen). Imports the project first when `.godot/` is missing. Returns each path with its real width and height; warns when the stretch settings render another size. For store screenshots. |
|
|
252
252
|
|
|
253
253
|
### Library search (2)
|
|
254
254
|
|
package/library/skills/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Summer skills
|
|
2
2
|
|
|
3
|
-
>
|
|
3
|
+
> 122 skills, grouped by their primary domain. **Generated** by `npm run generate:registry` from each skill's `resource.yaml`; `--check` fails when this file and the library disagree. Do not edit by hand.
|
|
4
4
|
|
|
5
5
|
The folder is flat on purpose (`docs/design/DECISIONS.md`, D3): a skill usually belongs to several domains, so categories live in each skill's `facets.domains` and this index is rendered from them. The first domain listed is the primary one. `summer skills list --by-domain` prints the same grouping; `summer skills info <slug>` shows one skill.
|
|
6
6
|
|
|
@@ -16,6 +16,7 @@ Status: **stable** unless marked; *preview* = not yet exercised in-engine by the
|
|
|
16
16
|
- [assets](#assets) (3)
|
|
17
17
|
- [audio](#audio) (6)
|
|
18
18
|
- [character-controller](#character-controller) (2)
|
|
19
|
+
- [creator](#creator) (4)
|
|
19
20
|
- [debug](#debug) (1)
|
|
20
21
|
- [deployment](#deployment) (2)
|
|
21
22
|
- [editor](#editor) (1)
|
|
@@ -126,6 +127,15 @@ Status: **stable** unless marked; *preview* = not yet exercised in-engine by the
|
|
|
126
127
|
| [*character-movement*](./character-movement/SKILL.md) (preview) | Player controllers for 2D and 3D, plus the canonical third-person controller for Summer humanoid packages: movement owns translation, clips follow state. | gameplay, 2d, 3d |
|
|
127
128
|
| [fps-controller](./fps-controller/SKILL.md) ★ | Production-quality first-person controller — WASD, mouse look, jump, coyote time, jump buffering, air control, and external-velocity handling. | gameplay |
|
|
128
129
|
|
|
130
|
+
## creator
|
|
131
|
+
|
|
132
|
+
| skill | when to use | also |
|
|
133
|
+
|---|---|---|
|
|
134
|
+
| [grow-analytics](./grow-analytics/SKILL.md) | Read and analyse a creator's Summer Grow numbers: store page views, launches, play sessions, play time; compare windows, flag drops. | deployment |
|
|
135
|
+
| [publish-your-game](./publish-your-game/SKILL.md) | Publish a Summer game on Summer Games through MCP: store page, art, build upload, submit, and one approval link for the owner. | deployment |
|
|
136
|
+
| [store-art](./store-art/SKILL.md) | Make Summer Games store art per slot and flow: key art, covers, icons, screenshots, trailer: size, shape, text rules, fallbacks. | assets |
|
|
137
|
+
| [store-listing](./store-listing/SKILL.md) | Write a Summer Games store page per flow (desktop, mobile): targets, title, tagline, descriptions, tags, and what never to write. | product-language |
|
|
138
|
+
|
|
129
139
|
## debug
|
|
130
140
|
|
|
131
141
|
| skill | when to use | also |
|
|
@@ -298,7 +298,7 @@ Per platform, point the user at the correct upload path:
|
|
|
298
298
|
- **summer.games:** `summer_export_game` writes the summer.games `.zip`; `summer_publish_build` uploads it to the game's store listing after the user confirms the exact game, file and version (needs `summer login --store`). If it answers `store_auth_refused`, the user uploads the `.zip` in Studio instead.
|
|
299
299
|
- Per platform, the store takes: iPhone, Android, macOS and Windows in the Summer apps = one summer.games bundle (`summer_export_game` `targets`, format `bundle`; no template, no signing; a game without a server targets `ios`/`android` only). Web = an HTML5 `.zip` on Summer's WebGPU Forward+ template (`targets:["web"]`; the project must render with Forward+ or Mobile). A macOS or Windows download for the store page = `targets:["macos"]` or `["windows"]` with format `download`. Download exports need the template: `summer_export_templates` `install` fetches it from Summer's CDN.
|
|
300
300
|
- Hosted games: if `summer_export_game` fails with "… is in the source graph's authority_engine domain, which the client pack leaves out", an authority root in `source-domains.json` holds a file the client loads (often the composition `.tres`). Narrow that root to the server-only files, or move the shared file under a `shared` path, then export again. Every exporter message is in the `multiplayer-publish` skill's export-errors.md; the folder rules are in `multiplayer-project`.
|
|
301
|
-
- Store page art: key art, covers and icons carry no text, logos or UI (the store page shows the title). Screenshots are real gameplay and may show the game's own HUD; add no captions, logos or overlays. Capture them with `summer_capture_gameplay` (offscreen, no editor needed; `resolution` `1920x1080`, or `1080x1920` for portrait;
|
|
301
|
+
- Store page art: key art, covers and icons carry no text, logos or UI (the store page shows the title). Screenshots are real gameplay and may show the game's own HUD; add no captions, logos or overlays. Capture them with `summer_capture_gameplay` (offscreen, no editor needed; `resolution` `1920x1080`, or `1080x1920` for portrait; get past a title menu with the game's own flags in `args`, e.g. `["--autostart"]`, or `steps` such as `[{"press":"Play"},{"wait":3000},{"shot":true}]`), or `summer_screenshot` target `game` while the editor runs the game.
|
|
302
302
|
- **Steam:** `steamcmd` + Steam Pipe (`builder_app_xxx.vdf`). Set up depots first in Steamworks.
|
|
303
303
|
- **itch.io:** `butler push <path> <user>/<game>:<channel>` (e.g. `butler push build/win <user>/mygame:windows`).
|
|
304
304
|
- **Web (itch hosted):** zip + drop into itch upload UI as "playable in browser".
|
|
@@ -6,7 +6,7 @@ use_when:
|
|
|
6
6
|
- the user wants to assess or prepare a Summer game export — Steam, itch, HTML5, iOS, Android targets as available in the installed build
|
|
7
7
|
- the user says 'publish my game', 'release it', or 'ship a build to players' — produce the build they will upload
|
|
8
8
|
do_not_use_when:
|
|
9
|
-
- publishing, uploading, hosting, or submitting a game — this skill only produces local builds
|
|
9
|
+
- publishing, uploading, hosting, or submitting a game — this skill only produces local builds; publishing is skill/publish-your-game
|
|
10
10
|
facets:
|
|
11
11
|
lifecycle:
|
|
12
12
|
- launch
|
|
@@ -21,6 +21,7 @@ related:
|
|
|
21
21
|
skills:
|
|
22
22
|
- skill/debug
|
|
23
23
|
- skill/tune-performance
|
|
24
|
+
- skill/publish-your-game
|
|
24
25
|
source: official
|
|
25
26
|
license: MIT
|
|
26
27
|
status: stable
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: grow-analytics
|
|
3
|
+
description: "Read and analyse a creator's Summer Grow numbers: store page views, launches, play sessions, play time; compare windows, flag drops."
|
|
4
|
+
license: MIT
|
|
5
|
+
compatibility: [Cursor, Claude Code, Windsurf, Codex]
|
|
6
|
+
category: deployment
|
|
7
|
+
user-invocable: true
|
|
8
|
+
allowed-tools: summer_read_library
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# /grow-analytics — grow analytics
|
|
12
|
+
|
|
13
|
+
This skill covers how to read a creator's Summer Grow numbers (store page views, launches, play sessions, play time) and analyse them: compare windows, walk the funnel, flag drops, give one next step.
|
|
14
|
+
|
|
15
|
+
Its current text lives on the hosted Summer Engine MCP, the same text the Studio agent reads, so it changes with the store and is never stale here. Load it before you act:
|
|
16
|
+
|
|
17
|
+
1. `summer_read_library` with id `skill/grow-analytics` returns the current text when this machine has a store sign-in (`summer login --store`).
|
|
18
|
+
2. A host that shows MCP prompts or resources has it as the `grow-analytics` prompt and the resource `summer://skills/grow-analytics`.
|
|
19
|
+
3. Without a store sign-in: https://docs.summerengine.com/llms.txt lists every docs page; fetch any page as .md.
|
|
20
|
+
|
|
21
|
+
The one rule to keep even before you load it: Report what the numbers show; do not guess causes the data cannot support.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
id: skill/grow-analytics
|
|
2
|
+
kind: skill
|
|
3
|
+
version: 1.0.0
|
|
4
|
+
summary: "Read and analyse a creator's Summer Grow numbers: store page views, launches, play sessions, play time; compare windows, flag drops."
|
|
5
|
+
use_when:
|
|
6
|
+
- "the user asks how their game is doing on Summer Games: views, launches, players, play time"
|
|
7
|
+
- "reading summer_grow_overview or summer_grow_analytics and turning the numbers into one next step"
|
|
8
|
+
- "comparing two time windows, walking the store funnel or finding where players drop"
|
|
9
|
+
do_not_use_when:
|
|
10
|
+
- "sending analytics events from game code — skill/summer-analytics"
|
|
11
|
+
facets:
|
|
12
|
+
lifecycle:
|
|
13
|
+
- grow
|
|
14
|
+
domains:
|
|
15
|
+
- creator
|
|
16
|
+
- deployment
|
|
17
|
+
modalities:
|
|
18
|
+
- docs
|
|
19
|
+
related:
|
|
20
|
+
skills:
|
|
21
|
+
- skill/publish-your-game
|
|
22
|
+
- skill/summer-analytics
|
|
23
|
+
hosted_resource: "summer://skills/grow-analytics"
|
|
24
|
+
source: official
|
|
25
|
+
license: MIT
|
|
26
|
+
status: stable
|
|
27
|
+
recommended: false
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: publish-your-game
|
|
3
|
+
description: "Publish a Summer game on Summer Games through MCP: store page, art, build upload, submit, and one approval link for the owner."
|
|
4
|
+
license: MIT
|
|
5
|
+
compatibility: [Cursor, Claude Code, Windsurf, Codex]
|
|
6
|
+
category: deployment
|
|
7
|
+
user-invocable: true
|
|
8
|
+
allowed-tools: summer_read_library
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# /publish-your-game — publish your game
|
|
12
|
+
|
|
13
|
+
This skill covers the whole publishing journey: find the game, make its store page, write the text, set the art, export and upload the build, submit, and hand the owner the approval link.
|
|
14
|
+
|
|
15
|
+
Its current text lives on the hosted Summer Engine MCP, the same text the Studio agent reads, so it changes with the store and is never stale here. Load it before you act:
|
|
16
|
+
|
|
17
|
+
1. `summer_read_library` with id `skill/publish-your-game` returns the current text when this machine has a store sign-in (`summer login --store`).
|
|
18
|
+
2. A host that shows MCP prompts or resources has it as the `publish-your-game` prompt and the resource `summer://skills/publish-your-game`.
|
|
19
|
+
3. Without a store sign-in: https://docs.summerengine.com/llms.txt lists every docs page; fetch any page as .md.
|
|
20
|
+
|
|
21
|
+
The one rule to keep even before you load it: Submitting does not publish. `summer_store_submit` returns an approval link; only the owner's click sends the game to review, and review comes before live.
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
id: skill/publish-your-game
|
|
2
|
+
kind: skill
|
|
3
|
+
version: 1.0.0
|
|
4
|
+
summary: "Publish a Summer game on Summer Games through MCP: store page, art, build upload, submit, and one approval link for the owner."
|
|
5
|
+
use_when:
|
|
6
|
+
- "the user says 'publish my game', 'put it on summer.games', 'launch it on the store' or 'submit it for review'"
|
|
7
|
+
- "taking a built Summer game to a submitted store page: listing text, art, build upload, summer_store_submit and the owner's approval link"
|
|
8
|
+
- "an agent publishes for the owner end to end and needs the order of the summer_store_* and summer_build_* tools"
|
|
9
|
+
do_not_use_when:
|
|
10
|
+
- "only producing a local export build — skill/export-and-ship"
|
|
11
|
+
facets:
|
|
12
|
+
lifecycle:
|
|
13
|
+
- launch
|
|
14
|
+
domains:
|
|
15
|
+
- creator
|
|
16
|
+
- deployment
|
|
17
|
+
modalities:
|
|
18
|
+
- docs
|
|
19
|
+
related:
|
|
20
|
+
skills:
|
|
21
|
+
- skill/store-listing
|
|
22
|
+
- skill/store-art
|
|
23
|
+
- skill/grow-analytics
|
|
24
|
+
- skill/export-and-ship
|
|
25
|
+
hosted_resource: "summer://skills/publish-your-game"
|
|
26
|
+
source: official
|
|
27
|
+
license: MIT
|
|
28
|
+
status: stable
|
|
29
|
+
recommended: false
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: store-art
|
|
3
|
+
description: "Make Summer Games store art per slot and flow: key art, covers, icons, screenshots, trailer: size, shape, text rules, fallbacks."
|
|
4
|
+
license: MIT
|
|
5
|
+
compatibility: [Cursor, Claude Code, Windsurf, Codex]
|
|
6
|
+
category: deployment
|
|
7
|
+
user-invocable: true
|
|
8
|
+
allowed-tools: summer_read_library
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# /store-art — store art
|
|
12
|
+
|
|
13
|
+
This skill covers every store art slot per flow (desktop and mobile): size, shape, text rules, fallbacks, and why each one matters.
|
|
14
|
+
|
|
15
|
+
Its current text lives on the hosted Summer Engine MCP, the same text the Studio agent reads, so it changes with the store and is never stale here. Load it before you act:
|
|
16
|
+
|
|
17
|
+
1. `summer_read_library` with id `skill/store-art` returns the current text when this machine has a store sign-in (`summer login --store`).
|
|
18
|
+
2. A host that shows MCP prompts or resources has it as the `store-art` prompt and the resource `summer://skills/store-art`.
|
|
19
|
+
3. Without a store sign-in: https://docs.summerengine.com/llms.txt lists every docs page; fetch any page as .md.
|
|
20
|
+
|
|
21
|
+
Screenshots: `summer_capture_gameplay` takes them offscreen. Get past the title screen with the game's own flags in `args` or with `steps`, e.g. `{"args":["--autostart"],"steps":[{"wait":3000},{"shot":true},{"key":"Space"},{"wait":800},{"shot":true}]}`.
|
|
22
|
+
|
|
23
|
+
The one rule to keep even before you load it: Key art, covers and icons carry no text: the stores draw the title over them. Screenshots are real play.
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
id: skill/store-art
|
|
2
|
+
kind: skill
|
|
3
|
+
version: 1.0.0
|
|
4
|
+
summary: "Make Summer Games store art per slot and flow: key art, covers, icons, screenshots, trailer: size, shape, text rules, fallbacks."
|
|
5
|
+
use_when:
|
|
6
|
+
- "making or choosing store art for Summer Games: key art, cover, icon, screenshots, trailer"
|
|
7
|
+
- "summer_store_set_art rejects an image for its shape or size, or summer_store_get_listing says an art slot is missing"
|
|
8
|
+
- "deciding whether a store image may carry text, and which slot falls back to which"
|
|
9
|
+
facets:
|
|
10
|
+
lifecycle:
|
|
11
|
+
- launch
|
|
12
|
+
domains:
|
|
13
|
+
- creator
|
|
14
|
+
- assets
|
|
15
|
+
modalities:
|
|
16
|
+
- images
|
|
17
|
+
- video
|
|
18
|
+
related:
|
|
19
|
+
skills:
|
|
20
|
+
- skill/publish-your-game
|
|
21
|
+
- skill/store-listing
|
|
22
|
+
tools:
|
|
23
|
+
- tool/generate-image
|
|
24
|
+
- tool/capture-gameplay
|
|
25
|
+
- tool/list-my-assets
|
|
26
|
+
hosted_resource: "summer://skills/store-art"
|
|
27
|
+
source: official
|
|
28
|
+
license: MIT
|
|
29
|
+
status: stable
|
|
30
|
+
recommended: false
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: store-listing
|
|
3
|
+
description: "Write a Summer Games store page per flow (desktop, mobile): targets, title, tagline, descriptions, tags, and what never to write."
|
|
4
|
+
license: MIT
|
|
5
|
+
compatibility: [Cursor, Claude Code, Windsurf, Codex]
|
|
6
|
+
category: deployment
|
|
7
|
+
user-invocable: true
|
|
8
|
+
allowed-tools: summer_read_library
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# /store-listing — store listing
|
|
12
|
+
|
|
13
|
+
This skill covers the store page text per flow (desktop and mobile): targets, title, tagline, descriptions, tags, and what never to write.
|
|
14
|
+
|
|
15
|
+
Its current text lives on the hosted Summer Engine MCP, the same text the Studio agent reads, so it changes with the store and is never stale here. Load it before you act:
|
|
16
|
+
|
|
17
|
+
1. `summer_read_library` with id `skill/store-listing` returns the current text when this machine has a store sign-in (`summer login --store`).
|
|
18
|
+
2. A host that shows MCP prompts or resources has it as the `store-listing` prompt and the resource `summer://skills/store-listing`.
|
|
19
|
+
3. Without a store sign-in: https://docs.summerengine.com/llms.txt lists every docs page; fetch any page as .md.
|
|
20
|
+
|
|
21
|
+
The one rule to keep even before you load it: Never invent features, modes, player counts, awards or prices.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
id: skill/store-listing
|
|
2
|
+
kind: skill
|
|
3
|
+
version: 1.0.0
|
|
4
|
+
summary: "Write a Summer Games store page per flow (desktop, mobile): targets, title, tagline, descriptions, tags, and what never to write."
|
|
5
|
+
use_when:
|
|
6
|
+
- "writing or fixing a game's store page text on Summer Games: title, tagline, description, tags"
|
|
7
|
+
- "summer_store_update_listing or summer_store_get_listing says a text field is missing or wrong"
|
|
8
|
+
- "choosing the targets (web, Mac, Windows, Linux, iPhone, Android) that decide the desktop and mobile store flows"
|
|
9
|
+
facets:
|
|
10
|
+
lifecycle:
|
|
11
|
+
- launch
|
|
12
|
+
domains:
|
|
13
|
+
- creator
|
|
14
|
+
- product-language
|
|
15
|
+
modalities:
|
|
16
|
+
- docs
|
|
17
|
+
related:
|
|
18
|
+
skills:
|
|
19
|
+
- skill/publish-your-game
|
|
20
|
+
- skill/store-art
|
|
21
|
+
hosted_resource: "summer://skills/store-listing"
|
|
22
|
+
source: official
|
|
23
|
+
license: MIT
|
|
24
|
+
status: stable
|
|
25
|
+
recommended: false
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
id: tool/capture-gameplay
|
|
2
2
|
kind: tool
|
|
3
3
|
version: 1.0.0
|
|
4
|
-
summary: Capture real gameplay
|
|
4
|
+
summary: Capture real gameplay PNGs (HUD included) offscreen without a running editor; game flags and player steps (press, key, click) get past the title screen.
|
|
5
5
|
use_when:
|
|
6
6
|
- '"take gameplay screenshots for my store page"'
|
|
7
7
|
- '"I need screenshots but the editor is not open"'
|
|
8
8
|
- '"capture a 1920x1080 frame of my game"'
|
|
9
9
|
- collecting real gameplay screenshots for summer_store_set_art desktop.screenshots or mobile.screenshots
|
|
10
|
+
- every capture shows the title screen — pass the game's flags in args or steps like press Play
|
|
10
11
|
do_not_use_when:
|
|
11
12
|
- the editor is open and the game is running — tool/screenshot with target game shows the live game
|
|
12
13
|
- key art, covers or icons — those are generated art, not gameplay frames
|
|
@@ -62,6 +63,70 @@ input_schema:
|
|
|
62
63
|
out:
|
|
63
64
|
type: string
|
|
64
65
|
description: Output folder. Defaults to <project>/.summer/captures/<time>/ (ignored by git).
|
|
66
|
+
args:
|
|
67
|
+
type: array
|
|
68
|
+
maxItems: 32
|
|
69
|
+
items:
|
|
70
|
+
type: string
|
|
71
|
+
description: The game's own command-line flags, passed after "--" (OS.get_cmdline_user_args()), e.g. ["--autostart", "--solo"] to skip the title screen.
|
|
72
|
+
steps:
|
|
73
|
+
type: array
|
|
74
|
+
maxItems: 50
|
|
75
|
+
description: 'What to do after waitSeconds, in order; exactly one of press, key, action, click, drag, wait, shot per step. Example: [{"press":"Play"},{"wait":3000},{"key":"Space"},{"shot":true},{"action":"jump"},{"wait":500},{"shot":true}]. With a shot step only shot steps save frames. A step that cannot run becomes a warning.'
|
|
76
|
+
items:
|
|
77
|
+
type: object
|
|
78
|
+
properties:
|
|
79
|
+
press:
|
|
80
|
+
type: string
|
|
81
|
+
description: Press the visible button with this text (or node name); waits up to timeoutSeconds (default 10) for it.
|
|
82
|
+
timeoutSeconds:
|
|
83
|
+
type: number
|
|
84
|
+
minimum: 0
|
|
85
|
+
maximum: 60
|
|
86
|
+
key:
|
|
87
|
+
type: string
|
|
88
|
+
description: Press a key by Godot name (Space, Enter, Escape, A, Up).
|
|
89
|
+
action:
|
|
90
|
+
type: string
|
|
91
|
+
description: Press an input action from the project's InputMap, e.g. jump.
|
|
92
|
+
holdMs:
|
|
93
|
+
type: number
|
|
94
|
+
minimum: 0
|
|
95
|
+
maximum: 10000
|
|
96
|
+
description: How long key or action is held (default 100).
|
|
97
|
+
click:
|
|
98
|
+
type: array
|
|
99
|
+
items:
|
|
100
|
+
type: number
|
|
101
|
+
description: Left-click at [x, y] in frame pixels.
|
|
102
|
+
drag:
|
|
103
|
+
type: object
|
|
104
|
+
properties:
|
|
105
|
+
from:
|
|
106
|
+
type: array
|
|
107
|
+
items:
|
|
108
|
+
type: number
|
|
109
|
+
to:
|
|
110
|
+
type: array
|
|
111
|
+
items:
|
|
112
|
+
type: number
|
|
113
|
+
ms:
|
|
114
|
+
type: number
|
|
115
|
+
minimum: 0
|
|
116
|
+
maximum: 10000
|
|
117
|
+
required:
|
|
118
|
+
- from
|
|
119
|
+
- to
|
|
120
|
+
description: Drag with the left button from [x, y] to [x, y] over ms (default 300).
|
|
121
|
+
wait:
|
|
122
|
+
type: number
|
|
123
|
+
minimum: 0
|
|
124
|
+
maximum: 60000
|
|
125
|
+
description: Wait this many milliseconds.
|
|
126
|
+
shot:
|
|
127
|
+
type: boolean
|
|
128
|
+
description: true saves a frame now.
|
|
129
|
+
additionalProperties: false
|
|
65
130
|
additionalProperties: false
|
|
66
131
|
authority:
|
|
67
132
|
filesystem: true
|
|
@@ -61,6 +61,9 @@ input_schema:
|
|
|
61
61
|
minimum: 10
|
|
62
62
|
maximum: 7200
|
|
63
63
|
description: Stop the engine after this many seconds (default 900; a first export imports every asset).
|
|
64
|
+
alignDeclaration:
|
|
65
|
+
type: boolean
|
|
66
|
+
description: A game with a server, set summer.build.json targetPlatforms to targets before exporting. The store refuses an upload whose declaration differs from the exported platforms (declaration_mismatch) and that spends the version.
|
|
64
67
|
additionalProperties: false
|
|
65
68
|
authority:
|
|
66
69
|
filesystem: true
|
|
@@ -33,8 +33,7 @@ input_schema:
|
|
|
33
33
|
description: Description of the image to generate
|
|
34
34
|
model:
|
|
35
35
|
type: string
|
|
36
|
-
|
|
37
|
-
description: Model name or full provider ID
|
|
36
|
+
description: Model name or full provider ID. Omit it and the server picks one that reaches the requested size (nano-banana-2 when no size is asked).
|
|
38
37
|
style:
|
|
39
38
|
type: string
|
|
40
39
|
default: realistic
|
|
@@ -63,6 +62,9 @@ input_schema:
|
|
|
63
62
|
type: object
|
|
64
63
|
additionalProperties: {}
|
|
65
64
|
description: Extra model params (seed, negative_prompt, ...). The result lists any it did not use in ignoredOptions.
|
|
65
|
+
out:
|
|
66
|
+
type: string
|
|
67
|
+
description: Where to save the image on this machine, a folder or a file path ending in .png, .jpg or .webp. Default is <TMPDIR>/summer-gen/.
|
|
66
68
|
required:
|
|
67
69
|
- prompt
|
|
68
70
|
additionalProperties: false
|