Generate Palette PDF
palette_pdfGenerates a premium branded PDF specification sheet from a palette of archive entries: full-bleed colour panels, archive names, provenance notes, RAL nearest match, LRV, chroma, WCAG contrast data and Colour Memory branding. Suited to client deliverables, specification sheets and print assets. TRUST BOUNDARY: every colour is verified server-side against the real archive by (name, hex, archive_source) before it is drawn. Any claim_strength, primary_source, colour_notes, colour_basis or hex_confidence supplied in entries/sections is ignored and replaced with Colour Memory's own record; an entry that matches no archive record refuses the whole request (PDF_ENTRY_NOT_VERIFIED) rather than being dropped or rendered with the caller's claim. Entry sources: (1) the flat entries array from query_hex or palette_from_concept, each item with name, hex, archive_source (colour_notes/primary_source/zone are accepted but overwritten by the verified record); or (2) archive_report_brief's output, where report['presented_cards'] is the entries list (report['colour_cards'] is a legacy field without family-card presentation). presented_cards may mix three card shapes, each rendered as exactly one page however many records it represents: single_cultivar (a normal flat card), colour_family (card_type='colour_family': near-identical records summarised as one card with member_count/supported_by/family_delta_e_max; every member is verified individually and representative_hex must be one of the verified members' own hexes), and conservative-mode hero cards (a single_cultivar card with family_grouping_suppressed=true and also_supported_by, standing for a larger family folded into one promoted cultivar). delivery: 'url' (default) returns a signed, time-limited R2 download link; 'base64' returns the PDF bytes inline. A valid, authenticated API key is required for entries, sections and project_id (a keyless request returns 401); house_ref alone works without a key. The key check costs no extra credit. Second input mode: sections instead of entries gives a grouped, multi-section document (e.g. house_specify's rooms). Each section has entries (verified as above) and optional grouping_basis/hero_hex. Sections accept no title, subtitle, rationale or application_notes: these are requester free text that this renderer cannot yet keep separate from Colour Memory's evidence, so any of them refuses the whole request with a 400 (REQUESTER_FREE_TEXT_NOT_ALLOWED) naming the field(s); a section with only entries renders with an auto-numbered heading. presentation.template: 'sectioned_specification' (grid-per-section spec sheet) or 'colour_drenched_lookbook' (hero colour fills the page, citations collected in a final appendix). Third input mode: house_ref (not house), the reference string house_specify returns, reaches the flagship document-plan pipeline: an editorial multi-archetype publication with a cover, a house_thesis page, a whole_house_progression chart, a room_hero and an implementation page per room, and a source_appendix, in one design system. house_ref (or project_id, for an authenticated caller's own durable project) is the only way in: an inline house object is refused (400, INLINE_HOUSE_NOT_ALLOWED), because this Colour Memory-branded PDF renders only a house Colour Memory itself created and still holds, never one relayed back through the request body. house_ref/project_id takes priority over sections/entries.
Tool call template
This tool declares no required parameters. Add optional parameters from the input schema as needed.
{
"id": 1,
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"arguments": {},
"name": "palette_pdf"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| house | No | DO NOT USE. Inline house objects are REFUSED outright (400, INLINE_HOUSE_NOT_ALLOWED), even alongside a valid house_ref/project_id -- this PDF is Colour Memory-branded and can only render a house Colour Memory itself created and still holds, never one relayed back through the request body. Call house_specify, then pass the house_ref it returns in `house_ref` below instead. | |
| query | No | Optional title for the palette e.g. Ottoman imperial luxury | |
| source | No | Optional source label e.g. brand, conceptual | archive |
| verify | No | Issue as a Verified by Colour Memory document (Colour Memory Pro). | |
| entries | No | Array of colour cards. Either the flat entries array from query_hex/palette_concept, or report['presented_cards'] from archive_report_brief (single_cultivar, colour_family, and conservative-mode hero cards are all supported -- see tool description). Omit if using `sections` instead. EVIDENCE FIELDS ARE SERVER-VERIFIED: each entry's name+hex(+archive_source) must match a real archive record -- any claim_strength/primary_source/colour_notes/colour_basis/hex_confidence supplied here is ignored and replaced with Colour Memory's own record; a non-matching entry refuses the whole request. Requires a valid API key. | |
| delivery | No | 'url' (default): signed, time-limited R2 download link. 'base64': PDF bytes returned inline as pdf_base64 for callers that need the file directly. | |
| sections | No | Alternative to `entries` -- one entry per document section, e.g. house_specify's rooms. Each: {grouping_basis?, hero_hex?, entries: [...colour cards, server-verified exactly like the flat `entries` field above...]}. DO NOT include title/subtitle/rationale/application_notes -- this renderer cannot currently keep that requester free text cleanly separated from Colour Memory's own evidence, so any of them present REFUSES THE WHOLE REQUEST with 400 REQUESTER_FREE_TEXT_NOT_ALLOWED naming the field(s); a section with only `entries` still renders, with an auto-numbered heading. Requires a valid API key. | |
| house_ref | No | THE way to render the flagship document-plan publication -- the house_ref string house_specify's own response returns (valid for 30 minutes after that call, or per project_persistence for a durable/temporary project). Renders the identical flagship document without resending the house object over the wire, and without it ever being treated as caller-supplied evidence. Anonymous house_ref access needs no API key, unchanged; do not send `house` alongside it. | |
| project_id | No | Alternative to house_ref for an authenticated (keyed) caller's own durable project -- the project_id house_specify returned. Requires the same API key that created the project. | |
| presentation | No | Used with `sections` or `house_ref`/`project_id`. {template: 'sectioned_specification'|'colour_drenched_lookbook' (sections only), page_size?: 'A4-portrait'|'A4-landscape'|'16:9', minimum_colour_coverage?: number (default 0.55 for lookbook), source_display?: 'inline'|'appendix', max_body_words_per_page?: integer, min_body_font_pt?: number (default 10.5), min_label_font_pt?: number (default 9, swatch colour-name labels), min_citation_font_pt?: number (default 7.5, appendix citations and page furniture)}. No rendered text falls below its category's floor -- names that don't fit are truncated with an ellipsis, never shrunk past the floor. | |
| project_version | No | Used with either house_ref or project_id -- render this specific immutable version instead of the project's current version. Omit to render the current version. |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||