Python API for Photoshop.
The example above was created with Photoshop Python API. Check it out at https://loonghao.github.io/photoshop-python-api/examples.
Has been tested and used Photoshop version:
Photoshop Version | Supported |
---|---|
2025 | β |
2024 | β |
2023 | β |
2022 | β |
2021 | β |
2020 | β |
cc2019 | β |
cc2018 | β |
cc2017 | β |
You can install via pip.
pip install photoshop_python_api
Since it uses COM (Component Object Model) connect Photoshop, it can be used in any DCC software with a python interpreter.
import photoshop.api as ps
app = ps.Application()
doc = app.documents.add()
new_doc = doc.artLayers.add()
text_color = ps.SolidColor()
text_color.rgb.red = 0
text_color.rgb.green = 255
text_color.rgb.blue = 0
new_text_layer = new_doc
new_text_layer.kind = ps.LayerKind.TextLayer
new_text_layer.textItem.contents = 'Hello, World!'
new_text_layer.textItem.position = [160, 167]
new_text_layer.textItem.size = 40
new_text_layer.textItem.color = text_color
options = ps.JPEGSaveOptions(quality=5)
# # save to jpg
jpg = 'd:/hello_world.jpg'
doc.saveAs(jpg, options, asCopy=True)
app.doJavaScript(f'alert("save to jpg: {jpg}")')
Use it as context.
from photoshop import Session
with Session(action="new_document") as ps:
doc = ps.active_document
text_color = ps.SolidColor()
text_color.rgb.green = 255
new_text_layer = doc.artLayers.add()
new_text_layer.kind = ps.LayerKind.TextLayer
new_text_layer.textItem.contents = 'Hello, World!'
new_text_layer.textItem.position = [160, 167]
new_text_layer.textItem.size = 40
new_text_layer.textItem.color = text_color
options = ps.JPEGSaveOptions(quality=5)
jpg = 'd:/hello_world.jpg'
doc.saveAs(jpg, options, asCopy=True)
ps.app.doJavaScript(f'alert("save to jpg: {jpg}")')
Thanks goes to these wonderful people (emoji key):
This project follows the all-contributors specification. Contributions of any kind are welcome!
Get-ChildItem "HKLM:\SOFTWARE\Classes" |
?{ ($_.PSChildName -match "^[a-z]+\.[a-z]+(\.\d+)?$") -and ($_.GetSubKeyNames() -contains "CLSID") } |
?{ $_.PSChildName -match "Photoshop.Application" } | ft PSChildName
How to get a list of COM objects from the registry
- https://theiviaxx.github.io/photoshop-docs/Photoshop/
- http://wwwimages.adobe.com/www.adobe.com/content/dam/acom/en/devnet/photoshop/pdfs/photoshop-cc-javascript-ref-2015.pdf
- https://github.com/lohriialo/photoshop-scripting-python
- https://www.adobe.com/devnet/photoshop/scripting.html
- https://www.youtube.com/playlist?list=PLUEniN8BpU8-Qmjyv3zyWaNvDYwJOJZ4m
- http://yearbook.github.io/esdocs/#/Photoshop/Application
- http://www.shining-lucy.com/wiki/page.php?id=appwiki:photoshop:ps_script
- http://www.tonton-pixel.com/wp-content/uploads/DecisionTable.pdf
- http://jongware.mit.edu/pscs5js_html/psjscs5/pc_Application.html
- https://indd.adobe.com/view/a0207571-ff5b-4bbf-a540-07079bd21d75
- http://shining-lucy.com/wiki/page.php?id=appwiki:photoshop:ps_script
- http://web.archive.org/web/20140121053819/http://www.pcpix.com/Photoshop/char.html
- http://www.tonton-pixel.com/scripts/utility-scripts/get-equivalent-id-code/index.html
- https://github.com/Adobe-CEP/Samples/tree/master/PhotoshopEvents
- https://evanmccall.wordpress.com/2015/03/09/how-to-develop-photoshop-tools-in-python
Welcome to the development guide for the Photoshop Python API project! This section outlines our development practices and standards to ensure code quality and consistency.
# Clone the repository
git clone https://github.com/loonghao/photoshop-python-api.git
cd photoshop-python-api
# Install dependencies with Poetry
poetry install
# Install pre-commit hooks
pre-commit install
# Run tests
pytest
We maintain high code quality standards through automated tools and consistent style guidelines:
-
Style Guide: We follow the Google Python Style Guide with project-specific adjustments:
- Line length: 120 characters max
- Docstrings: Google style format
- Quotes: Double quotes preferred
-
Quality Tools:
- Black - Code formatting
- isort - Import organization
- flake8 - Style enforcement
- pre-commit - Automated checks before commits
We use a structured workflow to maintain a clean and organized repository:
-
Commit Messages: Follow Conventional Commits format
<type>(<scope>): <description> [optional body] [optional footer(s)]
Common types:
feat
,fix
,docs
,style
,refactor
,test
,chore
-
Branching Strategy:
- Main branch:
main
- Always stable and deployable - Feature branches:
feature/<feature-name>
- Bug fixes:
fix/<bug-description>
- Documentation:
docs/<doc-description>
- Main branch:
We value thorough testing to ensure reliability:
- Framework: We use
pytest
for all tests - Coverage: Aim for high test coverage on new features
- Run Tests:
pytest
orpoetry run pytest
- Python Versions: We support Python 3.8+ (see
pyproject.toml
for specifics) - Dependency Management: Poetry for consistent environments
- Virtual Environment: Poetry automatically creates and manages virtual environments
- Fork & Clone: Fork the repository and clone your fork
- Branch: Create a feature branch with a descriptive name
- Develop: Make your changes following our code style guidelines
- Test: Ensure all tests pass and add new tests for new features
- Commit: Use conventional commit format for clear history
- Push & PR: Push your branch and create a Pull Request
- Review: Address any feedback from code reviews
- Merge: Once approved, your PR will be merged
Thank you for contributing to the Photoshop Python API project! π