Intermedio 12 minInterfaces

NotebookLM en local: alternativas open-source auto-hospedadas

NotebookLM ha popularizado una idea sencilla: cargar un conjunto de documentos, hacer preguntas cuyas respuestas citan sus fuentes y generar un resumen de audio que se puede escuchar como un podcast. El problema es que todo se envía a los servidores de Google. Esta guía muestra cómo obtener un NotebookLM local con herramientas de código abierto conectadas a un LLM autoalojado: cuadernos de fuentes, respuestas con citas y síntesis de voz, sin que ninguno de tus archivos salga de tu máquina.

Por Léa B.·Actualización 2026-08-27·Probado en Windows, macOS y Linux

#Qué hace NotebookLM y qué se puede replicar

Antes de reconstruirlo, hay que entender qué aporta realmente NotebookLM. No es un chatbot generalista: es un asistente «anclado» en un corpus de documentos que tú eliges. Solo responde a partir de esas fuentes, cita sus pasajes y, en teoría, se niega a inventar lo que no aparece en ellas. Tres componentes conforman la experiencia.

El cuaderno de fuentes
Se importan PDF, páginas web, notas o transcripciones. Estas fuentes constituyen el único conjunto del que el asistente puede extraer información.
Las respuestas citadas
Cada afirmación apunta al pasaje fuente que la respalda, lo que permite verificarlo con un clic en lugar de confiar ciegamente.
El resumen de audio (Audio Overview)
Dos voces sintéticas conversan sobre tus documentos en formato de podcast, para escuchar una síntesis mientras caminas en lugar de leerla.

Estas tres funciones pueden replicarse hoy con componentes libres. La primera y la segunda no son más que RAG (Retrieval-Augmented Generation) bien implementado: indexación de las fuentes, búsqueda de los pasajes pertinentes y generación de una respuesta que remite a ellos. La tercera es un pipeline de texto → diálogo → síntesis de voz (TTS). Nada exótico: todo cabe en una máquina con una GPU de gama de entrada.

i
Lo que no se replica de forma idéntica
La ergonomía muy pulida de NotebookLM y la calidad de sus voces en Audio Overview siguen siendo difíciles de igualar píxel a píxel. El objetivo aquí no es copiar la interfaz, sino recuperar los mismos usos —fuentes, citas, audio— manteniendo el control de tus datos.

#¿Por qué querer un NotebookLM local?

El kit de IA Local

Tu ChatGPT privado y gratuito en tu máquina en 1 hora — LM Studio, Ollama, Open WebUI, tus documentos, sin nube.

  • Espacio en línea de por vida
  • PDF + archivos
  • Reembolsado 30 j

La razón número uno es la confidencialidad. Un notebook suele contener lo más sensible: notas de investigación no publicadas, documentos internos de la empresa, expedientes de clientes, contratos, informes médicos. Depositarlos en Google es confiar una copia a un tercero, con condiciones de uso que cambian y sobre las cuales no tienes control. Montar un NotebookLM local resuelve el problema de raíz: los archivos permanecen en tu disco, la inferencia se ejecuta en tu hardware.

Soberanía de los datos
Ningún documento ni ninguna solicitud pasa por un servicio de terceros. Esencial para el RGPD, el secreto profesional o la investigación y el desarrollo confidenciales.
Sin cuotas de uso ni suscripción
Una vez que la pila esté en marcha, puedes procesar tantas fuentes como tu disco y tu paciencia te permitan, sin límite mensual.
Sin conexión
La cadena completa funciona sin conexión, lo cual es útil en desplazamientos o en redes aisladas.
Control del modelo
Eliges el LLM, el idioma preferido, la cuantización y los ajustes, en lugar de tener que someterte a un modelo de caja negra.

#Las alternativas de código abierto creíbles

Varios proyectos buscan explícitamente ser un NotebookLM local. Ninguno es perfecto, pero todos se conectan a Ollama y avanzan rápidamente. Estos son los que ofrecen buenos resultados en 2026, desde el más parecido a NotebookLM hasta el que más se presta a modificaciones caseras.

Open Notebook
El más fiel al espíritu de NotebookLM: concepto de cuadernos, gestión de fuentes, chat con citas y generación integrada de podcasts. De código abierto, dockerizado y compatible con Ollama para mantenerse 100 % local.
SurfSense
Un asistente de investigación de código abierto orientado a múltiples fuentes (documentos, web, conectores). Útil para reunir información y consultarla, con compatibilidad con LLM locales.
Open WebUI / AnythingLLM
No son clones de NotebookLM, sino dos interfaces RAG maduras que cubren lo esencial: importación de documentos, chat con citas y modelos de embeddings locales. El camino más sencillo para la parte «fuentes + preguntas y respuestas».
Podcastfy
Un módulo dedicado únicamente a la parte de audio: convertir documentos o URL en una conversación a dos voces. Se controla con un LLM local y un motor TTS de tu elección.
→
Dos estrategias
O bien utilizas una herramienta «todo en uno» que compite directamente con NotebookLM (Open Notebook), o bien montas tú mismo una interfaz RAG (Open WebUI) para las fuentes y las citas, y después un pipeline TTS separado para el audio. La segunda opción es más modular y reutiliza componentes que quizá ya tengas.

#Prerrequisitos

Ollama
El daemon que sirve los modelos, en http://localhost:11434 por defecto. Ver la guía de instalación si aún no lo has hecho.
Un modelo de generación
Qwen 3.5 9B (≈6,6 GB de VRAM en Q4_K_M, contexto de 256k y capacidades multimodales) o Mistral Small 24B (≈14 GB) para un excelente francés; un Granite 4.2 8B (≈5,3 GB) basta en un equipo modesto.
Un modelo de embeddings
nomic-embed-text o mxbai-embed-large, disponibles para descargar mediante ollama pull. Son ligeros y funcionan incluso sin GPU.
Docker
La mayoría de las alternativas (Open Notebook, Open WebUI, AnythingLLM) se despliegan en un contenedor, lo que evita conflictos de dependencias.
Un motor TTS local
Piper para la parte de audio: rápido, ligero y con voces francesas. Ni siquiera es necesaria una GPU para la síntesis de voz.
Obtener los modelos
# Modèle de génération (adaptez à votre VRAM)
ollama pull qwen3.5:9b

# Modèle d'embeddings pour le RAG
ollama pull nomic-embed-text
i
Referencias de VRAM en Q4_K_M
Calcula aproximadamente 2 GB para un 3B, 5 GB para un 7B, 9 GB para un 14B y 19 GB para un 32B. Una RTX 3060 de 12 GB ejecuta un 14B cómodamente; en un Mac con memoria unificada (M4 Pro de 24-48 GB), un 32B sigue siendo una opción posible.

#Paso 1: montar el notebook de fuentes con Ollama

La primera pieza de un NotebookLM local es el propio notebook: el lugar donde se depositan las fuentes y donde se indexan. Aquí usamos Open Notebook, que reproduce fielmente este concepto. Se ejecuta en un contenedor y se configura para comunicarse con tu Ollama en lugar de con un servicio en la nube.

  1. 01
    Descargar el proyecto
    Clona el repositorio de Open Notebook y entra en su directorio. Incluye un archivo docker-compose listo para usar.
  2. 02
    Apuntar a Ollama
    En la configuración (archivo de entorno), indica Ollama como proveedor de modelos y la URL http://localhost:11434 (o http://host.docker.internal:11434 desde el contenedor). Elige tu modelo de generación y nomic-embed-text para los embeddings.
  3. 03
    Iniciar la pila
    Ejecuta docker compose up. La interfaz web se abre entonces en el navegador, con la base de datos y la indexación gestionadas por ti.
  4. 04
    Crear un notebook y importar
    Crea un cuaderno, luego arrastra allí tus PDF, pega URLs o texto. Cada fuente se divide y vectoriza automáticamente.
Terminal
# Récupérer et lancer Open Notebook
git clone https://github.com/lfnovo/open-notebook.git
cd open-notebook

# Configurer le fournisseur Ollama dans le fichier d'environnement
cp .env.example .env
# éditez .env : OLLAMA_API_BASE=http://host.docker.internal:11434

# Démarrer la stack complète
docker compose up -d
!
host.docker.internal en Linux
Desde un contenedor Docker, localhost se refiere al contenedor, no a tu máquina. En macOS y Windows, host.docker.internal apunta al anfitrión. En Linux, a veces es necesario agregarlo explícitamente (extra_hosts: host.docker.internal:host-gateway en el compose) o usar la IP de la puerta de enlace de Docker. De lo contrario, Ollama seguirá siendo inaccesible.

Si prefieres no añadir otra herramienta, Open WebUI y AnythingLLM funcionan muy bien como cuadernos de fuentes: se crea un espacio de trabajo (workspace), se importan los documentos y la indexación mediante nomic-embed-text se realiza automáticamente. Es la opción «sin código» detallada en las guías RAG del sitio.

#Paso 2: preguntas y respuestas con citas

Es el núcleo de un NotebookLM local: formular una pregunta en lenguaje natural y obtener una respuesta que se base únicamente en tus fuentes, respaldada por el pasaje exacto. Técnicamente, el RAG recupera los fragmentos más cercanos a la pregunta y luego el LLM redacta a partir de ellos, no de sus conocimientos generales. La calidad de las citas depende sobre todo de dos cosas: un prompt de sistema estricto y pedir explícitamente la fuente.

Tanto en Open Notebook como en Open WebUI, este comportamiento ya está integrado: haz la pregunta en el chat del cuaderno y la respuesta muestra los fragmentos utilizados. Si construyes tu propia cadena, el prompt del sistema marca la diferencia.

Prompt de sistema para respuestas con citas
Tu réponds UNIQUEMENT à partir des extraits fournis ci-dessous.

Règles :
- Si la réponse ne figure pas dans les extraits, dis « Je ne trouve pas cette information dans les sources. »
- N'utilise jamais tes connaissances générales pour compléter.
- Après chaque affirmation, indique la source entre crochets, ex. [source 2].
- Cite mot pour mot le passage clé quand c'est utile.

Réponds en français, de façon concise.

En cuanto a los ajustes del modelo, dos parámetros son importantes. Una temperatura baja (0.2) limita los añadidos inventados y mantiene al modelo fiel a las fuentes. Una ventana de contexto (num_ctx) suficiente permite incorporar los fragmentos recuperados sin truncarlos; de lo contrario, el modelo responde basándose solo en una parte de los pasajes.

Llamada a Ollama con fuentes
import requests

SYSTEM = open('prompt_systeme.txt').read()

# extraits = passages renvoyés par votre recherche vectorielle
contexte = "\n\n".join(
    f"[source {i+1}] {e}" for i, e in enumerate(extraits)
)

resp = requests.post("http://localhost:11434/api/chat", json={
    "model": "qwen3.5:9b",
    "stream": False,
    "options": {"num_ctx": 8192, "temperature": 0.2},
    "messages": [
        {"role": "system", "content": SYSTEM},
        {"role": "user", "content": f"{contexte}\n\nQuestion : {question}"},
    ],
})

print(resp.json()["message"]["content"])
i
El RAG no lee «todo»
Contrariamente a una idea muy extendida, el modelo no examina todas tus fuentes con cada pregunta: solo recibe unos pocos pasajes, los más cercanos. Una pregunta mal formulada recupera los fragmentos equivocados y produce una respuesta que no responde a lo preguntado. Reformula usando los términos exactos del documento si la respuesta te decepciona.

#Paso 3: generar un resumen en audio de forma local (TTS)

Es la función emblemática de NotebookLM —el Audio Overview, dos voces que comentan tus documentos— y también la más impresionante de recrear en local. El proceso se divide en dos fases: el LLM escribe un guion de diálogo a partir de las fuentes y luego un motor TTS local convierte ese guion en audio. Así, tanto la voz como el texto se mantienen completamente sin conexión.

Primer paso: hacer redactar la conversación. Se pide al LLM un diálogo entre dos personajes que explique el contenido de forma accesible, identificando al hablante en cada intervención; estas marcas servirán para alternar las voces durante la síntesis.

Prompt para un guion de podcast
À partir des sources ci-dessous, écris un dialogue de podcast en français
entre deux animateurs, Alex et Camille, qui vulgarisent le contenu.

Règles :
- Format strict, une réplique par ligne : « Alex: ... » ou « Camille: ... ».
- Reste fidèle aux sources, n'invente aucun fait ni chiffre.
- Ton vivant et curieux, phrases courtes, adaptées à l'oral.
- 12 à 18 répliques, une vraie conversation qui se répond.

La segunda etapa es la síntesis de voz. Piper es la opción natural para ejecutarla en local: rápido, ligero y con voces francesas de buena calidad. Se le asigna una voz por hablante (dos archivos de modelo .onnx diferentes) para distinguir a Alex y Camille, y después se concatenan los segmentos de audio.

Instalar Piper y una voz FR
# Installer Piper
pip install piper-tts

# Télécharger deux voix françaises depuis Hugging Face (rhasspy/piper-voices)
# ex. fr_FR-siwis-medium et fr_FR-upmc-medium (fichiers .onnx + .onnx.json)

# Synthétiser une réplique
echo "Bonjour et bienvenue dans cet épisode." | \
  piper --model fr_FR-siwis-medium.onnx --output_file alex_01.wav
script_vers_audio.py
import subprocess, re

VOIX = {
    "Alex": "fr_FR-siwis-medium.onnx",
    "Camille": "fr_FR-upmc-medium.onnx",
}

segments = []
for i, ligne in enumerate(open("script.txt")):
    m = re.match(r"(Alex|Camille):\s*(.+)", ligne.strip())
    if not m:
        continue
    locuteur, texte = m.group(1), m.group(2)
    wav = f"seg_{i:03d}.wav"
    subprocess.run(
        ["piper", "--model", VOIX[locuteur], "--output_file", wav],
        input=texte.encode(),
    )
    segments.append(wav)

# Concaténer les segments (ex. avec ffmpeg ou pydub)
print("Segments générés :", len(segments))

Para evitar escribir este pipeline manualmente, Open Notebook incluye la generación de podcasts, y Podcastfy realiza exactamente ese trabajo de «documentos → conversación en audio» con un LLM local y el motor TTS que elijas. El pipeline manual anterior sigue siendo útil para comprender lo que sucede y mantener un control total sobre las voces y el formato.

→
Voces más naturales
Piper prioriza la velocidad sobre la expresividad. Si el resultado te parece demasiado robótico, motores como Kokoro o Coqui XTTS producen voces más naturales, a costa de una síntesis más exigente en recursos y de una GPU casi obligatoria. Para una escucha con fines prácticos, Piper es más que suficiente.

#Solución de problemas

El contenedor no consigue conectarse a Ollama
Desde Docker, localhost apunta al contenedor. Usa host.docker.internal (añadido mediante extra_hosts en Linux) o la IP del host, y verifica que Ollama escuche bien en 0.0.0.0 si es necesario.
Respuestas sin citas o inventadas
El prompt de sistema no es lo suficientemente estricto o la temperatura es demasiado alta. Impón «solo a partir de los extractos», exige el formato [source N] y baja la temperatura a 0.2.
El PDF sale vacío al indexar
Es un documento escaneado sin capa de texto. Procésalo con OCR (ocrmypdf entree.pdf sortie.pdf) antes de importarlo.
La respuesta ignora parte de las fuentes
num_ctx demasiado pequeño: los extractos se han truncado. Auméntalo si la VRAM lo permite o reduce el número de pasajes recuperados.
Piper no encuentra la voz
Se necesitan los dos archivos por voz: el .onnx y su .onnx.json en la misma carpeta. Verifica la ruta exacta que se pasa a --model.
Audio entrecortado entre las intervenciones
La concatenación directa une los WAV sin pausas. Inserta un breve silencio entre segmentos (ffmpeg o pydub) para obtener un resultado más fluido.

#Para ir más allá

Esta guía reúne componentes ya detallados en otras partes del sitio. Para profundizar en cada paso:

Instalar Ollama: Windows, macOS y Linux
El punto de partida para servir tus modelos localmente en el puerto 11434, si aún no está en funcionamiento.
RAG local con Ollama sin programar (Open WebUI, AnythingLLM)
La opción sin código para la parte de «fuentes + preguntas y respuestas con citas» de tu NotebookLM local.
Asistente de voz 100 % local: Whisper + Ollama + Piper
Para profundizar en Piper y la síntesis de voz local, más allá del resumen de audio.
¿Esta guía te ha ayudado?

¿Un comentario, un error, una precisión? Avísanos, eso mejora la guía para todos.