Ir al contenido
Docxcelerate

Nodos

Image

Una imagen a la que apuntan tus datos, o una que produce un endpoint de generación.

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.

Helpers
image
Clase de nodo
image
Categoría
Medios
Se resuelve
Both
Hijos
None.
Opción Tipo Qué hace
id obligatorio 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 obligatorio 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 obligatorio (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().

Cada campo acepta una función

src, alt, width y height aceptan cada uno un valor simple o una función de tus datos. Una firma que cambia según la oficina, un logotipo por marca, una fotografía indexada por referencia — todo eso se queda dentro del nodo en lugar de convertirse en una bifurcación en la plantilla:

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

src pasa a ser path

La opción es src; el nodo resuelto la llama path. Despliega En qué se resuelve en la primera variante de abajo para verlo.

Imágenes dinámicas

Una imagen dinámica se describe en lugar de suministrarse, y admite las mismas cuatro ranuras de prompt que un párrafo dinámico.

negativePrompt se gana su sitio aquí más que en ningún otro lado. Las imágenes generadas fallan de formas predecibles — texto incrustado, logotipos inventados, caras reconocibles — y la ranura las descarta de una vez, en el nodo.

Variantes

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 ↗
En qué se resuelve

El nodo tal como aparece en el DocumentModel: el JSON que recibe un renderizador. Sin estilos, sin maquetación.

{
  "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 ↗
En qué se resuelve

El nodo tal como aparece en el DocumentModel: el JSON que recibe un renderizador. Sin estilos, sin maquetación.

{
  "id": "centre-photo",
  "kind": "image",
  "mode": "dynamic",
  "placeholder": "Photograph of Riverside Leisure Centre"
}
Qué se le pide al endpoint

Resuelto con los mismos datos de ejemplo. Una compilación de vista previa se detiene en el marcador de posición; una compilación en el momento de la petición envía estos.

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.

Notas

  • El nodo guarda una ruta, nunca los bytes. Durante una compilación no se descarga ni se valida nada; una ruta rota falla en el momento de renderizar.
  • Vale la pena escribir alt incluso mientras los renderizadores solo dibujan marcos, porque el marco imprime alt.

Editar esta página en GitHub ↗