We believe raffles should be verifiable, built on trust you can check, not trust you're asked to give.
We lock in every draw before tickets go on sale and publish proof. Anyone can check the result for themselves.
After every draw we publish the seed and a short script, so you can re-run the shuffle and confirm the winners.
Every winner is published on the site. No anonymous draws, no hidden results.
Most raffle sites ask you to trust them. They pick a winner behind closed doors and tell you the result. You have no way to know if the draw was fair, if it was tampered with, or if the winner was chosen before you even bought your ticket.
We don't think that's good enough. Every draw on PixelComps is provably fair, a fancy way of saying you don't have to take our word for it. You can check the result yourself, and so can anyone else.
Imagine we shuffle a deck of cards inside a sealed glass box. The moment a raffle is created, before a single ticket is sold, we lock the box and stick a unique tamper-proof seal on the front for everyone to see.
We can't reach in and reshuffle without breaking that seal, and if we tried, you'd know instantly, because the seal wouldn't match any more. When the raffle ends, we open the box in full view. You get to check the seal was never broken, and you can re-run the exact same shuffle to confirm the winners are real.
That's all “provably fair” means: the shuffle is locked in up front, and anyone can check with maths that it was never changed.
We lock in the draw before tickets go on sale. The instant a raffle is created, our system generates a secret “shuffle key”, a long, random number that decides the order winners come out in. It's created up front, before anyone has entered, and it stays fixed for the life of the raffle.
We publish a fingerprint of that key straight away. Right on the raffle page we show a unique “fingerprint” of the secret key. A fingerprint can't be worked backwards, so it gives nothing away about who'll win, but it belongs to that one key and no other. Because it's public from the start, we can't quietly swap the key later: a different key would have a different fingerprint, and everyone can see the original.
After the draw, we reveal the key, and you can replay it. Once the winners are picked, we publish the actual secret key. Anyone can then do two checks: confirm its fingerprint matches the one shown before tickets went on sale (proving we never changed it), then feed the key into the same shuffle and watch it produce the exact same winners (proving the winners came from that key and nothing else).
What this means for you: the shuffle key was fixed the instant the raffle opened, and its fingerprint was public from that moment. If we ever swapped the key or published winners it didn't produce, the maths wouldn't line up, and anyone in the world could prove it. You don't have to take our word for the result. You can check it.
The plain-English version above leaves nothing out, the “fingerprint” is a SHA-256 hash and the “shuffle key” is a cryptographic seed. Here is exactly how a draw is run, so you can reproduce any result for yourself.
The Fisher-Yates shuffle is a well-known, mathematically proven algorithm for producing an unbiased random permutation of a list. Every possible ordering has an exactly equal probability of occurring. It's the gold standard for fair shuffling and is used in cryptography, gaming, and statistical sampling.
We combine it with SHA256 hashing to make the shuffle deterministic, given the same seed, it always produces the same result. This is the key to verifiability.
Build the ticket pool. All confirmed tickets are collected and sorted by their internal ticket number in ascending order. This is the starting list.
Commit the seed at creation. When a raffle is created we generate 32 cryptographically random bytes (256 bits) using PHP's random_bytes(), sourced from the operating system's secure random number generator, as a 64-character hex seed. We immediately publish its SHA-256 hash (the commitment) on the raffle page and keep the seed itself unpublished until the draw. The commitment gives nothing away about the seed, and once it is public the seed can't be swapped.
Shuffle using SHA256. We iterate backwards through the list. For each position i, we compute SHA256(seed + ":" + i), extract a number from the hash, and use it to determine which element to swap with position i. This produces a completely deterministic shuffle.
Pick the winners. After shuffling, the first N elements of the list are the winners (where N is the number of prizes). Position 1 is the first element, position 2 is the second, and so on.
Reveal and publish. The revealed seed, its commitment hash, the algorithm name, total ticket count, and draw timestamp are permanently displayed on the raffle page. Confirm the seed hashes to the commitment that was shown before the draw, then replay the shuffle, anyone can verify.
Before the draw, the raffle page's "Provably Fair Verification" section shows the commitment (the seed's SHA-256 hash). After the draw it also shows the revealed seed and the ticket pool size. First confirm SHA256(seed) equals the commitment that was published before the draw, that proves the seed was never changed. Then copy the seed and ticket count into the script below and run it; the output will match the winners shown on the page.
Save this as a .php file and run it with php verify.php, or use any online PHP sandbox.
The verification script works with internal ticket numbers (1, 2, 3, ...) which are assigned sequentially as tickets are purchased. These are distinct from the randomised 5-digit display numbers you see on the site (e.g. #48271). The internal number determines draw position; the display number is cosmetic.
On the raffle page after a draw, we show both the display number and the winning position, so you can cross-reference.
Every winner is publicly displayed on the raffle page and on our Winners page. We don't hide results. When a raffle is drawn, the winners, their ticket numbers, and the cryptographic seed are all permanently published.
We may ask winners for ID verification before processing prizes. This protects against fraud and ensures prizes go to real, eligible participants. This is stated upfront on every raffle page, not hidden in fine print.
Some of our raffles are designated as live draw events. These raffles end at the scheduled time, but the draw itself is triggered manually, often during a live stream or event where participants can watch it happen in real time.
Live draw raffles show a "Pending Draw" status after ending, so you always know the draw hasn't happened yet. A live draw uses the same seed that was committed when the raffle was created, and the same algorithm, as an automatic draw. Triggering it by hand changes when it runs, not how.
We're building PixelComps to be the kind of raffle site we'd want to use ourselves: one where the draws are verifiable, the winners are public, and nothing happens behind closed doors. If you have questions about any of this, we're always happy to talk.