{"library":"psd-tools","title":"psd-tools","description":"psd-tools is a Python package designed for working with Adobe Photoshop PSD and PSB files, enabling reading, writing, and manipulation of layer data and compositions. The current version is 1.15.0.post1, and it maintains an active release cadence with frequent updates and improvements. It provides functionalities for low-level file structure access, raw layer image export, and limited layer composition.","language":"python","status":"active","last_verified":"Sun May 17","install":{"commands":["pip install psd-tools","pip install 'psd-tools[composite]'"],"cli":null},"imports":["from psd_tools import PSDImage"],"auth":{"required":false,"env_vars":[]},"quickstart":{"code":"import os\nfrom psd_tools import PSDImage\n\n# Create a dummy PSD for demonstration if it doesn't exist\ndummy_psd_path = 'example.psd'\nif not os.path.exists(dummy_psd_path):\n    # In a real scenario, you'd have an actual PSD file\n    # For this example, we'll just demonstrate the API calls.\n    # Creating a valid PSD requires more complex operations\n    # than a simple placeholder here.\n    print(f\"Please create a dummy '{dummy_psd_path}' file to run this quickstart.\")\n    print(\"Example: a small Photoshop file with a few layers.\")\nelse:\n    psd = PSDImage.open(dummy_psd_path)\n\n    # Print basic info\n    print(f\"Opened PSD: {psd}\")\n\n    # Composite the entire PSD and save as PNG\n    composite_image = psd.composite()\n    composite_image.save('example.png')\n    print(f\"Saved composite image to example.png\")\n\n    # Iterate through layers and save each as a separate PNG\n    for i, layer in enumerate(psd):\n        print(f\"Layer {i}: {layer.name} (Type: {layer.kind})\")\n        if layer.is_pixel_layer() and layer.visible:\n            layer_image = layer.composite()\n            if layer_image:\n                layer_image.save(f'{layer.name.replace(\" \", \"_\")}.png')\n                print(f\"Saved layer '{layer.name}' to {layer.name.replace(\" \", \"_\")}.png\")","lang":"python","description":"This quickstart demonstrates how to open a PSD file, composite the entire image, and then iterate through its layers, saving each visible pixel layer as a separate PNG. Ensure you have an 'example.psd' file available for the code to run successfully.","tag":null,"tag_description":null,"last_tested":null,"results":[]},"compatibility":{"tag":null,"tag_description":null,"last_tested":"2026-05-17","installed_version":"1.11.0","pypi_latest":"1.17.0","is_stale":true,"summary":{"python_range":"3.10–3.9","success_rate":70,"avg_install_s":8.7,"avg_import_s":0.8,"wheel_type":"wheel"},"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"composite","exit_code":1,"wheel_type":null,"failure_reason":"build_error","import_side_effects":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"psd-tools","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.71,"mem_mb":14,"disk_size":"116.8M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"composite","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":10.9,"import_time_s":0.53,"mem_mb":14,"disk_size":"305M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"psd-tools","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":5,"import_time_s":0.54,"mem_mb":14,"disk_size":"110M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"composite","exit_code":1,"wheel_type":null,"failure_reason":"build_error","import_side_effects":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"psd-tools","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":1.1,"mem_mb":15,"disk_size":"125.5M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"composite","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":10.8,"import_time_s":1.09,"mem_mb":15,"disk_size":"320M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"psd-tools","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":4.5,"import_time_s":1.05,"mem_mb":15,"disk_size":"118M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"composite","exit_code":1,"wheel_type":null,"failure_reason":"build_error","import_side_effects":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"psd-tools","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.82,"mem_mb":15.2,"disk_size":"113.7M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"composite","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":10.6,"import_time_s":0.85,"mem_mb":15.2,"disk_size":"305M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"psd-tools","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":4.4,"import_time_s":0.86,"mem_mb":15.2,"disk_size":"106M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"composite","exit_code":1,"wheel_type":null,"failure_reason":"build_error","import_side_effects":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"psd-tools","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.7,"mem_mb":15.4,"disk_size":"113.1M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"composite","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":10.8,"import_time_s":0.79,"mem_mb":15.4,"disk_size":"303M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"psd-tools","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":4.3,"import_time_s":0.88,"mem_mb":15.4,"disk_size":"106M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"composite","exit_code":1,"wheel_type":null,"failure_reason":"build_error","import_side_effects":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"psd-tools","exit_code":1,"wheel_type":null,"failure_reason":"build_error","import_side_effects":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"composite","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":13.3,"import_time_s":0.65,"mem_mb":13.8,"disk_size":"309M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"psd-tools","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":12.5,"import_time_s":0.61,"mem_mb":13.8,"disk_size":"309M"}]}}