Hogyan készítettem egy lokálisan futtatható AI-vezérelt videógenerátort
Bebesi János írása
Első rész: Áttekintés és Architektúra
Úgy döntöttem, hogy létrehozok egy saját gépen futtatható AI alkalmazást, amely képes rövid promptból videót generálni. Ez szórakoztató és hasznos projectnek tűnik, mivel a nagy szolgáltatók AI alkalmazásai (ChatGPT, Microsoft Copilot, Gemini, stb… ) erősen korlátozottak. A helyi modelleket saját igényeink szerint finomhangolhatjuk, mi szabályozhatjuk a paramétereket és az erőforrásigényt, így valójában jobb alternatívát jelenthetnek a nagy szolgáltatók megoldásainál.
Annak érdekében, hogy rövid szövegből is lehessen jó minőségű videó a folyamat végén, az alkalmazást 5 funkcionális részre bontottam:
- Szöveggeneráló AI: Rövid text prompt alapján generál egy komplett szöveget, részletes leírással, utasításokkal a többi AI model számára. Mivel a szöveggenerálás gyorsabb a videógenerálásnál, ez egy jó első lépés a folyamat gyorsítására. Amennyiben a generált szöveg nem megfelelő, a promptot részleteiben is lehet módosítani.
- Text to speech AI: A szöveggeneráló kimenet egy részét használja. Tekintettel arra, hogy 1 percnyi audiot 1 percnél gyorsabban le tudok generálni a gépemen, így ezt is gyorsnak tekintem, természetesen sok múlik az AI modellen is, más modellekkel ez változhat. Itt lehetővé kell tenni a prompt finomhangolását, hogy alkalmazkodjunk az eredeti elképzelésekhez.
- A képgeneráló AI a prompt alapján is viszonylag gyors. Néhány perc alatt elvégezhető, a kép méretétől, minőségétől és a használt modelltől függően.
- Videógeneráló AI hangból, képből és szövegből. A fentiek után fontos, hogy megbizonyosodjunk arról, hogy a kezdőkép és a hang helyes, mielőtt elkezdenénk létrehozni a videónkat. Az én gépemen egy 40 másodperces videógenerálás 4 órán át is eltarthat.
- A felhasználói felületet támogató és az AI-k közötti kommunikációt kezelő alkalmazás, ember által használható felületet biztosít. Ez azért is fontos, hogy a felhasználó megfelelő számú paramétert kapjon az AI-modell(ek) finomhangolásához, ne túl sokat, de ne is túl keveset. A felhasznált tokenek, a videó hossza, a kontextus mérete, a temperature mind olyan paraméterek, amelyek nagymértékben befolyásolhatják a projekt teljesítményét, minőségét és használhatóságát.
A projekt korlátai:
- Az alkalmazásnak képesnek kell lennie a felhasználó gépén futni, amely NVIDIA RTX 3060 vagy hasonló hardverrel van felszerelve.
- A használt AI modellnek előre betanítottnak kell lennie, a modell finomhangolása jelenleg nem része a projektnek.
A saját gépen futtatható SLM AI előnyei
Bár az LLM-ek sok mindenre képesek, erős hardvert és nagy energiafogyasztást igényelnek. A kicsi, viszont specializált társaik, a Small Language Models (SLM) számos előnnyel rendelkeznek:
- Adatvédelem: Szükség esetén a külső adatátvitel letiltható. A kontextus, a betanítási adatok, a kimenet, a telemetria, a használat nyomon követése, a jogi, vagy egyéb érzékeny információk, és a feldolgozásuk a szerverünkön maradnak, teljes mértékben mi irányítjuk. A felelősség is a miénk.
- Modell viselkedése: A felhasznált tokenek, az erőforrás-használat, a kontextus mérete szükség szerint módosítható. A modellek közötti váltás az elvégzendő feladat alapján is könnyen lehetséges.
- Finomhangolás: Modellek betanítása bizalmas vagy rendkívül érzékeny adatokkal a kikerülésüktől való félelem nélkül. Olyan modellt is választhatunk, amely nincs betanítva a számunkra nem releváns információkkal.
- Offline képességek: a letöltött modellek nem igényelnek internetkapcsolatot.
- Nincs használati korlátozás, vagy legfeljebb a hardver szab korlátokat.
- Alacsonyabb energiafogyasztás.
- Olcsóbb hardveren is futtatható.
Szöveggeneráló AI
Az alkalmazás első összetevője a szöveggenerálás. Ez a következő bemenetet fogadja el:
- Prompt, hogy mit kell generálnia.
- A bemenet JSON formátumban érkezik a további feldolgozáshoz.
- A cél az, hogy a következő AI-modellekhez előre kitöltött prompt legyen, hogy konzisztensek és könnyen testreszabhatók legyenek a piszkozatból.
Annak biztosítása érdekében, hogy az összes válasz kövesse a szükséges struktúrát és méretet, egy promptsablonba kell beilleszteni a felhasználó promptját. Ez segít abban, hogy a válasz az alkalmazások korlátozásain belül maradjon, és a model kisebb eséllyel adjon nem értelmezhető, vagy nem megfelelő választ. Ezt a prompt sablont használom:
You are a multimodal content generator. Your task is to produce a structured JSON object that describes a short video scene based on the given topic and tone.
The output must include the following fields:
– “”audio””: An object containing audio-specific instructions and preferences:
– “”lyrics””: Text of any spoken words or dialogue.
– “”tags””: List of keywords or phrases to enhance audio quality.
– “”video””: An object containing video-specific instructions:
– “”positive_prompt””: Text of what will happen on screen.
– “”negative_prompt””: Text of what to avoid in the visuals.
– “”image””: An object containing image-specific instructions:
– “”positive_prompt””: Text of what is in the image.
– “”negative_prompt””: Text of what to avoid in the image.
Constraints:
– Ensure all fields are filled.
– Format the output as valid JSON.
– The audio section should complement the visual and narrative elements.
Topic: {{Insert topic here}}
Tone: {{Insert tone here}}
Generate the structured output now.
Ez garantálja, hogy a kimenet jól formázott legyen, és készen álljon a következő AI-alkalmazáshoz való használatra. A Topic helyére fogja beilleszteni a felhasználó promptját, így a felhasználónak nem kell foglalkozni azzal, hogy a model helyes válasz generáljon. Jelenleg a Tone nem állítható.
Ollama
A szöveggeneráláshoz az Ollama volt a választásom. Ez egy könnyen használható, mégis erőteljes modellfuttató. Beállíthatom a modell fő paramétereit, például a context windowt, a temperature-t, a kimeneti formátumot vagy a generálandó tokenek maximális számát. Ez segít abban, hogy egy igazán finomhangolt, személyre szabott megoldás legyen. Könnyen használható API-hozzáféréssel és GPU-gyorsítással rendelkezik. Az Ollama egyetlen hiányzó funkciója a finomhangolási támogatás (fine-tuning), de ehhez a projekthez nincs rá szükség. Az Ollamaból lekérhetőek a rendelkezésre álló modellek főbb paraméterei, ami akkor lehet hasznos, ha több modellünk van különböző feladatokhoz.
Text-to speech AI
A következő bemenetet kapja:
- Szerkeszthető kimenet a szöveggeneráló AI-tól, a szöveg finomhangolható arra az esetre, ha a felhasználónak csak részben valósítja meg az elképzeléseit.
- Utasítások a hang hangzásának testreszabási lehetőségeivel.
- Audio hossza és minőségének a beállítása.
Képgeneráló AI
A következő bemenetet kapja:
- Szerkeszthető kimenet a Text Generation AI-tól a szöveg finomhangolásához arra az esetre, ha a felhasználónak csak részleges fejlesztésre van szüksége.
- Utasítások a kép létrehozásának testreszabási lehetőségeiről.
- A generált kép méret- és minőségi beállításai.
Videógeneráló AI
A képet, a hangot és a szöveget fogja használni a videó létrehozásához. A videó tartalmát is le kell írni, hogy hogyan kell kinéznie, mi történjen. A karaktert és érzelmeinek reakcióját össze kell hangolni a hangnemével. A felhasználónak képesnek kell lennie meghatározni a videó időbeli hosszát.
ComfyUI
Az volt a célom, hogy legyen valami, ami a legtöbb generálási feladatot képes kezelni egy gördülékeny felhasználói felülettel és egy könnyen használható API-val. A ComfyUI-al mindkettő lehetséges, maga a felhasználói felület intuitív, és a sablonok rendelkezésre állnak a különféle feladatokhoz, beleértve a kép-, hang- és videógenerálást, szerkesztést. A sablonokhoz AI modelleket is ajánlanak. Az egyetlen nehézség, hogy kiválasszam a megfelelő modellt a listából, ha már többet is letöltöttem. A letöltés után csak a kézi taggelés, és néha az elnevezés segíthet meghatározni, hogy melyik modellt mire tudom használni. A Node-ok használatával ugyanazt (vagy akár többet!) lehet elérni, mint a felhasználói felülettel, így tökéletesen alkalmazható erre a feladatra.
Következő lépések
Következő lépésként megnézzük az Ollama és a ComfyUI képességeit és korlátait a projektünkhöz.