SurgePix
Brand Placement Lock
Generate images while locking a brand logo and/or fixed text to a stable position and scale, so every output under the same lock profile keeps those elements in the same place. SurgePix Brand Placement locks your logo and tagline to a fixed 9-grid anchor, so every AI-generated poster, Amazon lifestyle image, ecommerce banner, and brand marketing campaign stays perfectly on-brand. Upload your transparent PNG logo and fixed text once, then generate on-brand variations in bulk with identical logo size, margin, and position. Ideal for Amazon Storefront branding, Shopify series posters, Instagram branding, and franchise brand marketing. No drifting, no rewriting, no covering — just scalable branding consistency for ecommerce growth.
npx skills add https://github.com/surgepix/agent-skills --skill surgepix-generate-brand-placementSurgePix Fixed Text Position Across Generations
This skill is about positional consistency of locked brand elements, not about inventing a new logo. To create a logo first, use surgepix-generate-logo.
What the Skill Does
| Action | Description |
|---|---|
| Lock logo position | Place a provided logo at --logo-anchor; size and margin follow platform defaults |
| Lock fixed text | Place brand text / slogan at --text-anchor — never rewrite the locked string |
| Choose output format | Logo and fixed text each have their own nine-grid anchor; they may share a zone or sit in different corners |
| Keep layout stable | With the same lock flags, batch outputs and re-runs keep locked elements at the same relative position and scale |
| Free the rest | Only the unlocked area (scene / subject / background) may change per --prompt |
| Set output count | Output piece count is driven by --count (default 1, range 1-9) and the series intent in --prompt — not by how many --reference files are uploaded |
| Reference images | Optional style / mood / composition references only — not one-to-one edit bases; reference count does not change output count |
| Set output size | Set a uniform output size via --size; when omitted, use the API default (references do not set per-piece sizes) |
| Check task status | When run with --nowait true, look up via taskId using surgepix-query-task |
| Download result | Returns a single image URL for one piece; a ZIP containing all pieces for multiple |
By default ( --nowait false) the API waits for completion and returns the final download link directly.Pass --nowait true to get a taskId immediately; then check progress via the surgepix-query-task skill. | |
Workflow
Step 0: Check environment (required)
Before running, verify config:
node "<skills-dir>/surgepix-setup/scripts/check_env.mjs"
- Exit 0 → proceed to Step 1
- Exit 1 → configure
.envfollowing the surgepix-setup skill, then retry
Step 1: Gather inputs
Input Required? Description --promptRequired Unlocked scene guidance; do not describe placement --logoConditionally required At least one of --logo/--fixed-text; local path or URL; prefer transparent PNG--fixed-textConditionally required At least one of --logo/--fixed-text; exact fixed text string to lock--referenceOptional Style / mood / composition reference(s); repeatable; does not set output count; JPEG/JPG/PNG/WEBP, max 20 MB each--logo-anchorOptional Logo nine-grid anchor when --logois set; defaulttop-right--text-anchorOptional Fixed-text nine-grid anchor when --fixed-textis set; defaulttop-right--countOptional Output piece count, 1-9, default1; align with series intent in--prompt--sizeOptional Uniform WxH; omitted -> API default--session-idOptional Frontend session grouping only; not a regenerate switch --nowaitOptional Default falseStep 2: Run generate-brand-placement
node "<skills-dir>/surgepix-lock-brand-mark-position/scripts/lock_brand_mark_position.mjs" \ --prompt "<scene guidance>" \ [--logo "<path-or-url>"] [--logo-anchor <anchor>] \ [--fixed-text "<text>"] [--text-anchor <anchor>] \ [--reference "<path-or-url>" ...] [--count <1-9>] \ [--size <WxH>] [--session-id <id>] [--nowait <true|false>]
Flag Required? Description --prompt <text>Required Scene guidance --logo <path-or-url>Conditionally required Logo to lock; at least one of --logo/--fixed-text--logo-anchor <value>Optional Logo nine-grid; default --top-right(ignored if no--logo)--fixed-text <text>Conditionally required Exact fixed text; at least one of --logo/--fixed-text--text-anchor <value>Optional Fixed-text nine-grid; default top-right(ignored if no--fixed-text)--reference <path-or-url>Optional Style reference(s); repeatable; does not change output count --count <1-9>Optional Output piece count; default 1driven by count + prompt intent, not reference count--size <WxH>Optional Uniform output size; omitted -> API default --session-id <id>Optional Numeric sessionId; frontend session grouping only - not for regeneration--nowait <true|false>Optional Default false;truereturnstaskIdStep 3: Parse output
Sync success (single):
{"ok":true,"taskId":"task_abc123","sessionId":123,"progress":"succeeded","download":"https://...","imageCount":1,"resultType":"zip","note":"API 仅返回 ZIP 下载地址,不含单张图片 URL;禁止编造单张链接"}
Async submitted (ZIP):
{"ok":true,"taskId":"task_abc123","sessionId":123,"progress":"succeeded","download":"https://.../xxx.zip","imageCount":4,"resultType":"zip"}
Async submitted:
{"ok":true,"async":true,"taskId":"task_abc123","sessionId":123,"progress":"processing","download":null,"hint":"..."}
Failure:
{"ok":false,"error":"..."}
Step 4: Present result
- On success: Show
download; for multiple pieces show only the ZIP;sessionIdis optional to show (frontend grouping) - On failure: Report the
errorfield. Common causes:missing_required_param/unsupported_image_format/image_too_large/invalid_param_value/generation_failed - When the user is not satisfied:
- Local changes -> switch to image-edit
- Full redo -> update
--promptand lock-related flags /--countand re-run this skill - Do not treat
--session-idas a regenerate mechanism
- On success: Show
Create & Edit Visuals with AI
© 2026 SurgePix. All rights reserved. Made with ❤️ for productivity.