SurgePix

SurgePix

Home>Skills Library>Generate Brand Placement

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-placement

SurgePix 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

ActionDescription
Lock logo positionPlace a provided logo at --logo-anchor; size and margin follow platform defaults
Lock fixed textPlace brand text / slogan at --text-anchor — never rewrite the locked string
Choose output formatLogo and fixed text each have their own nine-grid anchor; they may share a zone or sit in different corners
Keep layout stableWith the same lock flags, batch outputs and re-runs keep locked elements at the same relative position and scale
Free the restOnly the unlocked area (scene / subject / background) may change per --prompt
Set output countOutput 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 imagesOptional style / mood / composition references only — not one-to-one edit bases; reference count does not change output count
Set output sizeSet a uniform output size via --size; when omitted, use the API default (references do not set per-piece sizes)
Check task statusWhen run with --nowait true, look up via taskId using surgepix-query-task
Download resultReturns 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

  1. 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 .env following the surgepix-setup skill, then retry
  2. Step 1: Gather inputs

    InputRequired?Description
    --promptRequiredUnlocked scene guidance; do not describe placement
    --logoConditionally requiredAt least one of --logo / --fixed-text; local path or URL; prefer transparent PNG
    --fixed-textConditionally requiredAt least one of --logo / --fixed-text; exact fixed text string to lock
    --referenceOptionalStyle / mood / composition reference(s); repeatable; does not set output count; JPEG / JPG / PNG / WEBP, max 20 MB each
    --logo-anchorOptionalLogo nine-grid anchor when --logo is set; default top-right
    --text-anchorOptionalFixed-text nine-grid anchor when --fixed-text is set; default top-right
    --countOptionalOutput piece count, 1-9, default 1; align with series intent in --prompt
    --sizeOptionalUniform WxH; omitted -> API default
    --session-idOptionalFrontend session grouping only; not a regenerate switch
    --nowaitOptionalDefault false
  3. Step 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>]
    FlagRequired?Description
    --prompt <text>RequiredScene guidance
    --logo <path-or-url>Conditionally requiredLogo to lock; at least one of --logo / --fixed-text
    --logo-anchor <value>OptionalLogo nine-grid; default --top-right (ignored if no --logo)
    --fixed-text <text>Conditionally requiredExact fixed text; at least one of --logo / --fixed-text
    --text-anchor <value>OptionalFixed-text nine-grid; default top-right (ignored if no --fixed-text)
    --reference <path-or-url>OptionalStyle reference(s); repeatable; does not change output count
    --count <1-9>OptionalOutput piece count; default 1 driven by count + prompt intent, not reference count
    --size <WxH>OptionalUniform output size; omitted -> API default
    --session-id <id>OptionalNumeric sessionId; frontend session grouping only - not for regeneration
    --nowait <true|false>OptionalDefault false ; true returns taskId
  4. Step 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":"..."}
  5. Step 4: Present result

    • On success: Show download; for multiple pieces show only the ZIP; sessionId is optional to show (frontend grouping)
    • On failure: Report the error field. 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 --prompt and lock-related flags / --count and re-run this skill
      • Do not treat --session-id as a regenerate mechanism