Узлы
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,
}); Во что это разрешается
Узел в том виде, в каком он попадает в 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.`,
}); Во что это разрешается
Узел в том виде, в каком он попадает в 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.