Dulus
An AI agent for your desktop and terminal, on any model you choose. Hosted models run on Fuel, paid in $DULUS.
翻译准备中
尚未收集仓库信息。
尚未检测到更新。GitHub 发布版本后会显示在这里。
制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 README。 仓库 README ↗
正在加载完整 README。
查看完整 README ↗Proyección multimedia para culto y evento. Ventana Control (operador) + ventana Output (pantalla completa en el 2.º monitor / proyector). Todo el código vive en la raíz de este repo.
Referencia del código (arquitectura, API, datos, desarrollo): docs/README.md. Esta página es la guía de arranque y de uso en sala.
| Pieza | Rol |
|---|---|
apps/web | SPA Vite + React — rutas /control, /output, / |
apps/hub | Hono + WebSocket — sesiones, assets, Biblia, playlists |
@promedia/shared | Protocolo, temas, transiciones, tipos de sesión |
@promedia/item-types | Registry Preview / En vivo / Output (texto, imagen, vídeo, YouTube, Biblia, presentación) |
@promedia/media | Almacenamiento local (disco) + adapter S3 stub |
@promedia/i18n | Locales ES · EN · PT · FR · ZH |
.
apps/web/ # Control + Output
apps/hub/ # API :8787 + WS
packages/shared/
packages/item-types/
packages/media/
packages/i18n/
scripts/dev.mjs # pnpm dev (hub + web)
portable/ # empaquetado runnable
| Servicio | Puerto | URL típica |
|---|---|---|
| Hub (API + WS) | 8787 | http://localhost:8787 (también en la IP LAN) |
| Web (Vite) | 5173+ | http://localhost:5173 (o 5174–5178 si 5173 está ocupado) |
Abrí siempre /control, no / (la Home es solo un enlace mínimo).
Con PROMEDIA_MODE=lan (default), hub y Vite escuchan en todas las interfaces (0.0.0.0), no solo localhost.
Abrir-ProMedia.* / pnpm dev). Dejá Output en esa máquina.http://192.168.x.x:5173/control — abrila en el navegador del móvil.Si el firewall bloquea, permití Node en los puertos 5173 y 8787 (entrada LAN). Solo localhost: HUB_HOST=127.0.0.1.
Importante: trabajá en la raíz de este repo (ProMedia/).
Deps subtítulos (una vez): brew install yt-dlp ffmpeg whisper-cpp — luego reiniciá ProMedia (el hub busca en PATH + /opt/homebrew/bin + /usr/local/bin).
ProMediastart-mac.command o Abrir-ProMedia.command (mismo arranque; el segundo es atajo con nombre claro)/control) en el puerto real de Vitegit pull, volvé a copiar Abrir-ProMedia.command desde esta carpetaopen-control.html (prueba 5173–5178) o ProMedia-Control.urlProMediastart-windows.bat o Abrir-ProMedia.bat (llaman a start-windows.ps1)npm install -g pnpm (una vez). Si falta node_modules, el script corre pnpm installyt-dlp, ffmpeg y whisper-cli (p. ej. Scoop: scoop install yt-dlp ffmpeg + build/binario whisper.cpp) y asegurate de que estén en el PATH. Alternativa sin Whisper: .srt/.vtt en data/subtitles/sidecars/chmod +x start-linux.sh Abrir-ProMedia.sh./start-linux.sh / ./Abrir-ProMedia.shProMedia.desktop (editá Exec/Path si lo copiás al Escritorio; en GNOME: “Permitir iniciar” / Mark as Trusted)sudo apt install ffmpeg (o equivalente) + yt-dlp + binario whisper-cli en PATH; el hub también mira /usr/bin y /usr/local/binpnpm install si hace falta, pnpm dev, abre /controlcd /ruta/a/ProMedia
pnpm install # primera vez (o si falta node_modules)
pnpm dev
Ejemplo (Mac, Escritorio):
cd ~/Desktop/ProMedia && pnpm dev
pnpm dev usa concurrently con logs [hub] / [web]. Espera a que este hub loguee listening y /health responda; imprime la URL real de Vite. Si 5173 está ocupado, puede ser 5174+ — usá esa URL, no asumas 5173.
No abras dos pnpm dev / dos launchers a la vez.
Los launchers usan un lock (.promedia-dev.lock):
pnpm dev solo tumba el proceso hermano si hay failure (no si Vite sale 0 tras un SIGTERM externo).
Si ves EADDRINUSE / “puerto ya está en uso”:
# Mac / Linux
lsof -nP -iTCP:8787 -sTCP:LISTEN
lsof -nP -iTCP:5173 -sTCP:LISTEN
kill <PID>
REM Windows (cmd)
netstat -ano -p tcp | findstr :8787
netstat -ano -p tcp | findstr :5173
taskkill /PID <PID> /F
Comprobar el hub:
curl -s http://localhost:8787/health
cd /ruta/a/ProMedia
# Terminal A
pnpm dev:hub
# Terminal B
pnpm dev:web
Sin hub, Control muestra que el hub no está corriendo (con reintento).
pnpm --filter @promedia/hub start # :8787
node scripts/smoke-hub-ws.mjs
以上为 README 的开头部分。其余内容请阅读原文。 查看完整 README ↗