Communitygithub.com

reolink/reolink-cli

Herramienta oficial de línea de comandos para cámaras IP Reolink, timbres y NVR — solo LAN, sin nube. Instantáneas, PTZ, URLs RTSP/RTMP, audio bidireccional (talkback/TTS), detección de movimiento e IA, monitoreo de eventos y descarga de VOD. Salida JSON y servidor MCP integrado. Funciona con Home Assistant, Frigate y go2rtc.

¿Qué es reolink-cli?

Este skill proporciona acceso completo y sin necesidad de conexión a la nube a los dispositivos Reolink (cámaras IP, timbres, NVRs) a través de la herramienta `reolink-cli`. Permite realizar prácticamente cualquier operación: obtener instantáneas, controlar PTZ (pan, tilt, zoom), obtener URLs de flujos RTSP/RTMP/FLV, configurar codificación de video (resolución, bitrate, codec), controlar iluminación (IR, spotlight, LED), activar sirenas, ajustar el volumen del audio y manejar la detección de eventos (movimiento, IA de personas/vehículos). Su fortaleza radica en la manipulación de eventos y automatizaciones, incluyendo monitoreo de eventos en vivo, descarga de grabaciones VOD por rango de tiempo, y la configuración de escenas de armado/desarmado en Hubs/NVRs. Está diseñado para agentes de IA como Claude Code, Cursor, Codex, Copilot y Gemini, con un enfoque de 'comandos de barra' en Claude Code para acciones rápidas y una arquitectura de 'gateway' local (por defecto en 127.0.0.1:9000) a través de la cual se enrutan casi todos los comandos de control. El skill impone reglas estrictas de manejo de errores, como no inventar datos, no asumir el estado del dispositivo sin una consulta real, y seguir árboles de decisión de diagnóstico en caso de fallo. También gestiona casos complejos como cámaras de batería detrás de un Hub (que requieren un 'calentamiento' de ~1.6s) y cámaras de doble lente con cambios de vista.

Compatible con✓Claude Code✓Codex CLI✓Cursor✓Gemini CLI
npx skills add reolink/reolink-cli

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

Operador de Cámaras Reolink

Resumen

Superficie principal: reolink-cli (salida JSON por defecto). No inicies el servidor MCP a menos que se te pida explícitamente. Cuando el usuario necesite acceso que no sea por CLI (navegador, curl, otros lenguajes), indícale que use POST /api de la puerta de enlace.

Comandos de barra (solo Claude Code) — prefiérelos para intenciones fijas/de acción única; omite la sobrecarga de mapeo de intenciones:

BarraEquivalenteCuándo usarlo
/reolink-cli:statusreolink-cli statusel usuario pregunta sobre el estado actual / panel de control / "cómo van las cosas"
/reolink-cli:featuresreolink-cli featuresel usuario pregunta qué puede hacer el plugin / "qué puede hacer"
/reolink-cli:scanreolink-cli discoverescanear la red local / "escanear"
/reolink-cli:devicesreolink-cli device listlistar cámaras registradas
/reolink-cli:cache-cleanreolink-cli cache clean dry-run→applylimpiar instantáneas antiguas / "limpiar caché"
/reolink-cli:updatereolink-cli self-updateactualizar a la última versión (verifica GitHub, no hace nada si está actualizado)
/reolink-cli:uninstallreolink-cli setup --uninstall --purge --no-interactivedesinstalación completa

Entorno de ejecución de Claude Code: Debe usar el comando de barra cuando la intención del usuario coincida exactamente con una de estas siete opciones — más rápido (sin latencia de LLM), determinista y detectable mediante autocompletado con /.

Otros agentes (Codex / Cursor / Copilot / Gemini): estas superficies no admiten comandos de barra definidos por plugins, por lo que la regla de "primero la barra" no aplica — pasa directamente a ejecutar el comando CLI reolink-cli … equivalente directamente. El mapeo de intenciones basado en el skill se encarga de todo lo demás.

Todos los agentes: Recurre a la cadena de comandos CLI basada en el skill para intenciones compuestas/difusas ("anunciar cuando se detecte una persona", "hacerlo más brillante") que no estén cubiertas por la lista de barras / las siete acciones fijas anteriores.

La puerta de enlace es obligatoria para casi todos los comandos de control. El CLI se enruta a través de 127.0.0.1:9000 por defecto (configurado en config.toml dentro del directorio de configuración de la plataforma — ~/.config/reolink-cli/config.toml en Linux, ~/Library/Application Support/reolink-cli/config.toml en macOS, %APPDATA%\reolink-cli\config.toml en Windows — como gateway-addr). Si ves gateway connect failed: Connection refused, la puerta de enlace no está en ejecución — iníciala una vez:

reolink-cli gateway start --addr 127.0.0.1:9000 &

Funciona sin la puerta de enlace: device add|list|update|remove|resolve|show, config init, discover, features, doctor, cache status|clean — todo lo que lee la configuración local o se comunica directamente con la red. (Verificado ejecutando cada uno sin ninguna puerta de enlace escuchando). Todo lo demás (ping, login, info, config get/set, image, osd, ptz, detect, light, audio, preview, snapshot, vod, events, users, system reboot, system upgrade) necesita que la puerta de enlace esté activa.

Envolventes — analiza .ok en el CLI, .status en la puerta de enlace:

SuperficieÉxitoError
CLI{ok:true, command, protocol, data}{ok:false, error:{code, message, retryable}} (stderr)
CLI por lotes{command, summary, results:[{camera, host, ok, data, error}]}ok por objetivo
Puerta de enlace /api{status:"success", data}{status:"error", code, message} (código HTTP == código)

references/ contiene archivos de recetas específicos por tema. Debes cargar solo el que coincida con tu tarea — references/index.md es el enrutador. references/troubleshooting.md contiene árboles de decisión de diagnóstico para fallos.

Verdad Fundamental (Vinculación)

Prohibido afirmar o dar a entender como hecho: la accesibilidad del dispositivo, el estado de inicio de sesión, los valores de configuración, las capacidades, los tipos de detección/IA, los recuentos de eventos, la existencia de archivos VOD, las cuentas de usuario o cualquier estado observable de la cámara — excepto cuando se deriven de la salida JSON de un comando reolink-cli ejecutado o de una respuesta POST /api de la puerta de enlace dentro de la tarea actual.

Prohibido: listas de demostración, diseños supuestos, valores sintéticos, éxito falso después de errores/tiempos de espera, prosa/JSON que imite la salida del CLI sin una respuesta real, o "el dispositivo tiene X" cuando no se haya ejecutado ningún get/info/inventory/capabilities.

Debes cuando falten datos: indicar qué falta y la causa (ninguna cámara registrada, puerta de enlace caída, autenticación fallida, dispositivo fuera de línea), luego tomar un paso de recuperación concreto (de la tabla de Recuperación de Errores) o hacer una única pregunta aclaratoria. Prohibido rellenar con valores predeterminados que parezcan plausibles.

Interpretación de Intenciones

Resuelve la ambigüedad antes de elegir un comando. Si aún no está claro, pregunta con opciones.

El usuario diceComandoPor qué / advertencia
agregar un usuariousers addCuenta del dispositivo, NO una entrada de cámara del CLI
agregar una cámaradevice addEntrada de cámara del CLI (~/.config/reolink-cli/aliases.toml), NO una cuenta de dispositivo
cambiar contraseñausers passwd (predeterminado) O device update (credenciales del CLI)Pregunta cuál
luz parpadeantelight statusledLED del cuerpo
visión nocturnalight irLED IR invisible
focolight spotlight (manual) O light whiteled (activado por alarma)Misma bombilla, cableado diferente
demasiado oscuroimage tune --bright primero, verifica light ir get si es de nocheAjuste de imagen, no foco
al revésimage flip set --flipVertical
imagen reflejadaimage flip set --mirrorHorizontal
máscaraprivacy maskLee las regiones actuales primero
renombrarosd set --name (en pantalla) O config set device-name (app)Pregunta cuál
reiniciar / rearrancarsystem reboot30–60s fuera de línea
actualizar / flashear firmware / OTAsystem upgrade <file.pak>⚠️ Riesgo de brick. Coincide modelo+hw_ver a través de info; la PUERTA DE ENLACE lee el archivo LOCAL; ventana automática/stop-and-wait. Detalle en references/admin.md
restablecer valores de fábrica— independiente; system upgrade --factory-reset restablece durante un flasheoEl restablecimiento independiente no está en el CLI; pide al usuario que use la app de Reolink
echar fuerausers remove (permanente) O users passwd + system reboot (desalojar sesión)Las sesiones activas sobreviven a users remove hasta el reinicio
instantáneasnapshot [--file RUTA]JPEG. Los directorios padre se crean automáticamente por el binario (desde v0.5.0) — NO hagas mkdir -p en el destino. Lo mismo para vod download y preview capture --file.
lento / cuánto tiempo / tiempo empleado / rendimiento / latencia / benchmarkbenchmark [--iterations N] [--phases ...] [--reuse-session]p50/p95/p99 por fase: connect, login, info, snapshot. --reuse-session para ruta cálida. Detalle en references/index.md.
cpu / memoria / carga del dispositivo / está sobrecargada la cámara / tartamudeoconfig get performanceLectura en vivo del dispositivo: cpuUsedPercent, codeRate, netDataRate. Solo lectura e instantánea: dos llamadas separadas por un segundo difieren legítimamente. No todos los modelos lo implementan; los que no, responden con un rechazo a nivel de dispositivo. Distinto de benchmark, que mide el tiempo de ida y vuelta del cliente, no de la cámara.
rtsp / rtmp / flv address / stream URL / HA / Frigate / go2rtc / VLCstream url [--kind rtsp,rtmp,flv] [--stream main,sub,ext] [--with-auth]Por defecto --kind rtsp --stream main. --with-auth solo cuando el usuario quiera explícitamente una URL de un solo uso para pegar. NVR: device expand luego --tag <nvr>. Detalle en references/media.md.
nvr con 8 canales / subcámaras RLN / canal N`device expand [--yes--names A,B,C]`
comando rechazado 400 / "el modelo no lo soporta" / cámara de batería en un hub / primer comando después de una pausaNada — la puerta de enlace ya reintenta. attempts en la respuesta indica qué intento tuvo éxito (3 es normal después de una pausa, 1 durante una ráfaga)Un hijo de batería detrás de un hub duerme y luego rechaza comandos con un simple 400, indistinguible de no soportado. Cuándo duerme no es predecible solo por el tiempo de inactividad (las lecturas de un día decían ~2 min; más tarde, ventanas nocturnas lo encontraron despierto), así que no intentes adelantarte. Lo que es consistente: una cámara dormida cuesta 3 intentos fijos (~1.6 s) para despertarse, y la solicitud rechazada es en sí misma el despertador. Si aún falla después del presupuesto, info → channel.loginState = standby lo explica — pero ese campo va con retraso, por lo que explica un fallo, no puede prevenir uno.
doble lente / dos lentes / bala+PTZ en una cámara / gran angular y telefoto / segunda lenteinfo primero (channel.views, channel.dualLens), luego --view N en comandos de configuración--view es un tercer eje: --channel selecciona la cámara, --view selecciona la lente, --stream selecciona el perfil de codificación de esa lente. Verificado por vista: encode, privacy mask, detect motion, PTZ. No por vista: snapshot (el dispositivo responde 400 para vista ≥1), preview/stream url (el protocolo no tiene selector — estos ahora rechazan --view N en lugar de devolver silenciosamente la vista 0), image/ISP (compartido). Por defecto 0 = la única vista que tiene una cámara normal.
preview / echar un vistazo / ver N minutos / ver en vivopreview play (abre una ventana de ffplay)POR DEFECTO a play, no a capture. El usuario quiere una ventana en vivo, no un archivo.
grabar N segundos / guardar un clip / guardarlopreview capture --packets ≈N×25Solo cuando el usuario diga explícitamente guardar / grabar / exportar. Recuento de paquetes, no segundos; ~25 fps main, ~10 fps sub
vista previa de 60 segundos (¡ambiguo!)Si el usuario dice "vista previa durante N segundos/minutos" → preview play --packets N×fps. Si el usuario dice "grabar N segundos" → preview capture. Pregunta si realmente no está claro.Por defecto play cuando el verbo es "preview/watch", capture solo cuando el verbo es "record/save/export"
volumenaudio volume set (maestro)Pregunta si se refieren a silenciar: audio mute
silenciar alarmaaudio muteSolo audio de alarma, no vista previa
sirena / sonido de alarma / hacer sonar la alarma / asustarlos / hacer que pite**`audio siren play [--duration N--times N] [--wait]`**
armar / desarmar / ausente / en casa / me voy / modo escena / dejar de grabar mientras estoy dentroscene set <id> (scene list para los ids, scene set --schedule para devolver al horario)Solo Hub/NVR. Un solo interruptor rearma cada canal — no toca la configuración de detección por cámara. scene show primero: currentSceneId 0 significa que el horario está activo. Detalle en references/scene-mode.md.
resolución / bitrate / fps / velocidad de fotogramas / h265 / h264 / calidad de flujo / hacer el flujo más pequeño**`encode set --stream mainsub
detección de personasdetect ai --type personVerifica device inventory --capabilities primero
vehículodetect ai --type vehicleNo todos los modelos
activar grabaciónrecord schedule set --enable
configuración de grabación / parámetros de grabación / pre-grabar segundos / tamaño del cliprecord config getSolo lectura; ciclo / pre/post record / tiempo de paquete
tarjeta SD / tarjeta de almacenamiento / capacidad / espacio librestorage statusSolo lectura; totalGB / remainGB / formatted / mounted
grabación manual / grabar ahora / iniciar grabación—No compatible en IPCs Reolink; recurre a record schedule set --enable/--disable
descargar ayer / descargar grabaciónvod search --since 24h → vod download NOMBRE
descargar 09:45–09:55 / solo ese clip / un rango de tiempovod download --from 2026-09-02T09:45:00 --to 2026-09-02T09:55:00Corte del lado de la cámara — NO descargues la hora completa y recortes
alguna alarma / alguna alarma hoyevents query --since 24hRequiere puerta de enlace
historial de eventos más atrás que el búfer en vivo / qué pasó la semana pasada / registro de eventos del hub--channel N events history --since 7d [--types people,motion] (solo hub/NVR)Lee el registro de eventos grabados del dispositivo (cmd 516/517), no el anillo en vivo de ~500 entradas. Los IPCs independientes responden 400. Lista vacía = no hay eventos coincidentes; un hub puede quedarse en silencio brevemente después de un uso intensivo, reintenta después de una pausa.
alerta de voz / anuncio de voz / anunciar cuando alguien llegue / reproducir voz cuando se detecte una personaaudio talk (consulta references/voice-alert.md)Solo PCM16 LE mono; necesita capabilities.audioTalk=1
detectar X hacer Y / automatización / disparador de eventos / detectar-luego-hacerDebe events monitor init/check/run con regla TOML. Prohibido bucles bash while + events query ad-hoc — consulta references/event-monitor.md.
el monitor está en ejecución / se ha disparado una regla / estado del monitor / qué se disparó recientementeevents monitor status (pid + cursor + lastFires + por regla expired/secondsRemaining) o events monitor history --last N [--rule NOMBRE] [--since 30m]Inspecciona el demonio en ejecución sin reiniciarlo. Los filtros se aplican antes de --last, por lo que --rule watch --last 20 son las últimas 20 activaciones de esa regla, no lo que sobrevive al tail global.
ver esta cámara

Skills relacionados