Generated banner for Higgsfield Brandkit
Generated logo for Higgsfield Brandkit

Higgsfield Brandkit

Higgsfield AIOfficialPublished by Higgsfield AI

  • Skill
  • Content generator
  • Design and creative
  • MIT
  • Medium risk
  • Has scripts

From the author

Create and extend complete visual brand systems through the Higgsfield CLI and bundled deterministic local tooling: palettes, SVG logo marks, typography, mockups, social graphics, packaging, signage, merchandise, posters, presentation decks, and editable PPTX/PDF brandbooks. Preserves official supplied assets, persists approvals locally, and regenerates only dependent outputs. Use when: "create a brand kit", "make a visual identity", "design a logo and brandbook", "apply this logo to branded assets", "make packaging or signage", or "extend our existing branding". Chain with higgsfield-generate for general image production and Marketing Studio brand-kits when importing website metadata for ads. NOT for unbranded image generation (use higgsfield-generate), product catalog photography (use higgsfield-product-photoshoot), website implementation (use higgsfield-websites), or native Figma/Canva/PSD/AI delivery.
— the description by Higgsfield AI

AutoGineer summary

Written by AutoGineer from the skill’s own files, not by the author

Higgsfield-brandkit is a deterministic tool designed to create and extend visual brand systems. It manages the lifecycle of brand assets including logos, palettes, typography, and various marketing materials like posters, packaging, and presentation decks. The tool emphasizes consistency by locking authoritative assets and ensuring that generated outputs adhere to established brand constraints. It supports the creation of editable brandbooks and manages the state of approvals locally to prevent redundant work or unauthorized deviations from the brand identity.

What it does

  • Generates and manages visual brand elements like logos, palettes, and typography.
  • Creates marketing assets including social graphics, posters, packaging, and merchandise.
  • Builds editable brandbooks and presentation decks in PPTX and PDF formats.
  • Maintains a local state of approved assets to ensure consistency across all outputs.
  • Imports and analyzes existing brand metadata for use in new designs.
  • Enforces strict adherence to defined brand rules and constraints during generation.

When to use it

  • When you need to create a new visual identity or brand kit from scratch.
  • When you need to extend an existing brand system with new marketing materials.
  • When you need to generate branded assets while ensuring they match official logo and color specifications.
  • When you need to produce consistent, editable brand documentation like brandbooks or decks.

Advantages

  • Ensures visual consistency by locking authoritative assets as the source of truth.
  • Reduces manual effort by automating the generation of dependent brand assets.
  • Provides a structured workflow for reviewing and approving brand elements.
  • Supports deterministic outputs for specific brand requirements.
  • Maintains local project state for efficient iteration and revision.

Usage examples

“Create a brand kit for my new coffee shop.”
The agent will initiate the brand identity workflow, starting with palette and logo development based on your input.
“Apply our existing logo to a new set of social media graphics.”
The agent will analyze your official logo and brand assets to generate consistent social media templates.
“Design a brandbook for our company.”
The agent will compile your approved logo, palette, and typography into an editable brandbook document.
“Extend our current branding to include packaging designs.”
The agent will use your existing brand lock to generate packaging concepts that align with your established visual identity.

Install

  1. Download the skill as a ZIP:

    https://autogineer.com/agent-skills/higgsfield-ai/higgsfield-brandkit/download
  2. Unzip it into the cross-client skills folder of your project:

    mkdir -p .agents/skills && unzip higgsfield-brandkit.zip -d .agents/skills

Documentation by Higgsfield AI

Higgsfield Brandkit

Build a coherent identity and its requested applications. Treat supplied brand facts and official assets as fixed constraints.

Bootstrap

  1. Resolve SKILL_ROOT to this skill's installed directory and create a durable project directory:

    BRANDKIT_WORKDIR="${PWD}/brandkit"
    BRANDKIT_STATE="${BRANDKIT_WORKDIR}/state.json"
    mkdir -p "${BRANDKIT_WORKDIR}"
  2. Read prerequisites. Check tools before the stage that needs them. Never install system packages without the user's permission.

  3. If higgsfield is missing, install it only after permission:

    curl -fsSL https://raw.githubusercontent.com/higgsfield-ai/cli/main/install.sh | sh
  4. If higgsfield account status fails with an authentication or workspace error, ask the user to run higgsfield auth login or select a workspace, then wait.

  5. Inspect live model contracts before paid generation:

    higgsfield model get recraft_v4_1 --json
    higgsfield model get seedream_v5_pro --json
    higgsfield model get gpt_image_2 --json

CLI mapping

OperationCommand
Discover a modelhiggsfield model get <model> --json
Generate and pollhiggsfield generate create <model> ... --wait --json
Resume a jobhiggsfield generate wait <job_id> --json
Upload a local assethiggsfield upload create <path> --json
Import website metadatahiggsfield marketing-studio brand-kits fetch --url <url> --wait --json
Read/write approval statepython3 "$SKILL_ROOT/scripts/brandkit.py" state ...
Render review boardspython3 "$SKILL_ROOT/scripts/brandkit.py" preview ...
Inspect selected logopython3 "$SKILL_ROOT/scripts/brandkit.py" logo-inspect ...
Export logo filespython3 "$SKILL_ROOT/scripts/brandkit.py" logo-export ...
Build a Brandbookpython3 "$SKILL_ROOT/scripts/brandkit.py" brandbook-build ...

Local image paths passed with --image are auto-uploaded. Keep HTML, SVG, PPTX, and PDF deliverables as local project files unless the user explicitly needs a hosted copy.

User-facing behavior

  • Match the user's language. Keep Design Brain reasoning, prompts, state mechanics, scripts, model lookup, and QA internals private.

  • Send at most one short status sentence per visible generation batch, then stay quiet until the result is ready.

  • Ask one compact set of only unresolved blocking questions. Never repeat facts or force a complete identity questionnaire for a partial task.

  • After each palette, logo, typography, or downstream review, stop and wait for ordinary user feedback.

  • Never infer approval from silence, successful generation, or your own preference.

  • Preserve exact user copy. Never invent positioning, values, claims, ingredients, prices, certifications, statistics, or regulatory content.

Core workflow

  1. Classify the request.

    • apply-existing: use supplied official assets without redesigning them.

    • extend-partial: create only missing slots required by the requested output.

    • create-identity: create a new logo or identity only when explicitly requested.

  2. Read state. Run:

    python3 "$SKILL_ROOT/scripts/brandkit.py" state \
      --state-file "$BRANDKIT_STATE" --action get_status

    Local state is durable. Never paste, hand-edit, or recreate approvals when the state file exists.

  3. Run intake and asset analysis. Read intake, asset analysis, state routing, and exact state payloads. Lock every user-declared official logo, palette, and typography slot immediately.

  4. Create the Brand Lock. Read Brand Lock. Record exact spelling, official assets, colors, fonts, layout/shape rules, requested outputs, and forbidden treatments.

  5. Require only the slots the output uses.

    • logo-only → palette + logo for a new mark; official logo alone for an existing mark

    • palette-only → palette

    • typography-only → typography

    • copy-free mockup/merch → logo; add palette only when color/application requires it

    • text-bearing social/packaging/poster/signage → logo + palette + typography

    • Brandbook/deck → logo + palette + typography

  6. Build missing foundation slots. Read Design Brain, concept boards, inline reviews, and only the needed palette, logo, or typography module.

  7. Continue the original request as soon as its required slots are approved. Never ask the user to choose scope again.

  8. Load only the requested production module:

  9. QA and approval. Read QA and iteration. Repair only the failing output. Save a downstream element only after explicit approval with its exact foundation dependencies.

New identity sequence

1. Palette

Render 2–3 exact palette options as deterministic HTML using preview payloads. Show PNG screenshots plus editable HTML files and wait. Persist the selected palette with approve_palette before logo generation.

2. SVG logo marks

Read logo prompt enhancer. Produce exactly three distinct symbol-only mechanisms and one Recraft prompt for each. Write each long prompt to a file and submit separately:

higgsfield generate create recraft_v4_1 \
  --model_type vector \
  --colors @"${BRANDKIT_WORKDIR}/logo-colors.json" \
  --background_color '#F7F7F5' \
  --aspect_ratio 1:1 \
  --resolution 2k \
  --wait --json < "${BRANDKIT_WORKDIR}/logo-candidate-1.txt"

Use the returned SVG URLs directly for review. After selection, inspect the exact SVG without altering it:

python3 "$SKILL_ROOT/scripts/brandkit.py" logo-inspect \
  --source "<selected Recraft SVG URL or absolute local path>"

Persist the exact job ID, SVG URL, name, palette revision, and returned canonical geometry fingerprint with approve_logo.

3. Typography

Propose 2–3 unique display/body pairs using supplied fonts or verified Google Fonts. Render the real brand name and sample copy through the preview script. Persist only the selected pair with approve_typography.

Interactive flows always stop for palette, logo, and typography selections. Explicit no-question mode may choose and persist a palette, but it still shows all three SVG logo candidates and stops for the user's logo selection; exact brand marks are never self-approved.

Consistency invariants

  • Reuse the same approved logo source everywhere. Never redraw an official or selected SVG when deterministic placement/export is possible.

  • A generated logo depends on the palette revision used to create it. Changing that palette invalidates the generated logo and its dependents; changing typography does not invalidate the symbol mark.

  • Changing a foundation slot invalidates only downstream elements that list that slot in required_slots.

  • Copy the same Brand Lock values into every related generation prompt: exact hex, font roles, shape language, placement, clear space, composition, and forbidden treatments.

  • Use Recraft V4.1 vector mode only for new logo marks.

  • Use Seedream as the primary photoreal mockup generator. Use GPT Image 2 only for the controlled stage that adds readable text or exact graphic details.

  • Use local deterministic SVG/PPTX/HTML construction for exact copy and editable layouts. Do not ask an image model to fake editable files.

  • Do not promise native Figma, Canva, PSD, AI, or EPS files.

Deterministic scripts

Create JSON input files under "$BRANDKIT_WORKDIR"; never interpolate user text directly into shell arguments.

python3 "$SKILL_ROOT/scripts/brandkit.py" preview \
  --input "$BRANDKIT_WORKDIR/reviews.json" \
  --output-dir "$BRANDKIT_WORKDIR/reviews"

python3 "$SKILL_ROOT/scripts/brandkit.py" logo-export \
  --input "$BRANDKIT_WORKDIR/logo-export.json" \
  --output-dir "$BRANDKIT_WORKDIR/logo"

python3 "$SKILL_ROOT/scripts/brandkit.py" brandbook-build \
  --state-file "$BRANDKIT_STATE" \
  --input "$BRANDKIT_WORKDIR/brandbook.json" \
  --output-dir "$BRANDKIT_WORKDIR/brandbook"

For logo export, load logo export payloads. For Brandbooks, use the bundled builder only; never substitute an improvised PowerPoint or PDF generator after a deterministic contract failure.

Failure policy

  • Retry a failed Recraft or image-generation request once with the same locked concept and corrected contract. Stop after the second equivalent failure.

  • If preview or logo export fails twice, report the concrete error; never replace it with ad-hoc SVG rewriting.

  • If the Brandbook template, font, or conversion contract fails, stop immediately. Do not produce a visually different fallback and call it canonical.

  • If exact typography or official-logo fidelity cannot be preserved, disclose the limitation instead of claiming completion.

  • Never expose raw auth tokens or credentials in files, logs, or chat.

Delivery

For Brandbooks, follow the strict response contract in brandbook: PPTX link/path, PDF link/path, and font-install warning only.

For other outputs return:

  1. The requested visual files and previews.

  2. A compact Brand Lock summary.

  3. Editable versus flattened format labels.

  4. Required-font/import limitations.

  5. Stable variant names for targeted revisions.

Reference index

Files

scripts/render_brandbook_pdf.py

#!/usr/bin/env python3
"""Render a Brandkit PPTX to PDF locally with exact-font verification.

The Brandkit builder owns the PPTX structure. This script registers the approved
fonts, invokes LibreOffice, and checks the embedded PDF fonts with Poppler.
"""

from __future__ import annotations

import argparse
import json
import os
from pathlib import Path
import subprocess
import sys
import unicodedata
from xml.sax.saxutils import escape


COMMAND_TIMEOUT_SECONDS = 90


def family_key(value: str) -> str:
    normalized = unicodedata.normalize("NFKD", value)
    return "".join(character.lower() for character in normalized if character.isalnum())


def run(label: str, command: list[str], environment: dict[str, str]) -> str:
    try:
        completed = subprocess.run(
            command,
            check=True,
            env=environment,
            stdout=subprocess.PIPE,
            stderr=subprocess.STDOUT,
            text=True,
            timeout=COMMAND_TIMEOUT_SECONDS,
        )
    except subprocess.TimeoutExpired as error:
        raise RuntimeError(f"{label} timed out") from error
    except subprocess.CalledProcessError as error:
        detail = (error.stdout or "").strip()
        suffix = f": {detail}" if detail else ""
        raise RuntimeError(f"{label} failed{suffix}") from error
    return completed.stdout


def parse_args() -> argparse.Namespace:
    parser = argparse.ArgumentParser()
    parser.add_argument("--work-dir", required=True, type=Path)
    parser.add_argument("--pptx", required=True, type=Path)
    parser.add_argument("--fonts-dir", required=True, type=Path)
    parser.add_argument("--families-json", required=True, type=Path)
    parser.add_argument("--output", required=True, type=Path)
    return parser.parse_args()


def main() -> None:
    args = parse_args()
    work_dir: Path = args.work_dir.resolve()
    pptx: Path = args.pptx.resolve()
    fonts_dir: Path = args.fonts_dir.resolve()
    families_path: Path = args.families_json.resolve()
    output: Path = args.output.resolve()
    profile_dir = work_dir / "libreoffice-profile"
    font_cache = work_dir / "font-cache"
    font_config = work_dir / "fonts.conf"

    profile_dir.mkdir(parents=True, exist_ok=True)
    font_cache.mkdir(parents=True, exist_ok=True)
    output.parent.mkdir(parents=True, exist_ok=True)
    families = json.loads(families_path.read_text(encoding="utf-8"))
    if not isinstance(families, list) or not families or not all(
        isinstance(family, str) and family.strip() for family in families
    ):
        raise RuntimeError("Brandbook PDF conversion requires approved font families")

    font_config.write_text(
        '<?xml version="1.0"?>\n'
        '<!DOCTYPE fontconfig SYSTEM "fonts.dtd">\n'
        "<fontconfig>\n"
        "  <include ignore_missing=\"yes\">/etc/fonts/fonts.conf</include>\n"
        f"  <dir>{escape(str(fonts_dir))}</dir>\n"
        f"  <cachedir>{escape(str(font_cache))}</cachedir>\n"
        "</fontconfig>\n",
        encoding="utf-8",
    )
    environment = {
        **os.environ,
        "FONTCONFIG_FILE": str(font_config),
        "FONTCONFIG_PATH": str(work_dir),
    }

    run("Brandbook font cache", ["fc-cache", "-f", str(fonts_dir)], environment)
    for family in families:
        match = run(
            f"Brandbook font verification for '{family}'",
            ["fc-match", "--format=%{family}", family],
            environment,
        )
        if family_key(family) not in family_key(match):
            raise RuntimeError(
                f"Brandbook font '{family}' was substituted with '{match.strip()}'"
            )

    run(
        "LibreOffice Brandbook conversion",
        [
            "soffice",
            f"-env:UserInstallation={profile_dir.as_uri()}",
            "--headless",
            "--convert-to",
            "pdf",
            "--outdir",
            str(output.parent),
            str(pptx),
        ],
        environment,
    )
    converted = output.parent / f"{pptx.stem}.pdf"
    if converted != output:
        converted.replace(output)
    if not output.read_bytes().startswith(b"%PDF-"):
        raise RuntimeError("LibreOffice returned an invalid Brandbook PDF")

    embedded_fonts = run(
        "Brandbook PDF font inspection",
        ["pdffonts", str(output)],
        environment,
    )
    embedded_key = family_key(embedded_fonts)
    for family in families:
        if family_key(family) not in embedded_key:
            raise RuntimeError(f"Brandbook PDF did not embed font '{family}'")
    font_names = [
        line.split()[0]
        for line in embedded_fonts.splitlines()[2:]
        if line.strip()
    ]
    unexpected = [
        name
        for name in font_names
        if not any(family_key(family) in family_key(name) for family in families)
    ]
    if unexpected:
        raise RuntimeError(
            "Brandbook PDF contains unapproved fonts: " + ", ".join(unexpected)
        )

    print(
        json.dumps(
            {
                "families": families,
                "output": str(output),
                "status": "ok",
            }
        )
    )


if __name__ == "__main__":
    try:
        main()
    except Exception as error:
        print(str(error), file=sys.stderr)
        raise SystemExit(1) from error

Requirements and compatibility

Written for: Claude Code

Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta

“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.

Needs: Declares allowed tools, Claude Code frontmatter, Needs network access, Needs Python

Security

What our scanner noticed· Medium risk

  • Instructions that use the network
  • Downloads piped into a shell
  • Scripts that your agent may run

This skill includes scripts that your agent may run. Read them before you use it.

A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.

Attribution and licence

Published by
Higgsfield AI
Publisher
Higgsfield AI (Official)
Source
higgsfield-ai/skills · higgsfield-brandkit · commit 2700040
Licence
MIT License (redistribution allowed)
  • LICENSE (added by AutoGineer from LICENSE)
  • ATTRIBUTION.md (written by AutoGineer)
Synced

AutoGineer is not affiliated with or endorsed by Higgsfield AI or Higgsfield AI.

Download ZIP

The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download higgsfield-brandkit.zip