Adaptive waiting and computer vision execution engine — replaces time.sleep() with system-aware, vision-driven automation.
Project description
🧠 Nano-Wait — Adaptive & Visual Execution Engine
Nano-Wait é um motor de execução adaptativo para Python que substitui delays cegos (time.sleep) por decisões baseadas em contexto do sistema e estado visual da tela.
Ele combina:
-
⏱ Espera adaptativa (CPU, memória, rede)
-
👁️ Visão computacional (OCR + ícones)
-
🧠 Memória visual determinística (sem ML pesado)
-
🖥️ API Python + CLI
🚀 Quick Start (o essencial)
from nano_wait import wait
wait(2.0)
wait(2.0, speed="fast")
wait(2.0, smart=True)
Com rede:
wait(3.0, wifi="MyNetwork", smart=True)
Com visão:
wait(until="logged_in", timeout=15)
wait(icon="ok.png", timeout=10)
⚠️ Instalação & Dependências (LEIA ISTO)
Nano-Wait não é uma biblioteca leve por padrão. Ela integra sistema operacional, visão computacional e automação gráfica.
📦 Dependências Python
Instaladas via pip:
pip install nano-wait
Incluem:
-
psutil
-
opencv-python
-
pytesseract
-
pynput
-
pyautogui
-
numpy
🧠 Dependência EXTERNA OBRIGATÓRIA (VisionMode)
👉 O Tesseract OCR precisa estar instalado no sistema operacional.
macOS
brew install tesseract
Ubuntu / Debian
sudo apt install tesseract-ocr
Windows
-
Baixar o instalador oficial do Tesseract
-
Adicionar o caminho ao PATH
⚠️ Sem o Tesseract, qualquer uso de OCR no VisionMode falhará imediatamente.
🧠 Mental Model — Como o Nano-Wait funciona
Nano-Wait executa continuamente:
observe → reason → wait → observe
Ele é composto por dois motores cooperativos:
⏱ Adaptive Waiting Engine — quando avançar?
-
CPU
-
Memória
-
Wi-Fi (se disponível)
-
Speed / Smart Mode
👁️ Vision Engine — o que está acontecendo?
-
OCR (texto)
-
Ícones (template matching)
-
Memória visual persistente
👉 A execução nunca avança cegamente.
⏱️ Adaptive Waiting Engine
📊 PC Score (estado da máquina)
cpu_score = 10 - cpu_usage / 10
mem_score = 10 - mem_usage / 10
pc_score = (cpu_score + mem_score) / 2
-
Intervalo: 0.0 → 10.0
-
Suave
-
Sem thresholds rígidos
🌐 Wi-Fi Awareness (opcional)
| Sistema | Implementação |
|---|---|
| Windows | pywifi |
| macOS | airport |
| Linux | nmcli |
🧯 Casos de borda (importante)
-
Se o pywifi falhar no Windows
-
Se o comando do sistema não responder
-
Se não houver Wi-Fi ativo
👉 Nano-Wait assume automaticamente um valor neutro:
wifi_score = 5.0
Isso garante:
-
Nenhuma exceção
-
Nenhum comportamento extremo
-
Execução previsível
🧠 Smart Context Mode
wait(2.0, smart=True)
Nesse modo, o Nano-Wait calcula a agressividade automaticamente:
risk = (pc_score + wifi_score) / 2
speed = clamp(risk, 0.5 → 5.0)
Ideal para:
-
Ambientes desconhecidos
-
Máquinas diferentes
-
Scripts distribuídos
⚡ Speed Presets (manual)
| Speed | Valor interno |
|---|---|
| slow | 0.8 |
| normal | 1.5 |
| fast | 3.0 |
| ultra | 6.0 |
⚠️ Speed não define tempo fixo, apenas limite de agressividade.
⏱️ Cálculo Final de Espera
wait_time = clamp(t / factor, 0.05 → t)
Garantias:
-
Nunca < 50 ms
-
Nunca > tempo base
-
Estável mesmo sob carga
👁️ Vision Engine
from nano_wait.vision import VisionMode
vision = VisionMode(mode="observe")
state = vision.observe()
Modos conceituais
-
observe → detectar estados
-
learn → ensinar padrões
-
decision → agir conforme estado
📚 Learn Mode — Memória Visual (sem ML)
vision.learn("Welcome", state="home")
vision.learn_icon("ok.png", state="confirmed")
Os padrões são salvos em:
~/.nano-wait/vision_patterns.json
✔️ Determinístico ✔️ Versionado ✔️ Reproduzível ✔️ Explicável
🔍 Retorno da função wait (TIPOS)
A função wait não retorna sempre a mesma coisa:
result = wait(...)
Possíveis retornos
⏱️ Espera por tempo
float # tempo efetivamente aguardado
Exemplo:
elapsed = wait(2.0)
👁️ Espera visual
VisualState
Exemplo:
state = wait(until="logged_in")
if state.detected:
print(state.name, state.confidence)
👉 Sempre valide o tipo do retorno em automações críticas.
🖥️ CLI — Uso via Terminal
📦 Instalação correta da CLI
Para que o comando funcione:
nano-wait 2 --smart
O pacote deve expor um entry_point no setup.py ou pyproject.toml:
entry_points={
"console_scripts": [
"nano-wait=nano_wait.cli:main"
]
}
Sem isso, o comando não existirá no terminal, apenas a API Python.
Exemplos de uso
nano-wait 2 --smart --verbose
nano-wait 3 --wifi MyNetwork --speed fast
Flags:
-
--smart
-
--wifi
-
--speed
-
--verbose
-
--log
🔟 O que pode melhorar (o caminho para o 10)
Documentação honesta é o que separa libs boas de libs grandes.
Próximos upgrades naturais:
-
Instalação modular (nano-wait[vision])
-
Lazy import do VisionMode
-
Typed overloads para wait
-
Exceções semânticas (VisionTimeout, ContextUnavailable)
-
Benchmarks oficiais vs time.sleep
-
Modo headless/documentado
📌 Em uma frase
Nano-Wait não espera tempo — ele espera condições.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file nano_wait-3.3.0.tar.gz.
File metadata
- Download URL: nano_wait-3.3.0.tar.gz
- Upload date:
- Size: 15.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
aead4a2578aa2f92c5878eeaa7d3d0811882aaad3f9651c883cf28be02105cb0
|
|
| MD5 |
cfe07a65661db711e60e713ec01a0714
|
|
| BLAKE2b-256 |
d50478906a0c61b35a5ada5720e0d52ffdb83d4cee24b2c6bd7a9ded7028423b
|
File details
Details for the file nano_wait-3.3.0-py3-none-any.whl.
File metadata
- Download URL: nano_wait-3.3.0-py3-none-any.whl
- Upload date:
- Size: 12.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fbba9c73cfbc27df6b3d27dff2dc4b49c9e078ef6a1476c219b71fdf1139ac6d
|
|
| MD5 |
e31fd19cc117b6ea044ed6ca2a50d88e
|
|
| BLAKE2b-256 |
698a145f7ec4544924682b73f2d8dc01e6d6392e6e9a6ea16cbe9a89c3a2de83
|