Echo/Docs

CLI command

content brand

Brand kits: the font family and highlight colour a product's rendered videos take, so a captioned render names the product instead of a style.

Invocation#

Shell
echo-cli content brand list
echo-cli content brand set --product <id> --font <family> --highlight <css colour> --by <who>
echo-cli content brand remove --product <id>
echo-cli content brand render --video <url> --style word_highlight|subtitle_bar|karaoke (--words <words> | --prompt <words>) (--product <id> | --font <family>) [--highlight <css colour>] --font-size <px> --position top|center|bottom --by <who>

Inputs and output#

list writes every kit by product, set the kit it stored and remove the kit it removed: product_id, font_family, highlight_color, declared_by and declared_at. render captions the video at --video as the caption dialog on /generate/video does, outside the browser: --words are the words shown (or --prompt), timed across the video's own length, set at --font-size pixels and placed at --position; while it runs each step goes to stderr — transcribing, transcribed <n> words, rendering <percent>%, uploading — and when it is done it writes the done event: type done, job_id (the caption job, created_by --by), output_url (the rendered video) and render_inputs (caption_style, font_family, highlight_color, font_size, caption_position). With --product the font and colour come from the product's kit; without it --font is the caller's own and --highlight, when given, its own colour. The size, position and font are never chosen for the caller: the caption dialog starts from its first declared size, the Inter face and the bottom of the frame, and auto-captioning a generated video renders with those same settings.

State effect#

The verbs call Echo Web's authenticated /api/analytics/brand-kits with ECHO_INTERNAL_BEARER at ECHO_WEB_BASE_URL; the Brand kit section of the caption dialog on /generate/video and the Brand kits section of Echo Desktop's GEO screen do the same, and echo-mcp runs them as echo_brand_kits, echo_brand_kit_set and echo_brand_kit_remove. Kits are stored in brand_kits, one per product; set replaces the product's kit. POST /api/captions with product_id renders in that product's font and colour, read from its kit, and records the product and the inputs it rendered with (caption style, font family, highlight colour, font size and position) on the caption job; the done event carries the same render_inputs.

Refusals#

  • A wrong invocation is refused before anything is sent: "content brand takes list; set --product <id> --font <family> --highlight <css colour> --by <who>; remove --product <id>; render …; got <word>", "content brand <verb> does not take <flag>; it takes …", "<flag> needs a value", "content brand <verb> needs <flag>" (render needs --font-size and --position), "content brand render needs exactly one of --words <words> (the words shown) and --prompt <words>", "content brand render needs --product <id> (its brand kit states the font) or --font <family>" and "--font-size must be a positive number of pixels; got <value>".
  • Echo Web refuses a render with 400 "font_size is required: the caption font size in pixels of the rendered frame, a positive number", "caption_position is required: top, center, bottom" (a position other than those) or "font_family is required when no product_id names a brand kit that states the font".
  • Echo Web answers a bad request with "product_id is required: the product whose renders use the kit", "font_family is required: the font family the product's renders set their text in", "highlight_color is required: the CSS colour the product's renders highlight with, such as #ff5a1f" or "declared_by is required: an internal caller has no signed-in user, so it names who is acting"; not found with "no product has id <id>; echo-cli products lists the ones that exist" or "product <id> has no brand kit". The command prints Echo Web's sentence and exits 1.
  • A captioned render naming a product with no kit is refused with 409 "product <id> has no brand kit, so nothing can be rendered in its brand; declare one with echo-cli content brand set", and one naming a product beside its own font or colour with 400 "<font_family and highlight_color> come from the brand kit of product <id>; send product_id or your own style, not both". render is also refused with 400 "video_url is required", "caption_style is required: word_highlight, subtitle_bar or karaoke" or "created_by is required: an internal caller has no signed-in user, so it names who renders"; a render that fails once started writes "the render failed: <cause>" (the caption job is marked failed with the same cause) and exits 1, and a stream that closes without a done event writes "the render's stream closed without a done event; it sent <event types>".