LoOper User Guide

Looper is a desktop-native automation platform for recording, building, and running reliable workflows that can see the screen, reason with local AI, and act through mouse/keyboard control.

LoOper main application window showing the node graph editor with Chains Library on the left, Sequence List on the right, and a visual workflow in the center canvas

When you launch Looper, you will see the main window with:

  • Central Canvas: The node graph editor where you build automation workflows
  • Top Menu Bar: File operations, settings, and tools
  • Right Toolbar: Node palette with available node types
  • Node Graph: Visual representation of your automation workflow

Project Structure

Looper organizes your work into:

Folder Purpose
sequences/ Stored recorded sequences (JSON + screenshots)
chains/ Chain workflow files that combine sequences and nodes

Recording Sequences

Recording is the process of capturing your mouse clicks, keyboard input, and scrolling into a reusable sequence file.

How to Record

  1. Click Record in the toolbar or use the menu option
  2. Perform your desired actions on screen:
    • Clicks (left, right, middle)
    • Keyboard typing
    • Scrolling
    • Drag operations
  3. Press ESC or click Stop to end recording
  4. Your sequence is saved automatically to the sequences/ folder
LoOper toolbar showing the Record button highlighted in purple, along with Load, Save, Run, Delete, Copy, and Paste buttons

Recording Settings

Setting Description
Sequence Name Name for the recorded sequence file
Screenshots Directory Where click screenshots are stored
App Context Automatically captures which application was active

What Gets Recorded

Action Type Description
click Mouse clicks with coordinates and screenshots
type_string Typed text (batched for efficiency)
keystroke Special keys (Enter, Tab, etc.)
clipboard Copy, Paste, Cut, Select All, Undo, Redo
scroll Scroll bursts (multiple scrolls grouped into one action)
drag_drop Mouse drag operations
move_to Mouse movement (when holding Right-Ctrl)
absolute_click Mouse left click at specific coordinates (when holding Right-Shift)

Smart Recording Features

  • Scroll Burst Grouping: Multiple rapid scroll events are grouped into a single scroll action
  • Text Buffering: Typed characters are batched into a single type_string action
  • Modifier Shortcuts: Common shortcuts like Ctrl+C/V/X/A are recognized and recorded as clipboard operations
  • App Context: Records which application window was active for each action
  • Native Screenshot Capture: Looper captures screenshots automatically around click coordinates for visual matching during playback

Screenshot Capture

During recording, Looper automatically captures small screenshots (70x70 pixels by default) around each click location. These screenshots are stored in sequences/screenshots/ and are used during playback for template matching to find the correct UI element.

Screenshot capture example 1: UI element click region Screenshot capture example 2: Folder icon click region Screenshot capture example 3: Dark UI element click region Screenshot capture example 4: Brave browser icon click region Screenshot capture example 5: Chevron up icon click region Screenshot capture example 6: Menu icon click region

Playback and Execution

All nodes in Looper (not just sequences) are executed through the Workflow Interpreter, which handles:

  • Sequential execution of nodes in dependency order
  • Conditional branching based on true/false outputs
  • Error handling and retries
  • Variable passing between nodes

How Playback Works

  1. Start: The workflow interpreter loads the chain file
  2. Node Execution: Each node is executed in order based on connections
  3. Branching: Conditional nodes route execution to different branches
  4. Completion: Chain finishes or ESC cancels execution

Visual Matching

Looper uses template matching to find UI elements reliably:

Method Description
Template Match Finds the screenshot image on screen
Multi-Scale Handles size variations of UI elements
Region Search Limits search to a specific screen area
OCR Trigger Waits for text to appear using optical character recognition

Stopping Execution

Press ESC at any time to cancel execution safely.

Schedules

Schedules allow you to automatically run your automation chains at specific times.

Schedule Types

Type Description
Once Run a single time at a specified date/time
Daily Run every day at a specified time
Weekly Run on specific days of the week
Interval Run every N minutes/hours

Creating a Schedule

  1. Open Scheduler Manager from the menu
  2. Click Add Schedule
  3. Configure:
    • Name: Descriptive name for the schedule
    • Type: Once, Daily, Weekly, or Interval
    • When: The time/date specification
    • Chain: Select which chain to run
  4. Enable/disable the schedule using the toggle
LoOper Scheduler Manager dialog showing the schedule list with columns for Enabled, Name, Type, When, and Next Run, plus Add Schedule, Refresh, and Close buttons

Schedule Management

Feature Description
Enable/Disable Toggle schedules on/off without deleting
Run Now Manually trigger a schedule immediately
Edit Modify schedule parameters
Delete Remove a schedule permanently

Persistence

Schedules are saved to schedules.json and persist across application restarts. The scheduler runs as a background service that checks every 10 seconds for due schedules.

Node Types

Nodes are the building blocks of automation workflows. Each node type performs a specific function.

Node Colors Quick Reference

Node Type Color
Sequence Node Dark Grey (#121212)
Conditional Node Purple (#7B61FF)
LLM Node Orange (#FF6B35)
TTS Node Cyan (#00CED1)
Chain Import Node Green (#32CD32)
Form Filler Node Plum (#DDA0DD)
Code Node Yellow (#F1C40F)

Sequence Node

Purpose: Executes a recorded sequence file.

Property Description
sequence_file Path to the sequence JSON file
loop_count Number of times to repeat the sequence
extra_delay Additional delay between iterations (seconds)
use_app_opened Whether to focus the recorded app before playing

Color: Dark Grey
Ports: 1 input, 1 output (multi-output capable)

LoOper Sequence Node showing sequence1.json with input/output ports, record button, play button, and menu icon on a dark grid canvas

Conditional Node

Purpose: Waits for conditions or creates branching logic based on screen state or code evaluation.

Condition Types

Condition Type Description
Code Condition Execute Python code that returns True/False
Presence Trigger Wait until an image appears on screen (True output), or continue immediately if not found (False output)
OCR Trigger Wait until specific text is detected
Layout Match Wait for image at a specific screen region with exact position
Wait Time Wait for a specified duration

Note: Absence behavior is handled by connecting nodes to the False output of a Presence Trigger, allowing you to branch based on whether an image is found or not.

Conditional Loop Types

Looper supports conditional loops that execute a sequence repeatedly based on conditions. Multiple conditionals can be stacked to create complex logic:

Loop Type Description
while_present Loop while an image/condition is present
until_present Loop until an image/condition appears

Note: For "while absent" or "until absent" logic, stack conditionals by connecting the False output of a Presence Trigger to another conditional node.

Color: Purple (#7B61FF)
Ports: 1 input, 2 outputs (True/False for conditionals)

LoOper Conditional Node in purple showing input port, True output (green), False output (red), play button, and menu icon

Creating Image Triggers

Looper provides a built-in screenshot capture tool for creating image-based triggers:

  1. Click Capture... in the trigger dialog
  2. Looper minimizes the window and freezes the screen
  3. Draw a rectangle around the target area
  4. The screenshot is automatically saved and path inserted
LoOper Trigger Configuration dialog showing Image Path field, Capture button, Browse button, and Confidence slider set to 0.80

LLM Node

Purpose: Integrates local AI (Ollama) for data ingestion, manipulation, dynamic text generation, and analysis. The LLM node is not just for decision making - it supports multiple use cases.

Input Sources

Source Description
None Direct prompt (no input processing)
OCR Extract text from screen using optical character recognition
Previous Node Use output from the previous node in the chain
Clipboard Use current clipboard content

Model Configuration

Property Description
model Ollama model to use (e.g., llama3.2:latest)
temperature Response randomness (0.0-2.0)
max_tokens Maximum response length
api_url Ollama API endpoint (defaults to localhost:11434)

Quick Templates

LLM nodes include templates for common tasks:

Template Description
Information Extraction OCR + LLM for data extraction
Form Filling Vision + LLM for form completion
Data Processing Chain Transform and process data
Text Analysis Analyze and categorize text
Content Summarization Summarize content
Tool Selection LLM-powered decision making
Python Code Generation Generate Python code

Color: Orange (#FF6B35)
Ports: 1 input, 1 output

LoOper LLM Node in orange showing multiple input ports, output ports, play button, and menu icon with the node palette visible on the right

TTS Node

Purpose: Speaks text aloud using text-to-speech.

Property Description
text Text to speak
language Language code (en, es, fr, de, etc.)

Color: Cyan (#00CED1)
Ports: 1 input, 1 output

LoOper TTS Node in cyan showing input port, output port, play button, and menu icon on a dark grid canvas

Chain Import Node

Purpose: Embeds another chain as a subgraph, enabling workflow composition and reuse.

Property Description
chain_file Path to the chain JSON to import
import_mode full, sequences_only, or nodes_only
prefix Prefix for imported node names
loop_count Times to execute the imported chain
extra_delay Delay between loop iterations

Color: Green (#32CD32)
Ports: 1 input, 1 output

LoOper Chain Import Node in green with yellow border showing input port, output port, import icon, play button, and menu icon

Code Node

Purpose: Executes custom Python code during workflow execution.

Property Description
code Python code to execute
source_type "inline" or "file"
file_path Path to Python file (if file source)
timeout Maximum execution time (seconds)
output_variable Variable name for result

Available Variables:

  • input_data - Data from previous node
  • args - Additional arguments
  • result - Assign your output to this variable

Color: Yellow (#F1C40F)
Ports: 1 input, 1 output

LoOper Code Node in yellow showing input port, output port, play button, and menu icon on a dark grid canvas

Recording Special Actions

Modifier Key Combinations

Action Recording Method Result
Ctrl+Click Hold Ctrl + Left Click Recorded as ctrl_click type
Shift+Click Hold Shift + Left Click Recorded as shift_click type
Absolute Click Hold Right-Shift + Left Click Recorded as absolute_click (ignores offsets)

Clipboard Operations

Shortcut Recorded As
Ctrl+C (Copy) clipboard with operation "c"
Ctrl+V (Paste) clipboard with operation "v"
Ctrl+X (Cut) clipboard with operation "x"
Ctrl+A (Select All) clipboard with operation "a"
Ctrl+Z (Undo) clipboard with operation "z"
Ctrl+Y (Redo) clipboard with operation "y"

Mouse Drag Recording

  1. Press and hold left mouse button at start position
  2. Drag to end position
  3. Release

Result: Recorded as drag_drop action with from and to coordinates.

Right-Ctrl Mouse Movement

Holding Right-Ctrl while moving the mouse records a move_to action. This is useful for positioning the cursor without performing a click.

Node Dialogs Reference

Each node type has a configuration dialog accessible via double-click or context menu.

Sequence Node Dialog

Sequence Properties dialog showing Loop Count, Extra Delay fields, and Use recorded app context checkbox
Field Effect on Behavior
Loop Count Number of times the sequence repeats. Higher values = more repetitions.
Extra Delay Wait time (seconds) added between each loop iteration. Use for rate limiting or waiting for UI updates.
Use App Opened When enabled, the player will attempt to focus and activate the application that was active when the sequence was recorded before playback begins.

Conditional Node Dialog

Advanced Conditions dialog showing Code Condition section with Enable toggle, code editor, Timeout field, and Presence Triggers section

Code Condition Section

Field Effect on Behavior
Enable Toggle code condition evaluation
Code Python code that must return True/False. Access input via input_data variable.
Timeout (s) Maximum time allowed for code execution

Presence Triggers Section

Field Effect on Behavior
Add Presence Trigger Add an image that must be visible for the condition to pass
Confidence Match threshold (0.1-1.0, higher = stricter)
Timeout Maximum wait time; if 0, waits indefinitely

LLM Node Dialog

LLM Node Configuration dialog showing Basic tab with Model selection, API URL, Temperature, Max Tokens, Output Variable, and Quick Templates sections

Basic Tab

Field Effect on Behavior
Model Ollama model for inference
Temperature Response randomness (0=deterministic, 2=random)
Max Tokens Maximum response length
Output Variable Variable name to store response

Chain Import Dialog

Chain Import Configuration dialog showing Import Mode, Node Prefix, Loop Count, Extra Delay fields, and Sandbox Execution toggles
Field Effect on Behavior
Chain File Path to the chain JSON to embed
Import Mode full = all nodes, sequences_only = only sequence nodes, nodes_only = only logic nodes
Node Prefix Added to all imported node names to prevent conflicts
Run in Sandbox Execute inside a private RDP session

Code Node Dialog

Code Node Configuration dialog showing AI Generator, Code Editor, and Settings tabs with Python code editor
Tab Field Effect on Behavior
AI Generator Model Ollama model for code generation
Prompt Description of desired code functionality
Editor Code Python source code to execute
Settings Source Type "inline" for typed code, "file" for external .py file
Timeout Maximum execution time in seconds

Sandboxing

Sandboxing in Looper uses RDPWrap to give the automation agent its own private Windows session, allowing background task execution without interfering with the user's active desktop.

How RDP Sandbox Works

  1. RDPWrap Installation: Enables multiple concurrent RDP sessions on Windows
  2. Agent User: Creates a dedicated user account (LooperAgent) for the agent
  3. Private Session: The agent runs in a separate RDP session that doesn't affect the user's active desktop
  4. Communication: Looper communicates with the agent via HTTP API

Architecture

graph LR
    subgraph UserDesktop["User's Desktop"]
        LooperGUI["Looper GUI"]
        AgentBridge["Agent Bridge"]
        HTTPAPI["HTTP API localhost"]
    end

    subgraph PrivateSession["LooperAgent Private RDP Session"]
        AgentHandler["Agent Handler"]
        ScreenCapture["Screen Capture"]
        AppUnderTest["Application Under Test"]
    end

    LooperGUI --> AgentBridge
    AgentBridge --> HTTPAPI
    HTTPAPI --> AgentBridge
    AgentBridge --> LooperGUI

    HTTPAPI -. RDP Session Communication .-> AgentHandler

    AgentHandler --> ScreenCapture
    ScreenCapture --> AgentHandler
    ScreenCapture --> AppUnderTest
    AppUnderTest --> ScreenCapture
          

Agent Actions

The sandbox agent supports these actions via HTTP POST:

Action Parameters Description
click x, y, button Move to (x,y) and click
type text Type text string
hotkey keys[] Press key combination
screenshot (none) Capture and return screen as base64 PNG
scroll amount Scroll by amount (negative = down)

Sandbox vs Direct Execution

Aspect Direct Execution RDP Sandbox
Isolation None - runs on host Full isolation in separate RDP session
User Interference Can interrupt user's work Agent works independently
Speed Faster Slower (session overhead)
Use Case Trusted, quick tasks Background agents, long-running tasks

Debugging Sandbox Issues

If sandbox fails to start:

  1. Ensure RDPWrap is installed: Check C:\Users\%USERNAME%\AppData\Local\LoOper\RDPWrap or reinstall LoOper
  2. Check that LooperAgent user exists
  3. Verify the user is in Remote Desktop Users and Administrators groups
  4. Check agent_info.json for connection details

Troubleshooting

Issue Solution
Sequence plays wrong app Enable "Use App Opened" or manually focus target app
Click misses target Adjust confidence threshold lower (0.7-0.8)
OCR not finding text Increase confidence threshold, check language setting
Scheduler not running Check if Looper is running, verify schedules.json exists
Sandbox fails Ensure RDPWrap is installed at C:\Users\%USERNAME%\AppData\Local\LoOper\RDPWrap or reinstall LoOper
Conditional loop not ending Check max_iterations limit and loop condition

Keyboard Shortcuts

Shortcut Action
Ctrl+C Copy selected nodes
Ctrl+V Paste copied nodes
ESC Stop recording / Cancel execution

Documentation version 1.5.0 - Last updated for Looper Release 1.5.0