Implement click indicator with red circle display; update server run parameters

This commit is contained in:
Showdown76 2025-05-19 09:00:39 +02:00
parent 41f7d0e210
commit 66330bfc73
3 changed files with 31 additions and 2 deletions

View File

@ -1,6 +1,33 @@
import pyautogui import pyautogui
import threading
import time
import tkinter as tk
from objects.inputs import MouseInput, KeyboardInput, ButtonType from objects.inputs import MouseInput, KeyboardInput, ButtonType
def show_click_indicator(x: int, y: int, duration: float = 2.0, size: int = 50) -> None:
"""Display a red circle at (x, y) for the given duration."""
# Create a top-level window without decorations
root = tk.Tk()
root.overrideredirect(True)
root.attributes('-topmost', True)
# Semi-transparent window and disable to allow click-through
root.attributes('-alpha', 0.5)
try:
root.attributes('-disabled', True)
except Exception:
pass
# Position and size
half = size // 2
root.geometry(f"{size}x{size}+{x-half}+{y-half}")
# Draw circle on canvas
canvas = tk.Canvas(root, width=size, height=size, highlightthickness=0, bg='white')
canvas.pack()
canvas.create_oval(2, 2, size-2, size-2, outline='red', width=4)
root.update()
# Keep displayed for duration seconds
time.sleep(duration)
root.destroy()
def press_mouse(mouse_input: MouseInput) -> None: def press_mouse(mouse_input: MouseInput) -> None:
"""Presses mouse buttons at the given position.""" """Presses mouse buttons at the given position."""
x, y = mouse_input.x, mouse_input.y x, y = mouse_input.x, mouse_input.y
@ -13,6 +40,8 @@ def press_mouse(mouse_input: MouseInput) -> None:
pyautogui.click(x, y, button='right') pyautogui.click(x, y, button='right')
elif button == "middle": elif button == "middle":
pyautogui.click(x, y, button='middle') pyautogui.click(x, y, button='middle')
# Show red circle indicator at click position for 2 seconds
threading.Thread(target=show_click_indicator, args=(x, y), daemon=True).start()
def press_keyboard(keyboard_input: KeyboardInput) -> None: def press_keyboard(keyboard_input: KeyboardInput) -> None:
"""Types the given sequence of keys.""" """Types the given sequence of keys."""

View File

@ -12,7 +12,7 @@ def main():
model=os.getenv("OPENAI_MODEL", "gpt-4.1") model=os.getenv("OPENAI_MODEL", "gpt-4.1")
) )
server = webserver.web.WebServerApp(aip) server = webserver.web.WebServerApp(aip)
server.run() server.run(host="0.0.0.0", port=int(os.getenv("PORT", 5000)), debug=int(os.getenv("DEBUG", 0)) > 0)
if __name__ == "__main__": if __name__ == "__main__":
main() main()

View File

@ -2,7 +2,7 @@ from flask import Flask, request, jsonify
import os, ai.processor import os, ai.processor
from dotenv import load_dotenv from dotenv import load_dotenv
import io import io
from PIL import ImageGrab from PIL import ImageGrab # type: ignore
load_dotenv() load_dotenv()