Add selectable native LTX Original runtime and DeskWEB API integration

This commit is contained in:
Mikei386 committed 2026-09-30 15:32:19 +02:00
1 parent e7a1deaab0
commit a6b7ab93ab
20 files changed
+507 -25

No files matched your search

+11
View File
@@ -0,0 +1,11 @@
window.LTXOriginalUI=(()=>{
const e=v=>String(v??'').replace(/[&<>"']/g,c=>({'&':'&amp;','<':'&lt;','>':'&gt;','"':'&quot;',"'":'&#39;'}[c]));
async function api(path='',data){const r=await fetch('/api/v1/ltx-original-runtime'+path,data?{method:'POST',headers:{'Content-Type':'application/json','X-Athena-Deck':'1'},body:JSON.stringify(data)}:{});const s=await r.json();if(!r.ok)throw Error(s.error||'Anfrage fehlgeschlagen');return s;}
function render(){const view=document.querySelector('#view');if(view.querySelector('#ltx-original-page'))return;
view.innerHTML='<div id="ltx-original-page"><h1>LTX Original</h1><p>Originales Lightricks-Backend für die LTX-Desktop-API. LTX DeskWEB bleibt die separate Oberfläche unter Weitere Dienste.</p><section class="card"><h2>Installation</h2><div id="ltx-install-state"></div><button id="ltx-install">LTX Original herunterladen &amp; installieren</button><button id="ltx-cancel" class="secondary">Installation abbrechen</button><p id="ltx-install-message" role="status"></p><details><summary>Eigene Installationsausgabe</summary><pre id="ltx-install-log" style="white-space:pre-wrap;max-height:320px;overflow:auto"></pre></details></section><section class="card"><h2>Verwendung</h2><p>Im Bereich Video die Laufzeit LTX Original wählen und das heruntergeladene LTX-Modell aktivieren. Danach in der Übersicht auf Video wechseln. Die originale API liegt am gemeinsamen API-Port; LTX DeskWEB spricht sie direkt an. Gewichte laden erst bei Generierung. Der Wechsel auf LLM beendet das Backend und gibt seinen GPU-Speicher frei.</p><p>5080: Transformer und VAE. 3060: Textencoder. Große BF16-Gewichte werden gestreamt; sie liegen nicht vollständig im VRAM. Zusätzliche Funktionen können weitere Komponenten benötigen.</p><a href="#video">Videomodell und Laufzeit wählen →</a></section></div>';
const root=view.firstChild;
async function poll(){if(!root.isConnected)return;try{const s=await api();if(!root.isConnected)return;const running=s.job?.state==='running';root.querySelector('#ltx-install').disabled=s.installed||running;root.querySelector('#ltx-cancel').disabled=!running;root.querySelector('#ltx-install-state').innerHTML=`<p><strong>${s.installed?'Installiert · bereit':'Noch nicht installiert'}</strong></p><p>Original-Backend: <code>${e(s.desktop_revision)}</code><br>LTX-Inferenz: <code>${e(s.ltx_revision)}</code></p><p>${s.shared_cuda?'Vorhandene CUDA-/PyTorch-Pakete werden lesend wiederverwendet.':'Eigene CUDA-/PyTorch-Pakete erforderlich.'} Benötigter freier Speicher: ${e(s.required_disk_gib)} GiB. Installation lädt keine Gewichte und startet kein Modell.</p>${s.job?`<p>${e(s.job.state)} · ${e(s.job.phase)}</p>${running?'<progress aria-label="LTX-Installation läuft"></progress>':''}`:''}`;if(s.job){const log=await api('/log');if(root.isConnected)root.querySelector('#ltx-install-log').textContent=log.text;}}catch(x){root.querySelector('#ltx-install-message').textContent=x.message;}if(root.isConnected)setTimeout(poll,3000);}
for(const [id,path] of [['ltx-install','/install'],['ltx-cancel','/cancel']])root.querySelector('#'+id).onclick=async()=>{try{await api(path,{});root.querySelector('#ltx-install-message').textContent='Aktion angenommen.';poll();}catch(x){root.querySelector('#ltx-install-message').textContent=x.message;}};
poll();}
return {render};
})();