Free - Wbfs

def auto_organize_games(self, source_dir, target_device): """ Automatically find all Wii games in a directory and add them to WBFS """ wbfs_extensions = {'.iso', '.wbfs'} games_found = [] # Recursively find all game files for root, dirs, files in os.walk(source_dir): for file in files: if Path(file).suffix.lower() in wbfs_extensions: full_path = os.path.join(root, file) games_found.append(full_path)

def remove_game(self, device, game_id): """Remove a game by its ID (e.g., 'SMNE01' for New Super Mario Bros)""" print(f"Removing game {game_id} from {device}...") try: subprocess.run(['sudo', 'wbfs-tool', device, 'rm', game_id], check=True) print(f"✅ Game {game_id} removed!") except subprocess.CalledProcessError: print(f"❌ Failed to remove game {game_id}. Check ID and try again.") ➕ Add game (ISO/WBFS) to WBFS drive") print("3

if not games_found: print("❌ No game files found!") return 🆕 Format drive/partition as WBFS (ERASE ALL)") print("6

def format_partition(self, device): """Format a partition as WBFS (WARNING: ERASES DATA)""" print(f"\n⚠️ WARNING: This will erase ALL data on {device}") confirm = input(f"Type 'YES' to format {device} as WBFS: ") if confirm == "YES": try: subprocess.run(['sudo', 'wbfs-tool', device, 'init'], check=True) print(f"✅ Successfully formatted {device} as WBFS") except subprocess.CalledProcessError as e: print(f"❌ Format failed: {e}") else: print("Format cancelled.") SMNE01): ") self.remove_game(device

def interactive_menu(self): """Main interactive menu""" while True: print("\n" + "="*50) print("🎮 WBFS MANAGER - Wii Backup File System Tool") print("="*50) print("1. 📋 List all games on WBFS drive") print("2. ➕ Add game (ISO/WBFS) to WBFS drive") print("3. ➖ Remove game from WBFS drive") print("4. 💾 Extract game from WBFS to file") print("5. 🆕 Format drive/partition as WBFS (ERASE ALL)") print("6. 📊 Check disk usage") print("7. 🚪 Exit") choice = input("\nSelect option (1-7): ").strip() if choice == '1': device = input("Enter WBFS device (e.g., /dev/sdb1): ") self.list_games(device) elif choice == '2': device = input("Enter WBFS device: ") game_file = input("Enter path to ISO/WBFS file: ") self.add_game(device, game_file) elif choice == '3': device = input("Enter WBFS device: ") self.list_games(device) game_id = input("Enter Game ID to remove (e.g., SMNE01): ") self.remove_game(device, game_id) elif choice == '4': device = input("Enter WBFS device: ") self.list_games(device) game_id = input("Enter Game ID to extract: ") output = input("Output filename (e.g., game.iso): ") self.extract_game(device, game_id, output) elif choice == '5': device = input("Enter device to format (e.g., /dev/sdb): ") self.format_partition(device) elif choice == '6': device = input("Enter WBFS device: ") self.check_usage(device) elif choice == '7': print("👋 Goodbye!") break else: print("❌ Invalid choice. Please try again.") def main(): if os.geteuid() != 0: print("⚠️ This tool requires root privileges for most operations.") print("Please run with: sudo python3 wbfs_manager.py") sys.exit(1)