Plantillas y formatos
Una plantilla determina cómo se renderiza un clip. Viene en variantes, que son cortes de la misma idea, en versiones, que son compilaciones, y en relaciones de aspecto, que son los formatos en que se puede renderizar. Lo que importa a un desarrollador es que una plantilla publica el documento exacto que acepta, de modo que puede generar un cliente a partir de él en lugar de adivinar.
En el panel, las plantillas que se ofrecen a un espacio de trabajo están en el Estudio de clips, en Elegir una plantilla, donde Crear clip crea un video a partir de una por sí sola; esa mitad de la API es la exportación directa.
| Método | Ruta | Permiso |
|---|---|---|
GET | /v1/templates | templates:read |
GET | /v1/templates/{templateId}/reference | templates:read |
GET | /v1/templates/{templateId}/reference/{ratio} | templates:read |
GET | /v1/templates/{templateId}/reference-sheet | templates:read |
POST | /v1/templates/{templateId}/validate | templates:read |
GET | /v1/formats/templates | templates:read |
GET | /v1/formats/template/{templateId} | templates:read |
GET | /v1/formats/feed/{feedId} | templates:read |
GET | /v1/formats/feed/{source}/{format} | templates:read |
GET | /v1/catalogue | templates:read |
/v1/catalogue, /v1/formats/templates, /v1/formats/template/{id} y /v1/formats/feed/... también se sirven sin autenticación. Qué formato acepta una plantilla es una descripción de producto, no datos de clientes, y un productor lo necesita antes de tener un motivo para autenticarse. Nada en ellos dice quién usa una plantilla ni qué se le ha enviado. POST /v1/templates/{templateId}/validate es un POST que solo lee, así que necesita templates:read y nada más.
Preguntar a una plantilla qué acepta
Esta es la llamada alrededor de la cual construir un productor.

curl http://localhost:4000/v1/formats/template/tpl_dd7e6b264fb8
La respuesta lleva cuatro cosas: keys, una descripción legible por personas de cada entrada; jsonSchema, lo mismo como JSON Schema, para generar un cliente; example, una carga de ejemplo que lo cumple; y ratios, los formatos en que viene esta compilación. Abreviado aquí: keys lista cada entrada, con su etiqueta, descripción, límites y ejemplo, y jsonSchema contiene también cada una de ellas.
{
"templateId": "tpl_dd7e6b264fb8",
"templateName": "Big number",
"variant": "Corporate glass",
"version": "1.0.0",
"ratios": ["9x16", "4x5", "1x1", "16x9", "2x3"],
"keys": {
"format": "reelwire.keys/1",
"summary": "One figure counted up to its value, with what it is, its change and the window it happened in, and up to six more figures after it, one at a time. metaData is the post's title, descriptions and hashtags and is never drawn.",
"keys": [
{
"key": "clipData",
"type": "group",
"label": "Clip data",
"description": "Everything drawn: a kicker, what the figure is, the figure with its prefix and unit, the window it happened in, an optional change, a line of context, up to six more figures each on a page of its own, the source and the look.",
"required": true,
"keys": [
{ "key": "kicker", "type": "text", "label": "Kicker", "description": "A word above everything, such as BREAKING or JUST IN.", "required": false, "maxLength": 20, "example": "Breaking" },
{ "key": "label", "type": "text", "label": "What the figure is", "description": "Read before the figure, so the number lands with its meaning.", "required": true, "maxLength": 70, "example": "Wiped off the value of US tech stocks" },
{ "key": "value", "type": "number", "label": "The figure", "required": true, "decimals": 4, "example": 740 }
]
}
]
},
"jsonSchema": {
"type": "object",
"properties": { "clipData": { "type": "object", "title": "Clip data" }, "metaData": { "type": "object", "title": "Meta data" }, "locales": { "type": "object" } },
"required": ["clipData"],
"additionalProperties": false
},
"example": {
"clipData": {
"kicker": "Breaking",
"label": "Wiped off the value of US tech stocks",
"value": 740,
"prefix": "$",
"unit": "billion",
"window": "in 5 minutes",
"change": { "value": -2.1, "unit": "%", "label": "Nasdaq 100 today" },
"note": "The biggest five-minute drop since March, minutes after the inflation figures came in above forecasts",
"more": [
{ "label": "Nvidia, the biggest faller among the chip makers", "value": 118.4, "prefix": "$", "unit": "", "window": "at the close", "change": { "value": -4.8, "unit": "%", "label": "on the day" }, "note": "Chip makers led the fall as bond yields jumped." },
{ "label": "Gold, where the money went", "value": 2412, "prefix": "$", "unit": "an ounce", "window": "a record close", "change": { "value": 1.2, "unit": "%", "label": "on the day" }, "note": "Investors bought the metal as a shelter from the sell-off." }
],
"source": "Exchange data, 15:35 New York time",
"look": { "theme": "auto", "pace": "auto", "corners": "auto", "align": "auto", "logo": "auto" }
},
"metaData": {
"title": "740 billion dollars off US tech stocks in five minutes",
"captionTiny": "740 billion dollars wiped off US tech stocks in five minutes after the inflation figures.",
"captionShort": "740 billion dollars were wiped off US tech stocks in five minutes after the inflation figures came in above forecasts. The Nasdaq 100 closed 2.1 percent lower.",
"captionMedium": "740 billion dollars were wiped off US tech stocks in five minutes after the inflation figures came in above forecasts. It was the biggest five-minute drop since March. The Nasdaq 100 closed the day 2.1 percent lower, led by the largest chip makers.",
"captionLong": "740 billion dollars were wiped off US tech stocks in five minutes after the inflation figures came in above forecasts. It was the biggest five-minute drop since March. The Nasdaq 100 closed the day 2.1 percent lower, led by the largest chip makers. Markets now expect fewer rate cuts this year than they did a week ago.",
"hashtags": ["markets", "nasdaq", "tech"]
}
}
}
Siempre dos mitades. clipData se renderiza en el clip. metaData es el título, los textos y los hashtags de la publicación, y nunca se renderiza en el video. Cada clave está en el ejemplo, las opcionales incluidas, de modo que ve todo el formato y no lo mínimo que pasaría. look son los mismos nueve interruptores en cada formato de las colecciones (tema, ritmo, esquinas, alineación del texto, la placa del logo, el tamaño del logo, la línea superior, la línea inferior y el patrón de fondo), cada uno auto o desactivado, la elección propia del estilo, salvo que usted lo establezca. logoSize es auto (estándar), small (una quinta parte menor, con su placa) o large (un cuarto mayor donde el estilo tiene espacio). hideHeader es true para omitir la línea de arriba, el logo, la línea del título y la decoración del estilo a su alrededor, de modo que el contenido empieza arriba; una marca la omite en todos los clips con "header": { "enabled": false } en su estilo. hideFooter es true para omitir la línea inferior de la marca y lo que el estilo muestra solo para albergarla, de modo que el contenido llega más abajo; el presentador y la línea de la fuente se quedan. Una marca la omite en todos los clips con "footer": { "enabled": false }. pattern es la textura fina detrás del contenido: auto conserva la propia del estilo (los puntos de Corporate glass, las líneas de columna de Swiss grid; algunos estilos no muestran ninguna), none deja el fondo liso, y dots, grid o lines (líneas diagonales) muestran en su lugar ese patrón tenuemente, igual en todos los estilos, en el color de la página. El fondo más grande del estilo, sus resplandores, rayos o aurora, permanece elija lo que elija.
locales dentro del contenido es como un evento lleva varios idiomas: junto al cuerpo, por código de idioma, solo lo que difiere, como "locales": { "de": { "clipData": { "label": "..." } } }. El JSON Schema lo describe, y el ejemplo completo lo omite. Cada canal toma la copia de su propio idioma superpuesta a la predeterminada, de modo que un idioma sin copia se renderiza igualmente, con la predeterminada. El texto viene en cuatro longitudes porque las plataformas lo hacen, y cada plataforma publica la más larga que deja espacio para la descripción, el enlace y los hashtags de la marca: la mínima (captionTiny, hasta 200 caracteres) en Pinterest, Threads y X, la corta (captionShort, 500) en Telegram, Threema, WeChat y WhatsApp, la media (captionMedium, 1500) en Discord, Facebook Reels, Instagram, LinkedIn, Signal, Slack y TikTok, y la larga (captionLong, 4000) en Facebook Feed y YouTube. Los títulos del JSON Schema dicen lo mismo, «Tiny description (Pinterest, Threads, X)» y así sucesivamente. Una longitud omitida se rellena a partir de la siguiente más corta escrita o, si no, de la siguiente más larga, que el límite de la plataforma recorta después; así que el contenido anterior a la longitud mínima da a esas plataformas su versión corta. Un canal en Sin plataforma específica entrega todas las longitudes, porque la persona que lo publica elige adónde va.
Omita metaData, o envíelo vacío, en un feed o un stream y el texto de la publicación se genera a partir de clipData: el título propio del clip como título de la publicación (su title y label, o un headline), el kicker, ese título, una segunda línea (subline) y los puntos (bullets) como texto, y hasta cuatro hashtags de las palabras más largas del título y el kicker. Envíe cualquiera de ellos y solo se usa lo que envió: un texto sin título sale sin título. Una publicación en una lista de publicaciones dice solo lo que se escribió, y allí solo se rellena un título vacío.
Una imagen es un archivo de su biblioteca multimedia y nada más. Cada campo de imagen es { "url": "...", "alt": "..." }, y url admite media:// seguido del id del archivo, o de su nombre, que es como el ejemplo propio de una plantilla nombra una imagen (el de En foco es media://example-image.svg, uno de los archivos con los que empieza la biblioteca de cada espacio de trabajo nuevo); el JSON Schema llama a las dos partes «Picture» y «Alt text». Una dirección web se rechaza y el rechazo nombra el campo: un 400 en un feed, una lista de publicaciones o una exportación directa, y unmapped con el motivo en un stream. Suba primero la imagen a la biblioteca multimedia y luego haga referencia a ella.
Un video es lo mismo, para un video. Una plantilla que reproduce uno de sus videos (la plantilla Superposición) admite { "url": "media://...", "alt": "..." } del mismo modo, y el clip dura lo que el video, tres minutos como máximo. Reelwire mide el propio archivo y escribe su duración en el campo como durationMs, así que usted nunca la envía, y todo lo que se envíe ahí se sustituye. Un clip así reproduce el sonido propio del video en lugar de la banda sonora de la marca, sin la cortinilla, el intro ni el outro de la marca, y cuenta como un video de su cuota sea cual sea su duración. La biblioteca de cada espacio de trabajo nuevo empieza con example-video.mp4, que nombra el ejemplo propio de la plantilla.
La Superposición también admite una imagen. Nombre una imagen de su biblioteca en el mismo campo (media://example-image.jpg, por ejemplo) y la marca se superpone exactamente como sobre un video, recortada para llenar cada formato del mismo modo. Una imagen no tiene duración, así que el clip dura los seconds que envíe junto a ella, de 3 a 60, o 10 sin ellos. Reelwire escribe cuál es en el campo como kind, video o image, junto a la duración, y también sustituye lo que se envíe ahí. Con una imagen, el clip se viste como cualquier otro: la banda sonora de su marca suena sobre ella, y su cortinilla, intro y outro la rodean.
Pida a /v1/formats/template/{templateId} un corte o compilación concretos con ?variant=Corporate%20glass&version=1.0.0. Sin ellos obtiene la primera variante y la compilación más reciente. Una variante que la plantilla no tiene es un 400 que nombra las que tiene. version aquí admite solo una compilación exacta: omítala para la más reciente, porque latest se busca como versión y es un 404.
Pregunte por variante cuando las variantes difieren. Cada estilo de una colección (Cifra destacada en Corporate glass, Editorial o Data terminal) admite el mismo contenido, así que cualquier variante responde por todas. Las plantillas sectoriales son distintas: Finance, Influencer, Retail, Tech y Public bodies tienen cada una diez casos de uso como variantes, y cada variante admite su propio contenido (un Market update no es un Advisor intro). Pregunte por ellas con ?variant= y envíe a cada publicación o evento el contenido de la variante con la que se renderiza.
Preguntar por el feed en su lugar
Un productor suele saber que envía decisiones de bancos centrales, no qué plantilla las renderiza. Qué plantilla usa un feed lo decide Reelwire y cambia sin avisar al productor, así que pregunte por el feed y sígala.
curl http://localhost:4000/v1/formats/feed/fd_c16f5268064a
La respuesta es el mismo documento, resuelto a través del vínculo actual del feed. GET /v1/formats/feed/{source}/{format} es la misma respuesta dirigida por los dos slugs.
Pedir un diseño propio
POST /v1/templates/custom-design pide a Reelwire un diseño hecho especialmente para este espacio de trabajo, para cuando ninguno de los estilos del catálogo es el suyo. Admite about (cómo debe ser el diseño, al menos una frase) y, opcionalmente, liked, disliked y brandId, y envía un correo a Reelwire con la persona que lo pide como Reply-To; responde { "sent": true, "answerTo": "you@example.com" }, la dirección a la que Reelwire responde. Lo que Reelwire hace después es una plantilla que se ofrece solo a su espacio de trabajo. La solicitud en sí no promete nada, ni un precio ni una fecha. Cinco solicitudes al día por espacio de trabajo; necesita Clip studio: write.
Comprobar el contenido antes de enviarlo
POST /v1/templates/{templateId}/validate comprueba el contenido contra la compilación con la que se renderizaría y no guarda nada: la comprobación que recibe la publicación de una lista de publicaciones al guardarse y que recibe Crear clip antes de renderizar, contra las claves propias de la variante, buscando además en la biblioteca multimedia de este espacio de trabajo cada imagen que nombra el contenido. En el panel es el enlace Validar entrada bajo un editor de contenido.
| Campo | Obligatorio | Qué es |
|---|---|---|
data | sí | El contenido, como un objeto: clipData, metaData y cualquier locales. |
variant | no | El corte contra el que comprobar, por nombre. Si falta, es el primero de la plantilla. |
version | no | Una compilación exacta, o "latest". Si falta, es la más reciente. |
curl http://localhost:4000/v1/templates/tpl_dd7e6b264fb8/validate \
-H "Authorization: Bearer rw_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"variant": "Corporate glass",
"data": { "clipData": { "label": "Ten-year Bund yield", "valeu": 2.41 } }
}'
{
"ok": false,
"templateId": "tpl_dd7e6b264fb8",
"variant": "Corporate glass",
"version": "1.0.0",
"problems": [
{ "path": "/clipData", "message": "missing value" },
{ "path": "/clipData", "message": "has a field this template does not take: valeu" }
]
}
Un contenido que no encaja responde igualmente 200: ok indica si se aceptaría, y problems nombra cada campo defectuoso, como JSON Pointer, con palabras: falta, no es un campo que admita esta plantilla, supera su límite o no es uno de los valores que acepta. Una imagen que la biblioteca no tiene es un problema en su propio campo, como /clipData/picture/url con «media://harbour.jpg is not in this workspace's media library: upload it, or choose a file the library has», porque el formato por sí solo no puede saberlo, y el clip renderizaría una imagen ausente. variant en la respuesta es el corte que se comprobó, el primero cuando no nombró ninguno. Una variante que la plantilla no tiene, o una versión que no contiene, es un 400 que nombra lo que hay; data que no es un solo objeto también es un 400.
Qué hay en el catálogo
GET /v1/formats/templates es cada plantilla que puede describirse a sí misma: una entrada por variante de cada plantilla que tiene una compilación con asignación de claves, en su compilación más reciente, por el orden de los nombres de las plantillas. Ese es exactamente el conjunto al que se puede dirigir con utilidad a un productor. keys cuenta las entradas de nivel superior, que en cada plantilla del catálogo son clipData y metaData.
{
"templates": [
{ "templateId": "tpl_06dc2554e5ac", "templateName": "Number grid", "variant": "Data terminal", "version": "1.0.0", "keys": 2 },
{ "templateId": "tpl_06dc2554e5ac", "templateName": "Number grid", "variant": "Editorial", "version": "1.0.0", "keys": 2 }
]
}
Una plantilla sin compilación todavía es un nombre en un estante sin nada que describir, así que no aparece en la lista en lugar de aparecer y no poder usarse.
GET /v1/templates es la vista propia del espacio de trabajo: lo que se ofrece a esta cuenta, unido a las plantillas con las que ya se encuentra a través de un feed, un stream o una lista de publicaciones, cada una con su inputSchema, duration, ratios y variantes. catalogue son las ofrecidas, como las lista Elegir una plantilla del Estudio de clips, cada una con su kind; templates es cada compilación que el espacio de trabajo puede usar o nombrar, y offered indica si puede elegir esa para un stream o una publicación, o solo nombrarla porque algo propio ya se renderiza con ella.
{
"catalogue": [
{
"id": "tpl_dd7e6b264fb8",
"name": "Big number",
"family": "Collections",
"description": "One figure counted up to exactly what was sent, with what it is, when it happened and its change, and up to six more figures after it, one at a time: 8 to 35 seconds. In ten styles, each wearing your brand's colours, fonts, logo, presenter and background.",
"kind": "style-and-format",
"variants": ["Corporate glass", "Bento grid", "Broadcast news", "Editorial", "Swiss grid", "Neo-brutalist", "Soft friendly", "Data terminal", "Keynote minimal", "Kinetic type"]
}
],
"templates": [
{
"templateId": "tpl_dbadb7ef4a70",
"offered": true,
"version": "1.0.0",
"name": "Spotlight",
"contentStyle": "motion-graphics",
"family": "Template projects",
"milestone": 1,
"ratios": ["9x16", "4x5", "1x1", "16x9", "2x3"],
"duration": { "mode": "formula", "baseFrames": 180, "perItemFrames": 30, "itemsPath": "/clipData/facts", "freeItems": 0, "minFrames": 240, "maxFrames": 420 },
"subvariants": [],
"overridableStyle": ["*"],
"inputSchema": { "type": "object", "required": ["clipData"] },
"variants": [
{ "name": "Bento grid", "versions": ["1.0.0"] },
{ "name": "Broadcast news", "versions": ["1.0.0"] },
{ "name": "Corporate glass", "versions": ["1.0.0"] },
{ "name": "Creator native", "versions": ["1.0.0"] },
{ "name": "Editorial", "versions": ["1.0.0"] },
{ "name": "Keynote minimal", "versions": ["1.0.0"] },
{ "name": "Neo-brutalist", "versions": ["1.0.0"] },
{ "name": "Soft friendly", "versions": ["1.0.0"] },
{ "name": "Swiss grid", "versions": ["1.0.0"] }
],
"descriptorSha": "19a9365d778eb833f0f267dad6c17eb3a41a2fc9a5b961f0c784e97a1db84c4f",
"syncedAt": "2026-09-23T18:46:36.864Z"
}
]
}
duration indica cuánto dura un clip, en fotogramas a la velocidad de la compilación (30 por segundo): en la mayoría de las plantillas crece con lo que envía (aquí, desde 180 fotogramas más 30 por cada dato, entre 240 y 420), de modo que más contenido hace un clip más largo y no uno abarrotado. variants en templates lista cada corte por nombre con las compilaciones subidas para él, en orden alfabético; catalogue lista los nombres en el orden en que los muestra el Catálogo de plantillas, siendo el primero el que se usa cuando no se nombra ninguno. kind indica qué clase de colección es una plantilla, según lo que cambia entre sus variantes: package (cosas distintas en un estilo, como un package hecho para un espacio de trabajo), looks (una cosa, como un intro o un outro, en cada estilo) o style-and-format (un formato en los estilos que le convienen). Es null para una plantilla aún no clasificada en ninguna de ellas. inputSchema es el propio de la plantilla, abreviado aquí: para una plantilla sectorial, cuyas variantes admiten contenido distinto, pregunte en su lugar a /v1/formats/template/{templateId} por variante.
descriptorSha cambia siempre que cambia la compilación que hay detrás de una versión, de modo que un cliente que guarda una plantilla en caché puede saber cuándo volver a leerla.
Lo que se ofrece a un espacio de trabajo sigue los sectores que eligió su propietario (consulte Sus sectores): una plantilla calificada como esencial o posible para uno de ellos. El propietario los cambia en el panel; ninguna clave puede. Quitar un sector deja en paz lo que ya se renderiza con una plantilla.
GET /v1/catalogue es el catálogo de feeds incluidos y no el estante de plantillas: cada feed que incluye Reelwire, sea lo que sea lo que se ofrezca a un espacio de trabajo, cada formato con su id fd_, su esquema de carga (jsonSchema, la asignación de claves de la plantilla que hay detrás), un ejemplo completo (examples), templateIds, markets y maxAgeSeconds, cuán antiguo puede ser un evento antes de conservarse pero nunca publicarse: un día para los feeds predefinidos. markets es la calificación con la que se incluyó el feed por id de mercado, core, possible o bad; los ids son brokers (el mercado llamado Finanzas), tech, public y retail. Se sirve con un etag y cache-control: public, max-age=30, de modo que un cliente que ha visto la versión puede saltarse el análisis. Lo que se ofrece a un espacio de trabajo está en GET /v1/feeds.
Qué compilaciones existen
curl http://localhost:4000/v1/templates/tpl_dd7e6b264fb8/reference \
-H "Authorization: Bearer rw_your_key_here"
{
"templateId": "tpl_dd7e6b264fb8",
"name": "Big number",
"variants": [
{ "name": "Corporate glass", "versions": [{ "version": "1.0.0", "ratios": ["9x16", "4x5", "1x1", "16x9", "2x3"] }] },
{ "name": "Bento grid", "versions": [{ "version": "1.0.0", "ratios": ["9x16", "4x5", "1x1", "16x9", "2x3"] }] },
{ "name": "Broadcast news", "versions": [{ "version": "1.0.0", "ratios": ["9x16", "4x5", "1x1", "16x9", "2x3"] }] }
]
}
Abreviado aquí a tres de las diez variantes de Cifra destacada. Vienen en el orden en que las lista el Catálogo de plantillas, cada una con sus compilaciones, la más reciente primero.
GET /v1/templates/{templateId}/reference/{ratio} devuelve el propio clip de referencia, para que pueda ver cómo es una plantilla antes de comprometerse. Es un video, no JSON:
HTTP/1.1 200 OK
content-type: video/mp4
etag: "5f3346d28eb21a9d24768c82d387c7a66708cf6561511a9f3837c8455f385fa2-9x16"
cache-control: private, no-cache
x-template-version: 1.0.0
Acótelo con ?variant=Corporate%20glass&version=1.0.0; aquí version=latest es la compilación más reciente. Una relación de aspecto que no es NxM es un 400 que dice «No such shape», y una variante, versión o formato para los que la compilación no tiene clip es un 404. Devuelva el etag como If-None-Match y una compilación sin cambios responde 304 sin nada que descargar.
GET /v1/templates/{templateId}/reference-sheet es una imagen, un JPEG y no JSON, de una variante renderizada con su ejemplo completo en varias marcas, aspectos y formatos, para que vea de un vistazo cómo lleva una marca. Admite los mismos ?variant= y ?version=, lleva un etag que funciona igual y x-template-version, y es un 404 para una compilación que no lleva hoja.
Versiones y variantes
Una versión nombra una compilación. "latest" es una respuesta real y no una ausencia, y es el valor predeterminado: sigue la compilación más reciente, resuelta en el momento en que algo se renderiza.
Por ahora todas las plantillas están en la versión 1.0.0. Una mejora de una plantilla sustituye su compilación 1.0.0 en lugar de añadir una versión, de modo que un canal fijado a 1.0.0 y uno en "latest" renderizan hoy lo mismo. El contenido que acepta una plantilla no cambia con una compilación nueva.
Una variante es un corte de la misma plantilla. En una colección, como Cifra destacada, cada variante es un estilo visual y todos los estilos admiten el mismo contenido; en una plantilla sectorial, como Finance, cada variante es un caso de uso con contenido propio. Qué variante y qué versión es una elección del canal que se suscribe, de la publicación en una lista de publicaciones o del video en una exportación directa; nunca del productor. Consulte Canales.
POST /v1/templates/sync, que aparece en la lista de rutas, refleja el registro de plantillas. Es propio de Reelwire, para su personal, y se rechaza a toda clave: nada de lo que hace un productor o quien publica lo necesita.
Errores frecuentes
Escribir la carga a mano a partir de un ejemplo. Tome jsonSchema y genere un tipo. El ejemplo está para comprobarse contra él, no para copiarlo.
Renderizar un clip para saber si el contenido encaja. POST /v1/templates/{templateId}/validate responde la misma pregunta al instante, nombra cada campo defectuoso, las imágenes que le faltan a la biblioteca incluidas, y no gasta nada.
Poner en metaData contenido que se renderiza. Nunca se renderiza. Los titulares y las cifras van en clipData.
Enviar locales junto al contenido. Va dentro del contenido, donde la plantilla lo valida.
Fijar una versión porque está ahí. Una fijación deja de seguir las versiones nuevas. Fije cuando tenga un motivo, no por defecto.
Suponer que toda plantilla viene en todos los formatos. ratios es por compilación. Un canal en una superficie que la plantilla no renderiza no tiene nada que renderizar.
Dirigir un feed por sus slugs en la configuración almacenada. Los slugs son palabras y las palabras se editan. Use el id fd_.