How to export a character card to Chub.ai — the manual upload guide.
Short answer to the question almost every creator asks once: there’s no public upload API on Chub.ai. Every card goes through the web UI — one upload at a time. This walks through the five-step manual flow and the four things that quietly go wrong, plus the alternatives if manual genuinely doesn’t scale for you.
TL;DR — Upload in five steps
- Get the card as a clean V2 PNG with the chara chunk intact (export from SillyTavern, or round-trip via our converter).
- Sign in at chub.ai and open Create → Character.
- Drop the PNG into the image slot, fill in name / tagline / description fields, set tags + NSFW classification.
- Set visibility (Public / Unlisted / Private) and publish.
- Open the published card page in a clean browser tab and verify avatar + greeting + lorebook against your source. If something dropped, see Step 5.
Why is there no upload API?
Periodically someone asks on r/CharacterAI or r/SillyTavernAI: “is there a Chub upload API?” The current state of the docs and the platform (as of this writing) is:
- Chub’s public docs cover the chat-side “API Connections” flow (plugging external LLM keys like OpenAI / Anthropic into Chub chats). Card creation is documented as a web-UI form, not an API endpoint.
- The download path most third-party tools use looks like a GitLab REST URL (gateway.chub.ai/api/v4/projects/.../repository/files/.../raw) because Chub stores card assets in GitLab. The corresponding write endpoint exists in the GitLab REST spec, but writing requires a token that Chub controls internally — that token is not issued to third parties.
- The community has tracked tightening on the read path too (e.g. SillyTavern issue #4011 from May 2025: URL-import returning “Method Not Allowed”). If the read side is moving, the write side is not opening any time soon.
So — pragmatically — the answer is “manual web upload, one card at a time.” The flow below is what works as of mid-2026.
Step 1 — Prepare the V2 PNG
Chub stores cards as PNGs with embedded V2 metadata in the chara tEXt chunk. Even if your source card is V3, what you upload should include a V2 (chara) chunk so Chub can ingest it; you can keep the V3 (ccv3) chunk too — Chub will read what it can.
Three preparation paths:
- From SillyTavern: Character Management → Export → PNG. Ships V2 + (modern builds) V3.
- From RisuAI: Character settings → Export → pick PNG. Risu’s exporter writes both chunks by default.
- From the tavernai.cards converter : upload any format → pick V2 PNG from the SillyTavern group (it’s the “widest compatibility” target — also the one Chub ingests). Lint runs before download, so spec violations get caught up-front.
Sanity-check before you upload: pngcheck -t card.png should list a tEXt chunk with keyword chara. If neither chara nor ccv3 shows up, the PNG was re-encoded somewhere and lost its metadata — re-export.
Step 2 — Sign in and open Create → Character
Go to chub.ai, sign in (or create an account), and look for the Create menu in the top bar — Character is the right option (Chub also hosts lorebooks and presets, which have their own create flows).
A blank character editor opens. The layout has changed several times — typically a left column with image upload + core fields (name, tagline), and a right column with description / personality / scenario / first message / example dialogs / lorebook attachment.
Step 3 — Drop the PNG and fill the form
Drop your prepared PNG into the image slot. Chub will read the embedded chara chunk and pre-fill the form fields automatically — name, description, personality, scenario, first message, alternate greetings, example dialogs, and lorebook attachment (if present in the card).
This is the moment to:
- Sanity-check that every field populated. If any are empty that shouldn’t be, your PNG’s chunk is partial — fix at the source rather than re-typing into the Chub form.
- Set tags (Chub’s search relies heavily on these; aim for 5-10 relevant ones).
- Set the NSFW flag accurately — Chub has both a global SFW/NSFW toggle and finer content classifications. Misclassifying lands you in the wrong recommendation pool.
Step 4 — Set visibility and publish
Chub’s visibility options are similar to the standard Public / Unlisted / Private trio:
- Public — searchable + recommended.
- Unlisted — accessible by direct URL only; not in search.
- Private — only you can access it.
Pick the right one before clicking publish — changing later is possible but breaks your shareable URL’s caching and often loses backlinks.
Step 5 — The four common pitfalls
Cross-reference with the tavernai.cards compatibility matrix for field-level expectations on the Chub side.
1. The PNG uploaded but no fields auto-populated
Almost always means the chara chunk got stripped before Chub saw the file. Common culprits: saving via “Export As” in image editors, screen- shotting instead of right-click-saving, Discord re-encoding, CDN image-optimisation (Cloudflare Polish, Vercel /_next/image), social platform EXIF sanitisers. Run pngcheck -t on the file you’re about to upload — if no chara chunk appears, re-export from a tool that preserves it. Full PNG tEXt chunk explainer.
2. V3-only fields silently dropped
Chub’s editor is V2-shaped. V3-only fields like assets, nickname, creator_notes_multilingual, group_only_greetings, and source have no UI counterpart and don’t survive the upload. This is a documented loss path, not a bug. The full inventory: V3 fields you’re losing when uploading to Chub. If those fields matter, mention them in the description prose so the value isn’t entirely lost.
3. NSFW auto-classification doesn’t match your intent
Chub auto-suggests NSFW classification based on description / tags / first message content. If your card is SFW but describes a tavern barfight, or NSFW but uses oblique language, the auto-suggestion can be off. Manually set the flag before publishing — fixing it after the card has been recommended to the wrong audience is slower than getting it right up-front.
4. Geo-blocking and account region
Chub geo-blocks several jurisdictions (notably Canada, the UK, and New Zealand at time of writing). If you’re uploading from one of those regions you’ll need a VPN to reach the site at all. Worth knowing because the failure mode is a clean page-load block, not an upload error — easy to misdiagnose as “Chub is down” if you’ve just relocated.
FAQ
Is there a Chub upload API?
Not publicly. The chat-side “API” in Chub’s docs is about plugging in LLM keys, not uploading cards. Card storage runs over GitLab REST internally, but write access is gated by an internal token that isn’t issued to third parties. Manual web upload is the only supported path.
Can I batch-upload multiple cards?
Not via UI. The current shape of the Create flow is one card per upload. If you have ten cards to publish, plan for ten manual uploads.
Will my V3 PNG work?
Yes — Chub reads the V2 (chara) chunk that modern V3 exports also include for back-compat. The V3-only fields just don’t make it through. If your exporter only writes ccv3 and skips chara, round-trip through our converter to get both chunks.
What does Chub serve when someone downloads from there?
A V2 PNG with the chara chunk. The download is a clean re-export of the card data Chub has on file — which means any V3-only fields you didn’t re-encode into the description prose are not in the redistributed copy either.
Can the same card live on Chub, RisuAI, and SillyTavern at once?
Yes — that’s the use case we’re building for. Keep the V3 source-of-truth in your library (or in our converter / the upcoming workbench), and re-export per destination: V2 PNG for Chub and SillyTavern, charx for RisuAI Realm. See the per-host import guides: Chub → SillyTavern / any → RisuAI.
Conclusion
Chub.ai is the largest cross-platform card host but also the most closed to programmatic publishing. The manual flow above is the only supported path; the four pitfalls cover essentially every variant of “my card uploaded but…” I’ve seen on the major character-card subs.
If you maintain a roster that has to live on Chub, RisuAI, and SillyTavern at once, the tavernai.cards workbench is being built for exactly this — lint, round-trip V2 + V3 chunks, audit, then ship per destination. The waitlist is open at /#waitlist.
Chub.ai, RisuAI and SillyTavern are trademarks of their respective owners; this page is independent and not affiliated.
We’re opening the workbench in waves. If you maintain a card library that has to live on more than one host, put your name on the scroll.