# Copy to .env and fill values. Never commit .env # cp .env.example .env # 所有 WebUI 可编辑配置都使用 .env 覆盖 config/*.py 默认值。 # ---- WebUI 授权 ---- # WebUI 登录授权码;仅保存在 .env,避免出现在进程命令行中 WEBUI_AUTH_CODE="123456" # 可选:Session Cookie 签名密钥;留空时从固定授权码派生,修改授权码会使已有登录失效 WEBUI_SESSION_SECRET="123456" # ---- 功能开关 ---- # 启用 Codex OAuth: 注册成功后自动跑 Codex 授权(全新session+接码),落盘 codex-邮箱.json ENABLE_CODEX_AUTO="False" # ---- 注册方式 ---- # 注册驱动: protocol=纯协议;roxy=RoxyBrowser;cloak=CloakBrowser;browser_use=Browser Use Cloud+Playwright REGISTRATION_DRIVER="roxy" # ---- CloakBrowser ---- # Cloak无头: True=无头运行;False=显示浏览器窗口 CLOAK_HEADLESS="False" # Cloak人工行为: 启用 CloakBrowser humanize 鼠标/键盘/滚动行为 CLOAK_HUMANIZE="True" # Cloak按出口定位: 按当前出口 IP 自动匹配时区/语言/WebRTC IP;支持显式代理、系统代理/VPN CLOAK_GEOIP="True" # Cloak语言: 留空自动;日本可填 ja-JP,美国 en-US CLOAK_LOCALE="" # Cloak时区: 留空自动;日本可填 Asia/Tokyo,美国 America/Los_Angeles CLOAK_TIMEZONE="" # Cloak使用代理: 把本项目传入或代理池抽取的代理传给 CloakBrowser CLOAK_USE_PROXY="False" # Cloak License: Pro license;留空使用免费 binary CLOAK_LICENSE_KEY="" # Cloak指纹Seed: 留空每次随机;固定值可保持同一指纹 CLOAK_FINGERPRINT_SEED="" # Cloak用户目录: 留空使用临时上下文;填写路径则持久化 cookies/cache CLOAK_USER_DATA_DIR="" # Cloak超时: 页面和元素等待超时时间,秒 CLOAK_SELENIUM_TIMEOUT="90" # 保留Cloak浏览器: 调试时开启,任务结束后不自动关闭 CLOAK_KEEP_BROWSER_OPEN="False" # ---- Browser Use ---- # Browser Use API Key: 保存在 .env(BROWSER_USE_API_KEY),不写回 config/*.py BROWSER_USE_API_KEY="" # 代理国家代码: 两位国家码,如 jp/us/sg;配合 Browser Use 内置 residential proxy BROWSER_USE_PROXY_COUNTRY_CODE="jp" # 使用内置代理: True=连接参数带 proxyCountryCode;False=不强制传国家代理参数 BROWSER_USE_USE_PROXY="True" # Profile ID: 可选。填写则复用 Browser Use profile 的 cookies/localStorage;批量建议留空 BROWSER_USE_PROFILE_ID="" # CDP 地址: 默认 wss://connect.browser-use.com BROWSER_USE_CDP_BASE="wss://connect.browser-use.com" # 操作超时(秒): Playwright 默认操作超时 BROWSER_USE_TIMEOUT="90" # 快速模式: 减少 Browser Use 额外等待和 humanize 延迟;建议开启,异常排查时可关闭 BROWSER_USE_FAST_MODE="True" # 耗时日志: 打印 Browser Use 各阶段耗时:连接、打开页面、邮箱、OTP、手机、callback BROWSER_USE_LOG_TIMING="True" # 保留远端会话: 调试时可不主动 browser.close();默认 False BROWSER_USE_KEEP_BROWSER_OPEN="False" # 起始 URL: 默认 https://chatgpt.com/auth/login BROWSER_USE_START_URL="https://chatgpt.com/auth/login" # ---- Skyvern ---- # Skyvern API Key:用于创建 Browser Session SKYVERN_API_KEY="" # API 地址:默认 https://api.skyvern.com SKYVERN_API_BASE="https://api.skyvern.com" # Browser Session 超时(分钟) SKYVERN_BROWSER_SESSION_TIMEOUT="60" # 可选:复用 Skyvern browser profile SKYVERN_BROWSER_PROFILE_ID="" # 可选:Skyvern 代理地区;jp 会自动转 RESIDENTIAL_JP SKYVERN_PROXY_LOCATION="" # 浏览器类型:默认 stealth-chromium;可选 msedge/chrome/stealth-chromium SKYVERN_BROWSER_TYPE="stealth-chromium" # 是否启用广告拦截 SKYVERN_AD_BLOCKER="True" # 结束时是否保存 browser profile SKYVERN_GENERATE_BROWSER_PROFILE="False" # 调试时保留浏览器 SKYVERN_KEEP_BROWSER_OPEN="False" # 起始 URL SKYVERN_START_URL="https://chatgpt.com/auth/login" # ---- RoxyBrowser ---- # Roxy API 地址: 默认 http://127.0.0.1:50000;需在 Roxy 应用 API 配置中开启 ROXY_API_BASE="http://127.0.0.1:50000" # Roxy API Key: 保存在 .env(ROXY_API_TOKEN),不写回 config/*.py ROXY_API_TOKEN="" # Roxy 环境ID: 指定要打开的 Roxy 浏览器环境/Profile ID;留空则尝试创建临时环境 ROXY_PROFILE_ID="" # Roxy 工作区ID: 创建一号一环境时必填,会作为 workspaceId 提交给 Roxy 创建 Profile 接口 ROXY_WORKSPACE_ID="10910593635479552" # Roxy 项目ID: 从 /browser/workspace 的 project_details.projectId 获取;创建 Profile 时会作为 projectId 提交 ROXY_PROJECT_ID="10910593710977024" # 获取团队接口: 默认 /browser/workspace;点击获取团队/项目时会先试此路径,再自动尝试常见兼容路径 ROXY_WORKSPACE_LIST_PATH="/browser/workspace" # 打开接口路径: 默认 /browser/open;如 Roxy 版本不同可在此调整 ROXY_OPEN_PATH="/browser/open" # 创建环境间隔: 多线程时相邻 /browser/create 请求的最小间隔,默认 1.5 秒;设为 0 可关闭 ROXY_CREATE_INTERVAL="1.5" # 无头启动窗口: 打开 Roxy 环境时向 /browser/open 传 headless;False=显示窗口,True=无头启动 ROXY_OPEN_HEADLESS="False" # 关闭接口路径: 默认 /browser/close ROXY_CLOSE_PATH="/browser/close" # 保留浏览器: 调试时可开启,任务结束后不自动关闭 Roxy 环境 ROXY_CREATE_RETRIES="3" ROXY_CREATE_RETRY_DELAY="3" ROXY_KEEP_BROWSER_OPEN="False" # Roxy 跨 Profile 本地静态资源缓存;开启 BROWSER_DATA_SAVER_MODE 后自动启用 ROXY_LOCAL_ASSET_CACHE_ENABLED="False" ROXY_LOCAL_ASSET_CACHE_MODE="auto" ROXY_LOCAL_ASSET_CACHE_DIR="./cache/roxy-assets" ROXY_LOCAL_ASSET_CACHE_MAX_AGE="86400" ROXY_LOCAL_ASSET_CACHE_MAX_ITEM_BYTES="26214400" # 一号一环境: 每个账号强制创建新 Roxy Profile,用完关闭并删除,禁止复用固定环境 ROXY_ONE_PROFILE_PER_ACCOUNT="True" # 结束后删除环境: 一号一环境模式下,任务结束后删除本轮创建的 Roxy Profile ROXY_DELETE_PROFILE_AFTER_RUN="True" # 创建环境使用代理池: 创建 Roxy 环境时从配置页「代理池」随机取一个代理,写入 Roxy proxyInfo ROXY_CREATE_USE_PROXY_POOL="True" # 代理检测通道: 写入 Roxy proxyInfo.checkChannel;留空则不传,默认 IPRust.io ROXY_PROXY_CHECK_CHANNEL="IPRust.io" # 删除接口路径: 默认 /browser/delete;如 Roxy 版本不同可调整 ROXY_DELETE_PATH="/browser/delete" # ---- CPA / Codex ---- # Codex授权驱动: protocol=原协议授权;roxy=用 RoxyBrowser;cloak=用 CloakBrowser;browser_use=用 Browser Use Cloud;skyvern=用 Skyvern;same_as_registration=跟随注册驱动 CODEX_OAUTH_DRIVER="roxy" # ---- RoxyBrowser ---- # Codex回调超时: Roxy Codex OAuth 等待 localhost:1455 callback 的最长秒数 ROXY_CODEX_CALLBACK_TIMEOUT="180" # ---- 功能开关 ---- # 启用 2FA(TOTP): 注册完成后自动设置动态口令(会多收一封 OTP 邮件) ENABLE_2FA="True" # 2FA代理模式: saved=优先使用账号保存的代理;pool=每次从代理池随机分配 TWOFA_PROXY_MODE="saved" # 2FA 重认证发起阶段最大尝试次数(403/429/5xx/网络错误时重试) TWOFA_REAUTH_MAX_ATTEMPTS=3 # 2FA 重认证重试基础间隔秒数(按 1、2、4 倍指数退避) TWOFA_REAUTH_RETRY_DELAY=4 # 2FA 后台任务并发数(修改后需重启服务) TWOFA_WORKERS="4" # 2FA 后台等待队列容量 TWOFA_QUEUE_LIMIT="200" # 启用 Flow 触发: 注册成功后自动调用内部 Flow 接口(不影响注册结果) ENABLE_FLOW_TRIGGER="True" # ---- 人工节奏 ---- # 启用随机停顿: 在注册、OTP、授权等步骤之间加入随机等待,更接近人工操作节奏 ENABLE_HUMANIZE_DELAY="True" # 停顿倍率: 随机停顿整体倍率;1.0=默认,0.5=减半,2.0=加倍 HUMANIZE_DELAY_FACTOR="1.0" # ---- 邮箱 / OTP ---- # 自动取邮箱+收码: True=从邮箱池自动领邮箱并自动收 OTP;False=手动模式:用 REGISTER_EMAIL,OTP 在任务页手填 USE_EMAIL_SERVICE="True" # 手动注册邮箱: USE_EMAIL_SERVICE=False 时必填。例如你的 outlook.com 地址;OTP 去网页邮箱看,再回任务页提交 REGISTER_EMAIL="" # 显示名称: 留空则自动生成英文名 REGISTER_NAME="" # OTP 最长等待(秒): 等待验证码邮件的最长秒数,超时判失败 OTP_MAX_WAIT="90" # OTP 轮询间隔(秒): 每隔多少秒查一次新邮件 OTP_POLL_INTERVAL="3" # 邮箱来源: 可填单个或多个,逗号分隔并按顺序兜底:outlook,generic_api,cloudflare_domain,cloudflare,gptmail,mailnest,cloudmail,remail EMAIL_SOURCE="generic_api" # Outlook取件模式: auto=远端优先,远端 402/DEPLOYMENT_DISABLED 自动切 Graph 直连;direct=只用 Microsoft Graph 直连;remote=只用远端服务 OUTLOOK_FETCH_MODE= # 仅 cloudflare_domain:Email Routing 转发域名,如 mydomain.com(与 EMAIL_SOURCE=cloudflare 无关) EMAIL_DOMAIN= # 仅 cloudflare_domain:接收 Email Routing 转发的 QQ 邮箱,如 123456@qq.com QQ_EMAIL= # 仅 cloudflare_domain:QQ 邮箱 IMAP 授权码(不写回 config/*.py) QQ_IMAP_PASSWORD= # GPTMail API Key: 选择 EMAIL_SOURCE=gptmail 时必填;服务地址固定为 https://mail.chatgpt.org.uk GPTMAIL_API_KEY= # Cloudflare Worker 临时邮箱(EMAIL_SOURCE 含 cloudflare 时;与 cloudflare_domain/QQ IMAP 不同) # Worker API 根地址,例如 https://mail.example.com(不要末尾多余路径) CLOUDFLARE_API_BASE= # 匿名可空;admin 模式填 ADMIN_PASSWORD CLOUDFLARE_API_KEY= # none / bearer / x-api-key / x-admin-auth / query-key;admin 推荐 x-admin-auth CLOUDFLARE_AUTH_MODE= # Worker 全局密码,注入请求头 x-custom-auth;无则留空 CLOUDFLARE_CUSTOM_AUTH= # 创建邮箱路径: 默认 /api/new_address;admin 创建常用 /admin/new_address CLOUDFLARE_PATH_ACCOUNTS= # 邮件列表路径: 默认 /api/mails CLOUDFLARE_PATH_MESSAGES= # 域名列表路径: 默认 /api/domains CLOUDFLARE_PATH_DOMAINS= # Token 路径: 默认 /api/token(fallback 预留) CLOUDFLARE_PATH_TOKEN= # 默认收信域名,逗号分隔,例如 mail.example.com;可留空由 Worker 决定 CLOUDFLARE_DEFAULT_DOMAINS= # HTTP 请求超时秒数,默认 20 CLOUDFLARE_REQUEST_TIMEOUT= # admin 创建时随机 local-part 长度,默认 10 CLOUDFLARE_NAME_LENGTH= # MailNest-迈巢 Outlook 临时邮箱的 api key 获取页面 https://mailnest.top/account MAIL_NEST_API_KEY= # MailNest 项目代码:默认 chatgpt001 MAIL_NEST_PROJECT_CODE= # CloudMail/Cloud Mail API 地址,例如 https://mail.example.com CLOUDMAIL_API_BASE= # CloudMail 管理员邮箱;填写账号密码后保存配置会自动获取 CLOUDMAIL_AUTH_TOKEN CLOUDMAIL_ADMIN_EMAIL= # CloudMail 登录密码 CLOUDMAIL_PASSWORD= # CloudMail 生成 Token 接口路径,默认 /api/public/genToken CLOUDMAIL_TOKEN_PATH= # CloudMail/Cloud Mail API Authorization Token CLOUDMAIL_AUTH_TOKEN= # CloudMail 邮箱域名列表,每行一个 CLOUDMAIL_DOMAINS= # 生成随机邮箱后是否自动调用 /api/public/addUser CLOUDMAIL_AUTO_ADD_USER= # 随机邮箱 local-part 长度 CLOUDMAIL_RANDOM_LOCAL_LENGTH= # Remail 开放 API 文档:https://remail.aishop6.com/docs # API 根地址;填写文档地址也可以,客户端会自动去掉 /docs REMAIL_API_BASE="https://remail.aishop6.com" # Remail 控制台生成的 rk- 开头 API Key REMAIL_API_KEY="" # Remail 项目列表中的 projectId(用于 ChatGPT/OpenAI 验证码项目) REMAIL_PROJECT_ID="2" # 下单邮箱后缀,默认 outlook.com REMAIL_EMAIL_SUFFIX="icloud.com" # code=短效接码;purchase=长效购买(可重复收件),默认 purchase REMAIL_SERVICE_MODE="purchase" # private_first 或 public_only,默认 public_only REMAIL_SUPPLY_POLICY="public_only" # 下单后等待 service token 补齐的最长秒数,默认 30 REMAIL_ORDER_WAIT_SECONDS="30" # HTTP 请求超时秒数,默认 20 REMAIL_REQUEST_TIMEOUT="20" # ---- 浏览器画像 ---- # 地区画像: 应与代理出口地区一致;可选 jp/cn/us/sg。当前本地代理实测为日本东京,推荐 jp BROWSER_LOCALE_PROFILE="jp" # 按出口IP自动画像: 开启后每个 BrowserSession 会用当前代理出口 IP 自动选择语言/时区;失败时回退到地区画像 AUTO_BROWSER_LOCALE_FROM_IP="True" # IP定位超时(秒): 出口 IP 地理信息接口的单次请求超时;接口失败会自动回退,不影响注册 IP_GEO_TIMEOUT="6.0" # ---- 代理池 ---- # 代理池(每行一个): 每行一个代理 URL,留空行会被忽略;为空则不使用代理 PROXY_POOL="" # 套餐查询网络模式: auto=本地代理可用则使用、未监听则直连;proxy=强制代理;direct=强制直连 PLAN_CHECK_PROXY_MODE="auto" # 套餐查询专用代理: 留空时 auto/proxy 从代理池选择;可能包含认证信息 PLAN_CHECK_PROXY="" # 套餐查询本地上游代理: 通过本地代理连接上面的动态代理,形成代理链 PLAN_CHECK_UPSTREAM_PROXY="http://127.0.0.1:7897" # ---- CPA / Codex ---- # 授权地址来源: cpa=由 CPA 管理接口生成授权地址;local=旧版本地生成 PKCE 授权地址 CODEX_AUTH_URL_SOURCE="local" # CPA 管理地址: 例如 http://localhost:8317/admin/oauth;程序会取 origin 调用 /v0/management/* CPA_MANAGEMENT_URL= # 管理密钥: 保存在 .env(CPA_MANAGEMENT_KEY),不写回 config/*.py CPA_MANAGEMENT_KEY= # CPA 超时(秒): 请求 CPA 管理接口的超时时间 CPA_REQUEST_TIMEOUT= # 保存CPA回执: CPA 未返回完整授权文件时,本地仍保存一份回调提交记录 CPA_SAVE_CALLBACK_RECEIPT= # ---- 接码平台 ---- # 接码通道: grizzly / l / h;h 使用 H_API.md 定义的本地取号服务 SMS_PROVIDER="smsbower" # 国家代码: 传给接码平台的 country;GrizzlySMS 常用:美国=187;L/H 通道按本地后台配置填写 SMS_COUNTRY="187" # 服务/项目代码: GrizzlySMS/L 作为 service;H 通道可复用为 projectId SMS_SERVICE="dr" # 换号重试次数: 一个号收不到短信/被OpenAI拒时换下一个号,最多重试几次 SMS_MAX_RETRIES="10" # 单号等短信(秒): 单个号等待短信到达的最长秒数,超时则换号 SMS_CODE_WAIT="120" # GrizzlySMS API密钥: 保存在 .env(SMS_API_KEY),不写回 config/*.py SMS_API_KEY= # H API 地址: H 取号服务基础地址,例如 http://localhost:8788 H_API_BASE= # H 授权码: 保存在 .env(H_ADMIN_AUTH_CODE),不写回 config/*.py H_ADMIN_AUTH_CODE= # H 号码前缀: H 返回号码不含国家码时填写,例如美国 10 位本地号填 1;留空则不补 H_PHONE_PREFIX= # H 取号方式: reusable=优先复用号码;new=每次取新号(调用 /api/admin/h/take-phone) H_PHONE_ACQUIRE_MODE= # L API 地址: L 取号服务基础地址,例如 http://localhost:8788 L_API_BASE= # L 授权码: 保存在 .env(L_ADMIN_AUTH_CODE),不写回 config/*.py L_ADMIN_AUTH_CODE= # L 号码前缀: L 返回号码不含国家码时填写,例如美国 10 位本地号填 1;留空则不补 L_PHONE_PREFIX= # ---- updated by WebUI / config.env_loader ---- AUTO_PLAN_CHECK_AFTER_REGISTER="False" BROWSER_USE_SESSION_TIMEOUT="240" ROXY_RANDOM_OS_ON_CREATE="True" ROXY_RANDOM_PROFILE_NAME_ON_CREATE="True" ROXY_RANDOM_OS_CHOICES="Windows,macOS" ROXY_PROFILE_NAME_PREFIX="rb" ENABLE_HUMANIZE_BROWSER_ACTIONS="True" PLAN_CHECK_TIMEOUT="15.0" PLAN_CHECK_MAX_ATTEMPTS="2" PLAN_CHECK_RETRY_DELAY="1.5" PLAN_CHECK_REGISTRATION_RECHECK_DELAY="2.0" PLAN_CHECK_WORKERS="3" PLAN_CHECK_QUEUE_LIMIT="500" PLAN_CHECK_MIN_INTERVAL="0.4" PLAN_CHECK_JITTER="0.3" EXTRACT_LINK_API_BASE="" EXTRACT_LINK_CDK="" EXTRACT_LINK_TYPE="pix" EXTRACT_LINK_WORKERS="3" # ---- updated by WebUI / config.env_loader ---- # ---- updated by WebUI / config.env_loader ---- SMSBOWER_API_KEY="" SMSBOWER_USE_V2="False" SMSBOWER_API_BASE="https://smsbower.page/stubs/handler_api.php" SMSBOWER_PROVIDER_IDS="3170" SMSBOWER_EXCEPT_PROVIDER_IDS="" SMSBOWER_PHONE_EXCEPTION="" SMSBOWER_MIN_PRICE="0.12" # ---- updated by WebUI / config.env_loader ---- SMS_MAX_PRICE="0.14" # ---- updated by WebUI / config.env_loader ---- BROWSER_DATA_SAVER_MODE="True" # 注册完成拿到 accessToken 后阻断 ChatGPT 应用壳和遥测资源 BROWSER_DATA_SAVER_DEEP_MODE="True" BROWSER_TRAFFIC_DETAIL_LOG="False" BROWSER_DATA_SAVER_BLOCKED_RESOURCE_TYPES="image\nmedia\nstylesheet\nfont\nmanifest\ntexttrack" BROWSER_DATA_SAVER_BLOCKED_URL_PATTERNS="**://auth.openai.com/awe/api/v2/rum**\n**://chatgpt.com/ces/statsc/flush**\n**://connect.facebook.net/**\n**://analytics.tiktok.com/**\n**://snap.licdn.com/**\n**://bat.bing.com/**\n**://accounts.google.com/gsi/client**" BROWSER_TRAFFIC_DETAIL_MAX_ENTRIES="2000" # ---- updated by WebUI / config.env_loader ---- BROWSER_JS_COVERAGE_LOG="False" BROWSER_JS_COVERAGE_MAX_ENTRIES="1000" # ---- updated by WebUI / config.env_loader ---- TWOFA_WORKERS="4" TWOFA_QUEUE_LIMIT="200" # ---- updated by WebUI / config.env_loader ---- PROXY_POOL_UPSTREAM_PROXY="http://127.0.0.1:7897"