Many of the Pokemon playtest cards were likely printed in 2024

-Given what was said earlier about fakes in other card games, access to real files could result in much better fakes hitting the market. Not good.
-I hope that the alphas if fake were printed with in the past few years on a 2016 printer and not printed in 2016 on a 2016 printer. Because if this happened before 2020 that opens a whole can of worms.

7 Likes

Anyone who submitted their cards back to CGC got anything back/refunds yet?

6 Likes

Will cgc ever grade prototype type cards for Pokémon again or do you think they will stop risking it after this?

5 Likes

I found myself looking at only old cert PSA 9 shadowless holos recently. Almost 0% chance a 2×××× cert has been cared for by Kurt and a 0% chance it was printed by Akabane in 2024 lol.

21 Likes

I’ve managed to obtain color scans from 3 models of Konica Minolta Bizhub printers.
Conveniently the University prints the serial number and sticks it to the front of the printer. 600 x 600 dpi was the best quality I could get from the scanner, let me know if it’s not sufficient and I will attempt to get higher quality scans tomorrow.

https://i.imgur.com/k6Y1DN6.png
https://i.imgur.com/WyllMJD.png
https://i.imgur.com/Cdgweub.png

21 Likes


These are GREAT investments.

6 Likes

Is it possible that the Alpha Pattern isn’t from Konica Minolta, but rather from Epson? Potentially the Epson Stylus Color series?

https://corporate.epson/en/about/history/milestone-products/1994-5-stylus-color.html

It was released in 1994, and set a record for printer sales in Japan with 300k units sold.

12 Likes

Thank you for the data! It’s a good way to validate the hypothesis further. I’ll go through the process of what I did for each dot pattern and maybe it will clear up any details that weren’t fully explained in my last post.

Bizhub C300i

Looks like a 2019 release (earliest manual date).


source

Take the scan to Gimp, highlight the yellow dots by adjusting the color channels. Dots appear clearly against the blue rectangles . You can find where the pattern repeats quickly using this little equilateral triangle that repeats.


Note in this case I have to rotate the image 90 degrees too.

Then I bring it to Inkscape where I have a little set of gridlines that I stretch to fit the pattern.

And a simple python script to copy the dots and save them in a more computer-friendly format:

python code
import tkinter as tk
import numpy as np
from tkinter import simpledialog, messagebox
from PIL import Image, ImageDraw

GRID_ROWS = 16  # Grid height
GRID_COLS = 24  # Grid width
CELL_SIZE = 40  # Cell size in pixels
THICK_BORDER_COLS = {3, 6, 9, 12, 15, 18, 21}  # Thick border after these columns
THICK_BORDER_ROWS = {4, 8, 12}  # Thick border after these rows

class GridEditor:
    def __init__(self, root, rows=GRID_ROWS, cols=GRID_COLS):
        self.rows = rows
        self.cols = cols
        self.grid_data = np.zeros((rows, cols), dtype=int)

        self.canvas = tk.Canvas(root, width=cols*CELL_SIZE, height=rows*CELL_SIZE, bg="white")
        self.canvas.pack()

        self.draw_grid()
        self.canvas.bind("<Button-1>", self.toggle_cell)

        # Buttons
        self.btn_save_txt = tk.Button(root, text="Save Grid (TXT)", command=self.save_grid)
        self.btn_save_txt.pack(side=tk.LEFT, padx=5)

        self.btn_load = tk.Button(root, text="Load Grid", command=self.load_grid)
        self.btn_load.pack(side=tk.LEFT, padx=5)

        self.btn_save_image = tk.Button(root, text="Save Grid (PNG)", command=self.save_grid_image)
        self.btn_save_image.pack(side=tk.LEFT, padx=5)

    def draw_grid(self):
        """Draws the grid lines and fills in the black dots."""
        self.canvas.delete("all")
        for i in range(self.rows):
            for j in range(self.cols):
                x1, y1 = j * CELL_SIZE, i * CELL_SIZE
                x2, y2 = x1 + CELL_SIZE, y1 + CELL_SIZE
                fill_color = "black" if self.grid_data[i, j] == 1 else "white"
                
                self.canvas.create_rectangle(x1, y1, x2, y2, outline="gray", fill=fill_color, tags=f"cell_{i}_{j}")

        # Draw thick vertical borders after columns 3, 6, 9, etc.
        for col in THICK_BORDER_COLS:
            x = col * CELL_SIZE
            self.canvas.create_line(x, 0, x, self.rows * CELL_SIZE, width=3, fill="black")

        # Draw thick horizontal borders after rows 4, 8, 12, etc.
        for row in THICK_BORDER_ROWS:
            y = row * CELL_SIZE
            self.canvas.create_line(0, y, self.cols * CELL_SIZE, y, width=3, fill="black")

    def toggle_cell(self, event):
        """Toggles a cell between 0 (white) and 1 (black) when clicked."""
        col, row = event.x // CELL_SIZE, event.y // CELL_SIZE
        if 0 <= row < self.rows and 0 <= col < self.cols:
            self.grid_data[row, col] = 1 - self.grid_data[row, col]  # Toggle between 0 and 1
            self.draw_grid()

    def save_grid(self):
        """Prompts for a filename and saves the grid as a text file."""
        filename = simpledialog.askstring("Save Grid", "Enter filename (without extension):")
        if filename:
            np.savetxt(f"{filename}.txt", self.grid_data, fmt="%d")
            messagebox.showinfo("Success", f"Grid saved as {filename}.txt")
        else:
            messagebox.showwarning("Warning", "No filename entered. Grid not saved.")

    def load_grid(self):
        """Loads the grid from a text file (if available)."""
        filename = simpledialog.askstring("Load Grid", "Enter filename to load (without extension):")
        if filename:
            try:
                self.grid_data = np.loadtxt(f"{filename}.txt", dtype=int)
                self.draw_grid()
                messagebox.showinfo("Success", f"Grid loaded from {filename}.txt")
            except Exception as e:
                messagebox.showerror("Error", f"Failed to load {filename}.txt\n{e}")

    def save_grid_image(self):
        """Saves the grid as a PNG image."""
        filename = simpledialog.askstring("Save Grid as Image", "Enter filename (without extension):")
        if filename:
            img_size = (self.cols * CELL_SIZE, self.rows * CELL_SIZE)
            img = Image.new("RGB", img_size, "white")
            draw = ImageDraw.Draw(img)

            # Draw grid cells
            for i in range(self.rows):
                for j in range(self.cols):
                    x1, y1 = j * CELL_SIZE, i * CELL_SIZE
                    x2, y2 = x1 + CELL_SIZE, y1 + CELL_SIZE
                    fill_color = "black" if self.grid_data[i, j] == 1 else "white"
                    draw.rectangle([x1, y1, x2, y2], fill=fill_color, outline="gray")

            # Draw thick vertical borders
            for col in THICK_BORDER_COLS:
                x = col * CELL_SIZE
                draw.line([x, 0, x, self.rows * CELL_SIZE], fill="black", width=3)

            # Draw thick horizontal borders
            for row in THICK_BORDER_ROWS:
                y = row * CELL_SIZE
                draw.line([0, y, self.cols * CELL_SIZE, y], fill="black", width=3)

            img.save(f"{filename}.png")
            messagebox.showinfo("Success", f"Grid saved as {filename}.png")

if __name__ == "__main__":
    root = tk.Tk()
    root.title("Grid Editor - Click to Toggle Dots")
    app = GridEditor(root)
    root.mainloop()

Remember, it’s block 7, block 3, then block 2.

332 in base 6 is 128 in decimal (conversion)

The printer I suspect that printed the Seadra card is actually 129. I said it was probably 2019 so that puts us pretty much right there.

Bizhub C360i

Release year is also 2019


332 in base 6 is 128 in decimal (conversion)

So this is the same number as the C300i. When I looked it up, the C360i / C300i / C250i are the same printer line, just with different speeds: bizhub C360i C300i C250i Color Multifunction Printers | Konica Minolta ; Comparing Features: bizhub C250i vs C300i vs C360i

As I mentioned in the last post, I think the number encoded here has more to do with the internal components that apply the ink rather than the literal printer model, which is why different models could have the same number. It’s likely the serial number contains the specific information about C300i vs C360i.

Bizhub C3351i

322 in base 6 is 122 in decimal (conversion)

The release date of the C3351i looks to be 2024, but the number in the pattern would suggest it’s a bit older. The previous model, C3350i, was released in 2019 along with many other i-series models.

Notably, the models C3350i/ C3351i/ C4050i/ C4051i share the exact same Yellow Drum Unit, which would mean the main printing components inside are the same. I would guess all four of these models produce the same 122 code (despite being released years apart).


In summary, the additional three data points fit our expectations. Importantly, it seems the code can only be used to establish an “earliest possible print year” given that parts made in an earlier year can be reused in newer models.

Regardless, the evidence very much still suggests alpha pattern was printed by a modern printer.

year code brand model
2012 79 Konica Minolta Bizhub C754
2012 79 Konica Minolta Bizhub C754
2016 108 alpha pattern ?
2016 111 Konica Minolta Bizhub C658
2019 122 Konica Minolta Bizhub C3351i (ie. C3350i)
2019 128 Konica Minolta Bizhub C360i
2019 128 Konica Minolta Bizhub C300i
2019 129 seadra pattern ?
2021 141 Konica Minolta Bizhub AccurioPrint C4065
49 Likes

Every time @pfm posts something, I’m shouting in my head - why didn’t CGC check this?! What was the guarantee Akabane gave them?!

20 Likes

Thanks for the question. The reason this pattern is referenced with respect both Konica Minolta and Epson pattern appears to be a historical quirk.

First, I think there’s good reason to think this pattern did not exist pre-2000. The code 001 is found the printers that were released right after Minolta started mass producing their own inkjet printer heads, such as the Minolta Magicolor 2210.

Second, the connection between Epson and the Minolta pattern was established by the data collected by the EFF in 2005 (List of Printers Which Do or Do Not Display Tracking Dots | Electronic Frontier Foundation) and basically no similar wide-scale printer data collection project has happened since. So the data we have is very biased towards printers made between 2000-2005.

With Epson, it seems like the models that have this specific alpha dot pattern are the AcuLaser C2000 (~2001) and AcuLaser C900 / C1900 (2003).

Subsequent models use a different pattern

Epson Aculaser C3000

Epson Aculaser C4000

Epson Stylus Photo R1800

Epson Aculaser C1100

Interestingly, this youtuber https://www.youtube.com/@Abyssoft has been in contact with me and he was able to get 10+ scans of modern Epson prints from his fans (in addition to one from him and one from me). I did not find a dot pattern on any of them, which actually means that Epson seems to be one of the few companies today that actually doesn’t add yellow tracking dots. (HQ beta printed on an Epson? :slight_smile: )

Anyway, the AcuLaser C900 / C1900 are related models that use the same ink drums.

They also appear to use the same drum as the Minolta Magicolor 2300DL (all three have code 005 in the dot pattern).


Likewise AcuLaser C2000 and Magicolor 2210 (code 001) also appear to have compatible drums.


So putting this all together. The alpha pattern seems to be specific to Minolta and their production facility. Often times an original equipment manufacturer (OEM) will produce things for other companies. So for a brief window in the early 2000s, it seems that some Epson printers had their main components produced by Minolta (or at least they shared some third party OEM) - note they are both Japanese. Later, Epson would change to a different OEM and today it seems that they are being produced to not leave tracking dots.

So to answer your question, no I don’t think this particular dot pattern existed before the year 2000. I don’t think Epson is associated with the pattern outside of a small number of models from the early 2000s.

35 Likes

What’s the best way to contact you? I might have some interesting data to provide to you.

6 Likes

Is there a reason the images show 323 but you say 332? Did I miss something while trying to follow along?

6 Likes

If this is the case, the only potential exception I can think of is that the pattern appeared earlier in printers made for business rather than general release. As it stands, it is of course not looking good for the alpha dot pattern
 Which would mean essentially all is new
 :rofl:.

5 Likes

According to this dissertation, the Japanese Business Machine Maker Association sells software (to governments) to decode the dots. So if the U.S. FBI was interested in investigating this multimillion dollar case of fraud with CGC’s attorneys and affected parties, they would conceivably be able to solve the pattern with the accuracy needed in a court of law.

According to this German cryptography website, it is possible to impact the yellow identification dot codes by: 1) Using a software to print additional yellow dots, thus making the code intelligible, or 2) Using an empty yellow cartridge assuming that the piece printed doesn’t require yellow and that the printer will still function normally with an empty cartridge. Seeing that yellow is a crucial color for Pokemon card printing, this only leaves solution #1.

https://kryptografie.de/kryptografie/chiffre/yellow-dots-code.htm

The German software “Deda” enables automatic extraction, decoding and anonymization of document color tracking dots. Put in the wrong hands, it could lead to a more sophisticated forgery.

https://dfd.inf.tu-dresden.de

Seeing this, grading companies should know that the yellow dot tracking pattern may not be a reliable tool in the near future, and that grading and encapsulation of consumer printer-made “cards” should be highly scrutinized or wholly rejected to prevent continued fraud.

24 Likes

depending on the car, tires should be around 1k. I vote tires and a PSA 8 Shadowless Chuckie

8 Likes

I can confirm that deda is quite powerful (I tested the GUI version and the CLI module version myself).

8 Likes

Just like the time blocks, its not read simply left-to-right. It’s block 7,3,2

At first when I tried to decode it, I also assumed the order was 7,2,3. It gives similar results, since block 7 was putting things into roughly the right decade, but there were a lot of inconsistencies in order especially for 0XX codes. I realized the last two digits were probably a different order and it all lined up perfectly.

12 Likes

You can message me here

11 Likes

Thanks for explaining. Wanted to make sure i understood your research properly.

7 Likes

Anyone else get the Heritage brochure in the mail? Scheduled for Feb 21st.

It’s interesting every card says (Media Factory, 1996)

16 Likes