import os import zipfile import cairosvg import json def add_zip_suffix_to_all(folder_path): """ Adds '.zip' suffix to all files in the given folder (except already zipped). """ for filename in os.listdir(folder_path): file_path = os.path.join(folder_path, filename) if os.path.isfile(file_path) and not filename.endswith(".zip"): new_filename = filename + ".zip" new_file_path = os.path.join(folder_path, new_filename) os.rename(file_path, new_file_path) print(f"Renamed: {filename} -> {new_filename}") def extract_all_zip_files(folder_path): """ Extracts all '.zip' files in the given folder into a subfolder with the same name (without .zip). Skips if already extracted. Returns a list of extracted folders. """ extracted_dirs = [] for filename in os.listdir(folder_path): if filename.endswith(".zip"): file_path = os.path.join(folder_path, filename) extract_dir = os.path.join(folder_path, filename[:-4]) # remove .zip # Skip if already extracted if os.path.exists(extract_dir) and os.listdir(extract_dir): print(f"Skipping: {filename} (already extracted at {extract_dir}/)") extracted_dirs.append(extract_dir) continue os.makedirs(extract_dir, exist_ok=True) with zipfile.ZipFile(file_path, 'r') as zip_ref: zip_ref.extractall(extract_dir) print(f"Extracted: {filename} -> {extract_dir}/") extracted_dirs.append(extract_dir) return extracted_dirs def convert_svgs_to_pngs(folder_path, delete_original=False): """ Converts all .svg files in a folder (and its subfolders) to .png. Skips if the .png already exists. If delete_original=True, removes the .svg after conversion. """ for root, _, files in os.walk(folder_path): for file in files: if file.endswith(".svg"): svg_path = os.path.join(root, file) png_path = os.path.splitext(svg_path)[0] + ".png" # Skip if PNG already exists if os.path.exists(png_path): print(f"Skipping: {svg_path} (PNG already exists)") continue # Convert svg to png try: cairosvg.svg2png(url=svg_path, write_to=png_path) print(f"Converted: {svg_path} -> {png_path}") if delete_original: os.remove(svg_path) print(f"Deleted original SVG: {svg_path}") except Exception as e: print(f"⚠️ Failed to convert {svg_path}: {e}") def update_sprite_json(folder_path): """ Opens sprite.json in folder, adds 'objName' key with same value as 'name', and 'layerOrder' with value 0 right after objName. """ sprite_json_path = os.path.join(folder_path, "sprite.json") if os.path.exists(sprite_json_path): try: with open(sprite_json_path, "r", encoding="utf-8") as f: data = json.load(f) if "name" in data: if "objName" not in data and "layerOrder" not in data: new_data = {} for key, value in data.items(): new_data[key] = value if key == "name": new_data["objName"] = value new_data["layerOrder"] = 0 data = new_data with open(sprite_json_path, "w", encoding="utf-8") as f: json.dump(data, f, indent=4, ensure_ascii=False) print(f"Updated sprite.json in {folder_path} (added objName & layerOrder)") else: print(f"Skipping sprite.json in {folder_path} (objName/layerOrder already exists)") except Exception as e: print(f"⚠️ Failed to update sprite.json in {folder_path}: {e}") # Example usage: if __name__ == "__main__": folder = r"E:\Pratham\2025\Harsh Sir\Scratch Vision\assets\Backdrops" # Step 1: Add .zip suffix to files add_zip_suffix_to_all(folder) # Step 2: Extract all .zip files (skip if already extracted) extracted_folders = extract_all_zip_files(folder) # Step 3: Convert .svg to .png in each extracted folder (skip if .png already exists) for extracted in extracted_folders: convert_svgs_to_pngs(extracted, delete_original=False) # Step 4: Update sprite.json (add objName & layerOrder) update_sprite_json(extracted)