← All ivy-agents
IVYXSTUDIO · IVY AGENT
S

Social post designer

ivy.agent.social-post-designer · v0.1.0

ivyx

Turns a client's brief into a social post: a model writes the copy and the palette, the card is drawn in three sizes (square, portrait, landscape) and a key visual is painted behind the campaign. What comes out is kind deliverables, which IVYX Agency keeps with the run and shows on the client, the service and Home. The request arrives on a webhook (or a mailbox with the same start); the renderers are deterministic, so a weak answer from the model still yields a readable card.

Steps

In the order the agent's file lists them, each with where its inputs come from and the values the file fixes. A branch or a loop is a step too.

  1. 01
    Put the request together for the model
    ivy.node.design-brief

    Puts the request together as one text for the model's turn: the client, the service, the month, the brief and the figures, so the model writes for the right client.

    takes
    brief from the agent's input
    client from the agent's input
    service from the agent's input
    request_id from the agent's input
    Ivy Node
  2. 02
    Write the copy and the palette from the brief

    The context is a client's brief for a social media post, with the client's name. Return a JSON object with: headline (at most 7 words, the one thing to say), subline (at most 16 words), cta (at most 3 words, a verb), palette (an object with bg, accent and text as 6-digit hex colours that fit the brief's mood; dark bg with light text or the reverse, always readable), layout (one of poster, split, band, minimal; poster when unsure), brand (the client's name as given), caption (one sentence saying what the visual shows, for the record), art_style (one of gradient, waves, grid, blobs for the picture behind the campaign). Answer with the JSON object only. Colours are 6-digit hex. Keep the words short and concrete; no exclamation marks; no claims the brief does not make.

    takes
    context from step 1
    Model turn
  3. 03
    Draw the card in three sizes
    ivy.node.design-svg-card

    Draws a social post, a poster or a banner as SVG from a spec (headline, subline, cta, palette, layout, brand) in the sizes asked for.

    takes
    spec from step 2, output
    fallback_text from the agent's input, brief
    name_prefix from the agent's input, client
    set
    sizes ["1080x1080","1080x1350","1200x628"]
    Ivy Node
  4. 04
    Paint the key visual
    ivy.node.design-png-art

    Paints an abstract key visual (gradient, waves, grid or blobs) in a palette and writes it as a PNG with the standard library, no Pillow.

    takes
    palette from step 2, output.palette
    style from step 2, output.art_style
    name_prefix from the agent's input, client
    set
    size 1200x630
    seed 7
    Ivy Node
  5. 05
    Pack the deliverables
    ivy.node.design-pack

    Gathers the files the steps before it made into one answer of kind deliverables (request, client, service, brief, the spec, the files with their bytes).

    takes
    spec from step 2, output
    request_id from the agent's input
    client from the agent's input
    service from the agent's input
    brief from the agent's input
    files_a from step 3, files
    files_b from step 4, files
    returns
    kind, request_id, client, service, brief, spec, files, count
    Ivy Node

What it touches

Collected from what each of its nodes declares, plus the model call when a step is a model turn. A declaration is the author's statement, and it is what policy rules select on.

Calls a model

Inputs

FieldTypeDescription
briefrequiredstringWhat the client asked for, in their words or the account lead's: the subject, the audience, the tone, the colours if any.
clientstringThe client's name, as IVYX Agency knows it.
servicestringThe service this is work for, as IVYX Agency knows it (e.g. Content Production).
request_idstringThe request's id on the channel it came from; the key that keeps one request from running twice.

Outputs

FieldTypeDescription
kindrequiredstringdeliverables: what this output is, for a receiver that takes several kinds.
request_idstringNot declared
clientstringNot declared
servicestringNot declared
briefstringNot declared
specobjectThe design spec the model wrote from the brief, as rendered.
filesrequiredarrayThe files made: name, mime, kind, bytes, data (base64), width, height, caption, variant.
countrequiredintegerNot declared

Tests

2 of 2 test cases passed on Oct 25, 2026, in the publisher's own environment, before this version was published. The registry keeps that record; it does not run the cases again.

Requires: python:3.9, a model core

  • friday-roast

    A coffee brand's weekly post is three SVG cards in the post sizes and a PNG key visual, delivered as one deliverables answer.

    given
    brief Acme Coffee wants an Instagram post for the Friday roast: a new single origin every week, delivered before the weeken...
    client Acme Coffee
    service Content Production
    request_id case-post-1
    expects
    kind equals deliverables
    count equals 4
    request_id equals case-post-1
    client equals Acme Coffee
    files.0.variant equals 1080x1080
    files.1.variant equals 1080x1350
    files.2.variant equals 1200x628
    files.0.data matches ^PHN2Zy
    files.3.mime equals image/png
    spec.headline matches \S
  • terse-brief

    A one-line brief with no client still gets the four files.

    given
    brief Gym opening in March.
    expects
    kind equals deliverables
    count equals 4