χρόνος ανάγνωσης : 8 minutes

Πριν δύο εβδομάδες, έχω εκκινήσει`capsule-gradle`— ένα plugin που μετατρέπει ένα deck reveal.js σε καψέλα βίντεο WebM με TTS. Σήμερα, προσθέτω ένα νέο plugin : hyperframes-gradle. Κάνει κάτι που το capsule-gradle δεν κάνει : να μετατρέψετε το AsciiDoc ευθύς σε βίντεο MP4, χωρίς να περάσετε μέσω του reveal.js.

Εδώ είναι γιατί αυτό το plugin υπάρχει, πώς ενσωματώνεται με το υπάρχον, και το που η μηχανή HyperFrames του HeyGen προσφέρει στη ροή παραγωγής περιεχομένου.

Η τρύπα σε ο αγωγός βίντεο

Το documentary pipeline μου παράγει δύο τύπους βίντεο:

  1. κάψουλα επανάληψης (capsule-gradle) — ένας δέκας reveal.js συλλημμένο σε WebM με

αφήγγιση TTS. Ιδέαλ για να επαναλάβετε ένα ενότητα.

  1. Ανιματισμένες διαφάνειες (slider-gradle) — ένας διαδραστικός deck reveal.js HTML για

ο εκπαιδευτής πρόσωπο.

Αλλά λείπει ένας τρίτος τύπος : το standalone video

Use case Τρέχουσα λύση έλλειψη

Διαφάνειες εκπαιδευτή

slider-gradle → reveal.js

✅

κάψουλα αναθεώρισης

capsule-gradle → WebM

✅

βίντεο τειζέρ

καμία

❌

Ανιμημένη τεχνική επίδειξη

κανέμη

❌

Έγγραφο-σε-βίντεο

καμία

❌

Το πρώτο use case είναι κρίσιμο: πώς να το δημιουργήσουμε αυτόματα ένα βίντεο 60 δευτερόλεπτου που παρουσιάζει ένα πρότζεκτ ή ένα module, με κινούμενα GSAP, διαφώνηση TTS, και μουσική υπόβαθρο — όλο από το ίδιο αρχείο AsciiDoc Τι για τις διαφάνειες;

Το Capsule-gradle δεν μπορεί να απαντήσει: του χρειάζεται ήδη ένα deck reveal.js. ο slider-gradle παράγει καλά αυτό το deck, αλλά δεν έχει σχεδιαστεί για την απόδοση βίντεο. Πρέπει να υπήρχε ένα ευθύγραμμο pipeline : AsciiDoc → βίντεο.

HyperFrames : Ο Μηχανισμός

Εξέφυλαhttps://github.com/heygen-com/hyperframes[HyperFrames] il y a μερές μέρες. Είναι ένα πλαίσιο open-source (Apache 2.0) που δημιουργήθηκε από το HeyGen, το μονοκέρωτο του βίντεο ΤΕ. 22 700 αστέρια στο GitHub. Το pitch κρατάει στο μια πρόταση :

Γράψτε HTML. Αποδίδει βίντεο. Χτισμένο για πράκτορες

Η αρχή: γράφετε HTML με`data-*`ιδιότητες, αναφέρετε Μια κίνηση GSAP (ή CSS, Lottie, Three.js…), και ο μηχανός αποδίδει όλο το σε MP4 μέσω Puppeteer (headless Chrome) + FFmpeg. Αποτέλεσμα determinιστικό: ίσα εισαγωγή, ίδιες frames, ίδιο βίντεο.

<div id="stage" data-composition-id="intro" data-start="0" data-width="1920" data-height="1080">
  <video class="clip" data-start="0" data-duration="6" data-track-index="0"
         src="background.mp4" muted playsinline></video>

  <h1 id="title" class="clip" data-start="1" data-duration="4" data-track-index="1">
    Formation Docker & Kubernetes
  </h1>

  <audio data-start="0" data-duration="6" data-track-index="2"
         data-volume="0.3" src="music.wav"></audio>

  <script src="https://cdn.jsdelivr.net/npm/gsap@3/dist/gsap.min.js"></script>
  <script>
    const tl = gsap.timeline({ paused: true });
    tl.from("#title", { opacity: 0, y: 40, duration: 0.8 }, 1);
    window.__timelines = window.__timelines || {};
    window.__timelines.intro = tl;
  </script>
</div>

Τι κάνει το HyperFrames διαφορετικό από το Remotion ; Χωρίς React, χωρίς bundler, χωρίς JSX. Ακατέργαστο HTML που οι παράγοντες AI ξέρουν να γράφουν φυσικά. Το είναι προσαρμοσμένο ακριβώς για το pipeline μου : planner-gradle με deepseek μπορεί να δημιουργήσει αυτό το HTML από ένα σχέδιο SPG/SPD, και ένα plugin Gradle μπορεί να το μετατρέψει σε MP4.

Η αρχιτεκτονική του Plugin

Το hyperframes-gradle ακολουθεί το ίδιο μοντέλο όπως όλα τα plugins μου : το pattern « plugin ανεξάρτητο + ρίζα καταναλωτής »

hyperframes-gradle/
├── settings.gradle.kts          ← racine consommateur (dogfood)
├── build.gradle.kts              ← 3 lignes : apply plugin hyperframes
├── hyperframes-plugin/           ← BUILD INDÉPENDANT
│   ├── gradlew                    ← son propre wrapper
│   ├── build.gradle.kts           ← java-gradle-plugin
│   ├── src/main/kotlin/education/cccp/hyperframes/
│   │   ├── HyperframesPlugin.kt
│   │   ├── GenerateHyperframesHtmlTask.kt
│   │   ├── RenderHyperframesTask.kt
│   │   └── HyperframesExtension.kt
│   ├── .agents/                   ← gouvernance agent
│   └── doc/
│       └── HYPERFRAMES_ARCHITECTURE.adoc
└── video.yml                      ← configuration dogfood

Το pipeline σε τέσσερα βήματα

@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultFontSize 11

title Pipeline hyperframes-gradle

rectangle "AsciiDoc\nπηγή" as adoc #LightYellow
rectangle "AsciidoctorJ" as asciidoctorj #LightBlue
rectangle "HTML HyperFrames\n(data-* attrs)" as html #LightGreen
rectangle "HyperFrames CLI\n(Node.js 22+)" as cli #Lavender
rectangle "video.mp4" as mp4 #Gold

adoc -right-> asciidoctorj : parse blocs customs
asciidoctorj -right-> html : génère HTML
html -right-> cli : ProcessBuilder\nnpx hyperframes render
cli -right-> mp4 : Puppeteer + FFmpeg
@enduml
  1. AsciidoctorJ αναλύει το πηγαίο αρχείο AsciiDoc και εξάγει τα προσαρμοσμένα μπλοκ

[hyperframes-composition], [hyperframes-track], [hyperframes-animation].

  1. GenerateHyperframesHtmlTask δημιουργεί το HTML HyperFrames με τα

`data-*`τα αντίστοιχα χαρακτηριστικά.

  1. RenderHyperframesTask καλεί την CLI HyperFrames μέσω`ProcessBuilder`:

npx hyperframes render --input index.html --output video.mp4.

  1. Το MP4 αναπτύσσεται σε`output/`με ένα`metadata.json`για την ορχέστρωση.

Το DSL AsciiDoc

Η πραγματική αξία που προσθέτει το plugin, είναι το DSL AsciiDoc. Ο χρήστης Δεν γράφει ποτέ HTML. Σημειώνει το υπάρχον του εγγράφου AsciiDoc:

= Formation Docker & Kubernetes
:hyperframes-width: 1920
:hyperframes-height: 1080
:hyperframes-fps: 30

[hyperframes-composition, id="intro"]
== Introduction

Le titre apparaît avec un fondu GSAP sur fond vidéo.

[hyperframes-track, index=0, start=0, duration=6]
video::assets/background.mp4[muted, playsinline]

[hyperframes-track, index=1, start=1, duration=4]
Formation Docker & Kubernetes

[hyperframes-animation, type=gsap]

const tl = gsap.timeline({ paused: true }); tl.from("#title", { opacity: 0, y: 40, duration: 0.8 }, 1); window.timelines = window.timelines || {}; window.__timelines.intro = tl;

Τα χαρακτηριστικά docinfo (:hyperframes-width:) ρυθμίζουν τις διαστάσεις. Τα προσαρμοσμένα μπλοκ ορίζουν τα συνθέματα και τις pistes. Το μπλοκ `[hyperframes-animation]`περιέχει τον ακατέργαστο κώδικα GSAP — που ο πράκτορας ΤΝ μπορεί να δημιουργήσει από μια περιγραφή σε φυσική γλώσσα.

Η Γέφυρα Node.js

Το único τεχνικό σημείο εμπόδια: Το HyperFrames είναι σε Node.js/TypeScript, και τα plugins μου είναι σε Kotlin/JVM. Η λύση είναι ένα`ProcessBuilder`:

(three spaces after newline)

class RenderHyperframesTask : DefaultTask() {

    @TaskAction
    fun render() {
        val process = ProcessBuilder(
            "npx", "hyperframes", "render",
            "--input", inputHtml.absolutePath,
            "--output", outputMp4.absolutePath
        )
            .inheritIO()
            .start()

        val exitCode = process.waitFor()
        require(exitCode == 0) {
            "HyperFrames render failed with exit code $exitCode"
        }
    }
}

Με μηδενική συνεζυγία κώδικα JVM ↔ Node.js. Το συμβόλαιο είναι μέσω γραμμής εντολών. και αρχεία σε δίσκο. Είναι το ίδιο μοτίβο που`plantuml-gradle` (καλεί την CLI PlantUML) ή`slider-gradle`(που καλεί το AsciidoctorJ). Κανένα νέο στον ήλιο — απλώς εφαρμοσμένο σε ένα πιο νέο εργαλείο.

Δύο πρόσθετα βίντεο, δύο χρήσεις

καψέλα-gradle hyperframes-gradle

</think>

Deck reveal.js (υπάρχον HTML)

AsciiDoc → HTML HyperFrames

Περίπτωση χρήσης

καψούλα αναθεώρησης

Βίντεο εξηγιακό αυτόνομο

Φύση

Diapositives → βίντεο

Document → βίντεο

αποδοθείς

Playwright Java → WebM

HyperFrames CLI → MP4

ζωτικότητα

Μεταβάσεις reveal.js εγγενείς

GSAP/CSS δεδομένα-attributes

Στοίβα

100% JVM (Kotlin)

JVM + εξωτερική CLI Node.js

Δεν ανταλλάσσονται. Συμπληρώνονται. Η πλήρης αλυσίδα αξίας:

AsciiDoc ──→ slider-gradle ──→ deck reveal.js ──→ capsule-gradle ──→ WebM (καψούλα αναθεώρησης)

AsciiDoc ──→ hyperframes-gradle ──→ MP4 (αυτόνομο βίντεο)

Ο χρήστης γράφει ένα μόνο αρχείο AsciiDoc. slider-gradle παράγει τις διαφάνειες. capsule-gradle παραγεύει την καψίδα ανθεώρησης. hyperframes-gradle παραγεύει το βίντεο teaser και τα τεχνικά demos

Τα 6 EPICs της Roadmap

Το πρόσθετο είναι δομημένο σε 6 EPICs :

επικός Περιγραφή προτεραιότητα

HF-0

Bootstrap διακυβέρνηση + πλαίσιο αρχιτεκτονικής

✅ ΟΛΟΚΛΗΡΩΜΕΝΟ

HF-1

Πρόσθετο Gradle stub + ενσωμάτωση AsciidoctorJ

P0

HF-2

Γέφυρα CLI HyperFrames (ProcessBuilder → npx → MP4)

P1

HF-3

DSL AsciiDoc εθίμητα (blocs, docinfo, templates)

P1

HF-4

Ενσωμάτωση runner-gradle (metadata.json)

P2

HF-5

Πρότυπα έτοιμα προς χρήση (title-card, code-diff, captions)

P3

HF-6

CI + δημοσίευση Maven Central / Gradle Portal

P3

Η συνεδρία 000 (bootstrap) ολοκληρώθηκε ήδη. Η συνεδρία 001 θα επιτεθεί στο HF-1 : το stub του plugin Gradle και η ενσωμάτωση AsciidoctorJ.

Γιατί λειτουργεί;

Τρεις λόγοι :

  1. HyperFrames είναι "built for agents". Ο αγωγός μου βασίζεται σε agents AI

(planner-gradle + deepseek) που δημιουργούν περιεχόμενο. HyperFrames δέχεται HTML ακατέργαστο — το format που τα LLMs το διαχειρίζονται καλύτερα. Χωρίς React, χωρίς για το JSX, δεν υπάρχει καμπύλη μάθησης για τον παράγοντα.

  1. Το DSL AsciiDoc είναι φυσικό. Το ολόκληρο μου οικοσύστημα μιλά AsciiDoc.

slider-gradle, codex-gradle, training-gradle — όλοι καταναλώνουν το`.adoc`. προσθέστε μπλοκ customs`[hyperframes-composition]`είναι μια επέκταση λογικό, όχι μια διακοπή.

  1. Η γέφυρα Node.js είναι ένα αποδεδειγμένο μοτίβο. ProcessBuilder εκτός της JVM,

Αυτό είναι αυτό που κάνω ήδη για το PlantUML, το Graphviz, το Piper. Προσθέστε το HyperFrames Δεν αλλάζει τίποτα στην αρχιτεκτονική — είναι απλώς ένα εξωτερικό εργαλείο περισσότερο, ελεγχόμενο από το Gradle.

Η αληθινή δύναμη του pattern, είναι ότι δεν υπάρχει καθόλου εξάρτηση npm στο το Gradle build. Το πρόσθετο δεν εισάγει κώδικα Node.js. Εκτελεί ένα εντολή shell. Αν το HyperFrames εξελιχθεί ή καταστραφεί, το πρόσθετο δεν είναι συνδεδεμένο — Αρκεί να ενημερώσετε την εντολή.

Conclusion : Το ληστέρον που λείπεται

Με το hyperframes-gradle, το pipeline βίντεό μου είναι ολοκληρωμένο. Έχω :

  • Οι διαλογικές διαφάνειες (slider-gradle)

  • Τα καψούλες επαναλήψεως (capsule-gradle)

  • Οι βίντεο standalone (hyperframes-gradle)

Τρεις μορφές. Ένας μόνο αρχείο πηγής: το AsciiDoc.

Ο επόμενος στόχος είναι HF-1: να μεταγλωτίσουμε το πρόσθετο και να δημιουργήσουμε ένα πρώτο HTML HyperFrames από ένα έγγραφο AsciiDoc σχολιασμένο. Η συνεδρία 001 είναι ήτοι πλαϊσμένο.

hyperframes-gradle υπάρχει. Η διακυβέρνηση είναι εφαρμοσμένη. Το backlog γράφεται. Η αρχιτεκτονική είναι τεκμηριωμένη. Το plugin είναι γεννημένο.

Αναφορές

Σχετικά άρθρα