This method is for tools that act as external programs to view your PNG folders (similar to a photo gallery but optimized for game assets).
RPG Maker uses standard PNG files for graphics (characters, tilesets, faces, battle backgrounds, etc.), but some may have transparent backgrounds or specific dimensions.
| Issue | Solution | |-------|----------| | PNG won't open | File may be corrupted or encrypted | | Transparency looks wrong | Use Photoshop, GIMP, or IrfanView | | Batch viewing needed | XnView MP or FastStone Image Viewer |
Extract the archive
Run the executable
Set your RPG Maker project path
First launch test
This solution requires Python 3 and the Pillow (PIL) library.
To install the dependency: pip install pillow
Save the following code as rpg_inspector.py:
import tkinter as tk
from tkinter import filedialog, ttk, messagebox
from PIL import Image, ImageTk, ImageDraw
import json
import os
class RPGAssetInspector:
def __init__(self, root):
self.root = root
self.root.title("RPG Maker Asset Inspector v1.0")
self.root.geometry("900x700")
# Variables
self.current_image_path = None
self.original_image = None
self.zoom_level = 1.0
self.show_grid = tk.BooleanVar(value=True)
# RPG Maker Standard Grid Sizes (for reference)
self.grid_modes =
"MV/MZ Character (48x48)": (48, 48),
"MV/MZ Tileset (48x48)": (48, 48),
"VX Ace Character (32x32)": (32, 32),
"Custom": None
self.setup_ui()
def setup_ui(self):
# Main Container
main_frame = ttk.Frame(self.root, padding="5")
main_frame.pack(fill=tk.BOTH, expand=True)
# Control Panel (Top)
control_frame = ttk.Frame(main_frame)
control_frame.pack(fill=tk.X, pady=(0, 5))
ttk.Button(control_frame, text="Open PNG", command=self.load_file).pack(side=tk.LEFT, padx=5)
ttk.Label(control_frame, text="Grid Mode:").pack(side=tk.LEFT, padx=(10, 2))
self.grid_combo = ttk.Combobox(control_frame, values=list(self.grid_modes.keys()), state="readonly", width=20)
self.grid_combo.set("MV/MZ Character (48x48)")
self.grid_combo.bind("<<ComboboxSelected>>", self.update_view)
self.grid_combo.pack(side=tk.LEFT)
ttk.Checkbutton(control_frame, text="Show Grid", variable=self.show_grid, command=self.update_view).pack(side=tk.LEFT, padx=10)
ttk.Button(control_frame, text="Zoom In", command=lambda: self.zoom(1.2)).pack(side=tk.RIGHT, padx=2)
ttk.Button(control_frame, text="Zoom Out", command=lambda: self.zoom(0.8)).pack(side=tk.RIGHT, padx=2)
# Info Panel (Bottom)
self.info_var = tk.StringVar(value="No file loaded.")
info_label = ttk.Label(main_frame, textvariable=self.info_var, relief=tk.SUNKEN, anchor=tk.W)
info_label.pack(fill=tk.X, pady=(5, 0), side=tk.BOTTOM)
# Canvas Area (Center)
canvas_frame = ttk.Frame(main_frame, relief=tk.SUNKEN, borderwidth=1)
canvas_frame.pack(fill=tk.BOTH, expand=True)
# Scrollbars
h_scroll = ttk.Scrollbar(canvas_frame, orient=tk.HORIZONTAL)
h_scroll.pack(side=tk.BOTTOM, fill=tk.X)
v_scroll = ttk.Scrollbar(canvas_frame, orient=tk.VERTICAL)
v_scroll.pack(side=tk.RIGHT, fill=tk.Y)
self.canvas = tk.Canvas(canvas_frame, bg='#2b2b2b', xscrollcommand=h_scroll.set, yscrollcommand=v_scroll.set)
self.canvas.pack(fill=tk.BOTH, expand=True)
h_scroll.config(command=self.canvas.xview)
v_scroll.config(command=self.canvas.yview)
def load_file(self):
file_path = filedialog.askopenfilename(filetypes=[("PNG Files", "*.png"), ("All Files", "*.*")])
if not file_path:
return
try:
self.current_image_path = file_path
# Load image ensuring RGBA mode for transparency
self.original_image = Image.open(file_path).convert("RGBA")
self.zoom_level = 1.0
self.update_view()
self.analyze_metadata(file_path)
except Exception as e:
messagebox.showerror("Error", f"Failed to load image:\ne")
def analyze_metadata(self, path):
"""Scans for associated JSON or calculates grid dimensions"""
filename = os.path.basename(path)
w, h = self.original_image.size
# Check for JSON file (RPG Maker MV/MZ style)
json_path = os.path.splitext(path)[0] + ".json"
json_data = "None"
if os.path.exists(json_path):
try:
with open(json_path, 'r') as f:
data = json.load(f)
# Specific logic for Tilesets
if "tilewidth" in data:
json_data = f"JSON Found: data.get('tilewidth')xdata.get('tileheight')"
except:
json_data = "JSON Found (Parse Error)"
# Calculate suggested sprite dimensions
# Standard characters are 4 columns x 2 rows (spritesheet) or 3 columns x 4 rows (animation)
cols, rows = 4, 2 # Default assumption for character sheets
cell_w = w // cols
cell_h = h // rows
self.info_var.set(f"File: filename | Size: wxhpx | Detected Cell: cell_wxcell_hpx | Meta: json_data")
def zoom(self, factor):
self.zoom_level *= factor
self.update_view()
def update_view(self, event=None):
if not self.original_image:
return
# 1. Resize Image
w = int(self.original_image.width * self.zoom_level)
h = int(self.original_image.height * self.zoom_level)
resized_img = self.original_image.resize((w, h), Image.NEAREST) # Pixel art needs NEAREST
# 2. Draw Grid (if enabled)
if self.show_grid.get():
selected_mode = self.grid_combo.get()
grid_w, grid_h = self.grid_modes[selected_mode]
# Handle Custom Logic here if implemented
draw = ImageDraw.Draw(resized_img)
# Calculate scaled grid size
scaled_gw = int(grid_w * self.zoom_level)
scaled_gh = int(grid_h * self.zoom_level)
# Draw vertical lines
for x in range(0, w, scaled_gw):
draw.line([(x, 0), (x, h)], fill="red", width=1)
# Draw horizontal lines
for y in range(0, h, scaled_gh):
draw.line([(0, y), (w, y)], fill="red", width=1)
# 3. Convert to Tkinter format
self.tk_image = ImageTk.PhotoImage(resized_img)
# Update Canvas
self.canvas.delete("all")
self.canvas.create_image(0, 0, anchor=tk.NW, image=self.tk_image)
self.canvas.config(scrollregion=self.canvas.bbox(tk.ALL))
if __name__ == "__main__":
root = tk.Tk()
app = RPGAssetInspector(root)
root.mainloop()
This feature is designed as a "Portable Developer Tool." rpg maker png viewer install
This viewer is ready for the next expansion phase:
While the title may sound technical, this essay covers the practical need for such a tool, step‑by‑step installation instructions, troubleshooting tips, and broader context for RPG Maker developers and modders.
Download Amibroker Latest Version. Please Download either 32 bit or 64 bit Version.