#!/usr/bin/env python3 """ Test script to check available fonts on Hugging Face Spaces Upload this to debug font issues """ import os import subprocess from PIL import ImageFont def list_system_fonts(): """List all available system fonts.""" print("=== System Fonts ===\n") # Common font directories on Linux font_dirs = [ "/usr/share/fonts", "/usr/local/share/fonts", "/usr/X11R6/lib/X11/fonts", "~/.fonts" ] for font_dir in font_dirs: expanded_dir = os.path.expanduser(font_dir) if os.path.exists(expanded_dir): print(f"\nšŸ“ {font_dir}:") for root, dirs, files in os.walk(expanded_dir): for file in files: if file.endswith(('.ttf', '.ttc', '.otf', '.otc')): full_path = os.path.join(root, file) # Only show CJK related fonts if 'cjk' in file.lower() or 'noto' in file.lower() or 'chinese' in file.lower() or 'japanese' in file.lower() or 'korean' in file.lower(): print(f" āœ“ {full_path}") def test_font_loading(): """Test loading specific fonts.""" print("\n=== Font Loading Test ===\n") test_paths = [ "/usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc", "/usr/share/fonts/truetype/noto-cjk/NotoSansCJK-Regular.ttc", "/usr/share/fonts/opentype/noto/NotoSerifCJK-Regular.ttc", "/usr/share/fonts/truetype/liberation/LiberationSans-Regular.ttf", "/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf", ] for font_path in test_paths: try: font = ImageFont.truetype(font_path, size=14) print(f"āœ… Successfully loaded: {font_path}") except Exception as e: print(f"āŒ Failed to load: {font_path}") print(f" Error: {e}") def check_fc_list(): """Use fc-list to find CJK fonts.""" print("\n=== fc-list CJK Fonts ===\n") try: result = subprocess.run(['fc-list', ':lang=ja'], capture_output=True, text=True) if result.stdout: print("Japanese fonts:") for line in result.stdout.strip().split('\n')[:5]: # Show first 5 print(f" {line}") result = subprocess.run(['fc-list', ':lang=zh'], capture_output=True, text=True) if result.stdout: print("\nChinese fonts:") for line in result.stdout.strip().split('\n')[:5]: # Show first 5 print(f" {line}") result = subprocess.run(['fc-list', ':lang=ko'], capture_output=True, text=True) if result.stdout: print("\nKorean fonts:") for line in result.stdout.strip().split('\n')[:5]: # Show first 5 print(f" {line}") except Exception as e: print(f"fc-list not available: {e}") def check_packages(): """Check if font packages are installed.""" print("\n=== Installed Font Packages ===\n") packages = ['fonts-noto-cjk', 'fonts-noto-cjk-extra', 'fonts-liberation', 'fonts-dejavu-core'] for package in packages: try: result = subprocess.run(['dpkg', '-l', package], capture_output=True, text=True) if result.returncode == 0 and 'ii' in result.stdout: print(f"āœ… {package} is installed") else: print(f"āŒ {package} is NOT installed") except Exception as e: print(f"āŒ Could not check {package}: {e}") if __name__ == "__main__": print("šŸ” Font Availability Test for Hugging Face Spaces\n") print("=" * 50) check_packages() list_system_fonts() test_font_loading() check_fc_list() print("\n" + "=" * 50) print("\nāœ… Font test complete!") print("\nIf fonts are missing, make sure packages.txt includes:") print(" fonts-noto-cjk") print(" fonts-noto-cjk-extra") print(" fonts-liberation") print(" fonts-dejavu-core")