-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.
Anyone who submitted their cards back to CGC got anything back/refunds yet?
Will cgc ever grade prototype type cards for Pokémon again or do you think they will stop risking it after this?
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.
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
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.
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 |
Every time @pfm posts something, Iâm shouting in my head - why didnât CGC check this?! What was the guarantee Akabane gave them?!
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? )
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.
Whatâs the best way to contact you? I might have some interesting data to provide to you.
Is there a reason the images show 323 but you say 332? Did I miss something while trying to follow along?
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⊠.
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.
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.
depending on the car, tires should be around 1k. I vote tires and a PSA 8 Shadowless Chuckie
I can confirm that deda is quite powerful (I tested the GUI version and the CLI module version myself).
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.
You can message me here
Thanks for explaining. Wanted to make sure i understood your research properly.