Ein persönliches Projekt betreffend

  • Guten Morgen,

    momentan arbeite ich an einem kleinen Webprojekt und wollte Fragen, ob ich das dann hier (genaugenommen dann unter 'Projekte und Showcase') teilen darf.

    Ursprünglich wollte ich das hier unter 'Projekte und Showcase' packen, hatte allerdings die Beiträge ein wenig überflogen und musste feststellen, dass die dort vorgestellten Projekte bereits vorzeigbar bzw. nutzbar waren. Da ich mir dadurch etwas unsicher war, wollte ich das lieber hier vorstellen, wo ich mit einem fehlerhaft platzierten Beitrag wahrscheinlich noch den kleinsten Schaden anrichten könnte.


    Kurzzusammenfassung:

    Bei dem Projekt handelt es sich genaugenommen um ein Webprojekt, bei dem ich das Frontend eines Streaming-Services bastle (angelehnt an Netflix, Prime und Co.). Die dort enthaltenen Filme wären aber allesamt fiktiv. Wie auch bei den Frontends der Inspirationsquellen, wird es dann Cards mit den jeweiligen Film-Postern als Bild geben. Mit einem Klick auf die jeweilige Card gelangt man dann eben zu der Film-Seite selbst, die Namen, Beschreibung, Ursprungsländer, Beteiligte usw. enthält. Sämtliche die Filme betreffenden Inhalte würden zufällig über ein Python Skript oder im Falle der Bilder und Beschreibungen eben von KI (FLUX (evtl. SDXL für Schauspieler Portraits) für die Bilder und Mistral-7b für Beschreibungen) generiert werden. Die Datenbank (stand jetzt: lediglich zwei JSON-Dateien, die über Python ausgelesen werden) würde dann eben sämtliche Inhalte zu den jeweiligen fiktiven Filmen und Schauspielern enthalten, womit auch Suchen möglich wären. Außerdem soll es auch eine Schauspieler-Datenbank geben, in der diese dann auch alle in Form von Cards anklickbar wären, mit Infos wie den Filmen, in denen sie mitgespielt haben, Geburtsdatum und auch einer kleinen Beschreibung, die ebenfalls per KI-Generiert wäre. Ansehen kann man dann selbstverständlich keinen der Filme. Allerdings dachte ich mir, dass ich im späteren Verlauf dann auch einen kleinen Videoplayer basteln könnte, der beim Starten eines Filmes einfach eine Ladeanimation zeigt und nach einer Weile eine Fehlermeldung ala "Der abgerufene Film kann leider nicht gestartet werden (Fehlercode: xxxxx)" anzeigt. Das würde die Illusion ein wenig aufrecht erhalten.

    Hosten würde ich die Seite dann wahrscheinlich nirgends, das Projekt aber dann auf Github anbieten, mitsamt Installationsanleitungen für Linux und Windows. Wer dann über die nötige Hardware verfügt, könnte dann eben zusätzlich neue Filme lokal generieren. Dies dann komplett zufallsbasiert oder aber mit eigenen Eingaben, was Genre, Titel, Mitwirkende und Co. angeht.


    Genutzte Technologien:

    - Python mit FastAPI und Uvicorn (Backend)

    - VueJS (Frontend )

    - ComfyUI mit selbst gebastelten Workflows (zur Verwendung der KI-Modelle - verfügbar auf Github)

    - Flux1.dev GGUF (Bildgenerierung - verfügbar auf Huggingface)

    - Mistral-7b (Textgenerierung - verfügbar auf Huggingface)

    - Eine selbst trainierte LoRa (Zur Verbesserung der Ergebnisse beim Generieren der Film-Poster - dann verfügbar auf Huggingface)


    Momentaner Status:

    Die ComfyUI-Workflows sind schon fertig und das Generieren neuer Film-Einträge, der Beschreibungstexte und Film-Poster via API-Anfrage funktioniert bereits. Die dadurch erzeugten Bilder werden dann auch schon im richtigen Pfad mit der Film-ID im Namen abgespeichert und die Beschreibung und anderen Informationen in die Datenbank aufgenommen. Mit dem Frontend selbst habe ich auch bereits begonnen. Allerdings wollte ich mich vorerst auf das Trainieren einer LoRa konzentrieren. Mit den Ergebnissen von Flux (Standard und ohne LoRa) bin ich nicht besonders zufrieden. Hier finden sich nämlich häufig massenhaft Hieroglyphen-Texte im unteren oder oberen Bereich des Film-Posters, die wohl die Erwähnung der Mitwirkenden und Studios imitieren sollen, wie man sie häufig auf Werbe-Postern von Filmen findet. Das möchte ich aber nicht auf den Postern haben. Man sieht es bei den Cards auf Netflix und Co. schließlich auch nicht.


    Nutzen und Gründe:

    Einen Zweck hat das genaugenommen keinen. Ich sehe das eher als eine Art Kunstprojekt. Hiermit möchte ich mich dann eher kreativ ein wenig austoben und an meinen Fähigkeiten feilen.

    Der Grund, warum ich das hier poste, hängt genaugenommen damit zusammen, dass ich (wie bereits in meiner Vorstellung erwähnt), ein wenig Probleme damit habe, bei einer Sache zu bleiben. Ich erhoffe mir durch das Teilen des Projektes, dass das so einen sanften Druck auf mich ausübt und ich dadurch dann eben dabei bleibe, statt im Affekt dann wieder etwas neues zu beginnen. Ob hier nun irgendwer auch nur die geringste Spur an Interesse ausdrückt, wird dabei keinen großen Unterschied machen. Hiermit habe ich es nämlich in die Welt gerufen und muss nun damit leben, dass das hier zu jeder Zeit jemand lesen könnte.


    Das wäre es dann soweit. :)

    9 Mal editiert, zuletzt von Koffein (29. Januar 2025 um 18:01)

  • Koffein 29. Januar 2025 um 17:56

    Hat das Label Frage hinzugefügt.
  • Koffein 29. Januar 2025 um 17:56

    Hat den Titel des Themas von „Eine Frage ein persönliches Projekt betreffend“ zu „Ein persönliches Projekt betreffend“ geändert.
  • Hallo,

    sorry das ich mich jetzt erst zu Wort melden kann aber ich dachte wenn nicht jetzt dann nie! Ich bin ganz bei dir und verstehe dein Problem total und hoffe dich daher mit meinem Beitrag etwas motivieren zu können!

    Wie du es machst ist es genau der richtige Weg .. lasse dir von niemandem etwas anderes erzählen weil der Weg ist nur dann richtig wenn du diesen Weg gehen kannst ohne zu fallen! Ich finde die Idee des Projektes super und das ist schon mehr als manch einer der behauptet seit zig Jahren in dem Geschäft zu sein!

    Ich würde mich freuen auch weiterhin von dir hier zu hören und bin schon jetzt gespannt auf eine Demo. Würdest du das ganze Public stellen wollen im sinne einer öffentlichen Demo? Du kannst mich dazu gerne einfach mal anschreiben und ich denke wir finden ein flauschiges Plätzchen, wenn mangelder Webspace dein Problem ist.

    Ganz liebe Grüsse (und bleib weiter am Ball)

    Alexander

  • Hallo Alexander,

    grundsätzlich wäre so eine öffentliche Demo kein Problem. Was den Webspace angeht, komme ich eventuell darauf zurück. Allerdings würde das dann eben ohne die Möglichkeit auskommen müssen, neue Einträge zu generieren, da das dann eine brauchbare GPU mit ordentlich VRAM benötigen würde (oder im Falle einer öffentlichen Website, die dann unter Umständen von mehreren Personen gleichzeitig genutzt wird, eher mehrere GPUs). Ich habe die Workflows hier ohnehin schon um einen Node erweitert, der nach jedem Generieren, das gerade genutzte Modell wieder aus dem VRAM schmeißt, um 'Out of Memory'-Errors zu vermeiden. Später habe ich vor, ein kleines Installer-Skript zu schreiben, das automatisch das bestmöglich quantisierte Flux Modell für die Hardware des Nutzers herunterlädt, da ich hier bei meinen Experimenten das Q8-Modell verwende, welches noch die höchsten Anforderungen unter den GGUF-Modellen hat. Daher dann eben auch der Weg über Github, wo sich dann auch jeder, der über die nötige Hardware verfügt, diesen Ganzen Irrsinn selbst herunterladen kann.

    Ich melde mich sicherlich wieder. Heute habe ich zumindest weiter daran gearbeitet, was schonmal gut ist. Jetzt geht's jedenfalls ans Captions schreiben. Da ich ein paar hundert Bilder zu beschreiben habe, wird das eine Weile dauern. Ich werde nach erfolgreichem Training der LoRa eventuell ein paar Ergebnisse teilen.


    Danke jedenfalls für die netten Worte und ebenfalls liebe Grüße.

  • Die Idee klingt echt gut, hatte am Anfang etwas die Sorge als ich Filmposter laß, da da ja gerne unschlüssige Verwendungsrechte gibt.

    Willst du eigentlich den Python Teil auf offenen Standards für GPU Beschleunigung setzen oder eher auf propitäre Lösungen wie CUDA beschränken?

    A red dragon falls from the heavens... Ah, that memory has been lost. A shame. It was a favorite of mine...

  • Danke fürs Teilen und ausführliche beschreiben. Die Idee ist ziemlich gut, als App wäre die Idee sogar vielleicht ein Hit ^^

    Wäre es eine Idee, dass du dein Projekt auf git schon hochlädst und open source machst, dann könnten andere Entwickler mitwirken und dich dabei unterstützen. Würde dir auch mehrere Anhaltspunkte/Lösungen bringen und du interagierst dann mit deiner „Community“ später.

  • Willst du eigentlich den Python Teil auf offenen Standards für GPU Beschleunigung setzen oder eher auf propitäre Lösungen wie CUDA beschränken?

    Da werde ich mich auf CUDA beschränken. Zur Nutzung der Modelle nutze ich ja keinen eigenen Code, sondern ComfyUI, welche standardmäßig CUDA verwendet (zumindest bei meiner NVidia GPU). Da pfusche ich dann lieber nicht drinnen herum. Da fehlt mir die Ahnung.

    Der Python Teil, der von mir stammt, kümmert sich lediglich um die Anfragen an ComfyUI, generiert die Prompts für Mistral und Flux und fungiert als Backend für die Webseite selbst (Auslesen der Datenbanken z.B.).

  • Danke fürs Teilen und ausführliche beschreiben. Die Idee ist ziemlich gut, als App wäre die Idee sogar vielleicht ein Hit ^^

    Daran zweifle ich und hoffe auch, dass ich damit recht behalten werde. Zu viel Druck und potentielle Aufmerksamkeit.

    Wäre es eine Idee, dass du dein Projekt auf git schon hochlädst und open source machst, dann könnten andere Entwickler mitwirken und dich dabei unterstützen. Würde dir auch mehrere Anhaltspunkte/Lösungen bringen und du interagierst dann mit deiner „Community“ später.

    Vorerst nicht. Das sieht alles noch ziemlich chaotisch aus und keiner der Bestandteile ist auch nur im Ansatz fertig. Es wäre mir jedenfalls unangenehm, das so hochzuladen. Ich bin es nicht gewohnt, in diesem Bereich mit anderen zusammenzuarbeiten. Ich schätze, mal abgesehen vom Interesse, war einer der Hauptgründe, warum ich jetzt nach mehreren Jahren immer noch an dieser ganzen Kiste hier hänge, dass ich in dem Fall der einzige bin, der mir ständig das Gefühl gibt, zu nichts gut zu sein.

    Sollte ich meine Meinung aber im Laufe der Zeit ändern und das es doch hochladen, stelle ich hier einen Link zur Github-Page rein. :)

    Zum jetzigen Zeitpunkt aber nicht. Es sollte wenigstens halbwegs vorzeigbar sein, vor allem was den Code selbst angeht.


    Die nächsten Tage bin ich dann eh erstmal mit den Captions beschäftigt.

    Einmal editiert, zuletzt von Koffein (31. Januar 2025 um 03:17)

  • ComfyUI ist nur ein UI für SDXL, und SDXL setzt schon lange kein CUDA mehr ein

    Ich kann nur sagen, was bei mir zum Start in der Konsole steht. Wie bereits erwähnt, da habe ich zu wenig Ahnung von.


    ComfyUI ist aber mithilfe von Custom-Nodes sehrwohl in der Lage, auch andere Modelle zu nutzen (siehe Bilder).


    Einmal editiert, zuletzt von Koffein (30. Januar 2025 um 19:49)

  • Der Grund, weshalb ich mich hier für ComfyUI entschieden habe, ist der, dass ich auch komplexere Workflows, wie diesen hier auf den Bildern, einfach als JSON abspeichern kann. Nach dem Laden dieser JSON-Datei, kann ich dann mittels Python einfach ein paar der Values für Inputs wie prompt oder width&height ändern und den ganzen Käse an den Port senden, auf dem ComfyUI läuft. Da muss ich nicht jedes Mal das Rad neu erfinden, wenn ich irgendwo eine Änderung brauche, sondern klebe bei Bedarf einfach zusätzliche Nodes dran oder tausche andere aus und speichere das dann eben unter neuem Namen wieder ab. ComfyUI muss für das Generieren selbst ja nicht einmal im Browser offen sein. Es läuft einfach im Hintergrund und wartet, bis ich ihm den jeweiligen Workflow schicke.

    Zum Stand jetzt läuft das bei mir in der Anwendung dann eben so ab, dass erst ein Prompt mit zufällig ausgewählten Genre, Subgenre, Land, Antagonist und Co an ComfyUI geschickt wird. Python wartet dann mittels time.sleep von jeweils einer Sekunde so lange, bis die Text Datei mit der Filmbeschreibung in einem Ordner für temporäre Dateien vorhanden ist. Sobald die Beschreibung da ist, wird der Titel des Filmes aus dem Ganzen extrahiert. Genauso wie die Filmbeschreibung/Zusammenfassung des Filmes selbst, kommt der Titel dann auch von Mistral-7b-Instruct. Sofern dieser in doppelten Anführungszeichen steht, wie in den Instructions vorgegeben, wird er extrahiert und zusammen mit einer zufälligen Anzahl an weiteren Attributen wie eben Filmgenre, Styles und optional auch Personen, Gebäude oder Gegenstände in einen Prompt für Flux verpackt. Die Textdatei wird gelöscht und der Prompt wird dann eben wiederum an ComfyUI gesendet, diesmal aber mit dem Workflow für Film-Poster. Die Listen mit diesen ganzen Einträgen für die Prompts befinden sich in dem Ordner lists (sichtbar im Bild) als JSON-Dateien mit verschiedenen Kategorien. Bildpfad, Dinge wie Genre, Ursprungsland, Titel, Filmbeschreibung und Co. landen dann in einer JSON Datei, die als Datenbank für die Filme fungiert und später via Python ans Frontend übermittelt wird. Das Bild wird dann, sobald vorhanden, automatisch verschoben und unbenannt. Das wäre der jetzige Stand. Da ist auch noch nichts mit dem Frontend verbunden, welches momentan lediglich ein Logo innerhalb eines Headers ist, mit Buttons und einer Suchleiste ohne Funktion daneben, einem leeren Main und einem ebenso leeren Footer. Später soll es dann in ähnlicher Manier auch möglich sein, Schauspieler zu generieren, welche Filmen dann zufällig zugewiesen werden, sofern deren Geburts- und Sterbedatum (optional) nicht mit dem Erscheinungsdatum des Filmes kolidiert. Auch hier wird das dann ähnlich ablaufen, wobei ich aber dann eher auf SDXL für die Schauspieler-Portraits zurückgreife, da es dort sehr leicht ist, unterschiedlich aussehende Personen zu generieren, indem man dem Prompt einfach einen Fantasienamen anhängt, der aus zwei Vornamen und einem Nachnamen besteht. Auch hier werde ich dann einfach Namenslisten für verschiedene Nationen anlegen.


    Führe ich die Funktion zum Generieren eines neuen zufälligen Filmes aus, kommt dann eben so etwas bei raus:

    Film-Poster:

    Auszug für diesen Film aus der JSON-Datei:


    Nicht wundern über den Key "Monsters". Stand jetzt ist das als reine fiktive Horror-Streaming-Seite geplant. Egal ob neu und aufwändig oder alter Trash, ich liebe Horrorfilme.

    5 Mal editiert, zuletzt von Koffein (30. Januar 2025 um 20:50)

  • Wie gesagt, finde das Projekt recht spannend, gibt es schon paar Mockups vom Frontend?

    (Ich wäre fast ins Englische gerutscht beim schreiben xD)

    Nein, tatsächlich nicht. Ich mache das immer so mehr oder weniger aus dem Bauch heraus, habe also keine Vorlagen, falls du das meinst.

    Mir dient lediglich ein Bild von einem Nachbau des Netflix-Frontends, welches ich auf Github gefunden habe, als Referenz.


    Im Moment sieht das noch so aus:


    Der "Debug Menu"-Button würde dann ein Menü öffnen, in dem man neue Film- oder Schauspieler-Einträge zu generieren oder eben auch bestehende Einträge manuell abändern kann, z.B. Beschreibungen, Mitwirkende. Außerdem würde es dann auch die Möglichkeit geben, Film-Poster für vorhandene Filme neu zu generieren. Header und Footer sollen hierbei fix bleiben und von Profil-Einstellungen, über die Auswahl der Filme oder aber auch das erwähnte Debug Menü würden dann eben im Main angezeigt werden, je nachdem, was gerade ausgewählt ist. Dafür kann ich ja dann eine data()-Variable in Vue anlegen, die das regelt. Das wäre zumindest der Plan soweit.


    Als Inspirationsquelle nutze ich folgendes Bild:

    netflix.png

    (Quelle: https://github.com/Relirk/netflix…ter/netflix.png)

    3 Mal editiert, zuletzt von Koffein (31. Januar 2025 um 03:20)

  • Guten Morgen,

    das hat mir jetzt doch keine Ruhe gelassen und ich habe jetzt so weit weitergemacht, dass zumindest schon mal die momentan vorhandenen Film-Daten ans Frontend übermittelt werden und eben die Film-Poster in Form von Cards im Main angezeigt werden.

    Das ist so nicht final, aber ich wollte wenigstens schauen, ob es bis hierhin fehlerfrei funktioniert, so wie ich mir das gedacht habe. Kleine Info am Rande, hat es nicht. Idiotischerweise hatte ich das so zusammengeklopft, dass die Bildpfade nach dem generieren und verschieben als absolute Pfade in der JSON-Datei abgespeichert wurden, wodurch das Frontend dann keinen Zugriff darauf hatte. Das ließ sich aber recht einfach beheben.

    Im späteren Verlauf möchte das so regeln, dass die Cards unterhalb von zufällig ausgewählten Kategorien in Form von scrollbaren Rows auftreten, wie das eben beispielsweise bei Netflix oder Prime der Fall ist. Potentielle Kategorien wie Subgenres oder Urpsrungsländer hätte ich ja schon. Bei Monstern oder Themen, die sehr häufig vorkommen, könnte man dann auch das als Kategorie nehmen. In dem Bild sieht man auch gut das von mir vorher angesprochene Problem mit den zusätzlichen kleinen Texten, die häufig auf den Bildern vorkommen. Außerdem kommt es auch immer mal wieder vor, dass ein Bild ohne Titeltext generiert wird, obwohl spezifiziert. Ich hoffe, dass die LoRa die Ergebnisse dann soweit verbessert. Perfekt wird es sicher nicht, aber wenn dadurch solche Fehler minimiert werden können, dann war es die Sache schon wert.

    Am Captions schreiben bin ich zwar bereits, habe aber zum jetzigen Stand gerademal 17 von 400 Bilder fertig. Ich habe zwar im Laufe der letzten drei Monate bereits drei LoRas trainiert, hatte aber bei jeder lediglich rund 40 Bilder fürs Training hergenommen. Hier wollte ich aber möglichst viele Stile unterbringen, weshalb das wohl ein längerfristiges Unterfangen wird. Daher dachte ich mir auch, dass ich mich die nächste Zeit nicht einzig und allein auf's Captions schreiben konzentriere, sondern auch am Projekt selbst arbeite. Außerdem werde ich den ersten Trainingslauf der LoRa schon nach 100-150 Bildern beginnen. Sollten die Ergebnisse dann bereits zufriedenstellend sein, werde ich mir gar nicht erst die Mühe machen, weitere Daten für ein zweites Training vorzubereiten.


    Das wäre dann der Plan bis jetzt. Sollte jemand Vorschläge für's Frontend haben, würde ich mich darüber sehr freuen.


    PS: Ich hoffe es ist in Ordnung, dass ich diesen Thread hier jetzt mehr oder weniger als Tagebuch für dieses Projekt nutze.

    4 Mal editiert, zuletzt von Koffein (1. Februar 2025 um 08:07)

  • Spannend? Haha ich verstehe sogar vieles nicht. Kann man das Ganze auch in einfachem php schreiben?

    Ich wüsste nicht, was dagegen spricht. Das Python, das ich da im Endeffekt schreibe, stoßt das Generieren ja nur an und übermittelt die Daten dann wiederum ans Frontend. Zum Generieren selbst nutze ich, wie eben oben erwähnt, ComfyUI und die besagten Modelle. ComfyUI ist zwar auch in Python geschrieben, aber eben nicht von mir und funktioniert ja unabhängig von der Programmiersprache, in der diese Requests geschrieben sind. Du würdest ja dann im Endeffekt diese Anfrage (in deinem Fall dann via PHP) an den Port bzw. Endpoint senden, auf dem ComfyUI horcht (8188/prompt per Default).

    Einmal editiert, zuletzt von Koffein (2. Februar 2025 um 14:34)

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!