-
ReadyArt/Dark-Craving-31B-v3.0-GGUF
Text Generation • 31B • Updated • 2.83k • 5 -
ReadyArt/Dark-Craving-26B-A4B-v3.0-GGUF
Text Generation • 25B • Updated • 4.07k • 10 -
ReadyArt/Dark-Craving-31B-v2.0-GGUF
Text Generation • 31B • Updated • 2.54k • 8 -
ReadyArt/Dark-Craving-31B-GGUF
Text Generation • 31B • Updated • 1.62k • 5
Ready.Art
AI & ML interests
None defined yet.
Recent Activity
Ready.Art
Crafting efficient models with precision and care
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.
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.
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.
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.
that repeat
it can hold
it will reach for
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.
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.
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.
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.
Chat Completion Only
Where we test, and where support ends.
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.
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
Special Thanks
People who helped along the way, and who we are glad to name.
- Darkhn
- Dysfunctional
- Kurgan1138
-
ReadyArt/Dark-Craving-31B-v3.0-GGUF
Text Generation • 31B • Updated • 2.83k • 5 -
ReadyArt/Dark-Craving-26B-A4B-v3.0-GGUF
Text Generation • 25B • Updated • 4.07k • 10 -
ReadyArt/Dark-Craving-31B-v2.0-GGUF
Text Generation • 31B • Updated • 2.54k • 8 -
ReadyArt/Dark-Craving-31B-GGUF
Text Generation • 31B • Updated • 1.62k • 5