An open API service indexing awesome lists of open source software.

https://github.com/loonghao/photoshop-python-api

Python API for Photoshop.
https://github.com/loonghao/photoshop-python-api

photoshop photoshop-python-api pypi python

Last synced: about 1 month ago
JSON representation

Python API for Photoshop.

Awesome Lists containing this project

README

          


logo



python version


PyPI version

Downloads Status

Downloads

License
pypi format

Chat on Discord


Maintenance


Bump version


pages-build-deployment


Documentation Status


photoshop-2024


photoshop-2023


photoshop-2022


photoshop-2021


photoshop-2020


photoshop-CC2019


photoshop-CC2018


photoshop-CC2017

[![All Contributors](https://img.shields.io/badge/all_contributors-18-orange.svg?style=flat-square)](#contributors-)

Python API for Photoshop.


⚠️ Only for Windows platform !

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 | ✅ |

Installing
----------
You can install via pip.

```cmd
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.

Hello World
-----------

```python

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}")')

```
![demo](https://i.imgur.com/25TrzbV.gif)

Photoshop Session
-----------------
Use it as context.

```python

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}")')

```

## Contributors ✨

Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):



Hal
Hal

💻
voodraizer
voodraizer

🐛
brunosly
brunosly

🐛
tubi
tubi

🐛
wjxiehaixin
wjxiehaixin

🐛
罗马钟
罗马钟

🐛
clement
clement

🐛


krevlinmen
krevlinmen

🐛
Thomas
Thomas

🐛
CaptainCsaba
CaptainCsaba

🐛
Il Harper
Il Harper

💻
blunderedbishop
blunderedbishop

🐛
MrTeferi
MrTeferi

💻
Damien Chambe
Damien Chambe

💻


Ehsan Akbari Tabar
Ehsan Akbari Tabar

🐛
Michael Ikemann
Michael Ikemann

🐛
Enguerrand DE SMET
Enguerrand DE SMET

💻
Proton
Proton

💻

This project follows the [all-contributors](https://allcontributors.org) specification.
Contributions of any kind are welcome!

# Repobeats analytics
![Repobeats analytics](https://repobeats.axiom.co/api/embed/0f4ab02065b94983fc95677c6587a61ce5fa8397.svg "Repobeats analytics image")

how to get Photoshop program ID
-------------------------------
```PS>
Get-ChildItem "HKLM:\SOFTWARE\Classes" |
?{ ($_.PSChildName -match "^[a-z]+\.[a-z]+(\.\d+)?$") -and ($_.GetSubKeyNames() -contains "CLSID") } |
?{ $_.PSChildName -match "Photoshop.Application" } | ft PSChildName
```
![get_program_id](https://i.imgur.com/UwPN7qq.png)

[How to get a list of COM objects from the registry](https://rakhesh.com/powershell/how-to-get-a-list-of-com-objects-from-the-registry/)

Useful links
------------
- 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

## 🛠️ Development Guide

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.

### 📋 Quick Start for Contributors

```bash
# 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
```

### 🎨 Code Style & Quality

We maintain high code quality standards through automated tools and consistent style guidelines:

- **Style Guide**: We follow the [Google Python Style Guide](https://google.github.io/styleguide/pyguide.html) with project-specific adjustments:
- Line length: 120 characters max
- Docstrings: Google style format
- Quotes: Double quotes preferred

- **Quality Tools**:
- [Black](https://black.readthedocs.io/) - Code formatting
- [isort](https://pycqa.github.io/isort/) - Import organization
- [flake8](https://flake8.pycqa.org/) - Style enforcement
- [pre-commit](https://pre-commit.com/) - Automated checks before commits

### 🔄 Git Workflow

We use a structured workflow to maintain a clean and organized repository:

- **Commit Messages**: Follow [Conventional Commits](https://www.conventionalcommits.org/) format

```text
():

[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/`
- Bug fixes: `fix/`
- Documentation: `docs/`

### 🧪 Testing

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` or `poetry run pytest`

### 📦 Development Environment

- **Python Versions**: We support Python 3.8+ (see `pyproject.toml` for specifics)
- **Dependency Management**: [Poetry](https://python-poetry.org/) for consistent environments
- **Virtual Environment**: Poetry automatically creates and manages virtual environments

### 🤝 Contributing Process

1. **Fork & Clone**: Fork the repository and clone your fork
2. **Branch**: Create a feature branch with a descriptive name
3. **Develop**: Make your changes following our code style guidelines
4. **Test**: Ensure all tests pass and add new tests for new features
5. **Commit**: Use conventional commit format for clear history
6. **Push & PR**: Push your branch and create a Pull Request
7. **Review**: Address any feedback from code reviews
8. **Merge**: Once approved, your PR will be merged

Thank you for contributing to the Photoshop Python API project! 🎉