Severian 94d43dbb9d Say what actually went wrong
Every failure produced the same reply: read the directions, and check your
context size. For a card Janitor truncated that was fair. For a request
shape the user never chose, or for a bug in sucker, it blamed them for
something they could not have done anything about — and sent them back to
directions they had already followed.

Failures that can be explained now explain themselves: no card in the
request, no greeting in the chat, a card that arrived truncated (which
keeps the context-size advice, since that is where it belongs), and a
request with nothing in it. Anything else is a bug nobody anticipated, so
the reply says as much, says it is not the user's fault, and asks them to
DM @lyseverian on Discord — an unexplained failure nobody reports never
gets fixed. Internals are never echoed back.

SuckerError is recognised by name as well as by identity, because Next can
bundle a module into more than one chunk and a mismatched class would
quietly send every explained error down the unknown-bug path.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NX2SsmUqQftWTZAY4BDuFa
2026-09-11 05:15:01 +08:00
2025-12-09 10:40:18 +08:00
2026-09-11 05:15:01 +08:00
2026-09-11 05:15:01 +08:00
2026-01-30 18:22:16 +08:00
2026-01-30 18:22:16 +08:00
2025-01-19 21:47:26 +08:00
2025-12-11 08:42:20 +08:00
2025-12-11 08:42:20 +08:00
2026-01-30 18:22:16 +08:00
2026-09-11 05:15:01 +08:00
2025-01-19 21:47:35 +08:00
2025-12-09 10:40:18 +08:00

Sucker

Environment Variables

Add these to your .env.local file (optional):

# Disable Discord community banner (defaults to showing banner)
NEXT_PUBLIC_DISABLE_DISCORD_BANNER=true

Usage

Pull this repostory and build with npm run build. You can start the server with node ./.next/standalone/server.js

You can also build and run Sucker as a Docker container with docker compose build and docker compose up.

Changelog

  • 2.5: Real error messages instead of one blanket "dingus" reply; unexplained failures now ask you to DM @lyseverian. Unread dot on the Changelog button. Fixed extraction for users whose Janitor sends a request without the blank turn before the first message — sucker read the parts by position rather than by role, so for them it read the wrong ones and errored. Now resolved by role, with tests for both shapes.
  • 2.4: CSS editor for Janitor profiles. New banner links to the live-preview editor at tools.from-avalon.com/janitor-profile-maker.
  • 2.3: ECHO. Put ECHO: anywhere in a message and sucker repeats whatever comes after it in the reply — for triggering char-side script and lorebook keywords.
  • 2.2: Added support for directly inputting webp file names or character image links when creating PNG character cards
  • 2.1: updated deps, note about image fetching, list of mirrors
  • 2.0: from Tui: Multimessage support! Tracks changes to character descriptions and scenarios across multiple extractions. Shows version badges, message counts, and provides detailed change history viewer.
  • also 2.0: V2 charcard format and alternate greetings.
  • 1.9: Not again. They changed stuff again. What is this?
  • 1.8: Handling for new prompt structure, new instructions
  • 1.7: Handling for nested XML character tags
  • 1.6: First message formatting, copy button for first message and other fields
  • 1.5: {{user}} substitution for user persona name
  • 1.4: Mooth just keeps finding bugs, damn.
  • 1.3: Mooth found a bug, fixed it.
  • 1.2: Fix for Janitor having changed their prompt system
  • 1.1: Fix for R1 handling change, blank user persona bug
  • 1.0: Yup.
S
Description
Char card extractor for you-know-what
Readme 2.5 MiB
Languages
TypeScript 96.4%
JavaScript 2.3%
CSS 1.3%