{"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"https://jackpost.ai/schemas/design.v1.json","title":"Jackpost AI design or template","oneOf":[{"title":"Template","type":"object","required":["$schema","kind","id","name","version","canvas","aspects","theme","variables","background","pages"],"additionalProperties":false,"properties":{"$schema":{"const":"jackpost.design/v1"},"id":{"type":"string"},"name":{"type":"string"},"theme":{"type":"string","description":"Theme id, e.g. paper, ink, brand, deep, aurora."},"canvas":{"$ref":"#/$defs/canvas"},"assets":{"type":"object","additionalProperties":{"$ref":"#/$defs/asset"}},"background":{"$ref":"#/$defs/background"},"pages":{"type":"array","minItems":1,"items":{"$ref":"#/$defs/page"}},"kind":{"const":"template"},"version":{"type":"integer"},"category":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}},"postTypes":{"type":"array","items":{"type":"string"}},"aspects":{"type":"array","items":{"enum":["1:1","4:5","16:9"]}},"variables":{"type":"object","additionalProperties":{"type":"object","required":["type","label"],"properties":{"type":{"enum":["text","image","persona","icon"]},"label":{"type":"string"},"default":{"type":"string"},"maxChars":{"type":"integer"},"aspect":{"type":"number"},"prompt":{"type":"string"}}}}}},{"title":"Design","type":"object","required":["$schema","kind","id","name","brandKit","theme","canvas"],"additionalProperties":false,"properties":{"$schema":{"const":"jackpost.design/v1"},"id":{"type":"string"},"name":{"type":"string"},"theme":{"type":"string","description":"Theme id, e.g. paper, ink, brand, deep, aurora."},"canvas":{"$ref":"#/$defs/canvas"},"assets":{"type":"object","additionalProperties":{"$ref":"#/$defs/asset"}},"background":{"$ref":"#/$defs/background"},"pages":{"type":"array","minItems":1,"items":{"$ref":"#/$defs/page"}},"kind":{"const":"design"},"source":{"type":"object","required":["templateId","version"],"properties":{"templateId":{"type":"string"},"version":{"type":"integer"}}},"brandKit":{"oneOf":[{"type":"null"},{"type":"object","required":["id","version"],"properties":{"id":{"type":"string"},"version":{"type":"integer"}}}]},"tokens":{"type":"object","description":"Overrides keyed by token (role.accent, color.primary, font.heading).","additionalProperties":{"oneOf":[{"$ref":"#/$defs/color"},{"$ref":"#/$defs/fontFace"}]}},"values":{"type":"object","additionalProperties":{"type":"string"}}}}],"$defs":{"hex":{"type":"string","pattern":"^#[0-9a-fA-F]{6}([0-9a-fA-F]{2})?$","description":"#RRGGBB or #RRGGBBAA"},"colorRef":{"type":"object","description":"Follows the brand. role.* reads the active theme, color.* reads the brand kit; fallback is used when neither has it.","required":["ref","fallback"],"additionalProperties":false,"properties":{"ref":{"type":"string","pattern":"^(color\\.[\\w-]+|role\\.(background|ink|body|accent|on-accent|on-ink|panel|panel-ink))$"},"fallback":{"$ref":"#/$defs/hex"},"alpha":{"type":"number","minimum":0,"maximum":1}}},"color":{"oneOf":[{"$ref":"#/$defs/hex"},{"$ref":"#/$defs/colorRef"}]},"fontFace":{"type":"object","required":["family","weight"],"additionalProperties":false,"properties":{"family":{"type":"string"},"weight":{"type":"integer","minimum":100,"maximum":900}}},"font":{"oneOf":[{"$ref":"#/$defs/fontFace"},{"type":"object","required":["ref","fallback"],"additionalProperties":false,"properties":{"ref":{"enum":["font.heading","font.subheading","font.body"]},"fallback":{"$ref":"#/$defs/fontFace"},"weight":{"type":"integer","minimum":100,"maximum":900}}}]},"frame":{"type":"object","description":"Percent of the canvas. Rotation in degrees around the centre.","required":["x","y","w","h"],"additionalProperties":false,"properties":{"x":{"type":"number"},"y":{"type":"number"},"w":{"type":"number","minimum":0},"h":{"type":"number","minimum":0},"rotation":{"type":"number"}}},"gradient":{"type":"object","required":["type","style","angle","stops"],"additionalProperties":false,"properties":{"type":{"const":"gradient"},"style":{"enum":["linear","radial","conic","mesh"]},"angle":{"type":"number"},"stops":{"type":"array","minItems":2,"maxItems":4,"items":{"$ref":"#/$defs/color"}},"at":{"type":"array","description":"Stop positions in percent, one per stop.","items":{"type":"number","minimum":0,"maximum":100}},"points":{"type":"array","description":"Percent of the canvas: radial centre, or one per mesh blob.","items":{"type":"object","required":["x","y"],"additionalProperties":false,"properties":{"x":{"type":"number"},"y":{"type":"number"},"spread":{"type":"number","minimum":0,"maximum":100}}}}}},"fill":{"oneOf":[{"type":"object","required":["type","color"],"additionalProperties":false,"properties":{"type":{"const":"solid"},"color":{"$ref":"#/$defs/color"}}},{"$ref":"#/$defs/gradient"},{"type":"object","required":["type","asset"],"additionalProperties":false,"properties":{"type":{"const":"image"},"asset":{"type":"string"},"fit":{"enum":["cover","contain"]}}},{"type":"object","required":["type"],"additionalProperties":false,"properties":{"type":{"const":"theme"}}}]},"background":{"type":"object","required":["fill"],"additionalProperties":false,"properties":{"fill":{"$ref":"#/$defs/fill"},"pattern":{"type":"object","required":["id","color","opacity","scale","fade"],"additionalProperties":false,"properties":{"id":{"enum":["dots","polka","grid","blueprint","plus","cross","checker","diamonds","triangles","hexagons","rings","squares","pinstripe","diagonal","crosshatch","columns","zigzag","waves","scales","bricks","bubbles","confetti","squiggle","contours","sparkles","terrazzo","grain","linen","halftone"]},"color":{"$ref":"#/$defs/color"},"opacity":{"type":"number","minimum":0,"maximum":1},"scale":{"type":"number","minimum":0.25,"maximum":4},"fade":{"enum":["none","top","bottom","edges","centre"]}}},"overlay":{"$ref":"#/$defs/gradient"}}},"layer":{"oneOf":[{"type":"object","required":["id","type","frame","text","font","size","color"],"additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"frame":{"$ref":"#/$defs/frame"},"opacity":{"type":"number","minimum":0,"maximum":1},"locked":{"type":"boolean"},"hidden":{"type":"boolean"},"type":{"const":"text"},"text":{"type":"string","description":"Literal copy; {{name}} reads a variable."},"font":{"$ref":"#/$defs/font"},"size":{"type":"number","description":"Canvas units (canvas is 600 wide)."},"color":{"$ref":"#/$defs/color"},"align":{"enum":["left","center","right"]},"lineHeight":{"type":"number"},"letterSpacing":{"type":"number","description":"em"},"case":{"enum":["none","upper"]}}},{"type":"object","required":["id","type","frame","shape","color"],"additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"frame":{"$ref":"#/$defs/frame"},"opacity":{"type":"number","minimum":0,"maximum":1},"locked":{"type":"boolean"},"hidden":{"type":"boolean"},"type":{"const":"shape"},"shape":{"enum":["blob","ring","arc","grid","bars","triangle","circle","square","pill","diamond","pentagon","hexagon","octagon","star","star-6","burst","heart","shield","cross","arrow-right","arrow-up","chevron","bubble","banner","wave","squiggle","quote","frame","donut","half"]},"style":{"enum":["fill","outline"]},"color":{"$ref":"#/$defs/color"},"strokeWidth":{"type":"number"},"radius":{"type":"number"}}},{"type":"object","required":["id","type","frame","icon","color"],"additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"frame":{"$ref":"#/$defs/frame"},"opacity":{"type":"number","minimum":0,"maximum":1},"locked":{"type":"boolean"},"hidden":{"type":"boolean"},"type":{"const":"icon"},"icon":{"type":"string"},"style":{"enum":["plain","soft","solid","auto"]},"color":{"$ref":"#/$defs/color"},"strokeWidth":{"type":"number"},"radius":{"type":"number"}}},{"type":"object","required":["id","type","frame","asset"],"additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"frame":{"$ref":"#/$defs/frame"},"opacity":{"type":"number","minimum":0,"maximum":1},"locked":{"type":"boolean"},"hidden":{"type":"boolean"},"type":{"const":"image"},"asset":{"type":"string","description":"Asset id, or {{variable}}."},"fit":{"enum":["cover","contain"]},"focal":{"type":"object","required":["x","y"],"properties":{"x":{"type":"number"},"y":{"type":"number"}}},"radius":{"type":"number"}}},{"type":"object","required":["id","type","frame","variant"],"additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"frame":{"$ref":"#/$defs/frame"},"opacity":{"type":"number","minimum":0,"maximum":1},"locked":{"type":"boolean"},"hidden":{"type":"boolean"},"type":{"const":"logo"},"variant":{"enum":["auto","on-accent","colored","white","black"]},"lockup":{"enum":["full","mark"]}}},{"type":"object","required":["id","type","frame","persona"],"additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"frame":{"$ref":"#/$defs/frame"},"opacity":{"type":"number","minimum":0,"maximum":1},"locked":{"type":"boolean"},"hidden":{"type":"boolean"},"type":{"const":"persona"},"persona":{"type":"string"},"shot":{"type":"string"},"crop":{"enum":["circle","square","cutout","full"]},"look":{"type":"object"},"radius":{"type":"number"}}}]},"page":{"type":"object","required":["id","layers"],"additionalProperties":false,"properties":{"id":{"type":"string"},"background":{"$ref":"#/$defs/background"},"layers":{"type":"array","items":{"$ref":"#/$defs/layer"}},"note":{"type":"string"}}},"asset":{"type":"object","required":["id","kind","width","height"],"additionalProperties":false,"properties":{"id":{"type":"string"},"kind":{"enum":["generated","upload","stock","brand"]},"src":{"type":"string"},"width":{"type":"integer"},"height":{"type":"integer"},"alt":{"type":"string"},"prompt":{"type":"string"},"placeholder":{"type":"string"}}},"canvas":{"type":"object","required":["aspect","baseWidth"],"additionalProperties":false,"properties":{"aspect":{"enum":["1:1","4:5","16:9"]},"baseWidth":{"const":600}}}}}