Перейти к содержимому
Docxcelerate

Узлы

Image

Изображение, на которое указывают ваши данные, или то, которое создаёт эндпоинт генерации.

A static image points at something you hold — a signature, a logo, a site photograph — with every field able to vary per recipient. A dynamic image describes what is wanted and leaves the endpoint to make it.

Хелперы
image
Вид узла
image
Категория
Медиа
Разрешается
Both
Дочерние узлы
None.
Опция Тип Что делает
id обязательно string Stable address for the node. Generation endpoints target it and build artifacts diff on it, so treat a rename as a breaking change.
src обязательно string | (data) => string Static only. Path or URL to the image; lands on the node as path.
alt string | (data) => string Static only. Alternative text — and, while the renderers draw a frame rather than the picture, the words printed inside it.
width number | (data) => number Static only. Intended width. Carried onto the node untouched; no shipped renderer reads it yet.
height number | (data) => number Static only. Intended height, on the same terms as width.
placeholder (data, availableTokens) => string Dynamic only. What previews show in place of generated content. Optional, but a letter that reads badly without one cannot be reviewed.
generalPrompt обязательно (data, availableTokens) => string Dynamic only. What this node should say.
infoPrompt (data, availableTokens) => string Dynamic only. Context the model should have but should not restate.
negativePrompt (data, availableTokens) => string Dynamic only. What to avoid — claims, tones, or facts it must not invent.
systemPrompt (data, availableTokens) => string Dynamic only. Role and voice, applied ahead of the other prompts.
derivers DeriverInvocation[] Values computed before the node resolves, written to derived.* and readable from a template token. Built with derive().

Каждое поле принимает функцию

src, alt, width и height принимают либо обычное значение, либо функцию от ваших данных. Подпись, различающаяся по офисам, логотип для каждого бренда, фотография по номеру дела — всё это остаётся внутри узла, а не превращается в ветвление в шаблоне:

image<MemberData>({
  id: "signature",
  src: (data) => data.signatureUrl,
  alt: (data) => `Signed by ${data.managerName}`,
  width: 180,
});

src становится path

Опция называется src; в разрешённом узле она называется path. Разверните Во что это разрешается у первого варианта ниже, чтобы увидеть это.

Динамические изображения

Динамическое изображение описывается, а не передаётся, и принимает те же четыре слота промптов, что и динамический абзац.

Именно здесь negativePrompt оправдывает себя как нигде. Сгенерированные изображения портятся предсказуемо — впечатанный текст, выдуманные логотипы, узнаваемые лица, — и этот слот исключает всё это один раз, прямо в узле.

Варианты

Static

src/nodes/image/static.node.ts

A signature whose file and caption both follow the data.

import { image } from "docxcelerate";
import type { SampleData } from "../sample-data.ts";

/**
 * Every field takes a plain value or a function of your data, so a signature
 * that varies by manager needs no branching in the template.
 */
export const Signature = image<SampleData>({
  id: "signature",
  src: (data) => data.signatureUrl,
  alt: (data) => `Signed by ${data.managerName}`,
  width: 180,
  height: 60,
});
image · static Open ↗
Во что это разрешается

Узел в том виде, в каком он попадает в DocumentModel: JSON, который получает рендерер. Без стилей и без вёрстки.

{
  "id": "signature",
  "kind": "image",
  "mode": "static",
  "path": "assets/signature-lindqvist.png",
  "alt": "Signed by Tomas Lindqvist",
  "width": 180,
  "height": 60
}

Dynamic

src/nodes/image/dynamic.node.ts

Described rather than supplied, with the failure modes fenced off.

import { image } from "docxcelerate";
import type { SampleData } from "../sample-data.ts";

/**
 * The same prompt set as a dynamic paragraph, for artwork the endpoint
 * produces rather than something you hold. The placeholder is what previews
 * show, so the layout is settled before any image exists.
 */
export const CentrePhoto = image<SampleData>({
  id: "centre-photo",
  placeholder: (data) => `Photograph of ${data.centreName}`,
  generalPrompt: (data) =>
    `A wide daylight photograph of the entrance to ${data.centreName}, ` +
    `people arriving, no text overlay.`,
  negativePrompt: () => `No logos, no recognisable faces, no stock-photo staging.`,
});
image · dynamic Open ↗
Во что это разрешается

Узел в том виде, в каком он попадает в DocumentModel: JSON, который получает рендерер. Без стилей и без вёрстки.

{
  "id": "centre-photo",
  "kind": "image",
  "mode": "dynamic",
  "placeholder": "Photograph of Riverside Leisure Centre"
}
О чём просят эндпоинт

Разрешено на тех же тестовых данных. Сборка предпросмотра останавливается на заполнителе; сборка во время запроса отправляет их.

general
A wide daylight photograph of the entrance to Riverside Leisure Centre, people arriving, no text overlay.
negative
No logos, no recognisable faces, no stock-photo staging.

Примечания

  • Узел хранит путь, а не байты. Во время сборки ничего не загружается и не проверяется; сломанный путь даст сбой при отрисовке.
  • alt стоит написать даже сейчас, пока рендереры печатают рамки: рамка печатает как раз alt.

Изменить эту страницу на GitHub ↗