Perchance.org popularized a specific approach to story generation: hierarchical weighted random tables. A story generator built on this model doesn't use a language model at all — it assembles stories by randomly selecting elements from nested lists, each element weighted by frequency. "A {hero} who must {quest} in {setting}" becomes "A reluctant blacksmith who must recover a stolen crown in a clockwork city." The randomness is transparent and the output is always grammatically correct, because the grammar is baked into the table structure.
This approach produces a fundamentally different kind of output than LLM story generation: shorter, more structured, and highly reproducible. Its strength is randomness with human-defined constraints; its weakness is that it cannot produce open-ended prose.
Weighted Random vs. LLM Story Generation
| Feature | Weighted random (Perchance style) | LLM generation |
|---|---|---|
| Output length | Short (1–3 sentences) | Unlimited |
| Grammar | Always correct (human-defined) | Usually correct (model-generated) |
| Consistency | Same structure every time | Variable |
| Customization | Edit the tables | Edit the prompt |
| Reproducibility | Same seed = same output | Same seed ≈ same output |
| Truly novel sentences | No — recombines defined elements | Yes — generates new prose |
| Speed | Instant (no AI call) | Seconds (API call) |
Best Uses for Each Approach
- Perchance/weighted random is better for:Tabletop RPG encounter tables, writing prompts that need structural variety, character name generators, loot tables, NPC relationship generators. Anything where you want "surprising within a defined space."
- LLM generation is better for: Actual story prose, dialogue, descriptions longer than a sentence, and cases where you want the generator to make creative connections between elements.
The Seed System
Both approaches support seeding: a fixed seed number produces the same output every time. This is useful for sharing stories ("use seed 42847 for the story I showed you"), for testing (verify your generator produces expected output), and for iterating (hold character elements fixed while randomizing the plot).
