comfyUi使用API作图 本文共有6353个字,关键词: 有此时候,我们不能打开comfyUI的8188端口,那可以使用下面的命令来进行作图, comfyui的接口格式为 ``` curl -X POST http://127.0.0.1:8188/prompt \ -H "Content-Type: application/json" \ -d '{"prompt": {……}}' ``` 所以,我们创建一个脚本,比如命名成为get.sh 然后导出工作流文件(API),则可以进行作图 文件内容如下 ``` #创建随机字符 #CLIENT_ID=$(openssl rand -hex 16) ``` ``` #!/bin/bash # 检查是否安装了 nc check_nc_installed() { if ! command -v nc &> /dev/null; then echo "nc 未安装,正在安装..." sudo apt update && sudo apt install -y netcat if ! command -v nc &> /dev/null; then echo "nc 安装失败,请手动检查。" exit 1 else echo "nc 安装成功。" fi fi } # 检查是否安装了 curl check_curl_installed() { if ! command -v curl &> /dev/null; then echo "curl 未安装,正在安装..." sudo apt update && sudo apt install -y curl if ! command -v curl &> /dev/null; then echo "curl 安装失败,请手动检查。" exit 1 else echo "curl 安装成功。" fi fi } # 配置文件路径 CONFIG_FILE="comfyui_config.txt" # 检查配置文件是否存在 if [ -f "$CONFIG_FILE" ]; then # 配置文件存在,读取 ComfyUIPath 和 unet_name ComfyUIPath=$(grep "^ComfyUIPath=" "$CONFIG_FILE" | cut -d '=' -f2) if [ -z "$ComfyUIPath" ]; then # 如果配置文件中没有 ComfyUIPath,提示用户输入 read -p "请输入 ComfyUI 根目录路径(例如:/path/to/comfyui): " ComfyUIPath # 保存路径到配置文件 echo "ComfyUIPath=$ComfyUIPath" >> "$CONFIG_FILE" else echo "已从配置文件中读取 ComfyUI 根目录:$ComfyUIPath" fi # 检查配置文件中是否有 unet_name unet_name_from_config=$(grep "^unet_name=" "$CONFIG_FILE" | cut -d '=' -f2) if [ -n "$unet_name_from_config" ]; then echo "已从配置文件中读取 unet_name:$unet_name_from_config" DEFAULT_UNET_NAME=$unet_name_from_config fi else # 配置文件不存在,提示用户输入 read -p "请输入 ComfyUI 根目录路径(例如:/path/to/comfyui): " ComfyUIPath # 创建配置文件并保存路径 echo "ComfyUIPath=$ComfyUIPath" > "$CONFIG_FILE" fi # 检查是否传入了 JSON 文件参数 if [ -z "$1" ]; then echo "用法:$0 [替换字符串]" exit 1 fi # 检查 8188 端口是否已经打开 check_port() { if nc -z 127.0.0.1 8188 &> /dev/null; then echo "端口 8188 已经打开。" return 0 # 端口已打开 else echo "端口 8188 未打开。" return 1 # 端口未打开 fi } # 询问用户是否启动服务 ask_to_start() { read -p "是否启动服务?(y/n): " choice if [[ $choice == "y" || $choice == "Y" ]]; then echo "正在启动服务..." "$ComfyUIPath/venv/bin/python" "$ComfyUIPath/main.py" & # 等待端口打开 while ! check_port; do echo "等待端口 8188 打开..." sleep 2 done echo "服务已启动,端口 8188 已打开。" else echo "用户选择不启动服务。退出。" exit 0 fi } # 主逻辑 check_nc_installed # 确保 nc 已安装 check_curl_installed # 确保 curl 已安装 # 主逻辑 if ! check_port; then ask_to_start fi # 获取 JSON 文件路径 JSON_FILE=$1 # 检查 JSON 文件是否存在 if [ ! -f "$JSON_FILE" ]; then echo "错误:未找到 JSON 文件 $JSON_FILE。" exit 1 fi # 读取 JSON 文件内容 WORKFLOW=$(cat "$JSON_FILE") # 如果配置文件中没有 unet_name,则从 JSON 文件中提取默认的 unet_name 值 if [ -z "$DEFAULT_UNET_NAME" ]; then DEFAULT_UNET_NAME=$(echo "$WORKFLOW" | grep -oP '"unet_name": "\K[^"]+') if [ -z "$DEFAULT_UNET_NAME" ]; then echo "错误:JSON 文件中未找到 'unet_name' 字段。" exit 1 fi echo "从 JSON 文件中读取到默认的 unet_name:$DEFAULT_UNET_NAME" # 保存到配置文件 echo "unet_name=$DEFAULT_UNET_NAME" >> "$CONFIG_FILE" fi # 列出 ComfyUIPath/models/unet 目录中的所有文件 UNET_MODES_DIR="$ComfyUIPath/models/unet" if [ -d "$UNET_MODES_DIR" ]; then echo "可用的 unet 模型文件:" # 获取文件列表并添加序号,处理文件名中的空格 mapfile -t files < <(ls -1 "$UNET_MODES_DIR") for i in "${!files[@]}"; do echo "$((i + 1)): ${files[$i]}" done else echo "警告:目录 $UNET_MODES_DIR 不存在。" fi # 提示用户选择 unet_name read -p "请选择一个 unet_name(输入序号,或直接回车使用默认值 '$DEFAULT_UNET_NAME'): " USER_INPUT if [ -z "$USER_INPUT" ]; then echo "正在使用默认的 'unet_name': $DEFAULT_UNET_NAME" else # 用户输入了序号,检查是否有效 if [[ "$USER_INPUT" =~ ^[0-9]+$ ]] && [ "$USER_INPUT" -ge 1 ] && [ "$USER_INPUT" -le "${#files[@]}" ]; then selected_file=${files[$((USER_INPUT - 1))]} echo "您选择了:$selected_file" # 更新 WORKFLOW 中的 unet_name WORKFLOW=$(echo "$WORKFLOW" | sed -E "s/(\"unet_name\": \")$DEFAULT_UNET_NAME\"/\1$selected_file\"/") # 更新配置文件中的 unet_name sed -i "/^unet_name=/c\unet_name=$selected_file" "$CONFIG_FILE" else echo "输入无效。正在使用默认的 'unet_name': $DEFAULT_UNET_NAME" fi fi # 需要固定一个 client_id CLIENT_ID='904cb55c2f2c441187ee4578a80005d9' # 检查 WORKFLOW 中是否包含连续的 3 个或以上 # 号 if [[ "$WORKFLOW" =~ [^#]*###+[^#]* ]]; then # 提示用户输入替换字符串 while true; do read -p "请输入提示词: " USER_REPLACEMENT_STRING if [ -n "$USER_REPLACEMENT_STRING" ]; then # 检查用户输入是否以单引号开头和结尾 if [[ ! "$USER_REPLACEMENT_STRING" =~ ^'.*'$ ]]; then USER_REPLACEMENT_STRING="'$USER_REPLACEMENT_STRING'" fi # echo "正在将连续的 '#' 符号替换为 '$USER_REPLACEMENT_STRING'..." WORKFLOW=$(echo "$WORKFLOW" | sed "s/###\+#/$USER_REPLACEMENT_STRING/g") break else echo "您必须输入一个非空的提示词。" fi done fi # 提示用户输入生图数量 read -p "请输入生图数量(直接回车默认为 1): " IMAGE_COUNT if [ -z "$IMAGE_COUNT" ]; then IMAGE_COUNT=1 elif ! [[ "$IMAGE_COUNT" =~ ^[0-9]+$ ]]; then echo "输入无效,必须是数字。默认使用 1。" IMAGE_COUNT=1 fi # 使用 curl 发送请求到 ComfyUI 的 API 接口 for ((i = 1; i <= IMAGE_COUNT; i++)); do # 生成至少 12 位且不超过 15 位的随机数字 RANDOM_LENGTH=$(( (RANDOM % 4) + 12 )) # 随机长度在 12 到 15 之间 RANDOM_NUMBER=$(openssl rand -hex $((RANDOM_LENGTH / 2)) | tr -d '[:alpha:]' | tr -d '[:punct:]' | tr -d '[:space:]') RANDOM_NUMBER=${RANDOM_NUMBER:0:$RANDOM_LENGTH} # 确保随机数至少有 12 位 while [ ${#RANDOM_NUMBER} -lt 12 ]; do RANDOM_NUMBER="${RANDOM_NUMBER}$(openssl rand -hex 1 | tr -d '[:alpha:]' | tr -d '[:punct:]' | tr -d '[:space:]')" RANDOM_NUMBER=${RANDOM_NUMBER:0:12} done # 替换 WORKFLOW 中的大于等于 10 位的数字为随机数字 WORKFLOW=$(echo "$WORKFLOW" | sed -E 's/[0-9]{10,}/'"$RANDOM_NUMBER"'/') echo "正在发送第 $i 个请求,使用种子: $RANDOM_NUMBER..." curl --noproxy "*" -X POST http://127.0.0.1:8188/prompt \ -H "Content-Type: application/json" \ -d "{\"prompt\": $WORKFLOW, \"client_id\": \"$CLIENT_ID\"}" if [ $i -lt $IMAGE_COUNT ]; then echo "等待 1 秒后发送下一个请求..." sleep 1 fi done echo "所有请求已完成。" ``` 「一键投喂 软糖/蛋糕/布丁/牛奶/冰阔乐!」 赞赏 × 梦白沙 (๑>ڡ<)☆谢谢老板~ 1元 2元 5元 10元 50元 任意金额 2元 使用微信扫描二维码完成支付 版权声明:本文为作者原创,如需转载须联系作者本人同意,未经作者本人同意不得擅自转载。 随手发现 2025-02-08 评论 58 次浏览