GPT-Register-Tool: A Windows Workbench for ChatGPT Registration and Email OTP
面向 Windows 的 ChatGPT 账号注册、邮箱 OTP、账号管理与支付工作台
At a glance
- What is it?
- GPT-Register-Tool pairs a WPF desktop shell with a Python core to run ChatGPT email OTP registration, session management and protocol payment link extraction on Windows. Here is how the pieces fit, what the install actually requires, and where it stops.
- Who is it for?
- Adopt it if you already run Windows 10 or 11, keep a Python 3.10+ toolchain, and need batch email OTP registration with per-account proxy binding and a local Session plus SQLite store. Do not adopt it if you expect a single binary with no Node.js, no Playwright Chromium and no browser driver configuration, or if you want the tool to clear CAPTCHA for you, because the README states browser drivers do not bypass CAPTCHA and end the task with manual_challenge_required.
- Can I use it commercially?
- Not without permission. GitHub finds no licence file in the repository, and without a licence all rights are reserved by default: you may read the code but not reuse it. Check the README, or ask the authors, before using it.
- Is it still maintained?
- Yes. The repository last received commits 8 days ago.
- What is it written in?
- Mainly Python, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 1, 2026, and from our analysis. They are not legal advice.
Editorial analysis
What GPT-Register-Tool Automates and Who It Is Built For
The repository describes itself as a Windows desktop workbench for ChatGPT account registration, email OTP, account management and payment workflows. The unit of work is an account: it is created from an email source, authenticated, probed, stored, and later managed or exported. Everything around that lifecycle is the product.
The intended operator is someone running batches, not a single signup. The README lists email pools, ReMail short-lived codes, CFWorker domain mailboxes and SMSBower phone numbers as registration sources, and names Codex, CPA and SUB2API as export targets. That combination points at a person or small team maintaining a pool of accounts and moving them between downstream tools.
It is not a browser extension and not a hosted service. The README states that runtime data is stored locally by default and is not written into Git. The desktop shell is WPF on .NET 10; the business core is Python. That split matters, because almost everything you will debug lives on the Python side, while the settings you touch most often live in the WPF settings pages.
The Registration Pipeline: Email Source to AT HTTP 200
The README gives the main flow as a text diagram: email source, then ChatGPT email OTP registration, then Access Token and Session acquisition with a stable HTTP 200 AT response as the persistence boundary, then optional phone verification and discount eligibility checks, then JIT AT probing and optional protocol payment link extraction, then Session JSON plus a SQLite index, then management through the WPF desktop.
The persistence boundary is the most interesting design decision. An account is not written into the active pool because account creation returned something. It is written when the Access Token probe returns HTTP 200 inside a stable window. Candidates that do not hold that response are excluded. This is a stricter success definition than most automation scripts use, and it means a run can create an account, fail the probe, and correctly report failure rather than a false success.
Recovery is built around the same idea. The README states that after an account is created and an AT obtained, the candidate and checkpoint are persisted immediately, before the AT HTTP 200 probe runs. If the probe fails because of proxy or TLS problems, the run can resume from the checkpoint without repeating the email OTP and account creation. Registration, OTP, Session acquisition and AT probing each record their own stage result, so an intermediate state is not reported as success.
Proxy handling is bound per account, not per request. Each account is tied to its own proxy session, and batch registration only switches proxy and creates a new session on network or authentication failure. On retry, the session sid is refreshed but the proxy member is not changed. The README explains the reasoning directly: rotating the exit during retries can be read as proxy flapping and lead to a ban. Browser registration adds a process pool keyed by (driver, headless, timeout) so accounts sharing an exit and header configuration reuse the same browser process.
Installing GPT-Register-Tool and Running the Environment Preflight
The README documents three install paths: a GitHub Releases installer, a portable zip, and running from source. All three require Python 3.10 or higher on Windows 10 or 11 x64, and all three require you to install Python dependencies and create a local config before first launch.
The dependency install is pinned through a constraints file. The README states that registration preflight validates the installed curl_cffi version and the chrome146 profile, and that older versions will not proceed to mailbox purchase or registration.
python -m pip install -r requirements.txt -c constraints.txt
copy config.example.json config.jsonTwo further requirements are easy to miss. Node.js 18 or higher must be on PATH, because the Sentinel Token quickjs extractor runs OpenAI's real sdk.js through node; the README states that a missing node causes OTP to be silently lost during registration. Playwright Chromium is needed for Stripe initialization in protocol payments such as MoMo and direct card, and the README gives the command to install it.
python -m playwright install chromiumAfter dependencies are in place, the README points at a preflight script that checks Node.js, Playwright Chromium and the key Python packages.
python scripts/preflight_env.pyFor the source path, the build is deliberately not dotnet build. The README says the desktop program can only be compiled through SmsWorkbench/build_dotnet.ps1, because dotnet build produces intermediate files and does not update the standard dist/net10 workspace.
powershell -ExecutionPolicy Bypass -File .\SmsWorkbench\build_dotnet.ps1
.\dist\net10\SmsWorkbench.exeAfter launch, the README says to open the settings page and configure at least the registration proxy pool and mailbox receiving proxy under network and payment, then an email source such as ReMail or CFWorker under mailbox and receiving. The registration driver is selected under settings, registration and codes, and defaults to protocol. ReMail API keys can also come from an environment variable, which takes precedence over config.json.
$env:REMAIL_API_KEY = "rk-your-key"Where GPT-Register-Tool Refuses to Help
The clearest limitation is stated without hedging: browser drivers do not bypass CAPTCHA. When a manual challenge appears, the task ends with manual_challenge_required and the existing account state is preserved. If your workflow depends on automated challenge solving end to end, this tool stops at the challenge and hands it back.
There is also no silent fallback. If the selected browser driver is missing required fields, the task returns a sanitized configuration error instead of falling back to protocol registration. That is a defensible choice for reproducibility, and it is also a common source of confusion for a first run, because the failure looks like a configuration problem rather than a driver problem.
Protocol registration is AT-only. The README states that the registration flow no longer runs the Agent Identity stage, and that Agent Identity must be handled through an explicit SUB2API import path. Registration also no longer generates payment links; link extraction is triggered only by a separate payment operation. Anyone expecting one button to produce a registered, phone-verified, payable account will find the flow split into stages.
The environment is opinionated in ways that cost setup time. Windows is required. curl_cffi must be exactly 0.16.0. Node.js must be present or OTP is lost silently. Playwright Chromium must be installed for certain payment paths. And in the ReMail source, the code order type matters: the README states that a code order can only receive mail before receiveUntil, that an API key cannot substitute for an expired Service Token, and that purchase should be chosen when you need to keep viewing the inbox later.
How GPT-Register-Tool Differs from Plain Request Scripts
The obvious alternative is a hand-written Python script using requests or httpx to drive the same registration endpoints. The difference is not the HTTP calls; it is the state machine around them. A plain script typically treats a returned token as success. GPT-Register-Tool treats a stable HTTP 200 AT probe as the persistence boundary, records stage results separately, and persists a checkpoint before probing so a proxy failure can be retried without re-consuming an email OTP.
A second difference is fingerprint and token consistency. The README describes NextAuth, Auth API and ChatGPT using separate header templates while sharing a stable oai-did, oai-session-id, call ID, UA and client hints. Fingerprint language and timezone are generated from the proxy GeoIP, and the Sentinel QuickJS runner uses the same UA, platform, timezone, screen, memory and client hints. The README states that when the DID in tokens, cookies and headers disagree, the run terminates with sentinel_extract_failed. A script that generates these values independently per request will not match that behavior.
A third difference is the desktop management layer. Session JSON plus a SQLite index, a WPF account view, ReMail inbox opening from a registration record, and export to Codex, CPA and SUB2API are all outside what a request script gives you. If you only need ten accounts once, the script is less work. If you need to keep track of hundreds of accounts, sessions, quota states and payment links, the index and the desktop view are the part you would otherwise build yourself.
Maintenance, Configuration Drift and Licence Status
The repository is not archived, and the last push was on 2026-09-13, with releases on 2026-09-13, 2026-09-09 and 2026-09-07. That is a rapid release cadence, and it has a cost: versioned release tags like v2026.09.14 mean the install artifacts are dated, so you should expect to re-download rather than auto-update. The README does not document an updater or a rollback path, so upgrading in practice means replacing the install directory and re-checking config compatibility.
Configuration is the real maintenance surface. The README states that when shards already exist, only the shards are read and the old config.json is not merged. It also points at docs/current/configuration.md for shard priority. That rule prevents surprising merges, and it also means a stale config.json sitting next to shards will be ignored, which can look like settings silently not applying. The README recommends python -m sms_tool --help and python scripts/registration_inventory.py for troubleshooting, noting that the inventory script does not go online, register accounts or clean files.
python -m sms_tool --help
python scripts/registration_inventory.pyOn licensing, the repository metadata does not state a licence, and no licence file appears in the top-level entries listed for the repository. Without a declared licence, the default position is that no rights are granted, so redistribution or commercial use cannot be assumed. That is a status observation, not legal advice; if you need to bundle or resell anything from this repository, resolve the licence question with the maintainer first. The README also notes that API keys saved from the desktop settings page are written only to a local, Git-ignored config.json, and that logs redact API keys and Service Tokens.
Editorial conclusion
Adopt it if you already run Windows 10 or 11, keep a Python 3.10+ toolchain, and need batch email OTP registration with per-account proxy binding and a local Session plus SQLite store. Do not adopt it if you expect a single binary with no Node.js, no Playwright Chromium and no browser driver configuration, or if you want the tool to clear CAPTCHA for you, because the README states browser drivers do not bypass CAPTCHA and end the task with manual_challenge_required. Verify first that curl_cffi==0.16.0 installs with the chrome146 profile, that node is on PATH, and that python scripts/preflight_env.py passes on your machine.
Frequently asked questions
What is GPT-Register-Tool?
It is a Windows desktop workbench that combines a WPF front end with a Python business core for ChatGPT email OTP registration, account and Session management, proxy configuration, protocol payment link extraction and account export. Runtime data is stored locally by default and is not written into Git.
What do I need installed before GPT-Register-Tool will register an account?
Windows 10 or 11 x64, Python 3.10 or higher, curl_cffi==0.16.0, the .NET 10 Desktop Runtime, Node.js 18 or higher on PATH, and Playwright Chromium if you use protocol payments such as MoMo or direct card. The README states that a missing node causes OTP to be silently lost during registration.
Does GPT-Register-Tool solve CAPTCHA automatically?
No. The README states that browser drivers do not bypass CAPTCHA, and that when a manual challenge appears the task ends with manual_challenge_required while preserving the existing account state.
How do I check that my environment is ready?
The README points at python scripts/preflight_env.py, which confirms Node.js, Playwright Chromium and the key Python packages are in place. For troubleshooting it recommends python -m sms_tool --help and python scripts/registration_inventory.py.
Can I build the desktop program with dotnet build?
No. The README says the desktop program can only be compiled through SmsWorkbench/build_dotnet.ps1, because dotnet build produces only intermediate files and does not update the standard dist/net10 workspace.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/2951461586-gpt-register-tool)