# Randomness - Random Tables, Dice, Images, Portraits, Stuff! ![[images/Randomness-Random-Tables-Dice-Images-Portraits-Stuff.webp]] [Watch on YouTube](https://www.youtube.com/watch?v=EIYdQ6yM17w) · 52:10 · Josh Plunkett · 2026-07-12 > Rebuilt from the video transcript on 2026-10-11. An earlier version was written from the chapters and frames because captions weren't available then. ## Outline ### 00:00 Intro - Josh "helped develop" Randomness with AI. He vibe-codes with **Claude**, which lets a non-coder finally build ideas he has had for years. - The origin is **Inspiration Pad Pro 3** (IPP3), a random generator from about 10 years ago that his community embedded in **Realm Works**. When people moved to Obsidian, the constant question was how to run IPP3 files. Embedding sort of worked, but not well. - **Javalent** said he no longer has time to maintain his plugins, which left **Dice Roller** gathering dust. Since dice go with randomness, Randomness is now also a dice roller. A portrait generator came next ("hold my beer"). ### 02:33 Installation - Obsidian's new plugin directory, with automated checks (a response to the flood of vibe-coded plugins), lists it at community.obsidian.md/plugins/randomness. The listing shows an "excellent" health rating, a review scorecard and a changelog. Josh fixed the scorecard items that mattered and left harmless ones alone. - Install with Add to Obsidian, or Settings → Community plugins (turn off restricted mode) → Browse "Randomness" → Install → Enable. "If you don't trust me, don't install my plugin." - Read the README. The plugin is complex now, with an API, integrations with other plugins, Dice Roller support and 3D dice. - **04:33** Settings: set the **generator root** folder (Josh uses `Z Templates/Randomness`). A one-click create-folder button appeared because he re-recorded the video three times while improving the plugin. Install the **Randomness guide** and the **help and reference** document. ### 06:12 Guide - The guide has a Start Here note plus numbered lessons. First example: an inline dice roll ("the goblin hits you for…"). Results can be **locked**, so they survive switching notes. Josh always hated that Dice Roller rerolled everything whenever you reopened a page and you lost the NPC you'd just made. - The syntax is Dice Roller's (`dice: 2d6+3` in backticks), plus a lock icon. ![[images/Randomness-Random-Tables-Dice-Images-Portraits-Stuff-t0640.webp]] - **07:33** Roll on a table you made: a plain markdown table with a block ID under it (`^snacks`, Shift+6 for the caret). Roll it with `` `rdm: [@snacks]` `` ("three olives on a sword", "cheese of unusual size"). - The **dice tray**: a dice icon in the left ribbon opens the Randomness tray. Rolling 5d20 shows a clear result that fades away. Josh chose this over scattering 3D dice because it's easier to read. ### 10:04 Roll some dice - Built-in examples: advantage and disadvantage (5e), exploding dice, Traveller, and Fate/Fudge dice. Edit mode shows examples you can copy. - Add `|render` to watch 3D dice tumble. - **Dice formula aliases** in settings: for example, a `sneak` alias that rolls and keeps the lowest. - There's a cheat sheet. ### 11:57 Random tables - A simple table with a block ID (`^taverns`) can roll one result or three at once (`3` in front). Lists can take an ID too. - Tables with columns: `@NPCs.name`, plus any random cell. - **Lookup tables** (requested that day): the first column is a dice formula with number ranges ("a traveler waves hello", "you find {2d6} coins", with nested dice in curly braces). - To roll from another note, put the note name before the ID. ![[images/Randomness-Random-Tables-Dice-Images-Portraits-Stuff-t1240.webp]] ### 15:18 Lock and unlock results - Lock in "the person you're meeting" and they stay. Command palette options: **Lock all unfilled rdm in current note** and **Roll all rdm in current note**. Josh hits a reroll bug on camera and plans to fix it before release. - The **once** modifier rolls the first time the note renders, writes the result in and keeps it, so you don't have to hard-code it. ### 17:17 Random lines, blocks and tags - Markdown tables are painful, so you can also roll a random line, a random block, or several random lines from a note. Use a note set aside as a list, or any note carrying a special tag. ### 18:23 Your first RDM file - For big or cross-vault generators, use a **`.rdm` file**. It's a text file with that extension, and the syntax is in the IPP3 style. - Install **Example generators** (and the portraits) from settings. `greetings.rdm` has `table:` blocks (greetings, farewell), each with one option per line, and comments for the reader. ![[images/Randomness-Random-Tables-Dice-Images-Portraits-Stuff-t2000.webp]] - An easy way to make one: create a note, use Show in system explorer, and rename it with F2 to `.rdm`. Then use `rdm: [@farewell]` anywhere ("Don't be a stranger"). Results can be locked and nested. ### 22:14 Bigger generators - Everything also works in a `randomness` code block inside a note. - **Tables calling tables**: encounter → @monster ("grumpy troll", "sleepy dragon", "very small ghost") guards @treasure ("chest of buttons", "golden sandwich", "map to somewhere"). - **Weighting**: number ranges on a d10 (1 = King of Rocks, 2–5 = shiny rock, 6–10 = plain rock). ![[images/Randomness-Random-Tables-Dice-Images-Portraits-Stuff-t2500.webp]] - **Variables** ("a box"): `set: name = [@name]` reuses one rolled name ("Lady Ravensworth raises an eyebrow… 'Yes,' says Lady Ravensworth"). - **If/then**: roll 1d20, and `when roll >= 10` gives "you made it", else "you fell in the mud". Josh jokes that community member Bloated Blowfish will break the world with this. - **Prompts**: a dropdown above the result (danger high/low) with `when prompt = low` ("three bats and an echo" vs "the dragon is home, run"). - **Filters**, chained with `>>`: upper, title case, a/an, implode, join, bold and more. Lookup tables, dictionaries and non-repeating deck picks are covered in the reference. ### 29:00 Sharing tables between notes - Tables in the generator root are found automatically. Tables inside an ordinary note are not, so they error out unless the note is referenced. - To reference one, add a `randomness` code block with **`use:`** pointing at the note, then roll `@encounter` or just a sub-table such as `@bargain`. - Josh recommends keeping generators in the root so you never need `use:`. He admits he got this wrong a few times himself. ### 33:21 Dice Roller and Fantasy Statblocks compatibility - A **Dice Roller compatibility** setting makes existing Dice Roller syntax work, which gives people a way to migrate off the unmaintained plugin. Report edge cases on GitHub with a sample note. - **Fantasy Statblocks** hit points and damage rolls work through it. Josh personally prefers rolling physical dice ("I want to roll rocks"). ### 34:45 Going further: random portraits - Install the optional **portrait pack** from settings, kept separate because it's a lot of art. A Portraits button then rolls random NPC faces. - The art is AI-generated but hand-cleaned. It took about a month and a half of pixel editing, background removal and alignment of ears, earrings, mouths and beards, using a multi-AI pipeline tool he built. It isn't perfect, since hair sometimes clips oddly. ![[images/Randomness-Random-Tables-Dice-Images-Portraits-Stuff-t3640.webp]] - **38:08** Options: Save PNG to the clipboard, or (the intended way) copy a locked code block into a note. An **inline portrait** works in ITS infoboxes. Names are rolled underneath the block version only. - A **builder** lets you choose sex, age and complexion. The random engine has compatibility rules (this hat doesn't go with this hair) that the manual builder skips. Planned: rename options and add per-part reroll buttons. ### 40:40 Fantasy Hub content - Install **Fantasy Hub content** from settings: a showcase bundle of mostly Pathfinder 2e generators, chosen because PF2e has a more flexible license. It's meant for learning. - His **Town Forge** plugin calls the Randomness API to put results into notes. That gets its own video. ### 42:01 Randomness panel - Generators in the root show up in the panel UI. Pin favourites such as the alchemy shop, armor shop or barracks. Roll one, then copy it into a note: a shopkeeper with race, mood, price range and items for sale. Prices are hard-coded but editable. - You can also paste a rollable table instead, and lock it. ### 44:33 Community repository - **Open submission form**: paste your `.rdm` contents and add attribution. No copyrighted material, or Josh will reject it. A review workflow publishes approved submissions to a community GitHub. - **Browse community generators** downloads shared folders, and Fantasy Hub is already there. The goal is for everyone to share name and colour generators instead of each building their own. ### 46:12 IPP3 generator repository - **NBOS** (nbos.com, an early-2000s-looking site) made Inspiration Pad Pro 3. Its **NBOS online exchange** has shared IPP3 files that are good for learning the syntax. - Randomness goes further than IPP3, for example with random markdown images. ### 47:28 Outro - He thanks Bloated Blowfish, whose heavy random notes once made the plugin churn and helped make it faster. - New users should start at obsidianttrpgtutorials.com → Getting Started, not the years-deep YouTube playlists. The plugin tutorials page has been redesigned with a recommended community plugins section. - **Warning about AI plugins**: Josh has seen three or four new dice-roller plugins this week alone. Check that a plugin is maintained, works and has users, and who made it, before you rely on it. Javalent was around for four years, but developers don't stay forever. - He thanks his Patreon supporters, since he's paying for tools. Join the Discord for help rather than asking in YouTube comments. ## Things Mentioned ### Obsidian plugins - **Randomness** (Josh Plunkett): inline `dice:` and `rdm:` rolls, locks, the dice tray, aliases, `.rdm` generators, portraits, a panel, an API, a community repository, and Dice Roller compatibility. Free. [Plugin page](https://community.obsidian.md/plugins/randomness) - **Dice Roller** (Javalent): the older dice and table plugin, now unmaintained. Randomness can replace it. Free. - **Fantasy Statblocks** (Javalent): statblocks whose dice rolls work through Randomness. Free. - **Town Forge** (Josh Plunkett): uses the Randomness API. A video on it is coming. - **ITS Theme** infoboxes: a place to put inline portraits. Free. ### Tools and websites - **Inspiration Pad Pro 3** (NBOS Software): a classic Windows random generator, plus the **NBOS online exchange** of shared generators. [nbos.com](https://www.nbos.com/) - **Realm Works**: older campaign manager that used IPP3 embeds. Paid. - **Claude**: AI used to vibe-code the plugin and for the portrait pipeline. - **Obsidian community plugin directory**, with health ratings and scorecards: [community.obsidian.md](https://community.obsidian.md/) - **GitHub**: for issues and the community generator repository. - [obsidianttrpgtutorials.com](https://obsidianttrpgtutorials.com/) and the Obsidian TTRPG Discord: free. - [Josh's Patreon / TTRPG Foundation Vault](https://www.patreon.com/JPlunkett): paid. ### TTRPG systems and products - **D&D 5e**: advantage and disadvantage dice examples. - **Pathfinder 2e**: the Fantasy Hub generators (shops, NPCs). - **Traveller** and **Fate/Fudge** dice notation. ## Bios ### Josh Plunkett Josh Plunkett is an Australian game master and YouTuber who makes tutorials on running tabletop RPGs in Obsidian. He runs the Obsidian TTRPG Community and sells the TTRPG Foundation Vault through Patreon. He now builds his own plugins (Randomness, Heraldry Weaver, Town Forge) through AI-assisted vibe coding. ### Javalent (Jeremy Valentine) Javalent is the developer behind several key Obsidian TTRPG plugins, including Dice Roller, Fantasy Statblocks, Initiative Tracker and Leaflet. He was active in the community for about four years and has said he no longer has capacity to maintain them. ### Bloated Blowfish Bloated Blowfish is an Obsidian TTRPG community member known for elaborate random-table notes. Josh used those notes to stress-test Randomness and make it more efficient.