Yellow Dot Decoder - Fake Prototype Playtest Cards

You may have seen @pfm discovery regarding prototype cards, I recommend you read his post which explains the situation very well.

So I decided to write a program to convert your pattern of yellow dots (which are in fact metadatas dropped during printing) into a readable format such as the print date, for example.

To clarify, this won’t work on all cards, as it depends on the quality of the scan, the printer in question and also the quality of the prototype card, so this tool is only useful if you’ve managed to recover your yellow dot pattern.

Here’s an example:

Link: https://cel-hub.art/yelloow-dots-decoder.html

It’s best to use it on a computer for now.

53 Likes

It is amazing to me how quickly you were able to make this, thank you!

4 Likes

Someone give this man a badge! Incredible resource, expeditiously made.

8 Likes

Thanks guys!

2 Likes

Incredible work!!

2 Likes

I’ve just added a marker with the year (YY), month (MM) and day (DD).

9 Likes

This is great; I don’t understand how some people can be so proficient. This offers incredible value as a tool for use within the TCG (and frankly, one the likes of CGC should be paying you for), but I’d imagine people will find great use of this outside the TCG too?

2 Likes

Update.

There are now markers for minutes (mm), hours (HH) and serial number.

3 Likes

How does this even work (like detailed explanation)

Nothing more than according to the original article:
https://w2.eff.org/Privacy/printers/docucolor/

Each column is read top-to-bottom as a single byte of seven bits (omitting the first parity bit); the bytes are then read right-to-left. The columns (which we have chosen to number from left to right) have the following meanings

  • 15: unknown (often zero; constant for each individual printer; may convey some non-user-visible fact about the printer’s model or configuration)
  • 14, 13, 12, 11: printer serial number in binary-coded-decimal, two digits per byte (constant for each individual printer; see below)
  • 10: separator (typically all ones; does not appear to code information)
  • 9: unused
  • 8: year that page was printed (without century; 2005 is coded as 5)
  • 7: month that page was printed
  • 6: day that page was printed
  • 5: hour that page was printed (may be UTC time zone, or may be set inaccurately within printer)
  • 4, 3: unused
  • 2: minute that page was printed
  • 1: row parity bit (set to guarantee an odd number of dots present per row)

For example:

This is 2024 because in the 8th column (YY) there are the 4th and 5th dots in yellow, giving a binary value of 00011000.

We can then convert this binary value into a decimal value, giving us 24 (16 + 8).

@pfm also explained the decoding process very well in his article

3 Likes