PURENISTA M · GLOBAL SERVER ONLY

Purenista MTrade Reference Guide

A fan-made, unofficial guide — global server only.
All ratios are community habits, not hard rules; whatever both sides agree on works, and please trade politely ✿
Trade ratios, BRAND dyeing, pull costs and top-up VIP — all on one page.

🌐 中文版

Smart guide client-only · no login

Pick who you are right now for a suggested path. Everything runs in the browser — no backend, no account.

Rather just talk? Head to the board to swap notes on trades, palettes and pulls. Sign in to post.

Feature ranking Mine · local

“Mine” counts how often you open each tab on this device and never leaves it; “Site-wide” is the anonymous total across every visitor, and needs no setup.

Open a few tabs and the ranking will appear

Rarity converter SR=2R=4N

equals —

Same-type conversion only (PURE↔PURE / PRM↔PRM) — PURE and PRM are not interchangeable here; for cross-type trades use the Ratio calculator.

Fee converter 30%

Rainbow Market charges a 30% transaction fee. Enter a listing price to convert:

stars (listing price)

Seller receives = listing price ×70%; to receive a target amount, list at about ÷0.7. Listing prices must end in 0 (steps of 10 stars) — the converted result is rounded up to the nearest 10.

Dye cost calculator Dyes → stars

Pick a brand and enter how many pieces you want to dye — converts to total dye materials and approximate stars.

SR R N

Reverse: how many stars → how much material
stars

Per single pull: Deux 5 spools / By(e) 12 spices / melem 1 candle; a 5+1 (1500 stars) gives 30 spools / 72 spices / 6 candles. BRAND baskets have no first-time 900 discount — every 5+1 costs 1500. Single pulls in the reverse calc are counted at 300 stars (6th-pull-onward price); the first few pulls are cheaper (90–270), so you may get slightly more. melem N counted as 2 candles (rooms have N at 1–2), and rooms unlock bottom-up, so actual cost may be slightly higher.

VIP upgrade calculator How much to spend

Pick your current tier and target tier to see how many more PRM Stars you need to top up (free bonus stars excluded).

Cumulative tier thresholds: Crystal 0 · Bronze 100 · Silver 1000 · Gold 6000 · Platinum 10000 · Ruby 30000 · Diamond 70000 · Legend 100000. Estimates use the largest bonus-event tier (NT$: iOS 0.169 / Android 0.184 per star; HK$: iOS 0.040 / Android 0.043) — check the price table in Top-up & VIP for details.

Ratio calculator Old · dye · LUCKYBAG

The item I'm offering

Pick the conditions above to see the suggested ratio here.

BRAND original-color items are valued exactly like regular PRM items (by expiry time & popularity) — they have their own option above.

VIP point exchange calculator Special tab · multi-select

Enter a quantity for each item you want (0 = skip) — the required VIP points are summed automatically; quantities are capped at each item's purchase limit.

Buying out the entire special tab costs 40,800 VIP points. See the tier rewards in "Top-up & VIP" for how points are earned.

NT$1 ≈ how many stars Quick convert

Based on each platform's best-value tier (largest bonus-event tier) — handy for cross-region players comparing where to top up. Enter an amount to estimate the stars you'd get:

amount

Cross-region: 1 star ≈ how much
Platform · currency1 star ≈1 $ ≈

Basis: iOS $2490→14,700 stars (NT$1 ≈ 5.90 stars) / Android $2710→14,700 (≈ 5.42) / web store $16,250→86,500 (≈ 5.32). HK$ basis: iOS HK$588→14,700 (1 HK$ ≈ 25.0 stars) / Android HK$639→14,700 (≈ 23.0) / US$74.99→14,700 (same on iOS & Android · 1 US$ ≈ 196 stars). Smaller tiers give fewer stars per dollar — see the price tables below.

Best-value ranking Avg / star

"Avg / star" (price ÷ total stars) in NT$, sorted from best to worst value. Packs have purchase limits — bulk top-ups still rely on regular tiers.

#ItemPriceAvg / star

Pack star counts include the free bonus. Pack prices are only known in NT$, so the HK$ / US$ rankings list top-up and web tiers only (bonus star counts). In NT$ the best value is usually the New Year · Anniversary pack (iOS).

Common ratios Baseline

PURE=free ・ PRM=paid ・ LUCKYBAG=lucky bag ・ BRAND=brand basket

RaritySR = 2R = 4N
Current basket : expired item2 : 1 and up
Current basket : dye item2 : 1 and up

⚠️ Year-based ratios are same-type trades (PURE↔PURE / PRM↔PRM); for PURE-PRM conversion see "PURE vs PRM basket".

What decides value Read the market

A lot of people only know "BRAND #4 is expensive" without knowing why. These 5 factors decide where an item actually lands — the more stars, the bigger the pull on the ratio:

Age (the older, the fewer people have it)★★★★
Popularity (character / colorway hype)★★★★★
Circulation (how many were released, how many times traded)★★
Dye difficulty (needs original color? key item? time-limited?)★★★
Rerun chance (BRAND baskets never rerun; regular baskets sometimes might)

Two items that are both "1 year expired" can still differ by more than 1:2 if one has low circulation and high popularity while the other is something everyone owns. Run through these 5 factors before opening a price — it beats memorizing numbers.

PURE vs PRM basket Typical case

Assumes same rarity (SR:SR / R:R / N:N). LUCKYBAG items count as PURE — they can be obtained with free stars.

Current basket|PURE for PURE · PRM for PRM1 : 1
2 current PURE for 1 current PRM (same rarity)2 : 1
1 expired PURE for current PRM (same rarity)1 : 1
1 expired PRM for current PRM1 : 2

e.g. 1 expired PRM N = 2 current PRM N.

PRM SR (for PURE items · varies)= 2 PURE SR
PRM R (for PURE items · varies)= 1 PURE SR
PRM N (for PURE items · varies)= 1 PURE R or 2 PURE N
Cross-rarity (PURE:PURE / PRM:PRM)SR = 2R = 4N

PRM-for-PURE ratios vary by person; if the PRM item is expired, double the ratio again.

LUCKYBAG items = PURE items

LUCKYBAG items count as PURE (free) items — they can be obtained with free stars. All their trade ratios follow the PURE basket rules.

Current LUCKYBAG for current PURE item (same rarity)1 : 1
2 current LUCKYBAGs for 1 current PRM item (same rarity)2 : 1
Expired LUCKYBAG for current PRM item (same rarity)1 : 1

Treated as PURE items throughout: expired LUCKYBAG = expired PURE item; the longer expired, the higher the ratio, as usual.

Old items · by expiry time vs. current basket

Expired 1 month after the basket closes; same-type trades (PURE↔PURE / PRM↔PRM).

Just ended · under 1 monthSame as current
Expired 1 month1 : 2
Expired 1 year+1 : 2–3
Expired over 2 yearsHard to estimate
Expired over 3 yearsHard to estimate
Rerun basket just ended (under 1 month)Same as current

※ By market circulation, 1-year+ items usually open around 1 : 2; asking 1 : 3 right at the one-year mark is a door-kick opener (testing for more). Only baskets that ended before 2025/01 realistically close at 1 : 3. Popularity and scarcity shift the landing point (see Notes).

BRAND original-color · by expiry time Same as PRM items

Valued like regular PRM items, against current PRM items; BRAND baskets never rerun (retired).

BRAND basket still open · under 1 monthSame as current
Expired 1 month1 : 2
Expired 1 year+1 : 2–3
Expired over 2 yearsHard to estimate
Expired over 3 yearsHard to estimate

※ 1-year+ usually opens at 1 : 2; 1 : 3 is mostly a testing offer (pre-2025/01 baskets have a real shot). Retired goods — popular pieces take the high end (see Notes).

Dye items · by BRAND basket status Retired goods

⚠️ "Current basket" here means current PRM items. A dye counts as expired only when it can no longer be dyed (example in Notes).

Basket open|for same-basket BRAND item1 : 2
Basket open|for current PRM item1 : 2
Expired · still dyeable|for same-period BRAND item1 : 2
Expired · still dyeable|for current PRM item1 : 3
No longer dyeable|for same-period BRAND item1 : 2–4
No longer dyeable|for current PRM (dye expired 1–1.5 yrs)1 : 4–6
No longer dyeable|for current PRM (dye expired 2–3 yrs+)Hard to estimate

※ BRAND baskets never rerun (retired); popular and high-rarity items do not follow this table (see Notes).

BRAND market notes Global server

  • BRAND #4/#5/#6 = Deux.
  • BRAND originals = priced like regular PRM items (expiry time, popularity).
  • BRAND #4: the global server's first BRAND basket — and the priciest.
  • From #7 on, BRAND baskets multiplied; worth less than #4/#5 (still appreciates, just less).

How to decline politely No hard feelings

If you get an offer you don't want, leaving them on read tends to sting. Try something like:

  • Give a reason"Sorry, I want to keep this one / I've already got a trade lined up with someone else — thanks for asking though!"
  • Don't put them downavoid anything like "yours isn't good enough" — just saying "not looking for a trade right now" is enough.
  • Leave the door openif it's really just that the ratio isn't to your liking, try proposing a different arrangement, or go with "sorry, I'd rather not trade this way" instead of a flat no.

How to negotiate Comfortable for both sides

  • Ask what they think first"what ratio were you thinking?" finds middle ground faster than opening high yourself.
  • Use "the going rate," not "I feel like""stuff expired a year-plus usually goes around 1:2–3 in this community" lands better than "I feel like it's worth more" — and causes fewer arguments.
  • Move a little at a timestep toward each other from your opening offers instead of caving all at once — conceding too fast makes people wonder if your opener was made up.
  • Shelve it if you can't agree"let's both think it over and circle back if we land on something" beats forcing it or getting heated.

What's a "door-kick opener" A testing lowball

A door-kick opener means deliberately opening way below the going rate, to test whether you know the market and how easy you are to push around. Not every low offer is malicious, but common tells:

  • The opener sits clearly below the ranges listed in "Old items · by expiry time" or "Dye item" tables.
  • They jump up readily once you point out the going rate — a sign they knew the rate all along and were just probing.
  • Openers like "just asking, no worries if not" that lower the pressure on you to say no.

No need to get upset — just quote a ratio you're comfortable with. If they genuinely want the trade, they'll usually come back to a reasonable range.

Phrases that tend to backfire Watch your wording

  • "Plenty of people are selling this anyway"implies their item isn't worth much — even if true, it stings.
  • "Fine, forget it then"turns a negotiation into a threat and usually shuts the conversation down entirely.
  • "Everyone else calculates it this way"leaning on a vague "everyone" without showing an actual rate is less convincing, not more.
  • A cold "so?" after leaving them on readeven if the content is fine, the tone alone can make people feel disrespected and end the trade.

When to be extra careful This is pattern-recognition, not a blacklist

The point here isn't to suspect everyone — it's a handful of common scam or pitfall patterns. If several of these show up together, slow down.

  • Constantly rushing the tradea normal trader lets you double-check; unusual pressure is often about getting you to send before you look closely.
  • Refusing to state the ratio openlyinsisting on discussing it privately with no screenshots leaves you with no record if things go wrong later.
  • Terms keep changingthe agreed ratio, order, or contents shift right up to the last second, wearing down your attention.
  • Asking you to send first"show me you're serious first" or "I got scammed before so you go first" — a real trade should be simultaneous or witnessed by a trusted third party; sending first, alone, carries the most risk.
  • "I'll send it back later"they take your item and stall on sending theirs with excuses — the longer it drags on, the harder it is to recover.

Screenshot the agreed terms and ratio before trading. Try to trade simultaneously where possible, and for higher-value trades, ask a trusted third party to witness.

Top 10 rookie mistakes Read this before your first trade

  • 1. Trading PURE for PRM at 1:1PURE and PRM items cost different amounts to obtain — 1:1 usually shortchanges whoever's giving up the PRM item.
  • 2. Not knowing LUCKYBAG counts as PURELUCKYBAG items are pulled with free stars, so they're priced like PURE items in a trade — not opened as if they were PRM.
  • 3. Not knowing BRAND baskets never rerunonce a BRAND basket ends it's retired for good — the only way in is trading, and the older it is, the more it's usually worth. Regular-basket logic doesn't apply here.
  • 4. Confusing "basket ended" with "dye expired""dye expired" isn't about how long ago the basket closed — it's about whether the item can still be dyed. The two price very differently (see the "Dye item" table).
  • 5. Falling for the word "popular"a seller calling their item popular doesn't make it so — check community discussion or circulation yourself instead of taking their word for it.
  • 6. Trading same rarity, different type, at face valuea free SR and a paid SR aren't worth the same — confirm both sides are the same type before converting.
  • 7. No screenshotsverbal agreements turn into "he said, she said" — screenshot the terms before you trade.
  • 8. Sending firstwhatever the reason given, whoever sends first always carries more risk — trade simultaneously whenever you can.
  • 9. Treating a door-kick opener as the going ratea first offer isn't automatically fair — check it against tables like "Old items · by expiry time" before accepting.
  • 10. Letting a failed negotiation turn uglyratios not lining up is normal — "let me think about it" leaves the door open for a future trade far better than a snippy exchange does.

Dye costs at a glance Quick reference

Deux spoolsBy(e) spicesmelem candles
Per single pull5121
Per 5+130726
SR dye701406
R dye45804
N dye35351–2

⚠️ Candles expire the moment the basket ends (spices and spools can be stored). melem costs depend on the item's position in the room. For estimates use Quick Calc → Dye cost.

Deux
Doll Series
  • Dye window: 4 editions per cycle. Current season #10 → #7–#10 dyeable; each new season closes the oldest one.
  • Requirement: you must own the item's original color to dye it.
melem
Mirror Series
  • Dye window: current run only. The next run opens brand-new rooms — no going back to redeem.
  • How it works: open mirror rooms M101/M202/M303 · F101/F202/F303 — no matching outfit required.
  • Room rules: 6 items per room (N/N/N/R/SR/SR = 1/2/2/4/6/6 candles), redeemed bottom-up; free pick once fully unlocked.
  • Styles: not always black↔white — may be same-color mirrored or dreamlike redesigns (butterflies, flowers, etc.).
By(e)
Fleeting Bloom
  • Dye window: same 4-edition cycle as Deux. Current #4 → #1–#4 dyeable, and so on.
  • Dye keys: a same-gender, same-rarity key dyes every piece of that tier; ⚠️ only icon-marked items are keys — no icon, no dyeing.
  • Limits: male and female counted separately; to dye last season, pull at least once this season first.

Universal design and photography principles, applied to styling and art photos. Switch categories; tap any entry to expand.

Workspace from nothing to a plan

Seven steps, one decision each. No fixed order - fill in whatever you know. Once four are set you get a plan card you can copy and keep beside you.
Options are given by type, not by in-game item - items go stale with each update, categories do not.

Progress
0 / 7

Creative workflow from blank to posted

Every item maps to something the artwork check actually measures, so the advice here and the verdict later are one standard stated twice, not two opinions. Ticks are remembered on this device.

Progress
0 / 0
1. Before you start
2. While you compose
3. Before you post
🎉 All done. Once it is posted, if you want to know what could go further, run it through the artwork check and read the three summary lines.

Naming and tags the piece is done - now what

Naming a piece and picking tags often takes longer than making it. The vocabulary and the seasonal calendar here are fixed, so nothing goes stale and nobody has to maintain it — which is also why there is no "trending tags": that would need a server watching everyone's posts.

1. Keywords for this piece (leave blank for random):

2. Which register:

3. Suggested tags (tap to copy):

Art check Upload & analyze

Drop a work in and get an aesthetic read — brightness, contrast, saturation, color cast, compositional weight, color count — with concrete numbers and a fix preview. Analyzed on your device only; never uploaded.

Random Character Generator roll one when you're stuck

Completeness, memorability, development potential — these were never things a questionnaire could score objectively, so this isn't a "check" anymore. Just roll a starter character, keep what works, edit what doesn't. Usually faster than staring at a blank page.

"Fill blanks only" leaves what you've already written untouched. "Reroll everything" replaces the whole set — make sure you're OK losing the current version first.

Color & Inspiration Generator Color palette + random inspiration, one tool

Get a color palette for your character, or let it randomly roll a whole theme / character trait / composition / palette combo for you. Pick any one of the three inputs below — everything is processed only on your device.

① Keyword:

② Or upload an image to extend from:

③ Or paste a character description to reverse-derive from:

④ Not sure what to pick? Roll each one separately and keep what you like:

Theme
Trait
Composition
Palette

5+1 costs Stars

PURE (free) basket · first 5+1 (once each for M & F)810
PURE basket · from the 2nd time1500
PRM basket · first 5+1 (once each for M & F)900
PRM basket · from the 2nd time1500

Single-pull ladder Gets pricier

PullPURE basketPRM basket
1st090
2nd150150
3rd180180
4th210210
5th270270
6th onward300300

Pity & milestone nodes SR pity

  • New PRM baskets: 30 cumulative pulls grant an SR pity ticket — about 8,400 stars pulling one gender only, or about 7,800 using both genders' first-time 5+1 discounts.
  • Rerun baskets / JP-server rerun baskets do not include pity.
  • Milestones: bonuses at 5 · 10 · 15 pulls; 20 pulls limited-basket R ticket, 30 pulls limited-basket SR ticket.
pulls done

Estimated at 260 stars/pull (7,800 ÷ 30, with both-gender discounts); single-gender only ≈ 280/pull (8,400 ÷ 30). Actual cost depends on the ladder and 5+1 mix.

LUCKYBAG gacha Anniversary / event

No duplicate items within a single multi-pull — but duplicates can still appear across separate pulls. e.g. a first 5-pull of ABCDE and a second 5-pull of ABCDE is possible, but a single 5-pull will never contain AACDE.

Limited LUCKYBAG · 30 items no duplicates (PRM Stars only · SR×2+ guaranteed · avg ~166/pull)4980 PRM
Limited stock · F/M doll SR×1+ guaranteed (5 items/bag · limited · avg 800/pull)4000
Unlimited · 10-pull (avg 275/pull)2750
Unlimited · 8-pull (avg 281.25/pull)2250
Unlimited · 5-pull (avg 300/pull)1500
Unlimited · 2-pull (avg 300/pull)600

Limited LUCKYBAG is capped at 3 per person (per the in-game notice); limited-stock bags restock on schedule after selling out.

PRM Star (P-Star) price table Top-up

Prices are in NT$ or HK$; HK$ is available for both iOS and Android and US$ for both platforms too — all identical with or without bonus events. The "+" part is bonus PRM Stars given for free; "Avg / star" = price ÷ total stars (e.g. iOS $230 / 1250 stars ≈ 0.184/star).

Official web store US$ / NT$ / HK$

Official web store: store.purenistam.com

"Avg / star" = price ÷ PRM Stars — lower is better value. The NT$ / HK$ lists show the store's local-currency prices.

Monthly packs Price list

At least one pack is released every month. Listed so far: the regular PRM-Star value pack and the New Year · Anniversary pack (all prices in NT$).

ContentsPrice NT$Avg / star
  • PRM-Star gacha-ticket value pack: limited to 1 purchase per account.
  • Regular pack: 1 purchase; the Anniversary (July) and New Year (January) packs (1 purchase) alternate with it.
  • BRAND pack: limited to 2 purchases — the only pack the same edition can be bought twice.
  • Anniversary and BRAND packs contain no free PRM Stars — replaced with materials or outfits.

VIP tiers Upgrade rewards

🍀 = cumulative rewards including all previous tiers. Tap a tier to expand. Buying packs also raises your VIP level!

After Legend, each set spending milestone grants: 4500 VIP points

Market rules Listing limits

Listings at onceMax 12 items
Sales per dayMax 15 items
Reset time00:00 JST (23:00 Taipei)

⚠️ Channels without official guarantees carry risk — trade at your own responsibility.

Rainbow Market floor prices Floor prices

The numbers below are floor prices. Only BRAND items are priced differently — everything else counts as "General". Price adjustments move in minimum steps of 10 stars.
💸 Rainbow Market charges a 30% transaction fee (seller receives = listing price ×70%) — see the Fee converter in the Quick Calc tab.

RarityGeneralBRAND
SR32004000
R10001300
N310330

Rainbow Market prices are more standardized — use these floor prices as a reference for high-age trades or when worried about lowballs.
⚠️ Popular items and high-rarity pieces do not follow these floor prices; if unsure, ask around for people's expectations and compare offers.

Time until the next drop

days
hrs
min
sec

📅 Last updated: 2026-08-04

Schedule predictions Reference only

  • Feb–Mar: Deux runs back-to-back; an "ex" prefix on the March Deux basket means a cherry-blossom theme.
  • May: By(e) release.
  • Aug: previously a Deux Fate theme slot (#10, #13) — but #16 turned out to be a grey-white lace dollhouse theme instead, so this pattern didn't hold this time.
  • Nov: melem release.
  • LUCKYBAG: January New Year bag, July Anniversary bag; October is expected to be a collab (subject to official announcements).
  • Encore Theater: about one basket every six months; the first rerun listing was Dec 1 last year (a simple vote-based rerun), then May 1 this year; the next round is estimated around Oct–Nov 2026.

What's coming next Updated 2026/08/02

  • 2026/08/01 (Sat)Deux #16 has launched — grey-white lace dollhouse theme (Solène / Altel), not the "dark-gothic continuation" that was predicted → closes 10/04 (Sun) 22:59 (confirmed).next up
  • 2026/10collab lucky bag (estimated); the next Encore Theater may land in Oct–Nov.
  • 2026/11/01 (Sun)melem #5 launches (predicted) → closes 2027/01/03 (Sun).
  • 2027/01New Year lucky bag.
  • 2027/02/01 (Mon)Deux #17 launches (predicted) → closes 04/04 (Sun).
  • 2027/03/01 (Mon)Deux #18 ex wafū launches (predicted) → closes 05/02 (Sun).
  • around 2027/05/07 (Fri)By(e) #4 launches (predicted) → closes 07/11 (Sun).
  • 2027/07anniversary lucky bag.

July's anniversary bag has already arrived; Deux #16 has launched on Aug 1, confirmed as a grey-white lace dollhouse theme — different from the previously-assumed Aug=Fate/dark pattern (#10, #13), so later theme forecasts have been marked down in confidence.

BRAND basket forecast Late 2026–2027

Table is wide — swipe left/right to see it all →

BrandPredicted windowPredicted theme · colorsConfidence
Deux #162026/08/01 – 10/04
Both open and close dates now verified
Confirmed: grey-white lace dollhouse theme, original-color characters Solène / Altel, R eyes Radiant / Radian. Not the previously-predicted dark-gothic continuation — the Aug=Fate/dark pattern didn't hold this time.Confirmed
melem #52026/11/01 – 2027/01/03
#3/#4 both opened Nov 1; closes the first Sunday of Jan
Red-black evolution, or a new saturated color (deep purple / dark green); likely the next dark fable (mirror → crow → lost sheep → Snow White → ?)High
Deux #172027/02/01 – 04/04
#11 and #14 both opened Feb 1
Half of the spring double, paired light/dark with #18 ex; the old assumption was "#16 dark → #17 light", but #16 actually ran light (lace/dollhouse), so the reference point has shifted — holding off on a color call for nowMed
Deux #18 ex2027/03/01 – 05/02
#12 and #15 both opened Mar 1
March wafū (sakura slot); the butterfly-moon direction may continue or concludeMed-high
By(e) #4~2027/05/07 – 07/11
launch creeps earlier yearly (05/24→05/09→05/08), always a Friday; closes a mid-July Sunday
Rose or new floral theme; 3-line system continues, older lines may return remixedMed-high

Basis: brand baskets always close Sunday 22:59 after ~2 months on sale; the Deux spring slot opens Feb 1 (#11/#14), extras Mar 1 (#12/#15); melem opens Nov 1 (#3/#4); By(e) opens on Fridays, creeping earlier each year. The Deux Aug 1 slot (#10/#13) was assumed to always run a Fate/dark theme, but #16 came out as a grey-white lace dollhouse theme instead — that pattern broke this time, so later theme forecasts are marked down in confidence accordingly. Re-verified 2026/08/02; next check ahead of melem #5's launch (around 2026/11). Reference only — official announcements prevail.

📅 Last updated: 2026-08-04

Q: Do brand baskets ever rerun? Brands

A: None has rerun so far. Once a basket closes, trading is the only route — and older years are generally more prized. (Per official announcements.)

Q: When do dyes expire? Dyeing

A: It differs by brand — Deux uses a rolling four-season window (at #16, baskets #13–#16 are dyeable); melem is current-basket only and candles expire the moment the basket ends; By(e) uses keys, so dyeing last season needs a pull in the current one. See "Brand dyeing".

Q: Can I dye without owning the original? Dyeing

A: Deux requires owning that item's original color; melem's mirror rooms do not require the matching outfit.

Q: How do I tell an original from a dye? How-to

A: The color worn in the big preview at the top is the original; the other thumbnails in the grid are dyeable versions. Originals are usually saturated or pure tones (white, silver, black, deep red, pink).

Q: When is the next brand basket? Prediction

A: Based on past patterns, Deux #16 is expected on 2026/08/01; melem is fixed to Nov 1 and By(e) to May. Full reasoning under "Schedule". For reference only — official announcements rule.

Q: If I switch platforms (iOS ⇄ Android), will my stars disappear? How-to

A: No, they won't disappear — stars just aren't shared between platforms. Switch back to your original platform and your stars will still be there.

Q: How do I hide / show my duplicate list? How-to

A: Top-right main menu → Wish List · Duplicate List → "public setting" at the top right of the duplicate list.

Q: How do I set whether new duplicates are auto-published? How-to

A: Top-right main menu → Settings → Auto-set duplicate list.

Q: About "gift trading" / "stars-for-items" trading? Info

A: These are trading activities players developed privately — not part of official gameplay; all carry risk, proceed at your own discretion.

Q: How do I self-fix bugs (crashes, missing head, art-photo screen stuck, etc.)? How-to

A: Settings (gear icon) → Clear cache. It won't delete your game data and solves most issues. ⚠️ Not guaranteed to work every time — contact official support if the problem persists.

Q: How do I issue a transfer (inheritance) code? How-to

A: Log in ➜ main menu ➜ Settings ➜ Issue transfer code.
※ Tip: if possible, issue a fresh code regularly and keep a screenshot — it may help you recover your account if you ever lose access.

Q: Which compositions can the artwork check detect? Artwork check

A: 18, in four groups — Lines: leading lines, radial/vanishing point, diagonal, horizontal, vertical, cross. Shapes: upright triangle, inverted triangle, group triangle, S-curve, C-curve. Placement: centred, golden-ratio point, edge tension, fill the frame. Rhythm: repetition, broken pattern, dutch tilt.
After analysing, the Composition tab lists all of them: the ones found in your piece light up with a score, the rest stay grey but visible, and tapping any of them jumps to the column for an explanation.

Q: Why wasn't a particular composition detected? Artwork check

A: Detection needs something measurable in the picture — a C-curve needs a continuous arc, a radial needs several lines converging on one point. Not being detected does not mean the composition is bad; it means that piece did not use that device.
Heavy filtering (bloom, haze, low contrast) also erases edges. When that happens the confidence is lowered automatically and flagged.

Q: Under (2), "How was this made?" — which do I pick? Artwork check

A: For most people, "Screenshot / composited layout" (the default) is right.
This choice decides which standards apply: only "A photograph" turns on exposure, focus and foot-room as faults — those are photographic criteria and mean nothing for a drawing or a composited layout. Pick "Drawn by me" for your own illustration.

Q: The report is long — I just want the verdict. Artwork check

A: The "In one line" card sits at the very top: overall verdict, the one thing to fix, the one thing to keep. Three lines and you are done.
The four tabs below (Summary / Composition / Colour & light / Detail) are there if you want them; ignoring them costs nothing.

Swatches Stored on this device

Build a harmonious set from colour-theory rules and keep it for later reference. For anything outside the rules, pick "Free" and add colours one by one.

1. Base colour

2. Harmony

My swatch library

Tap a chip to copy its code. Everything stays in this browser — it is gone if you switch device or clear site data.

Symbols Tap to copy

Symbols that work well in names, bios and post layouts. Tap one to copy it; tap several to build a string.

Colour convert HEX ⇄ RGB ⇄ HSL

Paste any format and the others follow. Accepts #A1B2C3, rgb(161,178,195), hsl(210,20%,70%) and the short #ABC form.

Chat boards Sections

Outside is a list of boards (like forum sections). Open one to enter its own chat room. Admins can create boards. English boards are separate from the Chinese site.

Boards

Loading…

Display name / Game ID

Edit after signing in so others can recognise you in each board.

Changelog actively maintained

Each site update will be listed here, so you can see the site is actively maintained — bug fixes, new tools, etc.

Version 5.4.5 current・removed leftovers pointing at an external service

Fixed: the artwork check told you to enable a feature that no longer exists

  • When the check decided there was no reliable evidence of text, the explanation ended with “pick ‘text / layout’ under (2), or turn on AI vision assist”. The AI vision assist interface was removed entirely in v5.2.4 — there is no switch to turn on and nothing to configure. It asked people to do something impossible, and left them thinking they had missed a setup step.
  • That sentence is gone, leaving only the thing that actually works. The dead code went with it: the branch that would have said “text located by AI vision assist” and could never be reached, five strings that were never displayed, and the empty entry in the report's tab map.
  • An old comment also survived in the source describing how images were sent to an external endpoint for semantic analysis. The feature was long gone but the comment read as though it were still there — exactly the impression v5.2.4 set out to remove. Replaced with one line: an uploaded image never leaves the browser.

Tidied: the Cloudflare files are no longer bundled

  • Site-wide ranking needs no setup, so those two files only made it look like there was homework outstanding. Removed; ask if the day ever comes. The site itself is unaffected — everything it reaches out to (counters, fonts, the anime face model) is automatic, and none of it requires you to sign up for or host anything.

Build tag updated to v5.4.5. ZH and EN in sync.

Version 5.4.4 site-wide ranking on a source that actually works

Fixed: site-wide ranking still would not load — a different approach rather than another guess

  • The last version fixed "nobody has clicked yet" being read as a failure, and it still would not load on the live site. That rules out the 404 case and means the bulk-read URL itself does not work — either it does not allow cross-origin requests, or the legacy API dropped it. There is no way to tell which from outside.
  • So it no longer depends on it. Every time the site adds one to a tab's counter the reply already carries that tab's site-wide total, and that call is known to work — the view counter has used it for a long time. Each reply is now remembered, and when the bulk read is unavailable the ranking is built from those real site-wide figures instead.
  • The cost is stated plainly on the card: in that situation only tabs you have opened can be listed, though every figure is a site-wide total rather than a local one. The more you visit, the more complete the list. If the bulk read ever starts working it goes back to the full table automatically.
  • When nothing can be read at all, the message now includes the actual error instead of a vague "try again later" — so the next time something breaks it is visible rather than guessed at.
  • A circuit breaker was added too: after two consecutive bulk-read failures it stops retrying for the rest of the visit, instead of firing dozens of doomed requests on every switch.

Build tag updated to v5.4.4. ZH and EN in sync. After uploading, open a few tabs before checking the site-wide ranking — a figure only exists once someone has clicked.

Version 5.4.3 site-wide ranking read fix

Fixed: the site-wide ranking always said it could not be read

  • On a freshly deployed site the site-wide ranking never loaded. The cause was “nobody has clicked this yet” being read as “the request failed”: the counter service returns 404 for a counter that has never been incremented, because it does not exist yet. The code treated any non-200 as an error, so on a site with no clicks all 22 tabs 404'd and it looked like the whole service was down.
  • A 404 is a zero, not a fault. Only a network error or an unexpected status counts as a failure now, and with no data the panel says the site-wide table is still filling up rather than telling you to try again later.
  • The irony is that the comment in the original code already said “a 404 is a zero, one missing tab must not sink the whole table” — the comment described the intent and the code did not implement it. Re-verified against four scenarios: nothing counted yet, partial data, fully offline, and the read URL changing shape.
  • One safeguard added while there: the documentation writes the read endpoint both with and without a trailing slash, so a failure on the first form now retries the second automatically instead of waiting for a release.

Fixed: the card's description still described the old setup

  • It still read “connect a free cloud counter to switch to site-wide”, but site-wide no longer needs anything connected. It now just explains the difference between the two modes.

Build tag updated to v5.4.3. ZH and EN in sync. Site-wide numbers only appear once someone has actually opened a tab — the first one counted will be yours.

Version 5.4.2 site-wide ranking with no setup, art-check fixes restored

Site-wide ranking works out of the box now — nothing to set up

  • It used to require creating a Cloudflare Worker, binding a database and pasting the URL back into the source before it did anything at all. It is already counting by default, using the same counterapi service this site already relies on for the view counter, the ratio tool and the colour generator — same namespace, no account, no key, no deployment. Switch to the site-wide tab and it is there.
  • The limits, for the record: counterapi allows 30 requests a minute, counted separately per URL path. Twenty-two tabs are twenty-two paths, and reading the whole table costs one request against each, so there is plenty of headroom.
  • The Cloudflare Worker has not been removed, it is now an optional upgrade: fill in the URL and it takes over, turning 22 reads into 1 and putting the data somewhere you control. Worth it only if the site ever gets busy enough for counterapi's limit to matter; ask for the code if that day comes.

Fixed: the first site-wide render fired twice the requests it needed

  • Both the render path and the boot path asked for the full table, and the cache was still empty when the first one asked, so both genuinely went out — 44 requests instead of 22 on counterapi. Only one read now runs at a time; later callers join the one already in flight.

Also fixed: the optional Worker lost hits as soon as more than one person used it

  • The Worker kept all 22 tab counts in a single KV key and incremented by reading the whole object, adding one and writing it back. That tests perfectly on your own and breaks with company: KV has no atomic increment, so two people clicking at the same moment both read 100, both write 101, and one hit vanishes. The more popular the site, the more it undercounts.
  • Two more limits that fail silently: one write per second per key (all 22 tabs shared one), and 1,000 writes a day on the free plan — after which counting simply stops for the day with no error, the numbers just stop moving.
  • Now on Cloudflare D1 (free SQLite): one atomic SQL statement, 100,000 writes a day. Setup gains two steps — create a database, run one CREATE TABLE — and in exchange the numbers are actually right.
  • The Worker now has an ORIGINS allow-list at the top; fill in your own domain and it only accepts browser requests from your site. Honestly: it does not stop anyone calling the API directly. Real protection needs a captcha or accounts, which is beyond a widget like this.

Fixed: three front-end problems in the ranking list

  • In site-wide mode the entry names come back over the network. An unrecognised key used to be printed as-is, which handed a remote server a way to write markup into the page. Only tabs the site actually has are accepted now, everything else is dropped — which also handles counts left in the database for tabs that no longer exist.
  • Ties were sorted with a hard-coded Chinese collation, on the English page too. It follows the page language now.
  • The 60-second anti-spam timer lived only in sessionStorage, inside a try that swallowed the failure — so in private mode, or wherever storage is blocked, there was no throttle at all and every tab switch posted. Memory holds the floor now; storage only carries it across reloads.

Restored: last round's art-check fixes had not been carried over

  • Four fixes derived from cross-checking twenty real pieces were lost in the v5.4.0 merge and are back: (1) the score and the fix list now agree on what is not being judged (six of the twenty were wrongly called out of focus, the lowest measuring 63); (2) the alignment check reads the glyph detector's own output instead of the block test that treats lace as text (one piece with no lettering measured 52% coverage), with tightened thresholds that take false reports from nearly-always down to one; (3) collages and multi-panel sheets are detected automatically (fired on the one 2×2 sheet and nothing else); (4) a mount on one side only can be recognised, at a raised threshold of 150.

Build tag updated to v5.4.2. ZH and EN in sync. The site-wide ranking needs no configuration at all — uploading the files is enough to start it counting.

Version 5.4.1 site-wide ranking

Feature ranking: Mine / Site-wide

  • Toggle between local and site-wide; local remains the default.
  • Connect a free Cloudflare Worker to aggregate anonymous tab opens.
  • Nothing is sent while GLOBAL_RANK_ENDPOINT is empty.
  • See cloudflare-rank-worker.js and the setup notes in the zip.

Build tag v5.4.1.

Version 5.4.0 judgement overhaul merge

Art check: full judgement overhaul (merged into later base)

  • Technical / style split: no hard faults → “composition holds, no mandatory fixes”.
  • Illustration / design safety net: only severe alignment or extreme clutter stay technical.
  • Near-mono / high-key / cinematic / Morandi clear hard list; focus, space, UV, subject scale → style notes.
  • Diptych, collage, circular, banner isolation, magazine type, line art no longer over-penalised.

Build tag v5.4.0 (later content base + judgement merge).

Version 5.3.4 bigger palette and text libraries

Expanded: the palette and text libraries behind the random generator

  • Palettes 45→70, themes 58→88, character traits 70→100. The new palettes lean towards tones the game's wardrobe actually has: Oat & Cream, Misty Pine, Moon White, Teahouse Lamp, Blue Hour, Paper Craft, Sea Salt Air, Stone Garden, Misty Lilac, Library Oak, Graphite Sketch, Mushroom Forest, Ash Rose, Aurora Night and more.
  • The 30 new traits keep to concrete behaviour rather than personality labels (paces without noticing while on the phone; always leaves the umbrella at someone else's place; says “it's fine” when it very much is not; gets more polite the angrier they are) — far more useful for an OC than an adjective.
  • Every new palette carries ten keywords, so they are reachable by typing a keyword and not only by rolling.

The whole weight table was recomputed, not just extended

  • How often a palette comes up is a property of the set, not of any one entry. The 25 additions are themselves mostly muted, so weighting them by the existing rule would have quietly moved the muted share from 58% to 63% — nothing breaks, the rolls just slowly stop varying. After recomputing, the library sits at 58% muted / 41% mid / 1% vivid, exactly where it was before.
  • This is the lesson written down when 20 palettes were added in v5.3.0, applied this time.

Fixed: keyword matching was won by whichever palette was declared first

  • Matching scored one point per matched term and broke ties by declaration order. But keywords are shared on purpose — eleven palettes list “gentle” — so a broad word tied across a dozen palettes and always returned the same one. Going from 45 to 70 palettes would only have made that worse.
  • Two changes: a longer matched term scores higher (a longer term is the more specific claim, capped so one long phrase cannot outvote several real hits), and a genuine tie is now broken at random instead of by declaration order. “Stone garden”, “second-hand bookshop” and “cyberpunk neon” now land reliably on the right palette, while “gentle” and “forest” spread across sensible candidates.
  • Same bug the title generator had in v5.2.9 — this time on the colour side.

Fixed: a large block of data had never been translated

  • The v5.3.0 expansion was added in Chinese only: 28 palette names, their five colour names and ten keywords each, plus 28 themes and 40 character traits, were all still Chinese on this page. All translated now — keywords included, since without those an English search could never reach those palettes at all.
  • One more oddity: the keyword list for the pearl palette contained a literal string reading typo, evidently left behind while editing. Replaced with a real word.

Build tag updated to v5.4.0. ZH and EN in sync; all 88 themes point at palettes that exist, all 70 palettes have five swatches and a weight, and no theme or trait is duplicated.

Version 5.3.3 grouped mobile menu + analysis fixes

Improved: the mobile tab menu is now grouped and collapsible

  • Twenty-two destinations in one flat list meant a long scroll — collapsing the nav bar was supposed to make choosing faster, and it did not. The sheet now shows the seven groups (Guide / Trading / Spending / Reference / Create / Learn / About) and slides exactly one open at a time. Opening the sheet expands whichever group holds the tab you are on, so the common case is still one tap; each header also shows where you are and how many items it holds.
  • The group headings used to be unclickable decorative text. Now that they are real buttons, the panel's accessibility role moved from listbox to menu, with aria-expanded and aria-controls added.

Fixed: two parts of the artwork check had never actually run

  • Text alignment check: the result was read about ninety lines before it was computed. JavaScript's variable hoisting means that is not an error — it just quietly reads “undefined”. So the “these text blocks share no alignment grid” advice had never once appeared, and neither had the rule that caps the composition score at 65 because of it. Moving the whole text-detection pass ahead of the scoring fixed it.
  • “Add an accent colour” advice: the condition compared the colour-richness number against the translated text label. Those are never equal, so that suggestion had never fired either.
  • Both are the same kind of bug: nothing breaks, it just silently does nothing — which is why they sat there so long.

Fixed: illustration mode said it wasn't judging, then marked you down anyway

  • The report is explicit about it: a large flat white is paint, not a blown highlight, and flat shading has no focus to miss — so illustration mode declines to judge them. The score never followed. Worse, illustration mode rewrites the “blown / crushed” verdicts into the neutral “high key / low key” wording, and neither of those strings matched any scoring branch, so both dropped straight to the failing value. A deliberate white-on-white piece was excused in the prose and marked to the floor in the number. Criteria that do not apply now cost nothing; criteria that genuinely reached a verdict still count.
  • This lifts illustration scores somewhat — they were being held down by penalties that should never have applied.

Fixed: things you could tap that went wrong

  • Kaomoji were shattered: the splitting pattern also cut at the spaces inside a face, so ( ; ᴗ ; ) became five separate buttons — “(”, “;”, “ᴗ”, “;”, “)” — and copying gave you a fragment. Symbols are separated by one space and kaomoji by two; each kind now uses its own separator.
  • Flower buttons were destroyed on first tap: the “✓” flash overwrote the button's text content, wiping out the colour swatch and layout inside it, and a second later only plain text came back. It now snapshots the full contents and restores those.
  • The colour-inspiration keyword wasn't escaped before going into the page. Everywhere else on the site handles this; this one spot was missed.
  • A failed image gave no feedback at all: a corrupt or unsupported file left the page silently unchanged, so you could not tell the upload had failed. It now says so, and releases the temporary URL it was holding.
  • Colour richness was inflated when no subject was found: the colour-gamut span multiplied two negative sentinels into a large positive, so “almost no colour information” read as “very rich colour”, and the style verdict followed it.
  • The random picker could retry forever in one edge case (all candidates identical); it now gives up after a bounded number of tries. Two elements that had never had any styling also got some.

English version: the missing translations

  • Symbols, kaomoji and flower meanings were untranslated — the category names and all 32 flower names and meanings were still in Chinese while the surrounding copy was English. All translated; the Japanese hanakotoba marker changed from 【和】 to [JP], and the copy format now uses English punctuation.
  • Chinese lookup keys were reaching the screen: the motif and mood tables are keyed in Chinese in both builds because the matcher indexes those keys — but a key is not a label, and the seasonal chips, the generated hashtags and every creative-workspace option came out in Chinese. What is stored is still the key; what is shown now goes through the language table.
  • A few more mixed-language leftovers: “非Symmetrical”, four fully Chinese captions inside the typography diagrams, one English sentence with a stray Chinese character in the middle, and a Korean character mistyped into one of the motif entries.

Build tag updated to v5.3.3. ZH and EN in sync.

Version 5.3.2 smart guide + local popularity

New: smart guide and on-device feature ranking (client-only)

  • Smart guide: as its own first tab “Smart guide”; pick a role (newbie / gacha / trade / brand / create) for a suggested tab path with one-tap jumps. Runs entirely in the browser — no backend, no login. Last role is remembered locally.
  • Feature popularity (this device): top tabs by how often you open them, stored in localStorage only — never uploaded. Stats can be cleared in one tap.
  • Both features are deliberately server-free: the guide is a static path table; the ranking is a local counter. No account, no tracking.

Build tag v5.3.2. ZH and EN in sync.

Version 5.3.1 art-check judgement fixes

Fixed: art-check false positives (cross-checked on real plates)

  • Warm / cool label: low-chroma grey and silver illustrations were often tagged "warm" because only high-saturation hues voted, so a few skin or accent pixels pushed the ratio over the line while cool greys abstained. Near-neutral pixels now vote via the Lab blue–yellow axis, low-chroma frames lean on measured Lab, and the "warm" DNA line requires both ratio and Lab to agree.
  • Unity and variety: restrained mono, cinematic and Morandi plates score low on variety by design; the geometric mean then looked like a fault. Low-chroma / high-harmony work no longer lists "unity and variety not differentiated" as a defect — that is the style, not an error.
  • Scattered focus: soft light, full moons and halos spread brightness so area-holding-half-the-weight looked "unfocused". When a face is detected, or a centre / radial read is strong, the hard "no landing point" penalty is skipped.
  • Uneven negative space: branch frames, dark mass and magazine title bands are often deliberate asymmetry. In design mode with text, vertical gaps are no longer a hard fault; in illustration mode with a centre / radial pattern, mild left–right imbalance is heavily down-weighted.
  • Black screen / visionState: a leftover undeclared variable could blank the result panel; it is now initialised, and errors draw text instead of a black canvas.
  • Aesthetics sub-tabs unclickable: listeners bound before lazy content injection never attached. Click handling is now document-level delegation so sub-tabs work after hydrate.

Build tag updated to v5.3.2. If the page still looks old after deploy, confirm GitHub Pages has the new files and force-refresh / clear cache on mobile.

Version 5.3.0 copy buttons claimed false success; much larger word pools

Fixed: "Copied" appeared even when the copy had failed

  • Following the data-c collision fixed last version, all three copy features were audited. The character generator was correct; the title generator and the workspace plan card were not - errors swallowed by an empty catch, the confirmation sitting outside then() so it showed regardless of the result, and no fallback at all.
  • navigator.clipboard only exists in a secure context, so anyone opening the file straight off disk lost copying entirely while the page kept reporting success. All three now share one helper: use the API where present, fall back to execCommand otherwise (including the setSelectionRange iOS needs), and say "copy failed" plainly when both routes fail. The confirmation only appears once the write has resolved.
  • Also fixed: clicking a copy button twice quickly recorded "Copied" as the button's original label, so the text never went back.

Expanded: every random pool

  • Palettes 17→45, themes 30→58, character traits 30→70, motifs 20→80, moods 8→28, title templates 47→519, backgrounds 10→32, accessory types 10→30, framings 7→19.
  • A player reported the palette dice always landing on vivid schemes while the game's wardrobe is mostly muted. Measured: only one of seventeen palettes averaged under 30% saturation, and every palette was equally likely. After adding muted palettes and weighting the draw, muted rose from 6% of rolls to 50% and vivid fell from 18% to 2%.
  • When twenty more were added later the weight table was recomputed in full - the easy mistake at that scale is letting the muted proportion quietly drift back.
  • The forty new traits describe behaviour rather than personality labels, which is more use when writing an OC.

Build verification added: all 58 themes point at palettes that exist - a wrong reference would not break the page, it would silently show no swatches. Eleven clipboard tests cover insecure contexts, denied permission, both fallbacks failing, and double clicks.

Version 5.2.9 Title generator: keyword matching and repetition

Fixed

  • Typing "beach" returned "sugar". Not a mis-read - the word was not in the table, and an unrecognised keyword fell through to a random pick. Of twenty ordinary words tested, eighteen were unrecognised. The real problem was not pool size but silently substituting something else, so an unknown keyword is now used literally.
  • Results felt repetitive for two reasons: all six titles shared one motif, and no record was kept of templates already used. Now the motif varies line by line and the last thirty templates are skipped - eight consecutive rolls produced 48 titles in 47 distinct shapes.
  • Tags padded themselves with an unrelated motif; searching "beach" produced #Piano. They now follow the keyword.
  • Also fixed a problem that only appeared once motifs grew from 20 to 80: matching scanned the table in order and took the first hit, so the single character 光 intercepted 月光. Longest match wins now. The bug was intermittent - two failures in five runs.
Version 5.2.8 New: decision helper, workspace, naming, workflow checklist

Added

  • Decision helper (at the top of the workspace): four either/or questions - figure or scene, light or dark, cute or grown-up, warm or cool - fill the seven workspace fields in about ten seconds. Each of the sixteen combinations maps to a hand-written direction rather than four independent dice, so results never collide the way "cute x ruins x cool" would. Every one carries a note specific to that combination.
  • Workspace: subject, mood, palette, background, framing, accessories, title. No fixed order; four filled fields produce a copyable plan card. Options are given by type, never by in-game item name - items go stale with each update, categories do not.
  • Naming and tags: five registers, with tags drawn from the keyword and the current month. No "trending tags" - that needs a server watching everyone's posts, and an unmaintained "trending" list is worse than none.
  • Workflow checklist: ten items across before / during / before posting. Each maps to something the artwork check actually measures, so the advice and the later verdict are one standard stated twice.

Build verification added: every feature declares both its markup and the code that drives it, and the build fails if either is missing. Twice a feature's JavaScript had been deleted while its interface remained - the page looked fine and the buttons simply did nothing.

Version 5.2.7 First load halved; two invisible bugs

Performance

  • The aesthetics column templates (246 KB) plus the trivia, brand-data and feedback tabs (129 KB) moved to an external file, loaded the first time one of those tabs is opened. First load 783 KB to 414 KB, transferred (gzip) 250 KB to 143 KB, DOM elements 2,823 to 1,460.
  • Loaded with a <script> tag rather than fetch, because fetch is blocked under file:// - opening index.html straight off disk would otherwise show a broken column.

Fixed

  • Three diagrams in the aesthetics column drew their arrowheads in the wrong colour: each defined <marker id="a2">, but url(#a2) resolves document-wide to the first one. All 275 SVGs now reference only their own definitions.
  • Removed 13.5 KB of dead code: the AI vision assist interface had been taken out but its implementation remained, including api.anthropic.com - which reasonably suggested the site sends artwork to a third party. It does not, and now it does not look like it might.
Version 5.2.3 Trivia "Common" tab not opening, accidental copy

Fixed

  • Found why the Trivia page's "Common" sub-tab (Naming & language / Allusions / Stories) wouldn't open and popped up "Copied" instead: those buttons used the attribute name data-c, which collided with the same attribute name used by the "tap to copy" feature in the Naming & Tags tool — a page-wide copy listener was grabbing them too, regardless of context. Quick Calc's tab buttons use the same attribute name and were being caught the same way.
  • Two-part fix: ① the copy listener now only fires inside the Naming & Tags tool's own container, not anywhere else on the page; ② the Trivia "Common" sub-tab was renamed to data-v, matching its sibling tabs, removing the name collision at the source.

Both language versions (including content-zh.js / content-en.js) were updated and syntax-checked.

Version 5.2.2 BRAND forecast table back to full names + real horizontal scroll

Fixed

  • The brand column in the BRAND basket forecast table is back to full brand names (Deux #16, melem #5…) instead of short codes. The previous fix squeezed columns into fixed percentage widths, which is what forced the short codes in the first place; this version gives the table its own minimum width (800px) so on narrow screens the whole table scrolls left/right instead of sacrificing readability. The code legend above the table is now a swipe hint instead.

Tested at a 390px-wide mobile viewport — full brand names no longer overlap, and the table scrolls to show everything.

Version 5.2.1 BRAND forecast table used short codes

Fixed

  • The brand column in the BRAND basket forecast table was still overlapping with the date column on narrow screens ("Deux #17" running into the date's "04" and reading like "07/04"). Brand labels are now short codes — D = Deux, M = melem, by = By(e), the number is the basket count (e.g. D17, M5, by4) — and the column width dropped from 14% to 9%, with the extra space going to the date and confidence columns. Added a one-line legend above the table.

Tested at a 390px-wide mobile viewport — no more overlap.

Version 5.2.0802 Character check reworked into Random Character Generator

Changed

  • Removed the "AI deep review" and questionnaire-scoring logic from Character check — it required players to bring their own Anthropic API key, which almost nobody has, so the core metrics (memorability, development potential) could only ever return low-confidence local guesses. Just cut it rather than keep a dead-end feature.
  • Renamed the tool to Random Character Generator. The old 10-field questionnaire is now a rollable character sheet: fill blanks only (leaves what you wrote untouched), reroll everything (overwrites the whole set, new), copy character sheet (one-tap copy to clipboard, new). Random generation now covers all 10 fields instead of 6 — added dedicated pools for name, backstory, relationships and hook.

Both language versions updated together and tested end-to-end (generate / reroll / copy) in a real browser with no errors.

Version 5.1.5 Random Inspiration now rolls separately

Changed

  • Random Inspiration used to bundle theme / trait / composition / palette into one draw — if you didn't like one part, you had to reroll the whole set. It's now four independent dice: keep the ones you like and only reroll what you don't, with a "Reroll all" button still available for a full redraw.
  • Palette is no longer tied to the theme — it rolls independently now. Also added 10 more entries each to the theme and trait pools, so combinations feel less repetitive overall.
Version 5.1.4 Color Inspiration now shows proportions

Fixed

  • The Color Inspiration generator used to show its 5 colors as equal-size swatches, which read like a flat 5-color mix and didn't reflect the basic "more dominant, less accent" color principle. It's now a single bar split by proportion (46/26/14/9/5%), with each color's role labeled below (Dominant / Secondary / Tertiary / Accent × 2) — closer to how a real palette is actually used, and better-looking too.
Version 5.1.3 brand-column overlap fix · Trade Smarts wording

Fixed

  • The "Brand" column in the BRAND basket forecast table was being forced to not-wrap by a site-wide numeric style (td.num), so longer names like "Deux #18 ex" overflowed and overlapped the "Predicted window" column next to it. Brand column now wraps normally again — no more overlapping text.
  • "Trade Smarts" → "How to decline politely" card: reworded two of the example phrases to sound more direct and closer to how the situation actually plays out.
Version 5.1.2 Confidence column wrap fix

Fixed

  • The "Confidence" column in the BRAND basket forecast table was too narrow — short values like "Confirmed" could get squeezed into a single-character-per-line stack. Widened the column (12%→20%) and set data cells to not wrap, so short confidence values now stay on one line.
  • The other three columns (brand / window / theme) were adjusted slightly to compensate; the theme column still gets the most space.
Version 5.1.1 schedule table follow-up fix

Fixed

  • Wrapped the "BRAND basket forecast" table in a horizontal-scroll container: even if the column-width math falls short in some edge case, the table now scrolls sideways within its own box at most, instead of stretching the whole page and pushing the "Confidence" column off-screen.

If the page still looks like the old layout after this update, double-check that the file live on GitHub Pages is this version, and hard-refresh / clear cache on your phone's browser — GitHub Pages can take a few minutes to roll out changes.

Version 5.1.0802 mobile usability pass

Fixed

  • Quick Calc → Ratio calculator: item type / condition / what-the-other-side-offers are now native dropdowns instead of button groups — no more tapping through a row of pills.
  • Schedule → BRAND basket forecast table now has fixed column widths (via colgroup), so the "predicted theme · colors" column no longer gets squeezed into a one-character-wide wrap that pushed the whole table off-screen; the date column is narrower and wraps to two lines, freeing up space for the column with the most text.
  • On narrow screens (≤680px), the row of 17 tab buttons at the top is replaced with a single "jump to section" dropdown, removing the need to scroll sideways through it; wider screens keep the original pill row. Both share the same switching logic and stay in sync.

All three came from the same feedback: swipe-based selectors felt tiring on mobile, so this pass moves them toward native dropdowns. Both language versions were updated and syntax-checked.

Version 5.0.0802 added Color Inspiration Generator

Added

  • New tab "Color Inspiration" (right after Character Check): merges the palette generator and the random-inspiration draw into one tool with four entry points, each returning a matching style palette — ①Keyword input, matched against the closest style palette; ②Extend from an uploaded image, pulling its dominant colors to find the nearest style; ③Paste a character description to reverse-match a style, with a one-click "pull in my Character Check answers" button; ④🎲Random inspiration, drawing a theme + character trait + composition suggestion + palette all at once — the composition suggestion reuses the same 18 composition types already documented in the Aesthetics column.
  • The palette library covers 17 style moods (ethereal, dark fantasy, cyberpunk, candy, forest, ocean, steampunk, gothic, wasteland, imperial court, neon nightlife, desert, wafu, mecha, polar, circus, retro), 5 colors each; the theme pool and character-trait pool each hold 20 entries; keyword matching ships with a synonym dictionary covering both Chinese and English input.
  • Wired up the same counterapi pattern already used for the page-view counter, under a new feature-colorinspire key — it increments by 1 each time a result is generated, shown below the button.

The keyword matcher, the image-to-palette nearest-neighbor matching, and the no-immediate-repeat logic for random draws were all tested in Node before being written into the file; both language versions were syntax-checked.

Version 4.9.0730 composition-read fixes

Added

  • Added a second detection path for diagonal composition: it now also fires when 4+ long lines run the same diagonal direction with at most 1 line running the opposite way. This fixes clearly-diagonal pieces (a reclining figure, a branch sweeping across frame) that previously went undetected.

Fixed

  • Fixed a false positive on "pattern break": previously it could fire even when no "repeating pattern" was detected at all; now pattern break can only appear alongside an actual repeating pattern.
  • Fixed a variable-naming collision that could let diagonal-detection changes accidentally affect the accuracy of radial composition readings.

This pass re-ran all 26 accumulated sample pieces and manually cross-checked each one, which is how the two bugs above were found.