Epog Logs

πŸ“‹ Logs πŸ† ConRank

Offline Sim Setup Guide

The offline simulator runs the same engine as sim.epoglogs.com on your own machine. No iteration cap, no server queue, no rate limits. Each download is tied to your Discord account and one machine; if you change PCs, you re-bind on the new one (7-day cooldown).

Contents
  1. Requirements
  2. Quick start (5 minutes)
  3. Full Paladin walkthrough
  4. Subcommands
  5. Creating sim configs
  6. License lifecycle (renewal, hardware swap)
  7. Troubleshooting
  8. Privacy

Requirements

No Node, no Go, no install steps. The binary is one file.

Quick start (5 minutes)

  1. Visit /sim-license while logged in.
  2. Click ⬇ Download for your OS on the sim you want to run. Save the file somewhere stable β€” C:\Users\<you>\Tools\epoch-sim-paladin.exe on Windows, or ~/bin/epoch-sim-paladin on macOS/Linux (then chmod +x it).
  3. Back on the page, click Activate. A modal pops with a 5-minute one-time token.
  4. Open a terminal (PowerShell, Terminal, or your favorite). Navigate to the folder with the binary. Then run:
    .\epoch-sim-paladin.exe enroll <paste-token>
  5. Configure a build on the web sim (sim.epoglogs.com/paladin etc), click Export .json, save the file next to the binary.
  6. Run it:
    .\epoch-sim-paladin.exe run my-config.json

Full Paladin walkthrough

Concrete example end-to-end. Same shape works for Hunter and Rogue β€” just swap paladin for the sim name.

1Configure your build on the web sim

Visit sim.epoglogs.com/paladin/ and configure:

Run a sim once on the web (the Run Sim button) to sanity-check the numbers before exporting.

2Export the config

In the Loadouts row at the top of the page, type a name (e.g. "ony-paladin-burst") into the loadout name field, then click Export .json. Your browser downloads ony-paladin-burst.json. Move it next to the CLI binary.

The exported JSON looks roughly like this (most fields elided):

{
  "class": "paladin",
  "sim": { "iterations": 5000, "duration_secs": 300 },
  "talent_ranks": { "20218": 5, "20335": 5, "20911": 3, ... },
  "gear": [
    { "slot": "head", "id": 22422, "enchant": "ZG +Str/+Crit" },
    { "slot": "mainhand", "id": 19019, "enchant": "Crusader" },
    ...
  ],
  "buffs": { "blessing_of_might": "improved", "windfury_totem": true, ... },
  "encounter": { "boss": "atressian", "armor": 4640 }
}
πŸ’‘ The JSON shape is the same one the web sim posts to /run, so anything you can configure in the GUI works in the CLI. You can also hand-edit the file in any text editor β€” useful for batch comparison runs (just duplicate the file, change one field, re-run).

3Run the sim

Open PowerShell (or Terminal on macOS/Linux), navigate to the folder, and run:

.\epoch-sim-paladin.exe run ony-paladin-burst.json

Expected output:

[OK] License valid (donor25, 27 days remaining)
[sim] 5000 iterations Γ— 300s (seed=1716831204871235000)...
[sim] done in 14.2s
[result] DPS: 2417.8 Β± 91.3 (mean Β± stddev)
[result] Written to ony-paladin-burst-result.json

4Inspect the result

The result JSON lives next to your config:

{
  "sim_key": "paladin",
  "iterations": 5000,
  "duration_secs": 300,
  "mean_dps": 2417.8,
  "median_dps": 2415.1,
  "stddev_dps": 91.3,
  "p5_dps": 2273.2,
  "p95_dps": 2569.5,
  "build_version": "0.1.3"
}

p5 / p95 are the 5th / 95th percentiles β€” useful for comparing two builds: if one build's p95 doesn't beat another's mean, the "improvement" is noise.

5Iterate

To A/B test two builds:

copy ony-paladin-burst.json ony-paladin-tank-armor.json
# edit the new file to swap one gear slot or talent
.\epoch-sim-paladin.exe run ony-paladin-burst.json --seed 42
.\epoch-sim-paladin.exe run ony-paladin-tank-armor.json --seed 42

Same --seed on both runs eliminates RNG noise from the comparison; the delta you see is purely from the config change.

Subcommands

CommandPurpose
enroll <token>One-time activation. Get the token from /sim-license.
run <config.json>Run a sim. Result lands at <config>-result.json.
status [--verbose]Show license + hardware fingerprint. --verbose prints (redacted) fingerprint inputs.
versionPrint binary version + sim_key + os/arch.

Flags for run:

FlagDefaultMeaning
--iter Nfrom config, else 1000Iteration count
--duration Nfrom config, else 300Encounter duration (seconds)
--seed Stime-basedRNG seed. Set to a fixed value for reproducible runs.
--out PATH<config>-result.jsonResult output path

Creating sim configs

Use the web sim's Export .json button β€” it's the canonical path. The JSON is the same shape both the web sim and the CLI consume, so loadouts are freely interchangeable. The web sim's Import .json button reads the same files back, so you can edit a config in your text editor and re-load it on the web sim to see the GUI version.

License lifecycle

Renewal (every 30 days)

When the license expires, the next run prints:

error: license expired.
       Get a fresh enrollment token from https://epoglogs.com/sim-license
       and run: epoch-sim-paladin enroll <token>

Visit the URL, click Activate / Renew, run enroll again with the new token. Same flow as first-time.

New PC / hardware swap

The hardware fingerprint covers CPU brand, boot disk serial, primary NIC MAC, and machine UUID. Swap any one of those and run refuses with "fingerprint does not match". To re-bind:

  1. Go to /sim-license on the new machine.
  2. Click Activate, get a token, run enroll on the new machine.
  3. The server detects the hardware change. 7-day cooldown per sim β€” if you rebound within the last week the request is rejected.

The cooldown deters "share with one friend then rebind back" abuse.

Subscription ends / refund

Your existing 30-day token keeps working until expiry β€” we won't kill in-flight licenses. Renewal will fail at the 30-day mark.

Troubleshooting

"license: too few hardware identifiers (stripped VM?)" β€” the binary needs at least 2 of: CPU info, boot disk serial, MAC address, machine UUID. Some VMs / sandboxes strip all of these. Run status --verbose to see which sources are present. If you're on bare metal and still hit this, ping me on the Epog Logs Discord with the (redacted) output.

"signature does not verify" β€” corrupted license file, or you upgraded from a test/staging build to production. Delete ~/.epoch-sim/<sim>.license.jwt and run enroll again.

"sim does not match this binary" β€” you're trying to use e.g. a Paladin license with a Hunter binary. Each binary has its sim baked in; download the matching one from /sim-license.

connection refused during enroll β€” server side might be down or your firewall is blocking outbound HTTPS. Retry; if it persists, check epoglogs.com is reachable from your machine.

Antivirus flags the binary β€” unsigned Windows executables (Go or otherwise) occasionally trigger SmartScreen / Defender heuristics. The binaries contain no malware (the source is at github.com/Defcons/epoch-sim). Add a Windows Security exclusion for the file, or grab the SHA-256 from the download page and report as clean to your AV vendor.

Privacy

Run status --verbose to see exactly what goes into the hash; the inputs are redacted to first-4 + last-2 chars so you can paste the output anywhere.

Reporting bugs

File issues at github.com/Defcons/epoch-sim/issues with:

Or hop in the Epog Logs Discord.

← Back to downloads