gooseworks 0.5.0-dev.9.d3e7757f → 0.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/README.md +17 -26
- package/dist/auth/device-flow.d.ts +10 -0
- package/dist/auth/device-flow.d.ts.map +1 -1
- package/dist/auth/device-flow.js +39 -1
- package/dist/auth/device-flow.js.map +1 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +3 -1
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/video.d.ts +5 -0
- package/dist/commands/video.d.ts.map +1 -0
- package/dist/commands/video.js +117 -0
- package/dist/commands/video.js.map +1 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +5 -2
- package/dist/config.js.map +1 -1
- package/dist/environment.d.ts.map +1 -1
- package/dist/environment.js +4 -2
- package/dist/environment.js.map +1 -1
- package/dist/kit/core/bind.d.ts +12 -0
- package/dist/kit/core/bind.d.ts.map +1 -0
- package/dist/kit/core/bind.js +77 -0
- package/dist/kit/core/bind.js.map +1 -0
- package/dist/kit/core/canonical.d.ts +30 -0
- package/dist/kit/core/canonical.d.ts.map +1 -0
- package/dist/kit/core/canonical.js +67 -0
- package/dist/kit/core/canonical.js.map +1 -0
- package/dist/kit/core/check.d.ts +22 -0
- package/dist/kit/core/check.d.ts.map +1 -0
- package/dist/kit/core/check.js +53 -0
- package/dist/kit/core/check.js.map +1 -0
- package/dist/kit/core/device.d.ts +17 -0
- package/dist/kit/core/device.d.ts.map +1 -0
- package/dist/kit/core/device.js +153 -0
- package/dist/kit/core/device.js.map +1 -0
- package/dist/kit/core/errors.d.ts +22 -0
- package/dist/kit/core/errors.d.ts.map +1 -0
- package/dist/kit/core/errors.js +49 -0
- package/dist/kit/core/errors.js.map +1 -0
- package/dist/kit/core/files.d.ts +49 -0
- package/dist/kit/core/files.d.ts.map +1 -0
- package/dist/kit/core/files.js +213 -0
- package/dist/kit/core/files.js.map +1 -0
- package/dist/kit/core/host.d.ts +26 -0
- package/dist/kit/core/host.d.ts.map +1 -0
- package/dist/kit/core/host.js +10 -0
- package/dist/kit/core/host.js.map +1 -0
- package/dist/kit/core/log.d.ts +17 -0
- package/dist/kit/core/log.d.ts.map +1 -0
- package/dist/kit/core/log.js +82 -0
- package/dist/kit/core/log.js.map +1 -0
- package/dist/kit/core/paths.d.ts +27 -0
- package/dist/kit/core/paths.d.ts.map +1 -0
- package/dist/kit/core/paths.js +103 -0
- package/dist/kit/core/paths.js.map +1 -0
- package/dist/kit/core/pieces.d.ts +84 -0
- package/dist/kit/core/pieces.d.ts.map +1 -0
- package/dist/kit/core/pieces.js +374 -0
- package/dist/kit/core/pieces.js.map +1 -0
- package/dist/kit/core/progress-reporter.d.ts +30 -0
- package/dist/kit/core/progress-reporter.d.ts.map +1 -0
- package/dist/kit/core/progress-reporter.js +106 -0
- package/dist/kit/core/progress-reporter.js.map +1 -0
- package/dist/kit/core/progress.d.ts +22 -0
- package/dist/kit/core/progress.d.ts.map +1 -0
- package/dist/kit/core/progress.js +90 -0
- package/dist/kit/core/progress.js.map +1 -0
- package/dist/kit/core/run.d.ts +35 -0
- package/dist/kit/core/run.d.ts.map +1 -0
- package/dist/kit/core/run.js +850 -0
- package/dist/kit/core/run.js.map +1 -0
- package/dist/kit/core/save.d.ts +43 -0
- package/dist/kit/core/save.d.ts.map +1 -0
- package/dist/kit/core/save.js +265 -0
- package/dist/kit/core/save.js.map +1 -0
- package/dist/kit/core/schema.d.ts +5 -0
- package/dist/kit/core/schema.d.ts.map +1 -0
- package/dist/kit/core/schema.js +183 -0
- package/dist/kit/core/schema.js.map +1 -0
- package/dist/kit/core/secrets.d.ts +9 -0
- package/dist/kit/core/secrets.d.ts.map +1 -0
- package/dist/kit/core/secrets.js +60 -0
- package/dist/kit/core/secrets.js.map +1 -0
- package/dist/kit/core/style.d.ts +59 -0
- package/dist/kit/core/style.d.ts.map +1 -0
- package/dist/kit/core/style.js +179 -0
- package/dist/kit/core/style.js.map +1 -0
- package/dist/kit/core/toolchain.d.ts +52 -0
- package/dist/kit/core/toolchain.d.ts.map +1 -0
- package/dist/kit/core/toolchain.js +321 -0
- package/dist/kit/core/toolchain.js.map +1 -0
- package/dist/kit/core/version.d.ts +18 -0
- package/dist/kit/core/version.d.ts.map +1 -0
- package/dist/kit/core/version.js +33 -0
- package/dist/kit/core/version.js.map +1 -0
- package/dist/kit/env.d.ts +42 -0
- package/dist/kit/env.d.ts.map +1 -0
- package/dist/kit/env.js +76 -0
- package/dist/kit/env.js.map +1 -0
- package/dist/kit/line/client.d.ts +82 -0
- package/dist/kit/line/client.d.ts.map +1 -0
- package/dist/kit/line/client.js +325 -0
- package/dist/kit/line/client.js.map +1 -0
- package/dist/kit/line/types.d.ts +178 -0
- package/dist/kit/line/types.d.ts.map +1 -0
- package/dist/kit/line/types.js +18 -0
- package/dist/kit/line/types.js.map +1 -0
- package/dist/kit/maker/browser.d.ts +114 -0
- package/dist/kit/maker/browser.d.ts.map +1 -0
- package/dist/kit/maker/browser.js +547 -0
- package/dist/kit/maker/browser.js.map +1 -0
- package/dist/kit/maker/encode.d.ts +27 -0
- package/dist/kit/maker/encode.d.ts.map +1 -0
- package/dist/kit/maker/encode.js +58 -0
- package/dist/kit/maker/encode.js.map +1 -0
- package/dist/kit/maker/images.d.ts +14 -0
- package/dist/kit/maker/images.d.ts.map +1 -0
- package/dist/kit/maker/images.js +174 -0
- package/dist/kit/maker/images.js.map +1 -0
- package/dist/kit/maker/inputs.d.ts +81 -0
- package/dist/kit/maker/inputs.d.ts.map +1 -0
- package/dist/kit/maker/inputs.js +235 -0
- package/dist/kit/maker/inputs.js.map +1 -0
- package/dist/kit/maker/make.d.ts +19 -0
- package/dist/kit/maker/make.d.ts.map +1 -0
- package/dist/kit/maker/make.js +272 -0
- package/dist/kit/maker/make.js.map +1 -0
- package/dist/kit/maker/page.d.ts +19 -0
- package/dist/kit/maker/page.d.ts.map +1 -0
- package/dist/kit/maker/page.js +276 -0
- package/dist/kit/maker/page.js.map +1 -0
- package/dist/kit/maker/parts/html-frames/1.0.0/part.json +183 -0
- package/dist/kit/maker/parts/html-frames/src/part.d.ts +3 -0
- package/dist/kit/maker/parts/html-frames/src/part.d.ts.map +1 -0
- package/dist/kit/maker/parts/html-frames/src/part.js +10 -0
- package/dist/kit/maker/parts/html-frames/src/part.js.map +1 -0
- package/dist/kit/maker/runtime.d.ts +7 -0
- package/dist/kit/maker/runtime.d.ts.map +1 -0
- package/dist/kit/maker/runtime.js +571 -0
- package/dist/kit/maker/runtime.js.map +1 -0
- package/dist/kit/maker/unzip.d.ts +3 -0
- package/dist/kit/maker/unzip.d.ts.map +1 -0
- package/dist/kit/maker/unzip.js +133 -0
- package/dist/kit/maker/unzip.js.map +1 -0
- package/dist/kit/parts/catalog.d.ts +47 -0
- package/dist/kit/parts/catalog.d.ts.map +1 -0
- package/dist/kit/parts/catalog.js +198 -0
- package/dist/kit/parts/catalog.js.map +1 -0
- package/dist/kit/parts/fs-safe.d.ts +32 -0
- package/dist/kit/parts/fs-safe.d.ts.map +1 -0
- package/dist/kit/parts/fs-safe.js +185 -0
- package/dist/kit/parts/fs-safe.js.map +1 -0
- package/dist/kit/parts/loader.d.ts +50 -0
- package/dist/kit/parts/loader.d.ts.map +1 -0
- package/dist/kit/parts/loader.js +395 -0
- package/dist/kit/parts/loader.js.map +1 -0
- package/dist/kit/parts/semver.d.ts +6 -0
- package/dist/kit/parts/semver.d.ts.map +1 -0
- package/dist/kit/parts/semver.js +44 -0
- package/dist/kit/parts/semver.js.map +1 -0
- package/dist/program.d.ts.map +1 -1
- package/dist/program.js +6 -6
- package/dist/program.js.map +1 -1
- package/dist/skills/installer.d.ts +22 -0
- package/dist/skills/installer.d.ts.map +1 -1
- package/dist/skills/installer.js +56 -8
- package/dist/skills/installer.js.map +1 -1
- package/dist/skills/master-skill.d.ts +11 -70
- package/dist/skills/master-skill.d.ts.map +1 -1
- package/dist/skills/master-skill.js +120 -2900
- package/dist/skills/master-skill.js.map +1 -1
- package/dist/skills/package-freshness.d.ts +19 -0
- package/dist/skills/package-freshness.d.ts.map +1 -1
- package/dist/skills/package-freshness.js +37 -2
- package/dist/skills/package-freshness.js.map +1 -1
- package/dist/skills/routes.d.ts +7 -2
- package/dist/skills/routes.d.ts.map +1 -1
- package/dist/skills/routes.js +21 -25
- package/dist/skills/routes.js.map +1 -1
- package/dist/skills/server-entry-skills.d.ts +14 -0
- package/dist/skills/server-entry-skills.d.ts.map +1 -0
- package/dist/skills/server-entry-skills.js +119 -0
- package/dist/skills/server-entry-skills.js.map +1 -0
- package/dist/skills/staging-content.js +1 -1
- package/package.json +10 -6
- package/skills/goose-ads/SKILL.md +27 -605
- package/skills/goose-product-photos/SKILL.md +24 -217
- package/skills/goose-video/SKILL.md +23 -610
- package/skills/goose-video-local/SKILL.md +3 -1609
- package/skills/gooseworks/SKILL.md +58 -529
- package/skills/make-custom-video/SKILL.md +23 -725
- package/skills/manifest.json +7 -7
- package/skills/routes.json +10 -24
- package/dist/commands/video-local.d.ts +0 -9
- package/dist/commands/video-local.d.ts.map +0 -1
- package/dist/commands/video-local.js +0 -83
- package/dist/commands/video-local.js.map +0 -1
- package/dist/commands/video-save.d.ts +0 -3
- package/dist/commands/video-save.d.ts.map +0 -1
- package/dist/commands/video-save.js +0 -83
- package/dist/commands/video-save.js.map +0 -1
- package/dist/lib/video-local-captions.d.ts +0 -83
- package/dist/lib/video-local-captions.d.ts.map +0 -1
- package/dist/lib/video-local-captions.js +0 -261
- package/dist/lib/video-local-captions.js.map +0 -1
- package/dist/lib/video-local-runtime.d.ts +0 -8
- package/dist/lib/video-local-runtime.d.ts.map +0 -1
- package/dist/lib/video-local-runtime.js +0 -201
- package/dist/lib/video-local-runtime.js.map +0 -1
- package/dist/lib/video-save-mcp.d.ts +0 -9
- package/dist/lib/video-save-mcp.d.ts.map +0 -1
- package/dist/lib/video-save-mcp.js +0 -162
- package/dist/lib/video-save-mcp.js.map +0 -1
- package/dist/lib/video-save.d.ts +0 -77
- package/dist/lib/video-save.d.ts.map +0 -1
- package/dist/lib/video-save.js +0 -440
- package/dist/lib/video-save.js.map +0 -1
- package/dist/skills/custom-video-skill.d.ts +0 -3
- package/dist/skills/custom-video-skill.d.ts.map +0 -1
- package/dist/skills/custom-video-skill.js +0 -6
- package/dist/skills/custom-video-skill.js.map +0 -1
|
@@ -1,230 +1,37 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: goose-product-photos
|
|
3
3
|
slug: goose-product-photos
|
|
4
|
-
description:
|
|
5
|
-
GooseWorks Product Photos — turn a brand's product images into publish-ready photography
|
|
6
|
-
(clean studio shots, lifestyle scenes, on-model looks) while keeping the product faithful
|
|
7
|
-
(silhouette, materials, logo, colorway). You pick a brand + product and submit; the GooseWorks
|
|
8
|
-
backend runs the SAME server-side pipeline the Product Photos studio uses (compose → generate →
|
|
9
|
-
judge → auto-retry) and bills credits. Use when the user says "make product photos", "shoot my
|
|
10
|
-
product", "studio/lifestyle/on-model photo of <product>", "generate product photography", or
|
|
11
|
-
references a product to photograph. Unlike goose-ads (ad creative) this produces clean PRODUCT
|
|
12
|
-
photos that can then feed the ad workflow.
|
|
4
|
+
description: Make product photos (studio, lifestyle or on a model) of a brand's real products with GooseWorks in this chat. Start with brand_read and follow the next_step in every answer.
|
|
13
5
|
category: ads
|
|
14
|
-
version: 0.
|
|
6
|
+
version: 1.0.0
|
|
15
7
|
author: GooseWorks
|
|
16
|
-
tags: [gooseworks, ads, product-photos, photoshoot, product, ecommerce, studio, lifestyle, on-model]
|
|
17
8
|
---
|
|
18
9
|
|
|
19
|
-
# GooseWorks
|
|
10
|
+
# GooseWorks product photos
|
|
20
11
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
fidelity → auto-retry a few times for free) and stores the results. You do NOT
|
|
24
|
-
generate images, call a model, or manage files — this is the exact same workflow the Product
|
|
25
|
-
Photos studio uses, so the skill and the app can never drift. The point is to **enrich a brand's
|
|
26
|
-
usable product imagery** — approved photos join the brand kit and can then feed the ad workflow
|
|
27
|
-
(`goose-ads`).
|
|
12
|
+
Use GooseWorks to photograph the customer's physical products, here in this chat. A software
|
|
13
|
+
screen or an app is not a product photo.
|
|
28
14
|
|
|
29
|
-
|
|
30
|
-
|
|
15
|
+
- Offer the brand's real products from brand_read; never describe one you can't see. A product
|
|
16
|
+
that isn't listed yet: brand_update adds it from its page. A photo the customer sends:
|
|
17
|
+
media_upload.
|
|
18
|
+
- photos_generate makes the photos: get its price first, tell the customer the credit total, and
|
|
19
|
+
make them only after their yes. Show a person only when the customer asks for one and confirms
|
|
20
|
+
they have the rights.
|
|
21
|
+
- Follow the photos with photos_read until they are ready.
|
|
22
|
+
- Keep or drop photos with media_update. Only kept photos join the brand kit and reach ads.
|
|
31
23
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
The customer is a marketer or founder, not an engineer. Everything in this skill about tools,
|
|
35
|
-
fields, files, polling, models and pipeline steps is for YOU. Never pass it on to them.
|
|
36
|
-
|
|
37
|
-
- **Say what they get and what they need to decide, never how it's made.**
|
|
38
|
-
Bad: "Checking the media-proxy helpers for voiceover timestamps and lipsync." / "Generated with
|
|
39
|
-
gpt-image-2 at high quality, mouth closed, passes QC."
|
|
40
|
-
Good: "Recording the voices now." / "Here are your two hosts."
|
|
41
|
-
- **Never mention** tool, file or field names, ids, JSON, commands, scripts, installed software,
|
|
42
|
-
uploads, model or vendor names, timings in seconds or frames, retries, polling, internal statuses
|
|
43
|
-
or your own quality checks. Fix what you can quietly. If they ask how something works, explain it
|
|
44
|
-
simply.
|
|
45
|
-
- **Update them only at milestones they care about**: choices confirmed, script and voices done,
|
|
46
|
-
visuals done, ready to review, finished. One short line each, then stay quiet until the next
|
|
47
|
-
milestone. No update for setup, downloads, uploads or saving.
|
|
48
|
-
- **Money is in credits, with a number**: "the full video uses about N credits". Never "the cheap
|
|
49
|
-
pieces" or "the expensive render".
|
|
50
|
-
- **Problems:** say what it means for them and what they can do, in one or two sentences. No error
|
|
51
|
-
codes or stack traces. Only raise a problem that changes something for them.
|
|
52
|
-
- **Use their words**: script, voice, hook, scene, host, ending, logo, the product shot.
|
|
53
|
-
- **No filler**: no "Great question!", "Certainly!", "I hope this helps!", no restating what they
|
|
54
|
-
just said at length.
|
|
55
|
-
|
|
56
|
-
Example. Instead of a dozen lines about render tools, scripts, uploads and portraits, send:
|
|
57
|
-
"Got it: warm tone, home podcast studio, Brielle as the skeptic and Mark as the believer." then
|
|
58
|
-
"Script and voices are done (about 34 seconds)." then "Ready for you to review: the script, voices,
|
|
59
|
-
both hosts and the ending. You can also review your recipe ingredients in the app: <link>. Say go
|
|
60
|
-
here and I'll make the full video (about N credits)."
|
|
61
|
-
|
|
62
|
-
## Use current instructions for new work
|
|
63
|
-
|
|
64
|
-
Before a new task in a terminal host, run `gooseworks skills status` once. It compares the
|
|
65
|
-
installed entry files, running CLI and published npm release. An older CLI needs a package
|
|
66
|
-
upgrade before `gooseworks update`; update alone only uses that CLI's bundled instructions.
|
|
67
|
-
Preserve local edits or unknown install provenance. Review/back up before explicitly replacing
|
|
68
|
-
modified files; never quietly reinstall over them. If the release check is unavailable, report
|
|
69
|
-
that freshness is unknown rather than claiming the local copy is latest.
|
|
70
|
-
|
|
71
|
-
For a new recipe run, fetch its package from the connected catalog. Retain the returned
|
|
72
|
-
`version` / `contentHash` and every dependency's hash with the saved package. When reusing a
|
|
73
|
-
saved fetch JSON, `gooseworks fetch <slug> --saved-package <file>` returns the current package
|
|
74
|
-
and a hash comparison without changing that file. With MCP, if the advertised `catalog_fetch`
|
|
75
|
-
schema accepts them, send `saved_content_hash` and `saved_dependency_hashes`; otherwise fetch
|
|
76
|
-
normally and compare the returned hashes yourself. Missing hashes mean unknown, not current.
|
|
77
|
-
The server cannot inspect a client's saved files; hash metadata does not certify later edits.
|
|
78
|
-
Fetch current packages into a new run directory and report stale saved instructions. Preserve
|
|
79
|
-
an existing approved run's recorded package; changing that harness requires a reviewed change
|
|
80
|
-
and approval before spending. Hosted installed snapshots use the existing Skills Update action.
|
|
81
|
-
Skill content and a host's cached MCP tool schemas are separate: refreshing one does not refresh
|
|
82
|
-
the other. Check the actual advertised tools before using new fields.
|
|
83
|
-
|
|
84
|
-
## No GooseWorks tools in this session? Call them through the CLI
|
|
85
|
-
|
|
86
|
-
The GooseWorks tools named here (for example `account_whoami`, `brand_onboarding`,
|
|
87
|
-
`brand_read`) normally come from the GooseWorks connector. If they are not registered in this
|
|
88
|
-
session but you have a shell with the `gooseworks` CLI signed in (a cloud sandbox such as
|
|
89
|
-
ChatGPT agent, Meta AI or Grok), call the same tool from the shell:
|
|
90
|
-
|
|
91
|
-
```bash
|
|
92
|
-
npx gooseworks tool <name> '<arguments as a JSON object>'
|
|
93
|
-
```
|
|
94
|
-
|
|
95
|
-
- Run `npx gooseworks tool --list` once first. It prints the server's rules for using the tools
|
|
96
|
-
and every tool name; `npx gooseworks tool <name> --schema` shows one tool's arguments.
|
|
97
|
-
- The result prints as JSON. When a tool answers with a one-line summary, the fields you act on
|
|
98
|
-
(such as `next_step` and ids) follow under "Data:". It exits 1 when the tool reports an error.
|
|
99
|
-
- Nothing renders as a widget here, so tell the user the result in plain words.
|
|
100
|
-
- The same rules apply as over the connector: state the credit total and get the user's yes
|
|
101
|
-
before paid work.
|
|
102
|
-
- If it says you are not logged in, run `npx gooseworks login --device --no-wait`, show the
|
|
103
|
-
user the link and code it prints, and run `npx gooseworks login --device` once they approve.
|
|
104
|
-
|
|
105
|
-
When the tools are registered in this session, call them directly instead.
|
|
106
|
-
|
|
107
|
-
## Prerequisite — the GooseWorks connector tools
|
|
108
|
-
|
|
109
|
-
Everything below runs through the GooseWorks connector's tools, by the names this skill uses.
|
|
110
|
-
Match on the tool name: a coding agent may show a server prefix (for example
|
|
111
|
-
`mcp__gooseworks__photos_generate`), a chat app may not.
|
|
112
|
-
|
|
113
|
-
If a tool named here is missing, the GooseWorks connection or its tool list is stale: ask the
|
|
114
|
-
user to reconnect or refresh GooseWorks in their app's connector settings. Installing or
|
|
115
|
-
updating the `gooseworks` CLI never fixes a missing connector tool, so never send a chat-app
|
|
116
|
-
user to a terminal for it. Only a terminal coding agent (Claude Code, Codex, Cursor) that has no
|
|
117
|
-
GooseWorks tools at all connects them, in that terminal, with `gooseworks install --mcp` plus
|
|
118
|
-
`--claude`, `--codex` or `--cursor`, then a restart.
|
|
119
|
-
|
|
120
|
-
Older notes or skill copies may name tools the connector no longer lists. Use the tool this skill
|
|
121
|
-
names instead; `catalog_fetch { type: "skill", slug: "gooseworks-guide" }` maps every old name.
|
|
122
|
-
|
|
123
|
-
## Start from the brand context — don't re-ask what it already answers
|
|
124
|
-
|
|
125
|
-
If the `gooseworks` router handed you brand context, USE IT. If you were invoked directly, call
|
|
126
|
-
`brand_read { brand_id, sections: ["summary","kit","products","learnings"] }` yourself first, then
|
|
127
|
-
`knowledge_search { brand_id, query: "<the shoot, in the user's words>" }` for saved rules and past
|
|
128
|
-
feedback (an archived photo's reason is saved as a `dont` rule). They answer most of the setup
|
|
129
|
-
questions below, so **do not ask the user for them**:
|
|
130
|
-
|
|
131
|
-
- **Which product?** — the context's `products` are the real catalog entries. Offer them; never
|
|
132
|
-
invent a product or ask the user to describe one you can already see.
|
|
133
|
-
- **What does it look like / what is it made of?** — grounded in the product's stored images and
|
|
134
|
-
description. Never guess a material, colorway, or silhouette.
|
|
135
|
-
- **What vibe / who is it for?** — the context's voice, positioning, and audience already say. Let
|
|
136
|
-
them shape the scene and styling instead of asking "what mood do you want?".
|
|
137
|
-
- **Brand look** — logo, colors, and fonts are owned by the backend research pass. Read them, never
|
|
138
|
-
re-derive them.
|
|
139
|
-
|
|
140
|
-
Ask only for the genuinely open choices: the shot `category`, how many photos, quality, and
|
|
141
|
-
whether a human model is wanted (which needs explicit consent — see the rules).
|
|
142
|
-
|
|
143
|
-
## Credits — state the total, then get a yes
|
|
144
|
-
|
|
145
|
-
- One token authenticates the tools and resolves your org; never print it. Omit `target`.
|
|
146
|
-
- **Quote first.** Call `photos_generate` with the exact arguments you will submit plus
|
|
147
|
-
`dry_run: true`. It reserves nothing and returns `creditsPerOutput` and `totalCredits`. Pass
|
|
148
|
-
`count` and `quality` explicitly in both calls so the quote matches the run.
|
|
149
|
-
- **Nothing paid runs without the user's explicit yes in this chat, given after you state that
|
|
150
|
-
credit total.** Then submit the same call without `dry_run`.
|
|
151
|
-
- The submit reserves the quoted credits and bills only the photos that pass the judge:
|
|
152
|
-
**automatic retries are free**, and a photo the judge can't get right (`flagged`) is shown but
|
|
153
|
-
**never billed**. The balance is `credits.available_credits` from `account_whoami`. If the
|
|
154
|
-
wallet is short, say so plainly with the total and the balance, and stop.
|
|
155
|
-
|
|
156
|
-
## The tools
|
|
157
|
-
|
|
158
|
-
**Pick the brand + product**
|
|
159
|
-
- `brand_read` with no `brand_id` — the user's brands (each row's `id` is the `brand_id`).
|
|
160
|
-
- `brand_read { brand_id, sections: ["products"], products_query: "<name>" }` — the brand's
|
|
161
|
-
imported products in `products.items`; a product's `id` is the `product_id` to shoot.
|
|
162
|
-
`products_query` matches name / type / variant / SKU / description.
|
|
163
|
-
- Import a product that isn't in the catalog yet (free):
|
|
164
|
-
`brand_update { brand_id, patch: { products: [{ import_url, import_kind, name? }] } }`.
|
|
165
|
-
`import_kind` is `product_url` (a single product page), `shopify_store` (a store URL → imports
|
|
166
|
-
the catalog), or `image_url` (a direct image; also needs `name`). It returns `jobs[]`: poll
|
|
167
|
-
`job_get { job_id, kind: "product_import" }` until it finishes, then read the products again.
|
|
168
|
-
To add a photo the user attached to an existing product:
|
|
169
|
-
`media_upload { brand_id, scope: "product", scope_id: <product_id>, kind: "reference", source: { type: "bytes", filename, content_base64 } }`.
|
|
170
|
-
|
|
171
|
-
**Generate**
|
|
172
|
-
- `photos_generate { brand_id, product_id, variant_id?, category, controls?, prompt?, count,
|
|
173
|
-
quality, reference_image_urls?, attestation_accepted?, dry_run? }` — **the one call that makes
|
|
174
|
-
photos** (and, with `dry_run: true`, its free quote). `category` is `apparel` | `beauty` |
|
|
175
|
-
`cpg` (seeds sensible scene/framing defaults). `count` is 1, 2, 4, or 8; `quality` is
|
|
176
|
-
`low` | `medium` | `high`. Omit `controls` to use the category preset; pass `prompt` as
|
|
177
|
-
free-text steering **added on top of** the settings (it doesn't replace them). Returns the
|
|
178
|
-
generation with its `id` **immediately**.
|
|
179
|
-
**If you request a human model** (`controls.model.presence` is not `none`) you MUST pass
|
|
180
|
-
`attestation_accepted: true` to confirm the user has the rights for model imagery.
|
|
181
|
-
- `photos_read { brand_id, generation_id }` — poll until `status` is `complete`,
|
|
182
|
-
`partial_failure`, or `failed` (`job_get { job_id: <generation id>, kind: "photo_generation" }`
|
|
183
|
-
works too). Each `outputs[]` entry has its own `id`, `status` and, once ready, a
|
|
184
|
-
`final_image_url`. A `flagged` output is the best attempt but wasn't billed.
|
|
185
|
-
|
|
186
|
-
**Use the results**
|
|
187
|
-
- `photos_read { brand_id, archived?, product_id?, status? }` — the brand's generated photos
|
|
188
|
-
(`archived: false` = active, `true` = archived).
|
|
189
|
-
- `photos_update { brand_id, output_id, action: "approve" }` — approve a photo: links it to the
|
|
190
|
-
product and makes it available in the **brand kit**, so `goose-ads` can use it. **Photos are
|
|
191
|
-
not used anywhere until approved.**
|
|
192
|
-
- `photos_update { brand_id, output_id, action: "archive", reason? }` — archive a photo; archived
|
|
193
|
-
photos are **excluded** from ad generation, and the reason is saved as a `dont` rule.
|
|
194
|
-
|
|
195
|
-
## Workflow — shoot a product
|
|
196
|
-
|
|
197
|
-
1. **Load the brand context** (`brand_read` + `knowledge_search`, or reuse what the router passed
|
|
198
|
-
you) and **resolve the brand + product.** Pick a `product_id` from the catalog you already
|
|
199
|
-
know about. If the product genuinely isn't there, import it and poll the import.
|
|
200
|
-
2. **Quote the cost.** `photos_generate` with `dry_run: true` and the exact `brand_id`,
|
|
201
|
-
`product_id`, `category`, `count` and `quality` → tell the user the credit total and wait
|
|
202
|
-
for their explicit yes.
|
|
203
|
-
3. **Generate.** The same `photos_generate` call without `dry_run` (add `prompt` built from the
|
|
204
|
-
brand's voice/positioning you already have — don't interview the user for it). Returns a
|
|
205
|
-
generation `id` right away.
|
|
206
|
-
4. **Poll.** `photos_read { brand_id, generation_id }` every ~20-30s until terminal; show each
|
|
207
|
-
`final_image_url`.
|
|
208
|
-
5. **Approve the keepers.** Show the results and let the user pick; `photos_update` with
|
|
209
|
-
`action: "approve"` the ones they'd publish (that's what puts them in the brand kit for ads),
|
|
210
|
-
`action: "archive"` the rest.
|
|
24
|
+
Then follow the next_step in every answer.
|
|
211
25
|
|
|
212
26
|
## Rules
|
|
213
27
|
|
|
214
|
-
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
-
|
|
218
|
-
|
|
219
|
-
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
-
|
|
223
|
-
|
|
224
|
-
- **Poll, don't re-submit.** A generation that's still `running` is not stuck; re-submitting
|
|
225
|
-
double-bills. A `failed` generation may still hold `flagged` photos (shown, never billed):
|
|
226
|
-
show those first, and run again only after a new quote and the user's yes.
|
|
227
|
-
- **Model imagery needs consent.** Only set a human model when the user asks, and pass
|
|
228
|
-
`attestation_accepted: true`.
|
|
229
|
-
- **Approval is the hand-off to ads.** Remind the user that only **approved** photos reach the brand
|
|
230
|
-
kit / ad workflow; archived ones never do.
|
|
28
|
+
- Talk to marketers: what they get and what they decide, never how it is made.
|
|
29
|
+
- Never mention tools, ids, JSON, commands, software, vendors, models, timings, retries or your checks.
|
|
30
|
+
- Everything happens in this chat: never ask the customer to install anything or use a CLI, slash command or other app; the only commands are gooseworks video check and gooseworks video make <id>, when a next_step gives them.
|
|
31
|
+
- Money is a credit number, exactly as an answer gives it: never dollars, never your own math.
|
|
32
|
+
- Follow the next_step in every answer; it says what to do now.
|
|
33
|
+
- With a card on screen (display_hint "widget"), add at most one short line; never re-list it or its links.
|
|
34
|
+
- Paid work needs the customer's yes to the credit total first. For video only their click on the plan card counts; you never approve.
|
|
35
|
+
- Before choosing an angle, claim, product or source, or asking a brand fact: brand_read, then knowledge_search for the task.
|
|
36
|
+
- Never invent an offer, a claim or proof.
|
|
37
|
+
- GooseWorks holds every provider key and bills the work: never ask for a key, token, password or ad account id, and never call a vendor yourself.
|