# Macro con reconocimiento de imagen: cómo funciona MAS

> Cómo funciona el reconocimiento de imagen en una macro de MAS: plantillas y OCR leen la pantalla, la entrada humanizada va por adb y dónde corre cada parte.

Source: https://automationmacro.com/es/docs/concepts (Empezar, updated 2026-09-05)

Macro Automation Studio (MAS) automatiza apps Android como lo haría una persona: mira la pantalla, decide y toca. Esta página explica cómo funciona una macro con reconocimiento de imagen, las palabras que verás en la app y dónde se ejecuta cada parte. Léela una vez y el resto de la documentación tendrá sentido.

## Cómo ve la pantalla una macro con reconocimiento de imagen

MAS no modifica APK ni lee la memoria de las apps. Trabaja desde fuera, a través de adb, con tres piezas básicas.

### Imágenes de plantilla

Una plantilla es un recorte pequeño de la pantalla: un botón, un icono, una insignia. La recortas en Asset Lab desde el dispositivo en directo, llega a tu biblioteca de imágenes con un ID numérico y tu script se refiere a ella por ese ID. En tiempo de ejecución, `find_object` hace una captura nueva y busca la plantilla en ella con la coincidencia de plantillas (template matching) de OpenCV. Una coincidencia necesita una similitud de 0.8 por defecto (`threshold=0.8`) y devuelve el punto central, así que la siguiente línea es un toque.

Los archivos de imagen pueden ser jpg, png, gif o webp, de hasta 10 MB cada uno. Mantén las plantillas pequeñas y distintivas: una pantalla entera solo coincide con esa pantalla exacta, mientras que un botón coincide allí donde aparezca.

### OCR en Android

El texto se lee con Tesseract OCR mediante `read_text`. Le pasas una `Region(x1, y1, x2, y2)` para que el motor mire un contador o una etiqueta en lugar de toda la pantalla, y un modo de segmentación de página (`psm=7` para una sola línea, `psm=8` para una sola palabra). `ColorConversion.BLACK_WHITE` ayuda con texto de color sobre fondos con ruido. Asset Lab tiene una prueba de OCR en directo para que ajustes una región antes de pasarla al código.

### Entrada humanizada

La entrada se envía como eventos reales de toque y de teclado: `click`, `swipe`, `input_text`, `key_press`, `zoom_in` y `zoom_out`. Los tiempos los decides tú. Un `click` espera `delay_ms=1000` tras el toque, un `swipe` dura `duration_ms=1000` y una tecla mantenida 500 ms o más cuenta como pulsación larga. Las macros más lentas y espaciadas parecen menos mecánicas.

### Coordenadas y tamaño de pantalla

Toda coordenada es un desplazamiento en píxeles desde la esquina superior izquierda de la pantalla. `get_screen_size()` devuelve el ancho y el alto; `get_device_info()` devuelve lo mismo más el nombre del dispositivo. Las plantillas y las regiones van ligadas a la resolución y el DPI con los que las capturaste, así que mantén cada dispositivo que ejecute una macro en la misma resolución que el dispositivo donde la creaste. Las guías de emuladores recomiendan un tamaño para cada emulador y los dispositivos en la nube se crean con un preajuste de pantalla fijo.

## Vocabulario

| Término | Significado en MAS |
|---|---|
| Macro | Un programa en Python que automatiza una tarea en un dispositivo. La unidad que ejecutas, programas, compartes y vendes. |
| Proyecto | La carpeta detrás de una macro: `src/app.py`, un formulario de argumentos opcional, recursos y un historial git. |
| Dispositivo | Un destino Android que MAS puede controlar, identificado por su puerto adb o, en un dispositivo en la nube, por su ID. |
| Grupo de dispositivos | Un conjunto de dispositivos con nombre en la página **Grupos de dispositivos**. Cada dispositivo del grupo tiene su propia macro, argumentos, proxy y webhooks; **Iniciar todos** los ejecuta uno tras otro. |
| Perfil de ajustes | Un conjunto con nombre de valores de argumentos para una macro. Los dispositivos siguen un perfil, así que cambiarlo actualiza todos los dispositivos que lo usan. "Default" existe siempre. |
| Dispositivo en la nube | Un dispositivo Android que MAS ejecuta por ti en sus propios servidores. Las macros se ejecutan en el servidor y su pantalla se transmite por WebRTC. |
| MAS Agent | El autor con IA de la página **Agente**. Describe una tarea, explora el dispositivo, pregunta cuando debe decidir y compila una macro que supera 3 ejecuciones de validación. |
| Marketplace | El catálogo de bots listos para usar dentro de la app. Descarga uno y se convierte en una macro en **Macros**. |
| Asset Lab | La app auxiliar para recortar plantillas, elegir puntos y probar regiones OCR sobre una pantalla en directo. |
| UI Builder | El diseñador de formularios de argumentos (`.uibproj`) y de paneles en tiempo de ejecución (`.uibrt`). |
| Code Editor | El IDE de Python dentro de MAS, que se abre por proyecto desde **Macros**, con depurador y consola de ejecución. |

## Dónde se ejecuta cada cosa

Tres lugares hacen el trabajo y conviene saber cuál estás mirando.

### Tu ordenador controla los emuladores

MAS en tu PC o Mac encuentra los emuladores por el nombre de su proceso y los puertos en los que escuchan, y habla con cada uno mediante `adb connect 127.0.0.1:<port>`. Las capturas, los toques y el OCR de un dispositivo local ocurren en tu máquina, así que la app debe seguir abierta mientras una macro se ejecuta. Lo mismo vale para el programador.

### Los dispositivos en la nube se ejecutan en la nube de MAS

Un dispositivo en la nube vive en los servidores de MAS. Cuando ejecutas una macro en él, MAS sube una instantánea de tu proyecto y la ejecuta junto al dispositivo. Puedes ver la pantalla en directo desde la app o cerrar la app por completo; la ejecución continúa igual. Los dispositivos inactivos se detienen tras alrededor de una hora sin actividad y conservan sus datos.

### Los scripts hablan con la app por JSON-RPC

Una macro es un proceso de Python normal. MAS lo inicia como `python -u -m src.app` dentro de su propio entorno de Python 3.13 y le pasa los datos de conexión en variables de entorno (`MAS_RPC_PORT`, `MAS_RPC_HOST`, `MAS_DEVICE_ID`, `MAS_SESSION_TOKEN`). Cada llamada `mas.*` es una petición JSON-RPC 2.0 por un socket local; la app es la dueña de adb, OpenCV y Tesseract y devuelve el resultado. En un dispositivo en la nube las mismas llamadas viajan por un socket unix dentro del sandbox. Por eso `import mas` no necesita instalación y por eso un script iniciado fuera de MAS informa de "Could not discover RPC port".

### IA al crear la macro, ninguna al ejecutarla

MAS Agent gasta créditos de IA mientras explora y compila. La macro que produce es Python normal y se ejecuta como cualquier otra, en tu emulador o en un dispositivo en la nube, sin el agente de por medio.

## La suscripción

Todas las páginas de la app, salvo el inicio de sesión y **Suscripción**, necesitan un derecho de acceso activo: la prueba gratuita o un plan de pago. Un plan se dimensiona por dispositivos, es decir, cuántos de tus propios emuladores o móviles pueden ejecutarse a la vez. Los dispositivos en la nube son un complemento con sus propios créditos mensuales, y puedes recargar créditos adicionales para sesiones del agente. Cancelar mantiene el acceso hasta el final del periodo pagado. La página [Facturación](/docs/billing) explica el funcionamiento; las cifras están en la [página de precios](/pricing).

## Adónde ir ahora

Configura un dispositivo en la página [Dispositivos](/docs/devices), recorta tu primera plantilla en [Asset Lab](/docs/asset-lab) o lee la [introducción al SDK](/docs/sdk) si prefieres empezar por el código.
