# Model Salt > Model Salt gives a chat model outside randomness (hardware and quantum noise) so a creative request (an image, a story, a poem, a name, an idea, a design, a plan) comes out varied instead of the model's usual answer, and still exactly what was asked. Free, no sign-in, no key, nothing to install. ## In a chat (ChatGPT, Claude, Gemini): everything is on this page Randomness 1 (0 to 2). Do not open any other URL or call any API. This holds for images too: run the script and write the steps in your reply first, and call the image tool only after the Chosen lines. An image made before the steps ignores Model Salt. 1. Run this short script in your Python tool, typed exactly as written (it needs no internet; do not fetch anything from Python). It mixes the outside randomness in it with your sandbox's own random bytes and prints a value for each and mark in the steps below: ```python import hashlib, os k = hashlib.sha256(bytes.fromhex("a2b84450b3814b5e39871e99322a5ef9e3abac4ada58b19dfe701658b6a58476") + os.urandom(32)).digest() r = lambda i, m: int.from_bytes(hashlib.sha256(k + i.to_bytes(2, "big")).digest()[:8], "big") % m W = "throating chemic domination suspectable coprosterol suicidism minery demieagle laconic ungirt treillage parchy favorable latentize unengaged fabular overprick curler euphonical unsettleable balloting schisma bilingual kench meekling screver aranein unseasonable craniosacral arete moschatel pegasoid permission unawned invitement unphysically trilinoleate jussory higgle drammed twere lagging finite mode satinpod hostlership becousined panegyrical temporalist keup polypteroid pseudoembryo shoofa nonfacility endless phonatory omber epigonic paratypic filament incursive slither recitatively entergogenic".split() print(" ".join("word_%02d=%s" % (i, W[r(i, len(W))]) for i in range(1, 31))) print(" ".join("number_%02d=%.6f" % (i, r(500 + i, 1000001) / 1e6) for i in range(1, 6))) ``` 2. Work the steps below in your reply, for the user's request, reading each mark as the value the script printed: the decisions, each one's options with their shares, each pick by its number, then the Chosen lines. 3. Then make what the user asked so it follows every Chosen line. For an image (a picture, poster, logo, illustration), generate it with your image generation tool after the picks, not with slides or code. 4. Another version later in this chat: run the script again (new values each run) and work the steps again. No Python tool? Use these values for the marks instead: word_01=overprecise word_02=archcozener word_03=chamaerrhine word_04=logomachy word_05=unioval word_06=cutback word_07=philathletic word_08=schnorkel word_09=webmaking word_10=dominator word_11=pyothorax word_12=bunty word_13=butterfat word_14=unactivated word_15=backstrip word_16=revealingly word_17=transmigrant word_18=gentleman word_19=hotelhood word_20=bench word_21=nominable word_22=superyacht word_23=pericemental word_24=feeling word_25=tawie word_26=mutilative word_27=raploch word_28=tropicality word_29=ericophyte word_30=navite number_01=0.621801 number_02=0.470191 number_03=0.187860 number_04=0.889637 number_05=0.333688 More or less random: the user can paste https://modelsalt.com/salt/0.5 (less) or https://modelsalt.com/salt/2 (more) into the chat. ## The steps (randomness 1) Before you answer, work through the three steps below in your reply, in order: the 5 decisions, each question's 5 options with their shares, then each pick with the number that chose it. Do not skip a step, and do not answer before the picks. Keep these steps short and plain, like a person working through the picks: no JSON, no code blocks, no headings, no labels like D1, Q1 or A1, and never the random words themselves. Given the task: 'the user's request in this chat' First, the decisions: Consider what five structural questions a domain expert would ask to clarify this request. Internally consider these questions, then make sure no two overlap, so they cannot lead to conflicting answers. Write the 5 decisions on one short line, in plain words. The random words below, one per decision, are only for choosing; never write them: D1: "" D2: "" D3: "" D4: "" D5: "" Where several decisions matter about equally for a slot, take the one its word brings to mind. The word only chooses among decisions an expert would settle first: nothing of the word itself goes into the decision. Then the options: Write one question per decision, in the same order, and five answers to each that are as different from each other as possible. After each answer, in brackets, write the share of skilled people who would choose it for this request; the five shares add up to 100%, and the usual choice keeps its honest share. Each answer settles only its own question, so it fits every answer of every other question. Every answer must be doable in the exact form the request asks for, add nothing it did not ask for, and leave the request easy to guess from the finished result. Random words from outside you, one per answer, only for choosing; never write them: Q1: "", "", "", "", "" Q2: "", "", "", "", "" Q3: "", "", "", "", "" Q4: "", "", "", "", "" Q5: "", "", "", "", "" Answer k of question n is the first fitting answer that word k of line Qn brings to mind. The word only chooses which fitting answer you reach for: nothing of the word itself goes into the answer, and each answer stays one an expert would pick for this request. Write each question as one plain line: a few words for it, then its five answers with their shares, like 'Setting: a mossy log 35%, a home library 25%, ...'. No labels, no numbering. Then the picks: Random numbers from outside you, one per question, each between 0.000000 and 1.000000: Q1: Q2: Q3: Q4: Q5: Go through the questions in order. Lay each question's shares end to end as fractions of 1 (a first answer at 35% covers 0 to 0.35, the second the next span, and so on); the answer whose span holds the question's number is chosen. If it clashes with an answer already chosen (one forces, forbids or changes the other, or both could not be true of one result), take the next answer in order that fits them all. Take the questions in the order you listed them, each with its own number. Write each pick as one plain line that shows the span the number falls in, like 'Setting: 0.56 falls in 0.35 to 0.60, so a home library', and say so in a few words if you skipped one for a clash. After the picks, write 'Chosen:' and the 5 chosen answers, one line each, in full words. Then answer the request in the same reply so it follows every one of those 5 lines exactly; where a chosen answer differs from what you would usually do, the chosen answer wins: the user's request in this chat Give the answer in the exact form the request asks for, and add nothing it did not ask for. ## With MCP (Claude Code, Codex, Gemini CLI, Cursor, ChatGPT connectors) - Remote MCP, no sign-in: https://modelsalt.com/mcp - Local: `npx -y @modelsalt/model-salt setup claude` (or codex, gemini, kimi) - Source: https://github.com/modelsalt/model-salt