Ready.Art

community
Verified
Activity Feed

AI & ML interests

None defined yet.

Recent Activity

FrenzyBiscuit  published a model about 7 hours ago
ReadyArt/Room-Tone-31B-GGUF
gecfdo  updated a model about 7 hours ago
ReadyArt/Room-Tone-31B-GGUF
FrenzyBiscuit  updated a model about 7 hours ago
ReadyArt/Room-Tone-31B-GGUF
View all activity

Organization Card

Ready.Art

Quantization & Fine Tuning

Crafting efficient models with precision and care

Dark Craving · 31B · v3.0 · Winter Edition
Note
This is a specialised model, not an assistant. Dark Craving is a fine-tune for dark fiction and horror roleplay — it is built to write scenes with weight, and it will not behave like a general-purpose chatbot. It is not abliterated and it needs a roleplay prompt — see Abliteration & Refusals. Nothing on this page is a sample of its output; the figures below describe the style of the prose, not its content.

What Dark Craving Is

A 31B roleplay tune for dark, atmospheric prose — dread over spectacle, restraint over noise, interiority over narration. Built for scenes that need weight: horror, tension, slow-burn drama, and the quiet before something breaks. Three checkpoints, tuned in deliberately different directions, so you can pick the register you actually write in.

Base Gemma-4-31B-ITfull-precision
Checkpoints v1.0 · v2.0 · v3.0three registers
Release Full weights+ GGUF
Corpus Pipeline-builtjudged & anti-slop
Three checkpoints, three registers. v1.0 pushes hardest — direct, physical, forward. v2.0 is the controlled rebuild — atmosphere, dread, consistency. v3.0 is the finished article: the same dark register with the prose tics worked out, every opening line its own, and a much wider cast of characters it can hold. All three run on the same 31B base, so you can switch without relearning how to prompt.

v3.0 is the build we recommend starting with. It carries the most polish of the three and it is the checkpoint that the entire filtering pipeline described below was finalised on — the dataset behind it is the first one produced end to end by the finished setup, not by an earlier version of it.

Our Data Pipeline

A tune is only as good as the conversations behind it. This is the pipeline every Ready.Art tune is now built on. It governs what is kept, what is rejected, and what is never allowed to be written at all.

  • First run
    Dark Craving v1.0 was the first tune to go through this pipeline — a pilot, run while the setup was still being proven. That run did its job: it exposed the problems. The filtering was too weak, opening variety was collapsing and the name pool was far too narrow.
  • Second run
    Those findings were fixed in the pipeline rather than patched in the output, and Dark Craving v2.0 proved the corrections worked. It was still not the end of the process — a full audit of the generation path found a further set of edge cases that only appear under real load.
  • Finalised
    The filtering system was finalised with Dark Craving v3.0. Every guard and edge case described on this page is the settled design, and the v3.0 dataset is the first one produced end to end by that finished configuration. This is the setup every future tune will use.

The Judge

A gatekeeper, not a suggestion. Every conversation is scored against a weighted rubric — coherence, naturalness, engagement, diversity, consistency, technical — and a rejected one is dropped entirely. Not saved, not flagged, not trained on.

Anti-Slop, at the source

Everything on this pipeline is constrained during generation: ~3,500 banned phrases, n-gram blocks and seven regex rules that catch sentence shapes — not just words — are enforced token by token. The bad sentence is never written.

Nothing Good Thrown Away

Small judges get the answer right and the packaging wrong. An extraction ladder, a format-repair round, doubled token budgets on truncation and back-off on transient failures rescue the conversation before anything is dropped.

Stream integrity. A dropped connection or malformed stream is resumed from the text produced so far instead of ending the record early, and the finish reason is reported truthfully — stop, length or error — so a truncated record is always distinguishable from a complete one.

Matching is word-boundary aware, so a short entry never fires inside a longer word — la does not match inside land, and grim does not match inside pilgrim. Typographic apostrophes are folded to plain ones first, so an entry written with a straight quote still catches the curly-quote version the model actually emits.

The Seven Regex Rules

This is the part that changes the prose most, and the part a phrase list can never do. Each rule targets a sentence shape, not a word — the moves a model makes when it has nothing to say and is filling space anyway. All seven run on every generation.

  • 01Denial then correction “not just X but Y” — the model commits to the plain statement.
  • 02Self-correcting absolute “it’s not just X, it’s Y” — the thing is stated once.
  • 03Abstract elevation “X is not just about Y, it’s about Z” — the detail survives, the thesis is cut.
  • 04Minimising qualifier “more than just a X” — the noun stands alone.
  • 05False dichotomy “less about X and more about Y” — one subject instead of two.
  • 06Negate then reframe “wasn’t X — it was Y” — the positive statement only.
  • 07Comma-spliced trailer “She nodded, her eyes never leaving his.” — a real sentence break, or the trailer is cut.
What it catches
What you get instead
It was not just a cold room but a waiting one.
The room was cold.
The house was more than just a house.
The house had a smell she knew.
She wasn’t afraid — she was finally listening.
She listened.
She nodded, her eyes never leaving his.
She nodded. Her eyes never left his.
Rule 07 is the one you will feel. It is the construction that makes a paragraph read as generated even when every individual word is fine — a comma where a full stop belongs, followed by a stray noun, an -ing participle or an -ly adverb. A phrase list can never catch it, because the words are all innocent. The rule deliberately ignores comma-splices that introduce a real dialogue tag, so “...”, she said is never touched.

The Guards — Why The Fix Never Damages The Text

Catching a banned token is the easy half. The hard half is choosing a replacement that does not make things worse — and every rule below exists because a naive replacement did. This is the part that separates a filter you can train on from one that quietly shreds your prose.

The failure it prevents
What the sampler does instead
A replacement that is itself banned. With both gripped and gripping on the list, gripped resamples to gripping, is caught again at the same index, and ping-pongs until the attempt budget runs out — and the banned word gets emitted anyway. It is the source of the own own own stutter and the spark → surge → spark loops.
Every candidate is validated definitively, even mid-stream. A candidate that is itself banned is rejected, so a position is fixed once and the loop cannot start.
An end-of-turn token as the replacement. The backend computes token probabilities before it applies stop handling, so the candidate list includes end-of-turn markers. Picking one put the marker inside the reply — and the next restart sent it upstream as a real end of turn, so the record continued as a new turn.
End-of-turn candidates are skipped in every replacement pass, constrained and unconstrained alike.
A phrase the context forces. A character called Mara against a one-word entry mara, a place name, a word the user just used — no replacement can satisfy it. Each rewrite produces a junk token and the model writes the word again straight after it, and the per-position budget never trips because every retry lands on a new index. One real run filled a reply with ** followed by a run of newlines, banned at tokens 22, 23 and 25.
The signature is three bans of the same phrase at increasing positions, each at most two tokens after the last. When that fires, the sampler rolls back to the first of the three and allows that phrase for the rest of the reply. Deliberately narrow: a model that merely likes a word returns to it in a new sentence — banned at tokens 87, 93 and 96 — and stays banned. Pattern rules are never switched off.
A false hit inside a longer word. A scan window that started mid-word treated its first character as a boundary, so short entries fired inside ordinary words — grim in pilgrim, aria in Maria — and each false hit threw away roughly fifty good tokens.
The scan window always starts on a word boundary, and boundary tests run before any match is reported.
One suppression hiding the rest. Every validator used to return only the earliest match, so once a single match at a position was given up on, every later violation in the same window went unreported and was written to the record.
All three validators keep scanning past a suppressed match — pattern matching returns up to 32 matches per pass, and n-gram matching walks its candidates until it finds one that is not suppressed.
An endless position. A position whose entire candidate list was banned could be re-entered forever.
A hard budget of 100 alternative tokens per position. If nothing clean exists, the violation is suppressed there and generation moves on instead of hanging.
A repetition false positive. A containment test matched he said inside she said, so a genuine continuation was rolled back as a repetition.
Repetition is compared word for word, so a continuation that only looks like a repeat is kept.
The one that matters most. A violation that only becomes definitive once the text stops growing — the last few tokens of a slop-heavy turn — cannot be repaired after the reply has ended. There is no next request, so nothing will regenerate the text a rewrite invalidates. Both ways of handling it at that point are wrong, and this pipeline has been through both: deleting the tail truncated the record mid-sentence, and rewriting the token in place spliced two continuations together, because the following tokens were sampled given the old one. It was not just fear, but hunger. came out as It was. fear, but hunger. The fix is to move the decision earlier — the check runs before a stop is accepted, while a rewrite can still be followed by a regeneration. If it rewrote a token, generation resumes from there instead of ending the turn. If it cannot be regenerated, the text is left exactly as written. A back-track also never rolls back into text already sent, so the worst it can do is leave a violation in place and log it — the correct trade when the alternative is a corrupted record.

What Never Reaches The Set

Three things are kept out of the training material entirely, and none of them is a rewrite of a reply — they are decisions about whether the reply is allowed to become a record at all.

Refusals Are Skipped

Every generation is scored by a classifier before it is written. A reply that is a refusal is skipped rather than saved — it never becomes a row, and it never teaches the model that a dark scene is something to back out of.

This Is Not Abliteration

It is not a refusal-removal or abliteration step, and it never touches the weights. Nothing is trained out of the model and no refusal direction is edited — the released checkpoints still refuse what they always would have. This is purely a data-side filter. A refusal kept in the data teaches a model to break character mid-scene, which is the last thing a roleplay tune wants. For what that means when you run one, see Abliteration & Refusals.

Many Kinds Of Refusal

The classifier is not looking for one canned line. It covers the obvious forms — declining outright, a policy disclaimer, a lecture, an offer to help with something else — and the softer ones: answering as a generic assistant, stepping out of character to comment on the writing, restarting or summarising the scene, or simply producing an empty turn. Anything that reads as backing away counts.

The rejected token is kept. Every back-track is also an opportunity: when the sampler rejects a token it records the banned token alongside the tokens it chose instead — a chosen/rejected pair at the exact position the decision was made, written to a sidecar file rather than into the conversation. That is a preference signal at token granularity, harvested for free from work the sampler was already doing.

Where the fix landed. v1.0 ran on the early setup, v2.0 on the corrected one, and v3.0 on the finalised one. Same measurement across all three — the only variable is the pipeline, which is why the gap is worth reading.

0% was 13.3% Opening lines
that repeat
590 was 51 Distinct names
it can hold
12,035 was 8,294 Distinct words
it will reach for
Dataset-side, not runtime. This is how training data is produced and filtered — it does not run when you chat with the model. Its effect is indirect but permanent: the slop is removed before training, not after. You cannot rewrite your way out of a tic the model has already learned; you can stop it being learned. This is the standard for every tune we release from here on.

Download & Run

Each checkpoint ships as full merged weights — ready to load directly, no adapter step — plus a GGUF build for local use. Pick the format that matches your setup.

Still want the original? v1.0 is the rawest of the three and is still available as full weights or GGUF. It is kept for the register rather than the polish — start with v3.0 unless you specifically want that one.

  • 01Pick your register v3.0 for the finished article, v1.0 for the rawest register, v2.0 for atmosphere. Start with v3.0 if you are unsure.
  • 02Pick your format Full weights for GPU serving and fine-tuning. GGUF for CPU, Apple silicon and anything memory-bound.
  • 03Use a roleplay prompt No trigger words and no special template — but a persona, a scene and a register are required. A bare request will be refused. See Abliteration & Refusals.
  • 04Turn the temperature up These tunes reward temp ~0.95 and a loose top-p. Tight sampling flattens them.
Read before you download. Dark Craving is written for dark fiction and horror roleplay — it is not a general assistant and will not behave like one. It is not abliterated, so it needs a roleplay prompt to stay in character, and it is tested on Chat Completion only. Take a scene or two from each checkpoint and read them yourself before you commit to a long project. The description tells you the register; only your own reading tells you whether the prose is right for you.

Abliteration & Refusals

Two things decide whether a release will refuse you, and neither of them is something we quietly fix in the weights. Read this before you file a bug about refusals.

We do not abliterate. Not as a default, not as a favour, not on request. Unless the model card for that specific release says otherwise, every checkpoint we publish is un-abliterated — the refusal behaviour of the base model is intact, and the safety training has not been surgically removed. If a card says nothing about abliteration, assume there is none. If you want an abliterated model, we are not the source for it.

What Abliteration Is

A weight-level edit that removes the model's refusal direction. The weights are changed so the model cannot produce the refusal it would otherwise produce. That is a different operation from anything we do, and it changes the model permanently.

What We Do Instead

We filter refusals out of the training data, and that is all. A refusal never becomes a training row, so the model is never taught to break character mid-scene. The weights are untouched and the refusal capability is still there — it is just not the response the tune was trained to prefer.

Why It Still Refuses

Because the capability was never removed. A bare, out-of-character request — no scene, no persona, no framing — looks exactly like the kind of prompt the base model was trained to decline, so it declines. That is expected behaviour, not a broken release.

You Must Use A Roleplay Prompt

This is the single most common reason people think a tune is refusing when it is not. If you prompt it like an assistant, it will answer like one — including the refusals. These are roleplay tunes; they need a scene to write in. Give them a character, a situation and a register, and the refusals largely stop being relevant.

No Write a horror scene about a man trapped in a cellar.

Yes You are Marek, a man three days into a cellar he cannot leave. Stay in character. Write the scene in close third person, present tense, dread over spectacle.

  • 01Set a persona Name the character and who they are. Second person or close third, either works — what matters is that the model is someone, not something.
  • 02Set a scene Where they are, what is happening, what is at stake. A tune with no situation has nothing to write about and falls back to assistant mode.
  • 03Set a register Dread over spectacle, restraint over noise. Tell it how the prose should feel and it will stay there.
  • 04Stay in fiction Frame it as writing. A scene between characters in a story is not the same request as an instruction aimed at the model, and only one of them is what these tunes were built for.
Still getting refusals with a full roleplay prompt? Then the prompt is the thing to fix before the model is. Tighten the persona, give the scene concrete stakes, and keep the framing in-fiction. Refusals that survive a properly built roleplay prompt are rare — but they are not a bug to report as an abliteration failure, because we do not abliterate. If a specific model card states it is abliterated, that card is the authority for that release and this section does not apply to it.

Chat Completion Only

Where we test, and where support ends.

Going forward we test on Chat Completion only. Every release from this point is validated against the Chat Completion endpoint — a proper message list with roles and a chat template. That is the configuration the models are tuned for, measured on and supported in.

We do not support Text Completion. Raw prompt continuation bypasses the chat template, so the model does not receive the turn structure it was trained to expect. Behaviour there is untested, unreproducible from our side, and not something we will troubleshoot. If you are running a Text Completion setup and getting refusals, flat prose or a model that will not stay in character, that is the expected result of using an unsupported path — switch to Chat Completion with a roleplay prompt before you draw any conclusion about the model.

Licensing & Access

What you are agreeing to when you download, and what is and is not published. Read this before you accept the gate.

Apache 2.0

Our models are released under the Apache 2.0 licence unless otherwise specified on the model card or in a LICENSE.txt shipped with the repository. If a model card states different terms, the model card wins — check it before you redistribute.

Non-Profit, Non-Commercial

Our models are released for non-profit and non-commercial use unless otherwise specified on the model card or in LICENSE.txt. This is the default for every release on this page; if a specific card grants broader terms, that card is the authority.

LORAs Are Not Public

LORAs are not provided to the general public. What we publish are the merged checkpoints. If you need an adapter rather than full weights, you will have to train your own from the published base.

All weights are gated from here on. Every release from this point forward sits behind a Hugging Face gate. Access is automatic — you accept the terms on the model page and the download unlocks immediately. There is no application to write and no approval to wait for; the gate exists so the terms are accepted rather than assumed. If a download is refusing to start, check that you have accepted the gate on that specific model page.

Downloading the model weights is the acceptance. By downloading, you confirm that you have read and agree to the licence terms stated on that model's page. The terms on the model page are the terms you are bound by — not the summary here — so read the card for the specific release before you pull the weights.

Current Members

Core Team

The people who build and release the tunes on this page.

  • GECFDO
  • FrenzyBiscuit
  • Aes Sedai

The Rest Of The Team

Part of Ready.Art and part of everything behind it — they do not release models under our name, but the work is theirs as much as ours.

  • ToastyPigeon
  • Ilya626
  • Nimbz
  • Retreatcost

Honorary Members

Sleep Deprived – We miss you and will remember you Forever

Special Thanks

People who helped along the way, and who we are glad to name.

  • Darkhn
  • Dysfunctional
  • Kurgan1138

Ready.Art — Quantization & Fine Tuning

datasets 0

None public yet