Repository navigation
v2.0.0-beta.1
Pre-release
Pre-release
Changelog
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[2.0.0-beta.1] - 2026-10-21
Highlights
CatchTwo 2.0 brings the AI catcher to Android and makes the send path more reliable.
- AI catching on Android: the AI now runs through TensorFlow.js without native binaries, so it works on Android with Termux.
- A better model: the new 1,279-class model reaches 99.451% validation top-1.
- Lower memory: TensorFlow.js loads only when AI is enabled, so AI-disabled runs use about half the memory.
- Catches come first: catches, hints, commands, and spam share one priority queue. A full route queue is retried instead of silently dropping the send.
- More commands:
pingandsupportare new, andpredict,stats,version, andhelpwere reworked.
Added
- Local AI catch model (
sepconv-1279-real-ft) with 1,279 classes, 1,621,951 parameters, and 64x64 RGB input. Validation top-1 is 99.451% and top-5 is 99.870%. - Center-crop preprocessing for live spawn images. The center 0.8x of the shorter side is cropped before the 64x64 resize, and images at or below 128 px are left as-is.
CatchTwoRestManager, a priority send queue for Pokétwo traffic. Catches outrank hints, hints outrank commands, and spam runs last.- Startup config validation and idempotent config migration.
pingandsupportcommands, plus reworkedpredict,version,help, andstatscommands.- Cross-platform setup for Windows, Linux, macOS, and Android (Termux).
- TypeScript
checkJscoverage for opt-in modules, Prettier, ESLint, and a Node 22/24/26 CI matrix. - 64
node:testtests covering services, commands, queueing, and lifecycle behavior.
Changed
- Breaking: Migrated from
discord.js-selfbot-v13todiscord-self-lite@0.2.0. Clients use the library'srestClassinjection, and the queue usesRestManager.destroy(),RouteQueueFullError, and the gateway channel cache. - Breaking: Stats and account state are keyed by user ID instead of username. Existing username-keyed stats do not carry over.
- Breaking:
spamming.SpamSpeedis a number (default 2000, valid range 1000 to 120000).logging.LogCatchesis split intoPokemon,Quests,LowIV,HighIV, andSpecialCatches, withLowIVThresholdandHighIVThreshold. - Breaking:
incense.IncenseModenow disables spam while enabled. When disabled, incense spawns are ignored.AutoIncenseBuyrequiresIncenseMode. - Breaking: The model bundle and
labels.jsonmust be copied as a set. A model/label mismatch fails before inference. - Switched from
@tensorflow/tfjs-nodeto@tensorflow/tfjs, loaded lazily so AI-disabled runs use about half the memory. - Replaced the old model weights with the 1,279-class
model.jsonbundle and its two shards. - Outbound Pokétwo traffic now uses a bounded priority queue with per-class deadlines, bucket-aware pacing, and catch protection. Spam yields to catches and is dropped when paused.
- A
nullREST response now means only204 No Content. Full route queues reject withRouteQueueFullErrorand are retried before the item's deadline. - The confidence floor is 0.5. Known weak classes always go to the hint path instead of being caught.
- Install and update now use
main.start.batand the package scripts were updated. package-lock.jsonis tracked and CI runsnpm ci.- The supported Node baseline is
>=22.13.0.
Deprecated
incense.IncenseChannelis still required forAutoIncenseBuy, but the setting is deprecated.
Removed
behavior.Sleeping.- The assisted-catch path from the 1.3.x
mainbranch. The local AI model replaces it. discord.js-selfbot-v13,@tensorflow/tfjs-node, the oldweights.bin,src/data/ai.json,src/data/levelup.json, and the old logo assets.- The per-message channel cache workaround in
listenEvents.js. - Temporary spawn calibration logging and analysis scripts.
Fixed
- Full-scene spawn images are center-cropped to the training framing instead of being squashed, which restores confidence on live 800x500 attachments.
- Queued Pokétwo sends are retried on
RouteQueueFullErrorinstead of treating anullresponse as a dropped send. - REST shutdown aborts in-flight requests and rejects queued sends and pending sleeps.
- The 50013 permission check reads
DiscordAPIError.codeinstead offullError.code. - Event handlers no longer fetch and cache each message channel themselves.
npm run updateandnpm run force-updatepreserve localconfig.jsandtokens.txtchanges.
Model
- Production run:
20260723T122145Z-sepconv-1279-real-ftfrom thekyan0045/poketwo-airepository. Checkpoint SHA-256 starts withb49e33c3. - Live validation at the 0.5 floor: 184 spawns, 182 caught (98.9%). On caught spawns, 180/182 were top-1 (98.9%) and 174/176 were accepted (98.9%).
- Known weak classes always use hints:
Type Null,Type,Galarian Articuno,Galarian Zapdos,MissingNo,Regieleki,Scolipede, andXurkitree.
Full Changelog: v1.4-beta.3...v2.0.0-beta.1