# ui-autoflow **Repository Path**: staok/ui-autoflow ## Basic Information - **Project Name**: ui-autoflow - **Description**: 可视化 UI 自动化编排工具。录制键鼠、执行脚本、条件判断、循环、延时,按 block 编排并运行。 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-07-14 - **Last Updated**: 2026-07-14 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # ui-autoflow [English](README_EN.md) | 中文 可视化 UI 自动化编排工具。录制键鼠、执行脚本、条件判断、循环、延时,按 block 编排并运行。 | Demo 英文 | Demo 中文 | 逻辑嵌套 | | ----------------------------------------- | ----------------------------------------------------- | ----------------------------------- | | demo | demo_zh-cn | 1 | *p.s AI (Opus 4.8 High) 生成的工具,迭代多轮已经成版,有问题欢迎 Issue 或 PR。* *p.ss 目前只支持 Win。* ## 功能 - **键鼠录制/回放**:默认全局热键 ctrl+shift+f11 开始/停止、ctrl+shift+f12 暂停(可在设置中重设为其它组合键),录制存为 JSON。软件启动后热键即生效,播放执行期间暂停录制热键监听 - **命令行脚本**:执行任意命令行,约定 stdout 返回 `true`/`false` - **宏回放**:选择已录制的 JSON 文件回放;未指定文件或文件不存在时停止整个流程 - **延时**:单位 ms/s/min/h/d,数值 1–999,支持暂停/停止 - **条件判断(if 语义)**:依据上一脚本输出,单执行体。仅可在"执行脚本"block 后添加 - **循环(while 语义)**:脚本检查(返回 false 退出)或固定次数,单执行体可嵌套 - **项目管理**:创建/保存/加载工程(名称限制 120 字节);启动时不打开任何工程,画布提示"请新建或打开工程";新建名称与已有工程重名时自动加序号避免覆盖 - **未保存提示**:有未保存改动时标题的工程名后显示 `*`;此时新建/打开/关闭会提示是否放弃改动 - **运行控制**:开始/停止/暂停,运行时高亮当前 block,画布只读不可编辑 - **播放热键**:默认 ctrl+shift+f1 播放/停止工程、ctrl+shift+f2 暂停/继续播放(全局,可在设置中重设) - **block 编号**:每个 block 按流程顺序编号,画布与日志均带 `#序号`,便于对照跟踪 - **日志**:保存日志到文件(`logs/LOG_*.txt`)、清空日志 - **录制浮窗**:录制开始/暂停/停止时置顶提示,数秒后自动隐藏;固定宽度、文字过长自动换行,可拖动 - **画布平移**:在画布空白处按住鼠标左键拖动可平移视图 - **帮助**:右上角 `?` 按钮弹出帮助窗口,简要说明操作流程与当前快捷键 - **设置面板**:自定义存放路径(工程/录制/日志)、四个热键(录制/播放,支持组合键)、回放倍速、语言、皮肤 - **多语言**:中文 / English 切换(重启生效);画布上的 block 名称随语言本地化,与 `+` 菜单一致 - **多皮肤**:Light / Dark / Ocean / Sunset(默认 Dark),在设置面板切换,即时生效并记忆;窗口标题栏与所有弹窗随皮肤上色(Windows 深色标题栏) ## 环境要求 - Python 3.10+ - Windows / macOS / Linux(Windows 实测) - 依赖:`pynput` ## 从源码启动 安装 ```bash cd ui-autoflow pip install -r requirements.txt ``` 启动 ```bash python src/run.py ``` ## 打包 Windows 可执行文件 一键打包(双击 `build.bat`,或运行 `python build.py`): ```bash python build.py ``` 基于 PyInstaller 生成单文件程序;中间产物放在项目内的 `build/`,最后仅把可执行文件复制到 `release/ui-autoflow.exe`,**不会清空 `release/` 目录**——exe 运行时在其所在目录生成的 `projects`/`recordings`/`logs`/`settings.json` 都会保留。未安装 PyInstaller 时脚本会自动安装。 ## 使用流程 ### 1. 创建工程 点击「新建」→ 输入工程名(最多 120 字节)→ 确定。工程保存为 `projects/<名称>.uiaf.json`。若名称与已有工程重名,会自动追加 ` (序号)` 并提示,避免覆盖。启动软件时默认不打开任何工程,需先新建或打开。 ### 2. 编排流程 画布默认有一个「开始」节点,其下有 `+` 号。点击 `+` 选择添加 block: | Block(`+` 菜单项) | 说明 | | ------------------- | -------------------------------------------------------------- | | 宏回放 | 选择已录制的 json 文件回放 | | 执行脚本 | 输入命令行,stdout 约定`true`/`false` | | 条件 | 仅在「执行脚本」后可选;选择 is_true/is_false,体内添加子块 | | 循环 | 脚本检查模式(返回 false 退出)或次数模式,体内添加子块 | | 延时 | 数值 + 单位(ms/s/min/h/d) | 点击 block 可编辑或删除。条件/循环 的执行体内通过 `+` 添加嵌套子块。 ### 3. 录制键鼠 按 **ctrl+shift+f11** 开始/停止录制,**ctrl+shift+f12** 暂停/恢复(热键可在设置中重设)。 - 暂停时间不计入回放时间轴 - 录制文件存为 `recordings/REC_YYYYmmdd_HHMMSS.json` - 录制浮窗在状态切换时提示,数秒后自动隐藏,可拖动到任意位置 ### 4. 运行 点击「开始」或按 **ctrl+shift+f1** 按编排顺序执行: - **暂停 / ctrl+shift+f2**:当前 block 执行完后暂停(延时可在中途暂停) - **停止 / 再按 ctrl+shift+f1**:当前 block 执行完后停止整个流程 - 播放热键为全局热键,可在设置中重设 - 运行时画布只读,不可编辑 运行时画布高亮当前执行的 block;日志与画布均以 `#序号` 标注每个 block,便于对照。 ### 5. 日志 日志面板在底部,显示执行进度。点击「保存日志」保存到 `logs/LOG_YYYYmmdd_HHMMSS.txt`,点击「清空日志」清空。 ### 6. 设置 点击「设置」打开设置面板: - **存放路径**:工程 / 录制 / 日志目录,留空则默认为程序(源码或可执行文件)根目录 - **热键**:录制开始/停止、录制暂停/继续、播放/停止工程、暂停/继续播放;支持组合键(如 `f11`、`ctrl+f11`、`ctrl+shift+f1`);热键中的修饰键/功能键不会被录入宏 - **回放倍速**:宏回放速度(0.1–10x) - **语言**:中文 / English(切换后重启生效) - **皮肤**:Light / Dark / Ocean / Sunset(默认 Dark) 设置保存到程序根目录的 `settings.json`。路径、热键、倍速、皮肤即时生效。 ## 脚本返回值约定 脚本 block 与循环/判断的检查脚本,通过 stdout 返回值: - stdout 去除首尾空白后为 `true`(不区分大小写)→ 真 - 为 `false` → 假 - 其它内容 → 视为无明确布尔值(判断块按假处理) 示例(Windows cmd): p.s 也可以自己写脚本(做一些事情、一些检查),就非常灵活了。 ```bat echo true ``` ## 条件判断语义(if) 仅可在「执行脚本」block 之后添加(主线或条件/循环的执行体内均可)。配置 is_true/is_false: - is_true:上一脚本返回 `true` → 执行体内子块;否则跳过 - is_false:上一脚本返回 `false` → 执行体内子块;否则跳过 等价 `if (条件) { 执行体 }`。执行体跑完后继续判断块后面的主线逻辑。 ## 循环语义(while) 两种退出模式: - **脚本检查**:每轮循环开始前执行检查命令,返回 `false` 退出,`true` 继续执行循环体。等价 `while(检查返回true) { 循环体 }`。 - **次数**:执行指定次数后退出。 循环体可嵌套任意 block。循环结束后继续循环块后面的主线逻辑。 ## 目录结构 ``` ui-autoflow/ ├── build.py 打包脚本(生成单文件可执行程序) ├── build.bat 一键打包(双击运行 build.py) ├── src/ 源代码 │ ├── run.py 启动入口 / 打包入口 │ ├── models.py 数据模型 │ ├── settings.py 设置读写(路径/热键/倍速/语言) │ ├── i18n.py 多语言 │ ├── skins.py 皮肤(颜色主题) │ ├── project_store.py 工程序列化 │ ├── recorder.py 键鼠录制(可配置组合热键,待机监听) │ ├── player.py 键鼠回放(支持倍速) │ ├── script_runner.py 脚本执行 │ ├── orchestrator.py 执行引擎 │ └── gui/ GUI 模块 │ ├── app.py 主窗口 │ ├── canvas.py 可视化画布(可拖动平移) │ ├── block_dialogs.py block 编辑对话框 │ ├── settings_dialog.py 设置面板 │ ├── help_dialog.py 帮助窗口 │ ├── recorder_overlay.py 录制浮窗(可拖动) │ ├── runner_panel.py 工具栏 │ └── project_manager.py 工程管理 ├── test/ 测试脚本 ├── projects/ 工程文件(.uiaf.json) ├── recordings/ 录制文件(REC_*.json) └── logs/ 日志文件(LOG_*.txt) ``` ## 待办 - T1 block 拖拽重排序 - T2 支持 Mac(包括从源码启动,包括一键生成打包生成可执行文件的脚本) ## 其它类似开源工具 有的功能比较单调。 * [github.com/taojy123/KeymouseGo](https://github.com/taojy123/KeymouseGo) * .etc