nexpi 0.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. nexpi-0.1.0/PKG-INFO +262 -0
  2. nexpi-0.1.0/README.md +224 -0
  3. nexpi-0.1.0/nexpi/__init__.py +16 -0
  4. nexpi-0.1.0/nexpi/__main__.py +3 -0
  5. nexpi-0.1.0/nexpi/api.py +249 -0
  6. nexpi-0.1.0/nexpi/cli.py +267 -0
  7. nexpi-0.1.0/nexpi/core/__init__.py +0 -0
  8. nexpi-0.1.0/nexpi/core/bench.py +95 -0
  9. nexpi-0.1.0/nexpi/core/camara.py +107 -0
  10. nexpi-0.1.0/nexpi/core/capas.py +157 -0
  11. nexpi-0.1.0/nexpi/core/descargas.py +184 -0
  12. nexpi-0.1.0/nexpi/core/device.py +217 -0
  13. nexpi-0.1.0/nexpi/core/formato.py +87 -0
  14. nexpi-0.1.0/nexpi/core/guion.py +228 -0
  15. nexpi-0.1.0/nexpi/core/motores.py +279 -0
  16. nexpi-0.1.0/nexpi/core/pipeline.py +305 -0
  17. nexpi-0.1.0/nexpi/core/profundidad.py +54 -0
  18. nexpi-0.1.0/nexpi/core/propagador.py +144 -0
  19. nexpi-0.1.0/nexpi/core/realce.py +47 -0
  20. nexpi-0.1.0/nexpi/core/salida.py +198 -0
  21. nexpi-0.1.0/nexpi/core/traduccion.py +95 -0
  22. nexpi-0.1.0/nexpi/web/index.html +156 -0
  23. nexpi-0.1.0/nexpi.egg-info/PKG-INFO +262 -0
  24. nexpi-0.1.0/nexpi.egg-info/SOURCES.txt +65 -0
  25. nexpi-0.1.0/nexpi.egg-info/dependency_links.txt +1 -0
  26. nexpi-0.1.0/nexpi.egg-info/entry_points.txt +3 -0
  27. nexpi-0.1.0/nexpi.egg-info/requires.txt +17 -0
  28. nexpi-0.1.0/nexpi.egg-info/top_level.txt +3 -0
  29. nexpi-0.1.0/nexpi_accel/__init__.py +49 -0
  30. nexpi-0.1.0/nexpi_accel/__main__.py +3 -0
  31. nexpi-0.1.0/nexpi_accel/agente.py +266 -0
  32. nexpi-0.1.0/nexpi_accel/auto.py +390 -0
  33. nexpi-0.1.0/nexpi_accel/cache.py +388 -0
  34. nexpi-0.1.0/nexpi_accel/capacidades.py +91 -0
  35. nexpi-0.1.0/nexpi_accel/chip.py +20 -0
  36. nexpi-0.1.0/nexpi_accel/cli.py +281 -0
  37. nexpi-0.1.0/nexpi_accel/contrato.py +472 -0
  38. nexpi-0.1.0/nexpi_accel/detector.py +284 -0
  39. nexpi-0.1.0/nexpi_accel/fabric.py +198 -0
  40. nexpi-0.1.0/nexpi_accel/ffmpeg_accel.py +167 -0
  41. nexpi-0.1.0/nexpi_accel/generador.py +181 -0
  42. nexpi-0.1.0/nexpi_accel/hardware.py +389 -0
  43. nexpi-0.1.0/nexpi_accel/hooks.py +299 -0
  44. nexpi-0.1.0/nexpi_accel/interpolacion.py +184 -0
  45. nexpi-0.1.0/nexpi_accel/juegos.py +200 -0
  46. nexpi-0.1.0/nexpi_accel/ltx_cpu.py +261 -0
  47. nexpi-0.1.0/nexpi_accel/nexpigramas.py +301 -0
  48. nexpi-0.1.0/nexpi_accel/ov_ltx.py +296 -0
  49. nexpi-0.1.0/nexpi_accel/ov_ltx_bloques.py +327 -0
  50. nexpi-0.1.0/nexpi_accel/ov_vae.py +134 -0
  51. nexpi-0.1.0/nexpi_accel/ov_video.py +328 -0
  52. nexpi-0.1.0/nexpi_accel/planner.py +283 -0
  53. nexpi-0.1.0/nexpi_accel/servicio.py +325 -0
  54. nexpi-0.1.0/nexpi_accel/superres.py +96 -0
  55. nexpi-0.1.0/nexpi_accel/t5_gguf.py +262 -0
  56. nexpi-0.1.0/nexpi_accel/ventanas.py +109 -0
  57. nexpi-0.1.0/nexpi_accel/ventanas_ltx.py +239 -0
  58. nexpi-0.1.0/nexpi_rutas.py +72 -0
  59. nexpi-0.1.0/pyproject.toml +66 -0
  60. nexpi-0.1.0/setup.cfg +4 -0
  61. nexpi-0.1.0/tests/test_accel.py +322 -0
  62. nexpi-0.1.0/tests/test_auto.py +156 -0
  63. nexpi-0.1.0/tests/test_contrato.py +203 -0
  64. nexpi-0.1.0/tests/test_fabric.py +130 -0
  65. nexpi-0.1.0/tests/test_juegos_ffmpeg.py +112 -0
  66. nexpi-0.1.0/tests/test_ltx.py +188 -0
  67. nexpi-0.1.0/tests/test_nexpi.py +191 -0
nexpi-0.1.0/PKG-INFO ADDED
@@ -0,0 +1,262 @@
1
+ Metadata-Version: 2.4
2
+ Name: nexpi
3
+ Version: 0.1.0
4
+ Summary: Chip virtual de generacion de video: anclas por difusion en la integrada, propagacion 2.5D en CPU y acelerador universal para modelos de video sin GPU dedicada
5
+ Author: Nexora Technology LLC
6
+ Maintainer: Nexora Technology LLC
7
+ Keywords: difusion,video,aceleracion,openvino,igpu,cpu,diffusers,inferencia,plazo,sla
8
+ Classifier: Development Status :: 4 - Beta
9
+ Classifier: Environment :: Console
10
+ Classifier: Intended Audience :: Developers
11
+ Classifier: License :: Other/Proprietary License
12
+ Classifier: Operating System :: OS Independent
13
+ Classifier: Programming Language :: Python :: 3
14
+ Classifier: Programming Language :: Python :: 3.10
15
+ Classifier: Programming Language :: Python :: 3.11
16
+ Classifier: Programming Language :: Python :: 3.12
17
+ Classifier: Programming Language :: Python :: 3.13
18
+ Classifier: Topic :: Multimedia :: Video
19
+ Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
20
+ Requires-Python: >=3.10
21
+ Description-Content-Type: text/markdown
22
+ Requires-Dist: openvino>=2025.4.0
23
+ Requires-Dist: numpy>=2.0
24
+ Requires-Dist: opencv-python>=4.10
25
+ Requires-Dist: transformers>=4.50
26
+ Requires-Dist: sentencepiece>=0.2
27
+ Requires-Dist: diffusers>=0.30
28
+ Requires-Dist: torch>=2.4
29
+ Requires-Dist: huggingface_hub>=0.30
30
+ Requires-Dist: psutil>=5.9
31
+ Requires-Dist: typer>=0.12
32
+ Requires-Dist: rich>=13
33
+ Requires-Dist: fastapi>=0.110
34
+ Requires-Dist: uvicorn>=0.30
35
+ Requires-Dist: pydantic>=2
36
+ Provides-Extra: dev
37
+ Requires-Dist: pytest>=8; extra == "dev"
38
+
39
+ # NEXPI
40
+
41
+ Dos piezas que comparten una misma tesis: **el video es casi todo redundante, y
42
+ el hardware que la gente ya tiene esta desaprovechado.**
43
+
44
+ ```
45
+ nexpi_accel/ ACELERADOR UNIVERSAL — hace que modelos de video de otros corran
46
+ en maquinas sin GPU dedicada (integrada, NPU o solo CPU)
47
+ nexpi/ GENERADOR PROPIO 2.5D — texto -> mp4 1080p con camara cinematografica
48
+ ```
49
+
50
+ ---
51
+
52
+ ## 1. NEXPI Accel — acelerador universal de modelos de video
53
+
54
+ **El problema:** todo lo que existe para acelerar generacion de video esta hecho
55
+ para NVIDIA. FastVideo soporta NVIDIA y Apple Silicon, y nada mas. Las tecnicas
56
+ de atencion dispersa (SVG, VSA, Sliding Tile) exigen kernels CUDA o CK-Tile. Si
57
+ tienes un portatil con grafica integrada, no hay nada para ti.
58
+
59
+ **Lo que hace NEXPI:** se enchufa a un pipeline de difusion que ya tengas y
60
+ aplica cinco palancas que **se multiplican entre si**:
61
+
62
+ | # | Palanca | Coste | Ganancia |
63
+ |---|---|---|---|
64
+ | 1 | pasos (cache adaptativa) | lineal | 2-6x |
65
+ | 2 | pixeles (superresolucion) | **cuadratico** | 2-4x |
66
+ | 3 | fotogramas (interpolacion) | lineal | 2-4x |
67
+ | 4 | precision (fp16 / int8) | lineal | 2x |
68
+ | 5 | unidad de ejecucion | segun silicio | 2.5x |
69
+
70
+ ```bash
71
+ python -m nexpi_accel hardware # que hay en esta maquina, MEDIDO
72
+ python -m nexpi_accel plan --segundos 60 # como repartir el computo
73
+ python -m nexpi_accel video "un gato en la ventana" --segundos 90
74
+ ```
75
+
76
+ ```python
77
+ from nexpi_accel import acelerar
78
+ with acelerar(pipe, presupuesto_error=0.03) as a: # cualquier pipeline de diffusers
79
+ video = pipe(prompt, num_frames=16).frames[0]
80
+ print(a.informe())
81
+ ```
82
+
83
+ ### El chip se enchufa solo
84
+
85
+ No hace falta decirle a NEXPI que modelo es ni pasarle nada: lo identifica por lo
86
+ que ES (el modulo que evalua la difusion, sus parametros contados de verdad y lo
87
+ que admite su llamada) y le aplica el plan que salga del hardware ya medido.
88
+
89
+ ```python
90
+ import nexpi_accel.auto # una linea: todo lo que cargues despues sale acelerado
91
+ pipe = DiffusionPipeline.from_pretrained("Lightricks/LTX-Video")
92
+ video = pipe(prompt, num_frames=97).frames[0]
93
+ ```
94
+
95
+ O envolviendo por fuera un programa que ya tengas, sin abrirlo:
96
+
97
+ ```bash
98
+ python -m nexpi_accel detectar # que modelos hay ya en la maquina
99
+ python -m nexpi_accel auto mi_script.py # lo ejecuta con el chip puesto
100
+ python -m nexpi_accel auto mi_script.py --segundos 60 --calidad rapida
101
+ ```
102
+
103
+ Sin objetivo de tiempo solo tira de la palanca que **no cambia lo que pediste**:
104
+ la cache adaptativa (misma resolucion, mismos fotogramas, mismos pasos). Con
105
+ objetivo de tiempo entran las cinco: genera mas pequeno y sube con
106
+ superresolucion, genera menos fotogramas y los repone interpolando, recorta
107
+ pasos y reparte las etapas entre las unidades. Lo que quita, lo devuelve: si
108
+ pides 16 fotogramas de 512x512, recibes 16 de 512x512.
109
+
110
+ Funciona con lo que ya tengas descargado (cache de HuggingFace, ComfyUI, A1111):
111
+ no hay que convertir ni volver a bajar nada.
112
+
113
+ ### Contrato de plazo: lo que no hace nadie
114
+
115
+ Todos los aceleradores del mercado te dan velocidad. Ninguno te da una
116
+ **garantia**. NEXPI si:
117
+
118
+ ```bash
119
+ nexpi-accel contrato "un faro al atardecer" --plazo 30 --certificado cert.json
120
+ ```
121
+
122
+ ```python
123
+ from nexpi_accel import contrato
124
+ oferta = contrato.negocia(pipe, plazo=30, height=512, width=512) # antes de gastar un vatio
125
+ print(oferta.texto())
126
+ salida, cert = contrato.ejecuta(pipe, plazo=30, prompt="un faro", height=512, width=512)
127
+ print(cert.texto())
128
+ ```
129
+
130
+ Tres piezas:
131
+
132
+ 1. **Negociacion**: dice SI o NO *antes* de empezar, y si no puede, dice cual es
133
+ el mejor tiempo alcanzable en esta maquina.
134
+ 2. **Controlador**: dentro del bucle mide el ritmo real, aprieta o afloja la
135
+ cache y, si el siguiente paso no cabe en el plazo, **entrega lo que tiene**.
136
+ Un modelo de difusion siempre tiene una imagen a medio hacer utilizable: por
137
+ eso el plazo se puede cumplir siempre.
138
+ 3. **Certificado**: que se prometio, que paso y con que se midio, con huella
139
+ para que no se pueda retocar sin que se note.
140
+
141
+ **Medido en SD1.5 a 512x512 (CPU, sin GPU dedicada):**
142
+
143
+ | plazo | real | |
144
+ |---|---|---|
145
+ | 240 s | 64,8 s | CUMPLIDO (previsto 68,1 s: 5% de error) |
146
+ | 90 s | 78,8 s | CUMPLIDO |
147
+ | 40 s | 29,9 s | CUMPLIDO, entregado al vencer (2 pasos; un tercero no cabia) |
148
+ | 25 s | 20,7 s | CUMPLIDO, entregado al vencer |
149
+ | 15 s | 10,2 s | CUMPLIDO, entregado al vencer |
150
+
151
+ La promesa **no sale de un modelo teorico**: sale de lo medido en esta maquina y
152
+ guardado en `cache/contratos.json`, escalado por pixeles cuando cambia la
153
+ resolucion. El certificado dice siempre de donde sale la cifra y con cuantas
154
+ ejecuciones se sostiene. Y lo que dice de la desviacion es lo que de verdad se
155
+ ha medido (el error de las verificaciones de la cache contra la red real), no la
156
+ distancia al resultado sin acelerar, que exigiria generarlo dos veces.
157
+
158
+ **Lo que aporta y no existe en ningun otro sitio:**
159
+
160
+ - **Presupuesto de error en lazo cerrado** en vez de umbral fijo calibrado a mano.
161
+ Medido: **33,5 dB con 28,7/30 evaluaciones** frente a **20,4 dB con 26/30** del
162
+ metodo publicado.
163
+ - **Coeficiente de extrapolacion aprendido** por minimos cuadrados en cada
164
+ verificacion. Extrapolar a ciegas hunde la calidad de 33,5 a 21,1 dB en
165
+ modelos destilados; NEXPI lo detecta y se comporta como copia cuando conviene.
166
+ - **Autocalibracion**: mide su propio fallo cada pocos saltos y corrige la
167
+ ganancia. Por eso funciona igual en cualquier modelo y en cualquier hardware.
168
+ - **Enganche universal**: envuelve `pipe.unet`/`pipe.transformer`, cuenta pasos
169
+ por cambio de timestep (acierta con CFG en lote y separado) y lleva una cache
170
+ por rama de guia. Vale para Wan, LTX, CogVideoX, AnimateDiff, SVD y pipelines
171
+ propios, sin una linea de codigo por modelo.
172
+ - **Runtime OpenVINO** que ejecuta modelos de diffusers en iGPU, NPU o CPU, con
173
+ captura automatica de las formas reales del modelo y respaldo por
174
+ `torch.compile`.
175
+ - **Planificador con presupuesto de tiempo**: le dices "en 60 segundos" y reparte
176
+ las cinco palancas sobre el hardware que ha medido.
177
+
178
+ Detalles y fuentes en [docs/ACELERADOR.md](docs/ACELERADOR.md).
179
+
180
+ ### Edicion y juegos (medido)
181
+
182
+ - **Edicion**: `nexpi_accel/ffmpeg_accel.py` elige la ruta mas rapida de ffmpeg.
183
+ Recorte de 6 s **13x** mas rapido (sin recodificar), transcodificacion **1,8x**
184
+ con la cadena entera en la integrada. Y una regla medida: decodificar por
185
+ hardware solo compensa si la cadena sigue en hardware.
186
+ - **Juegos**: `nexpi_accel/juegos.py` (NEXPI Frame Booster) sintetiza fotogramas
187
+ intermedios con flujo optico y warping, como DLSS 3 Frame Generation o AFMF pero
188
+ sin hardware dedicado. **14,5 ms por fotograma a 720p** (69 fps posibles),
189
+ **60,2 fps de salida desde 30 a 1080p** con ~30 ms de latencia anadida, 47-50 dB
190
+ de calidad. Ningun chip hace correr un juego en un PC sin requisitos: lo que
191
+ hace es duplicar los fotogramas presentados y permitir renderizar mas pequeno.
192
+
193
+ ### Marca
194
+
195
+ `marca/lamina_chip.py` y `marca/lamina_chip_3d.py` generan las laminas de producto
196
+ por geometria vectorial; `marca/pdf_nexpi.py` el dossier tecnico (solo cifras
197
+ medidas); `marca/video_promo.py` el video promocional en espanol e ingles, con voz
198
+ neuronal y musica sintetizada, todo de cero.
199
+
200
+ ### Se puede sumar la CPU y la integrada? (experimento)
201
+
202
+ Si, pero mucho menos de lo que promete la aritmetica. Medido con la maquina en
203
+ reposo: iGPU sola 15,91 fotogramas/s, CPU sola 6,72, suma teorica 22,63, y el
204
+ mejor reparto (el de NEXPI, 70/30 segun velocidad medida) da **16,39: solo un
205
+ +3 %**.
206
+
207
+ La razon esta medida: **al trabajar a la vez, cada unidad pierde ~24 %** porque
208
+ la integrada no tiene memoria propia y **compiten por el mismo bus**. No son dos
209
+ unidades independientes, son dos consumidores del mismo recurso escaso.
210
+
211
+ El experimento completo, con el metodo y las consecuencias de diseno, en
212
+ [docs/EXPERIMENTO_GPU_VIRTUAL.md](docs/EXPERIMENTO_GPU_VIRTUAL.md).
213
+
214
+ ---
215
+
216
+ ## 2. NEXPI (generador 2.5D)
217
+
218
+ Texto -> video 1080p en un portatil sin GPU: un ancla por difusion por plano
219
+ (SDXS 1 paso + TAESD, ~0,45 s en la integrada), profundidad, realce x4, capas
220
+ 2.5D y movimiento de camara por warp en CPU (~18 ms/fotograma).
221
+
222
+ ```bash
223
+ python -m nexpi generar "Un faro solitario en un acantilado al atardecer. Las olas rompen contra las rocas" -d 12
224
+ python -m nexpi api # interfaz web en http://127.0.0.1:5050
225
+ ```
226
+
227
+ Clip de 12 s en ~17 s (x1,1 tiempo real). Limite honesto: cada plano es una
228
+ imagen con movimiento de camara real por profundidad, no hay movimiento de
229
+ personajes dentro del plano. Detalles en [docs/ARQUITECTURA.md](docs/ARQUITECTURA.md).
230
+
231
+ ---
232
+
233
+ ## Hardware de referencia (medido, no de catalogo)
234
+
235
+ Portatil i9-12900H + Iris Xe 96 EU, **sin GPU NVIDIA**:
236
+
237
+ | Unidad | Medido |
238
+ |---|---|
239
+ | Iris Xe via OpenVINO fp16 | **756 GFLOP/s** |
240
+ | CPU via OpenVINO | 326 GFLOP/s |
241
+ | CPU via torch | 296 GFLOP/s |
242
+
243
+ La integrada rinde **2,5x la CPU** y practicamente todo el software de video la
244
+ ignora.
245
+
246
+ Mediciones completas y metodologia en [docs/HARDWARE_MEDIDO.md](docs/HARDWARE_MEDIDO.md)
247
+ e [docs/INVESTIGACION.md](docs/INVESTIGACION.md).
248
+
249
+ ## Instalacion
250
+
251
+ ```bash
252
+ pip install -r requirements.txt # ffmpeg debe estar en el PATH
253
+ python bench/fetch_models.py # pesos del generador 2.5D
254
+ python bench/fetch_video_model.py # modelo de video para el acelerador
255
+ ```
256
+
257
+ ## Nexpigramas: LTX-Video en cualquier PC (2026-09-02)
258
+
259
+ LTX-Video 2B destilado corre entero en este portatil sin GPU dedicada: T5-XXL en streaming desde GGUF, transformer en 28 bloques OpenVINO int8 (CPU 6,6 s/paso, Iris Xe 3,9 s/paso, torch 19,5 s), VAE por baldosas. Clip 512x320x49: 87 s en la integrada, 107 s en CPU. Detalles y trampas en `docs/NEXPIGRAMAS.md`.
260
+
261
+ python -m nexpi_accel.ltx_cpu "prompt" --ancho 512 --alto 320 --fotogramas 49 --backend gpu -o clip.mp4
262
+ python -m nexpi_accel.nexpigramas plan --ancho 1024 --alto 640 --fps 48 --duracion 2 --presupuesto 300
nexpi-0.1.0/README.md ADDED
@@ -0,0 +1,224 @@
1
+ # NEXPI
2
+
3
+ Dos piezas que comparten una misma tesis: **el video es casi todo redundante, y
4
+ el hardware que la gente ya tiene esta desaprovechado.**
5
+
6
+ ```
7
+ nexpi_accel/ ACELERADOR UNIVERSAL — hace que modelos de video de otros corran
8
+ en maquinas sin GPU dedicada (integrada, NPU o solo CPU)
9
+ nexpi/ GENERADOR PROPIO 2.5D — texto -> mp4 1080p con camara cinematografica
10
+ ```
11
+
12
+ ---
13
+
14
+ ## 1. NEXPI Accel — acelerador universal de modelos de video
15
+
16
+ **El problema:** todo lo que existe para acelerar generacion de video esta hecho
17
+ para NVIDIA. FastVideo soporta NVIDIA y Apple Silicon, y nada mas. Las tecnicas
18
+ de atencion dispersa (SVG, VSA, Sliding Tile) exigen kernels CUDA o CK-Tile. Si
19
+ tienes un portatil con grafica integrada, no hay nada para ti.
20
+
21
+ **Lo que hace NEXPI:** se enchufa a un pipeline de difusion que ya tengas y
22
+ aplica cinco palancas que **se multiplican entre si**:
23
+
24
+ | # | Palanca | Coste | Ganancia |
25
+ |---|---|---|---|
26
+ | 1 | pasos (cache adaptativa) | lineal | 2-6x |
27
+ | 2 | pixeles (superresolucion) | **cuadratico** | 2-4x |
28
+ | 3 | fotogramas (interpolacion) | lineal | 2-4x |
29
+ | 4 | precision (fp16 / int8) | lineal | 2x |
30
+ | 5 | unidad de ejecucion | segun silicio | 2.5x |
31
+
32
+ ```bash
33
+ python -m nexpi_accel hardware # que hay en esta maquina, MEDIDO
34
+ python -m nexpi_accel plan --segundos 60 # como repartir el computo
35
+ python -m nexpi_accel video "un gato en la ventana" --segundos 90
36
+ ```
37
+
38
+ ```python
39
+ from nexpi_accel import acelerar
40
+ with acelerar(pipe, presupuesto_error=0.03) as a: # cualquier pipeline de diffusers
41
+ video = pipe(prompt, num_frames=16).frames[0]
42
+ print(a.informe())
43
+ ```
44
+
45
+ ### El chip se enchufa solo
46
+
47
+ No hace falta decirle a NEXPI que modelo es ni pasarle nada: lo identifica por lo
48
+ que ES (el modulo que evalua la difusion, sus parametros contados de verdad y lo
49
+ que admite su llamada) y le aplica el plan que salga del hardware ya medido.
50
+
51
+ ```python
52
+ import nexpi_accel.auto # una linea: todo lo que cargues despues sale acelerado
53
+ pipe = DiffusionPipeline.from_pretrained("Lightricks/LTX-Video")
54
+ video = pipe(prompt, num_frames=97).frames[0]
55
+ ```
56
+
57
+ O envolviendo por fuera un programa que ya tengas, sin abrirlo:
58
+
59
+ ```bash
60
+ python -m nexpi_accel detectar # que modelos hay ya en la maquina
61
+ python -m nexpi_accel auto mi_script.py # lo ejecuta con el chip puesto
62
+ python -m nexpi_accel auto mi_script.py --segundos 60 --calidad rapida
63
+ ```
64
+
65
+ Sin objetivo de tiempo solo tira de la palanca que **no cambia lo que pediste**:
66
+ la cache adaptativa (misma resolucion, mismos fotogramas, mismos pasos). Con
67
+ objetivo de tiempo entran las cinco: genera mas pequeno y sube con
68
+ superresolucion, genera menos fotogramas y los repone interpolando, recorta
69
+ pasos y reparte las etapas entre las unidades. Lo que quita, lo devuelve: si
70
+ pides 16 fotogramas de 512x512, recibes 16 de 512x512.
71
+
72
+ Funciona con lo que ya tengas descargado (cache de HuggingFace, ComfyUI, A1111):
73
+ no hay que convertir ni volver a bajar nada.
74
+
75
+ ### Contrato de plazo: lo que no hace nadie
76
+
77
+ Todos los aceleradores del mercado te dan velocidad. Ninguno te da una
78
+ **garantia**. NEXPI si:
79
+
80
+ ```bash
81
+ nexpi-accel contrato "un faro al atardecer" --plazo 30 --certificado cert.json
82
+ ```
83
+
84
+ ```python
85
+ from nexpi_accel import contrato
86
+ oferta = contrato.negocia(pipe, plazo=30, height=512, width=512) # antes de gastar un vatio
87
+ print(oferta.texto())
88
+ salida, cert = contrato.ejecuta(pipe, plazo=30, prompt="un faro", height=512, width=512)
89
+ print(cert.texto())
90
+ ```
91
+
92
+ Tres piezas:
93
+
94
+ 1. **Negociacion**: dice SI o NO *antes* de empezar, y si no puede, dice cual es
95
+ el mejor tiempo alcanzable en esta maquina.
96
+ 2. **Controlador**: dentro del bucle mide el ritmo real, aprieta o afloja la
97
+ cache y, si el siguiente paso no cabe en el plazo, **entrega lo que tiene**.
98
+ Un modelo de difusion siempre tiene una imagen a medio hacer utilizable: por
99
+ eso el plazo se puede cumplir siempre.
100
+ 3. **Certificado**: que se prometio, que paso y con que se midio, con huella
101
+ para que no se pueda retocar sin que se note.
102
+
103
+ **Medido en SD1.5 a 512x512 (CPU, sin GPU dedicada):**
104
+
105
+ | plazo | real | |
106
+ |---|---|---|
107
+ | 240 s | 64,8 s | CUMPLIDO (previsto 68,1 s: 5% de error) |
108
+ | 90 s | 78,8 s | CUMPLIDO |
109
+ | 40 s | 29,9 s | CUMPLIDO, entregado al vencer (2 pasos; un tercero no cabia) |
110
+ | 25 s | 20,7 s | CUMPLIDO, entregado al vencer |
111
+ | 15 s | 10,2 s | CUMPLIDO, entregado al vencer |
112
+
113
+ La promesa **no sale de un modelo teorico**: sale de lo medido en esta maquina y
114
+ guardado en `cache/contratos.json`, escalado por pixeles cuando cambia la
115
+ resolucion. El certificado dice siempre de donde sale la cifra y con cuantas
116
+ ejecuciones se sostiene. Y lo que dice de la desviacion es lo que de verdad se
117
+ ha medido (el error de las verificaciones de la cache contra la red real), no la
118
+ distancia al resultado sin acelerar, que exigiria generarlo dos veces.
119
+
120
+ **Lo que aporta y no existe en ningun otro sitio:**
121
+
122
+ - **Presupuesto de error en lazo cerrado** en vez de umbral fijo calibrado a mano.
123
+ Medido: **33,5 dB con 28,7/30 evaluaciones** frente a **20,4 dB con 26/30** del
124
+ metodo publicado.
125
+ - **Coeficiente de extrapolacion aprendido** por minimos cuadrados en cada
126
+ verificacion. Extrapolar a ciegas hunde la calidad de 33,5 a 21,1 dB en
127
+ modelos destilados; NEXPI lo detecta y se comporta como copia cuando conviene.
128
+ - **Autocalibracion**: mide su propio fallo cada pocos saltos y corrige la
129
+ ganancia. Por eso funciona igual en cualquier modelo y en cualquier hardware.
130
+ - **Enganche universal**: envuelve `pipe.unet`/`pipe.transformer`, cuenta pasos
131
+ por cambio de timestep (acierta con CFG en lote y separado) y lleva una cache
132
+ por rama de guia. Vale para Wan, LTX, CogVideoX, AnimateDiff, SVD y pipelines
133
+ propios, sin una linea de codigo por modelo.
134
+ - **Runtime OpenVINO** que ejecuta modelos de diffusers en iGPU, NPU o CPU, con
135
+ captura automatica de las formas reales del modelo y respaldo por
136
+ `torch.compile`.
137
+ - **Planificador con presupuesto de tiempo**: le dices "en 60 segundos" y reparte
138
+ las cinco palancas sobre el hardware que ha medido.
139
+
140
+ Detalles y fuentes en [docs/ACELERADOR.md](docs/ACELERADOR.md).
141
+
142
+ ### Edicion y juegos (medido)
143
+
144
+ - **Edicion**: `nexpi_accel/ffmpeg_accel.py` elige la ruta mas rapida de ffmpeg.
145
+ Recorte de 6 s **13x** mas rapido (sin recodificar), transcodificacion **1,8x**
146
+ con la cadena entera en la integrada. Y una regla medida: decodificar por
147
+ hardware solo compensa si la cadena sigue en hardware.
148
+ - **Juegos**: `nexpi_accel/juegos.py` (NEXPI Frame Booster) sintetiza fotogramas
149
+ intermedios con flujo optico y warping, como DLSS 3 Frame Generation o AFMF pero
150
+ sin hardware dedicado. **14,5 ms por fotograma a 720p** (69 fps posibles),
151
+ **60,2 fps de salida desde 30 a 1080p** con ~30 ms de latencia anadida, 47-50 dB
152
+ de calidad. Ningun chip hace correr un juego en un PC sin requisitos: lo que
153
+ hace es duplicar los fotogramas presentados y permitir renderizar mas pequeno.
154
+
155
+ ### Marca
156
+
157
+ `marca/lamina_chip.py` y `marca/lamina_chip_3d.py` generan las laminas de producto
158
+ por geometria vectorial; `marca/pdf_nexpi.py` el dossier tecnico (solo cifras
159
+ medidas); `marca/video_promo.py` el video promocional en espanol e ingles, con voz
160
+ neuronal y musica sintetizada, todo de cero.
161
+
162
+ ### Se puede sumar la CPU y la integrada? (experimento)
163
+
164
+ Si, pero mucho menos de lo que promete la aritmetica. Medido con la maquina en
165
+ reposo: iGPU sola 15,91 fotogramas/s, CPU sola 6,72, suma teorica 22,63, y el
166
+ mejor reparto (el de NEXPI, 70/30 segun velocidad medida) da **16,39: solo un
167
+ +3 %**.
168
+
169
+ La razon esta medida: **al trabajar a la vez, cada unidad pierde ~24 %** porque
170
+ la integrada no tiene memoria propia y **compiten por el mismo bus**. No son dos
171
+ unidades independientes, son dos consumidores del mismo recurso escaso.
172
+
173
+ El experimento completo, con el metodo y las consecuencias de diseno, en
174
+ [docs/EXPERIMENTO_GPU_VIRTUAL.md](docs/EXPERIMENTO_GPU_VIRTUAL.md).
175
+
176
+ ---
177
+
178
+ ## 2. NEXPI (generador 2.5D)
179
+
180
+ Texto -> video 1080p en un portatil sin GPU: un ancla por difusion por plano
181
+ (SDXS 1 paso + TAESD, ~0,45 s en la integrada), profundidad, realce x4, capas
182
+ 2.5D y movimiento de camara por warp en CPU (~18 ms/fotograma).
183
+
184
+ ```bash
185
+ python -m nexpi generar "Un faro solitario en un acantilado al atardecer. Las olas rompen contra las rocas" -d 12
186
+ python -m nexpi api # interfaz web en http://127.0.0.1:5050
187
+ ```
188
+
189
+ Clip de 12 s en ~17 s (x1,1 tiempo real). Limite honesto: cada plano es una
190
+ imagen con movimiento de camara real por profundidad, no hay movimiento de
191
+ personajes dentro del plano. Detalles en [docs/ARQUITECTURA.md](docs/ARQUITECTURA.md).
192
+
193
+ ---
194
+
195
+ ## Hardware de referencia (medido, no de catalogo)
196
+
197
+ Portatil i9-12900H + Iris Xe 96 EU, **sin GPU NVIDIA**:
198
+
199
+ | Unidad | Medido |
200
+ |---|---|
201
+ | Iris Xe via OpenVINO fp16 | **756 GFLOP/s** |
202
+ | CPU via OpenVINO | 326 GFLOP/s |
203
+ | CPU via torch | 296 GFLOP/s |
204
+
205
+ La integrada rinde **2,5x la CPU** y practicamente todo el software de video la
206
+ ignora.
207
+
208
+ Mediciones completas y metodologia en [docs/HARDWARE_MEDIDO.md](docs/HARDWARE_MEDIDO.md)
209
+ e [docs/INVESTIGACION.md](docs/INVESTIGACION.md).
210
+
211
+ ## Instalacion
212
+
213
+ ```bash
214
+ pip install -r requirements.txt # ffmpeg debe estar en el PATH
215
+ python bench/fetch_models.py # pesos del generador 2.5D
216
+ python bench/fetch_video_model.py # modelo de video para el acelerador
217
+ ```
218
+
219
+ ## Nexpigramas: LTX-Video en cualquier PC (2026-09-02)
220
+
221
+ LTX-Video 2B destilado corre entero en este portatil sin GPU dedicada: T5-XXL en streaming desde GGUF, transformer en 28 bloques OpenVINO int8 (CPU 6,6 s/paso, Iris Xe 3,9 s/paso, torch 19,5 s), VAE por baldosas. Clip 512x320x49: 87 s en la integrada, 107 s en CPU. Detalles y trampas en `docs/NEXPIGRAMAS.md`.
222
+
223
+ python -m nexpi_accel.ltx_cpu "prompt" --ancho 512 --alto 320 --fotogramas 49 --backend gpu -o clip.mp4
224
+ python -m nexpi_accel.nexpigramas plan --ancho 1024 --alto 640 --fps 48 --duracion 2 --presupuesto 300
@@ -0,0 +1,16 @@
1
+ __version__ = "0.1.0"
2
+
3
+ __all__ = ["Nexpi", "planificar", "Guion", "Chip", "__version__"]
4
+
5
+
6
+ def __getattr__(nombre):
7
+ if nombre == "Nexpi":
8
+ from .core.pipeline import Nexpi
9
+ return Nexpi
10
+ if nombre in ("planificar", "Guion"):
11
+ from .core import guion as g
12
+ return getattr(g, nombre)
13
+ if nombre == "Chip":
14
+ from .core.device import Chip
15
+ return Chip
16
+ raise AttributeError(nombre)
@@ -0,0 +1,3 @@
1
+ from .cli import main
2
+
3
+ main()