Saltar al contenido principal

Inicio rápido: campos de plantilla

Esta guía muestra cómo definir campos de plantilla en tu HTML para que se rendericen correctamente en 7CG.

El enfoque aquí es práctico:

  • Qué poner en el bloque GDD
  • Qué tipos de campo renderiza realmente 7CG
  • Cómo se comportan etiquetas, pestañas, valores por defecto y selectores en el editor

El bloque de script GDD

Toda plantilla necesita un esquema GDD (Graphics Data Definition) embebido en su archivo HTML:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
</head>
<body>
<script name="graphics-data-definition" type="application/json+gdd">
{
"$schema": "https://superflytv.github.io/GraphicsDataDefinition/gdd-meta-schema/v1/schema.json",
"title": "My Template",
"description": "A simple template example",
"type": "object",
"properties": {
"text": {
"type": "string",
"label": "Main Text",
"description": "Text shown on screen",
"gddType": "single-line"
}
}
}
</script>
<script type="module" src="./index.jsx"></script>
</body>
</html>

Propiedades obligatorias en la raíz

PropiedadDescripción
$schemaUsa la URL del meta-esquema GDD anterior
titleNombre de la plantilla mostrado en 7CG
typeUsa "object" para la raíz
propertiesObjeto con los campos editables

Propiedades opcionales comunes en la raíz

PropiedadDescripción
descriptionDescripción mostrada en 7CG
authorNameAutor de la plantilla
authorEmailE-mail de contacto
gddOptionsOpciones avanzadas como grupos e i18n

Etiquetas, ayuda y valores por defecto

Para plantillas orientadas al operador, las propiedades más importantes son:

PropiedadLo que ve el usuario
labelEtiqueta principal del campo
descriptionTexto de ayuda en el tooltip
defaultValor inicial o sugerencia, según el tipo
maxLengthLímite de entrada y pista para campos de texto

Ejemplo:

"speakerName": {
"type": "string",
"label": "Speaker Name",
"description": "Name shown on the first line",
"default": "Jane Smith",
"maxLength": 50,
"gddType": "single-line"
}

label vs description

Usa:

  • label para el título visible del campo
  • description para el texto de ayuda

Si falta label, 7CG recurre a description y luego a la clave del campo.

Tipos básicos de campo

String

"title": {
"type": "string",
"label": "Title"
}

Se renderiza como: Entrada de texto de una línea

Opciones útiles:

  • minLength
  • maxLength
  • default

Number

"speed": {
"type": "number",
"label": "Speed",
"default": 100,
"minimum": 1,
"maximum": 500
}

Se renderiza como: Entrada numérica que admite decimales

Opciones útiles:

  • minimum
  • maximum
  • multipleOf
  • default

Integer

"count": {
"type": "integer",
"label": "Item Count",
"default": 3
}

Se renderiza como: Entrada numérica con paso 1

Boolean

"showLogo": {
"type": "boolean",
"label": "Show Logo",
"default": true
}

Se renderiza como: Interruptor

Campos especializados con gddType

Usa gddType cuando quieras un control de editor más específico.

Texto de una línea

"headline": {
"type": "string",
"label": "Headline",
"gddType": "single-line",
"maxLength": 80
}

Se renderiza como: Entrada explícita de una línea

Texto multilínea

"body": {
"type": "string",
"label": "Body Text",
"gddType": "multi-line",
"default": "Line 1\nLine 2\nLine 3"
}

Se renderiza como: Textarea

Buena elección para:

  • Letras
  • Texto de créditos
  • Notas
  • Contenido en párrafo

Selector de color (#RRGGBB)

"backgroundColor": {
"type": "string",
"label": "Background Color",
"gddType": "color-rrggbb",
"default": "#000000"
}

Se renderiza como: Selector visual de color más entrada hex

Formato esperado:

  • #RRGGBB

Color con alfa (#RRGGBBAA)

"textColor": {
"type": "string",
"label": "Text Color",
"gddType": "color-rrggbbaa",
"default": "#FFFFFFFF"
}

Se renderiza como: Entrada hex para valores de 8 dígitos

Formato esperado:

  • #RRGGBBAA

Importante: incluye el # inicial.

Select / Desplegable

"alignment": {
"type": "string",
"label": "Alignment",
"gddType": "select",
"enum": ["left", "center", "right"],
"default": "center",
"gddOptions": {
"labels": {
"left": "Left",
"center": "Center",
"right": "Right"
}
}
}

Se renderiza como: Lista desplegable

Usa:

  • enum para los valores permitidos
  • gddOptions.labels para etiquetas amigables

Porcentaje

"opacity": {
"type": "number",
"label": "Opacity",
"gddType": "percentage",
"default": 75,
"minimum": 0,
"maximum": 100
}

Se renderiza como: Entrada numérica con sufijo %

Duración en milisegundos

"fadeDuration": {
"type": "integer",
"label": "Fade Duration",
"gddType": "duration-ms",
"default": 500,
"minimum": 0
}

Se renderiza como: Entrada numérica con sufijo ms

Selector de archivo

"videoFile": {
"type": "string",
"label": "Video File",
"gddType": "file-path",
"gddOptions": {
"extensions": ["mp4", "mov", "webm"]
}
}

Se renderiza como: Campo de texto con un botón Examinar

Selector de imagen

"logoPath": {
"type": "string",
"label": "Logo Image",
"gddType": "file-path/image-path",
"gddOptions": {
"extensions": ["png", "jpg", "jpeg", "webp"]
}
}

Se renderiza como: Selector de archivo orientado a imágenes con un botón Examinar

Arrays y objetos

7CG puede renderizar datos estructurados, no solo campos planos.

Campos de objeto

"nameBlock": {
"type": "object",
"label": "Name Block",
"properties": {
"line1": {
"type": "string",
"label": "Line 1"
},
"line2": {
"type": "string",
"label": "Line 2"
}
}
}

Se renderiza como: Editor anidado con un campo por propiedad

Usa objetos cuando varios valores relacionados pertenezcan juntos.

Campos de array

"items": {
"type": "array",
"label": "Bullet Points",
"minItems": 1,
"maxItems": 5,
"items": {
"type": "string",
"gddType": "single-line"
}
}

Se renderiza como: Lista con controles de añadir/quitar

Opciones útiles:

  • minItems
  • maxItems
  • uniqueItems

Arrays de objetos

"team": {
"type": "array",
"label": "Team Members",
"items": {
"type": "object",
"title": "Member",
"properties": {
"name": {
"type": "string",
"label": "Name"
},
"role": {
"type": "string",
"label": "Role"
}
}
}
}

Se renderiza como: Lista en la que cada elemento se abre en su propio cuadro de edición

Útil para:

  • Listas de créditos
  • Listas de oradores
  • Entradas de tercio inferior repetidas

Agrupar campos en pestañas

Puedes organizar los campos en pestañas con gddOptions.groups.

{
"$schema": "https://superflytv.github.io/GraphicsDataDefinition/gdd-meta-schema/v1/schema.json",
"title": "Grouped Template",
"type": "object",
"gddOptions": {
"groups": [
{ "id": "content", "label": { "en": "Content" } },
{ "id": "appearance", "label": { "en": "Appearance" } }
]
},
"properties": {
"text": {
"type": "string",
"label": "Main Text",
"gddOptions": { "group": "content" }
},
"color": {
"type": "string",
"label": "Text Color",
"gddType": "color-rrggbb",
"gddOptions": { "group": "appearance" }
}
}
}

Cómo se comporta en 7CG:

  • Los campos asignados a grupos conocidos aparecen en pestañas
  • Los campos sin grupo aparecen en una pestaña Otros de respaldo
  • Las pestañas solo aparecen cuando la plantilla tiene campos efectivamente agrupados

Internacionalización (i18n)

7CG admite valores traducidos para:

  • title de la plantilla
  • label del campo
  • description del campo

Usa gddOptions.i18n.

i18n a nivel de campo

"lyrics": {
"type": "string",
"gddType": "multi-line",
"label": "Lyrics",
"description": "Lyrics to display",
"gddOptions": {
"i18n": {
"label": {
"en": "Lyrics",
"pt": "Letra",
"es": "Letra"
},
"description": {
"en": "Lyrics to display",
"pt": "Letra a exibir",
"es": "Letra a mostrar"
}
}
}
}

i18n a nivel de plantilla

{
"title": "My Template",
"gddOptions": {
"i18n": {
"title": {
"en": "My Template",
"pt": "Meu Template",
"es": "Mi Plantilla"
}
}
}
}

7CG usa primero el idioma de la interfaz, luego recurre al inglés y por último al valor por defecto.

Notas prácticas

Valores por defecto

default es útil, pero no se comporta igual en todos los tipos.

En la práctica:

  • los booleanos y muchos campos numéricos muestran el valor por defecto como valor inicial
  • los campos de string a menudo lo usan como placeholder sugerido
  • los arrays y objetos lo usan al construir editores anidados

Trata los valores por defecto como sugerencia inicial, no como regla estricta sobre la apariencia de cada control.

Validación

7CG usa detalles del esquema como:

  • minLength
  • maxLength
  • minimum
  • maximum
  • minItems
  • maxItems

para dar forma al editor y ayudar al usuario, pero no debes confiar en el editor genérico para aplicar todas las reglas igual que un validador de backend.

Ejemplo completo

<script name="graphics-data-definition" type="application/json+gdd">
{
"$schema": "https://superflytv.github.io/GraphicsDataDefinition/gdd-meta-schema/v1/schema.json",
"title": "Credits Roll",
"description": "Credits template with grouped fields",
"type": "object",
"gddOptions": {
"groups": [
{ "id": "content", "label": { "en": "Content" } },
{ "id": "style", "label": { "en": "Style" } }
]
},
"properties": {
"heading": {
"type": "string",
"label": "Heading",
"gddType": "single-line",
"default": "Production Team",
"gddOptions": { "group": "content" }
},
"people": {
"type": "array",
"label": "People",
"gddOptions": { "group": "content" },
"items": {
"type": "object",
"title": "Person",
"properties": {
"name": {
"type": "string",
"label": "Name"
},
"role": {
"type": "string",
"label": "Role"
}
}
}
},
"textColor": {
"type": "string",
"label": "Text Color",
"gddType": "color-rrggbbaa",
"default": "#FFFFFFFF",
"gddOptions": { "group": "style" }
},
"speed": {
"type": "number",
"label": "Speed",
"default": 100,
"minimum": 1,
"maximum": 500,
"gddOptions": { "group": "style" }
}
}
}
</script>

Probar tus campos

  1. Guarda tu archivo HTML con el bloque GDD embebido.
  2. Refresca las plantillas en 7CG o reconéctate a la fuente.
  3. Abre un módulo que use la plantilla.
  4. Confirma que etiquetas, pestañas, selectores, arrays y valores por defecto aparecen como esperabas.

Si los campos no aparecen correctamente:

  • Verifica que el JSON es válido
  • Confirma que el type raíz es "object"
  • Confirma que cada propiedad tiene un type válido
  • Revisa la ortografía de gddType
  • Asegúrate de que los campos agrupados referencian un ID de grupo real
  • Verifica que los formatos de color usan #RRGGBB o #RRGGBBAA

Referencia rápida

Quiero...Usar
Texto de una línea"type": "string" o "gddType": "single-line"
Texto multilínea"type": "string", "gddType": "multi-line"
Número entero"type": "integer"
Número decimal"type": "number"
Interruptor on/off"type": "boolean"
Selector RGB"type": "string", "gddType": "color-rrggbb"
Color RGBA"type": "string", "gddType": "color-rrggbbaa"
Desplegable"gddType": "select" con enum
Porcentaje"gddType": "percentage"
Duración en ms"gddType": "duration-ms"
Selector de archivo genérico"gddType": "file-path"
Selector de imagen"gddType": "file-path/image-path"
Agrupar campos en pestañasgddOptions.groups en la raíz y gddOptions.group por campo
Traducir etiquetas y descripcionesgddOptions.i18n
Listas repetidas"type": "array"
Datos anidados"type": "object"

Pasos siguientes