Documentation

Documentation

Structure JSON et règles des champs

Structure du schéma au niveau supérieur, règles des champs, pools d'assets, tracks et limites de validation

Structure JSON et règles des champs

1. Structure de premier niveau

La forme JSON complète au niveau supérieur est :

{
  "meta": {},
  "assets": {},
  "tracks": []
}

Règles :

  • meta est requis
  • tracks est requis et doit contenir au moins un track
  • assets est optionnel

Non pris en charge :

  • Ancien video au niveau supérieur
  • Ancien audio au niveau supérieur

2. meta

interface Meta {
  version: string;
  title?: string;
  description?: string;
  author?: string;
  createdAt?: string;
  tags?: string[];
  width: number;
  height: number;
  fps: number;
  background?: string | "transparent" | Gradient;
}

version

  • Type : string
  • Requis : oui
  • Rôle : marqueur de version du schéma
  • Valeur recommandée : "2.0.0"

title

  • Type : string
  • Requis : non
  • Rôle : métadonnées du titre vidéo

description

  • Type : string
  • Requis : non
  • Rôle : métadonnées de description vidéo

author

  • Type : string
  • Requis : non
  • Rôle : métadonnées d'auteur

createdAt

  • Type : string
  • Requis : non
  • Rôle : métadonnées de date de création

tags

  • Type : string[]
  • Requis : non
  • Rôle : métadonnées de balisage

width

  • Type : number
  • Requis : oui
  • Contrainte : entier positif
  • Rôle : largeur du canvas

height

  • Type : number
  • Requis : oui
  • Contrainte : entier positif
  • Rôle : hauteur du canvas

fps

  • Type : number
  • Requis : oui
  • Contrainte : entier positif
  • Rôle : fréquence d'images

background

  • Type : string | "transparent" | Gradient
  • Requis : non
  • Valeur par défaut : "#000000"
  • Rôle : arrière-plan global

Forme de Gradient :

interface Gradient {
  type: "linear" | "radial" | "conic";
  angle?: number;
  stops: Array<{
    offset: number;
    color: string;
  }>;
}

3. assets

interface Assets {
  fonts?: FontAsset[];
  images?: ImageAsset[];
  videos?: VideoAsset[];
  audios?: AudioAsset[];
  subtitles?: SubtitleAsset[];
}

fonts

interface FontAsset {
  id: string;
  src: string;
  family: string;
}

Statut actuel à l'exécution :

  • Il peut apparaître dans le JSON
  • Le runtime ne télécharge ni n'enregistre automatiquement les polices
  • Ne le considérez pas comme un système complet de chargement des polices

images

interface ImageAsset {
  id: string;
  src: string;
}

videos

interface VideoAsset {
  id: string;
  src: string;
}

audios

interface AudioAsset {
  id: string;
  src: string;
}

subtitles

interface SubtitleAsset {
  id: string;
  words: SubtitleWord[];
}

Utilisation de $ref

Pools de ressources qui prennent en charge $ref :

  • images
  • videos
  • audios
  • subtitles

Exemple :

{
  "src": { "$ref": "video-hero" }
}

Ou :

{
  "words": { "$ref": "subtitle-main" }
}

4. tracks

interface Track {
  id?: string;
  clips: Clip[];
}

id

  • Type : string
  • Requis : non
  • Rôle : identifiant du track

clips

  • Type : Clip[]
  • Requis : oui
  • Contrainte : au moins un clip

5. Forme partagée de Clip

interface BaseClip {
  id?: string;
  type: ClipType;
  start: number;
  duration: number;
  transform?: Transform;
  zIndex?: number;
  opacity?: number;
  style?: Style;
  animations?: Animation[];
  keyframes?: Keyframe[];
  transition?: Transition;
}

Champs de base partagés :

id

  • Type : string
  • Requis : non
  • Rôle : identifiant du clip

type

  • Type : ClipType
  • Requis : oui

Actuellement pris en charge :

  • video
  • image
  • text
  • rect
  • circle
  • polygon
  • audio
  • subtitle
  • layout
  • template

start

  • Type : number
  • Requis : oui
  • Unité : secondes
  • Rôle : heure de début du clip

duration

  • Type : number
  • Requis : oui
  • Unité : secondes
  • Rôle : durée du clip

transform

  • Type : Transform
  • Requis : non

zIndex

  • Type : number
  • Requis : non
  • Valeur par défaut : 0

opacity

  • Type : number
  • Requis : non
  • Valeur par défaut : 1
  • Rôle : raccourci d'opacité pour les éléments visibles
  • Règle de compatibilité : style.opacity a priorité sur opacity au niveau supérieur

style

  • Type : Style
  • Requis : non

animations

  • Type : Animation[]
  • Requis : non

keyframes

  • Type : Keyframe[]
  • Requis : non

transition

  • Type : Transition
  • Requis : non

6. Règles sur les coordonnées et les pourcentages

Les coordonnées en pourcentage sont basées sur le système de coordonnées centré de Revideo, et non sur une origine en haut à gauche comme dans le DOM.

Exemples :

  • x: "50%" signifie centré horizontalement
  • y: "50%" signifie centré verticalement
  • x: "0%" signifie tout à gauche
  • x: "100%" signifie tout à droite
  • y: "0%" signifie en haut
  • y: "100%" signifie en bas

7. JSON valide minimal

{
  "meta": {
    "version": "2.0.0",
    "width": 1920,
    "height": 1080,
    "fps": 30,
    "background": "#000000"
  },
  "tracks": [
    {
      "clips": [
        {
          "type": "text",
          "start": 0,
          "duration": 3,
          "text": "Hello, world",
          "transform": {
            "x": "50%",
            "y": "50%"
          },
          "style": {
            "fontSize": 72,
            "fill": "#ffffff",
            "textAlign": "center"
          }
        }
      ]
    }
  ]
}

8. Remarque pour les intégrations publiques

Pour les intégrations externes, utilisez le flux documenté dans API et utilisation :

  • Soumettez votre schéma via POST /api/preview
  • Envoyez le JSON complet du schéma comme corps de requête
  • L'absence de meta ou tracks au niveau supérieur doit toujours être traitée comme une entrée invalide
  • Un mauvais nom de champ dans un clip ne provoque pas toujours une erreur dès la requête
  • Certaines erreurs ne deviennent visibles qu'au moment de l'aperçu, de la lecture ou du rendu