{"id":33022516,"url":"https://github.com/loonghao/photoshop-python-api","last_synced_at":"2026-01-14T08:13:08.057Z","repository":{"id":37184272,"uuid":"163435195","full_name":"loonghao/photoshop-python-api","owner":"loonghao","description":"Python API for Photoshop.","archived":false,"fork":false,"pushed_at":"2025-11-25T18:31:42.000Z","size":26742,"stargazers_count":749,"open_issues_count":85,"forks_count":81,"subscribers_count":16,"default_branch":"main","last_synced_at":"2025-11-29T00:20:13.688Z","etag":null,"topics":["photoshop","photoshop-python-api","pypi","python"],"latest_commit_sha":null,"homepage":"https://loonghao.github.io/photoshop-python-api/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/loonghao.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2018-12-28T17:39:47.000Z","updated_at":"2025-11-27T03:34:34.000Z","dependencies_parsed_at":"2023-11-11T06:26:30.440Z","dependency_job_id":"2ef0c8b0-9426-4efe-95e1-12cf69b769ac","html_url":"https://github.com/loonghao/photoshop-python-api","commit_stats":{"total_commits":486,"total_committers":17,"mean_commits":28.58823529411765,"dds":0.6008230452674896,"last_synced_commit":"0034620574c6e15e086ea0b3a2f7edf0937f39d7"},"previous_names":[],"tags_count":63,"template":false,"template_full_name":null,"purl":"pkg:github/loonghao/photoshop-python-api","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/loonghao%2Fphotoshop-python-api","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/loonghao%2Fphotoshop-python-api/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/loonghao%2Fphotoshop-python-api/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/loonghao%2Fphotoshop-python-api/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/loonghao","download_url":"https://codeload.github.com/loonghao/photoshop-python-api/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/loonghao%2Fphotoshop-python-api/sbom","scorecard":{"id":598730,"data":{"date":"2025-08-11","repo":{"name":"github.com/loonghao/photoshop-python-api","commit":"e51814f8a115c645b874dc6a5187c7abe475f7cf"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2.9,"checks":[{"name":"Code-Review","score":0,"reason":"Found 1/14 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Maintained","score":0,"reason":"1 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: jobLevel 'contents' permission set to 'write': .github/workflows/publish_docs.yml:12","Warn: jobLevel 'contents' permission set to 'write': .github/workflows/python-publish.yml:14","Warn: no topLevel permission defined: .github/workflows/bumpversion.yml:1","Warn: no topLevel permission defined: .github/workflows/import-test.yml:1","Warn: no topLevel permission defined: .github/workflows/issue-translator.yml:1","Warn: no topLevel permission defined: .github/workflows/publish_docs.yml:1","Warn: no topLevel permission defined: .github/workflows/python-publish.yml:1","Warn: no topLevel permission defined: .github/workflows/pythonpackage.yml:1"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: third-party GitHubAction not pinned by hash: .github/workflows/bumpversion.yml:20: update your workflow using https://app.stepsecurity.io/secureworkflow/loonghao/photoshop-python-api/bumpversion.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/import-test.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/loonghao/photoshop-python-api/import-test.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/issue-translator.yml:12: update your workflow using https://app.stepsecurity.io/secureworkflow/loonghao/photoshop-python-api/issue-translator.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/publish_docs.yml:15: update your workflow using https://app.stepsecurity.io/secureworkflow/loonghao/photoshop-python-api/publish_docs.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/publish_docs.yml:20: update your workflow using https://app.stepsecurity.io/secureworkflow/loonghao/photoshop-python-api/publish_docs.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/python-publish.yml:22: update your workflow using https://app.stepsecurity.io/secureworkflow/loonghao/photoshop-python-api/python-publish.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/python-publish.yml:27: update your workflow using https://app.stepsecurity.io/secureworkflow/loonghao/photoshop-python-api/python-publish.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/python-publish.yml:38: update your workflow using https://app.stepsecurity.io/secureworkflow/loonghao/photoshop-python-api/python-publish.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/python-publish.yml:43: update your workflow using https://app.stepsecurity.io/secureworkflow/loonghao/photoshop-python-api/python-publish.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/python-publish.yml:59: update your workflow using https://app.stepsecurity.io/secureworkflow/loonghao/photoshop-python-api/python-publish.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/pythonpackage.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/loonghao/photoshop-python-api/pythonpackage.yml/main?enable=pin","Warn: pipCommand not pinned by hash: .github/workflows/publish_docs.yml:26","Warn: pipCommand not pinned by hash: .github/workflows/publish_docs.yml:27","Warn: pipCommand not pinned by hash: .github/workflows/python-publish.yml:32","Warn: pipCommand not pinned by hash: .github/workflows/pythonpackage.yml:22","Info:   4 out of   9 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   6 third-party GitHubAction dependencies pinned","Info:   0 out of   4 pipCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact v0.24.1 not signed: https://api.github.com/repos/loonghao/photoshop-python-api/releases/217054168","Warn: release artifact v0.24.0 not signed: https://api.github.com/repos/loonghao/photoshop-python-api/releases/192619600","Warn: release artifact v0.23.0 not signed: https://api.github.com/repos/loonghao/photoshop-python-api/releases/192618319","Warn: release artifact v0.22.10 not signed: https://api.github.com/repos/loonghao/photoshop-python-api/releases/192594718","Warn: release artifact v0.22.9 not signed: https://api.github.com/repos/loonghao/photoshop-python-api/releases/187746380","Warn: release artifact v0.24.1 does not have provenance: https://api.github.com/repos/loonghao/photoshop-python-api/releases/217054168","Warn: release artifact v0.24.0 does not have provenance: https://api.github.com/repos/loonghao/photoshop-python-api/releases/192619600","Warn: release artifact v0.23.0 does not have provenance: https://api.github.com/repos/loonghao/photoshop-python-api/releases/192618319","Warn: release artifact v0.22.10 does not have provenance: https://api.github.com/repos/loonghao/photoshop-python-api/releases/192594718","Warn: release artifact v0.22.9 does not have provenance: https://api.github.com/repos/loonghao/photoshop-python-api/releases/187746380"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Packaging","score":10,"reason":"packaging workflow detected","details":["Info: Project packages its releases by way of GitHub Actions.: .github/workflows/python-publish.yml:9"],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Branch-Protection","score":3,"reason":"branch protection is not maximal on development and all release branches","details":["Info: 'allow deletion' disabled on branch 'main'","Info: 'force pushes' disabled on branch 'main'","Warn: branch 'main' does not require approvers","Warn: codeowners review is not required on branch 'main'","Warn: no status checks found to merge onto branch 'main'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 23 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":0,"reason":"17 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: PYSEC-2024-48 / GHSA-fj7x-q9j7-g6q6","Warn: Project is vulnerable to: PYSEC-2024-230 / GHSA-248v-346w-9cwc","Warn: Project is vulnerable to: PYSEC-2024-4 / GHSA-2mqj-m65w-jghx","Warn: Project is vulnerable to: PYSEC-2024-60 / GHSA-jjg7-2v4v-x38h","Warn: Project is vulnerable to: GHSA-cpwx-vrp4-4pq7","Warn: Project is vulnerable to: GHSA-gmj6-6f8f-6699","Warn: Project is vulnerable to: GHSA-h5c8-rqwp-cp95","Warn: Project is vulnerable to: GHSA-h75v-3vvj-5mfj","Warn: Project is vulnerable to: GHSA-q2x7-8rv6-6q7h","Warn: Project is vulnerable to: GHSA-9hjg-9r4m-mvj7","Warn: Project is vulnerable to: GHSA-9wx4-h78v-vm56","Warn: Project is vulnerable to: PYSEC-2025-49 / GHSA-5rjg-fvgr-3xxf","Warn: Project is vulnerable to: GHSA-cx63-2mw6-8hw5","Warn: Project is vulnerable to: GHSA-34jh-p97f-mpxf","Warn: Project is vulnerable to: GHSA-pq67-6m6q-mj2v","Warn: Project is vulnerable to: PYSEC-2024-187 / GHSA-rqc4-2hc7-8c8v","Warn: Project is vulnerable to: GHSA-jfmj-5v4g-7637"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-20T23:49:02.979Z","repository_id":37184272,"created_at":"2025-08-20T23:49:02.979Z","updated_at":"2025-08-20T23:49:02.979Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28413652,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T05:26:33.345Z","status":"ssl_error","status_checked_at":"2026-01-14T05:21:57.251Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["photoshop","photoshop-python-api","pypi","python"],"created_at":"2025-11-13T19:00:34.925Z","updated_at":"2026-01-14T08:13:08.034Z","avatar_url":"https://github.com/loonghao.png","language":"Python","readme":"\u003cp align=\"center\"\u003e\n\u003cimg src=\"https://i.imgur.com/cjp1RH6.png\" alt=\"logo\"\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n\u003ca href=\"https://img.shields.io/pypi/pyversions/photoshop-python-api\"\u003e\n\u003cimg src=\"https://img.shields.io/pypi/pyversions/photoshop-python-api\" alt=\"python version\"\u003e\u003c/a\u003e\n\u003ca href=\"https://badge.fury.io/py/photoshop-python-api\"\u003e\n\u003cimg src=\"https://img.shields.io/pypi/v/photoshop-python-api?color=green\" alt=\"PyPI version\"\u003e\u003c/a\u003e\n\u003cimg src=\"https://img.shields.io/pypi/dw/photoshop-python-api\" alt=\"Downloads Status\"\u003e\n\u003ca href=\"https://pepy.tech/badge/photoshop-python-api\"\u003e\n\u003cimg src=\"https://pepy.tech/badge/photoshop-python-api\" alt=\"Downloads\"\u003e\u003c/a\u003e\n\u003cimg src=\"https://img.shields.io/pypi/l/photoshop-python-api\" alt=\"License\"\u003e\n\u003cimg src=\"https://img.shields.io/pypi/format/photoshop-python-api\" alt=\"pypi format\"\u003e\n\u003ca href=\"https://discord.gg/AnxSa6n\"\u003e\n\u003cimg src=\"https://img.shields.io/discord/724615671400628314\" alt=\"Chat on Discord\"\u003e\u003c/a\u003e\n\u003ca href=\"https://github.com/loonghao/photoshop-python-api/graphs/commit-activity\"\u003e\n\u003cimg src=\"https://img.shields.io/badge/Maintained%3F-yes-green.svg\" alt=\"Maintenance\"\u003e\u003c/a\u003e\n\u003ca href=\"https://github.com/loonghao/photoshop-python-api/actions/workflows/bumpversion.yml\"\u003e\n\u003cimg src=\"https://github.com/loonghao/photoshop-python-api/actions/workflows/bumpversion.yml/badge.svg\" alt=\"Bump version\"\u003e\u003c/a\u003e\n\u003ca href=\"https://github.com/loonghao/photoshop-python-api/actions/workflows/pages/pages-build-deployment\"\u003e\n\u003cimg src=\"https://github.com/loonghao/photoshop-python-api/actions/workflows/pages/pages-build-deployment/badge.svg\" alt=\"pages-build-deployment\"\u003e\u003c/a\u003e\n\u003ca href=\"https://github.com/loonghao/photoshop-python-api/actions/workflows/publish_docs.yml\"\u003e\n\u003cimg src=\"https://github.com/loonghao/photoshop-python-api/actions/workflows/publish_docs.yml/badge.svg\" alt=\"Documentation Status\"\u003e\u003c/a\u003e\n\u003ca href=\"https://img.shields.io/badge/photoshop-2024-green\"\u003e\n\u003cimg src=\"https://img.shields.io/badge/photoshop-2024-green\" alt=\"photoshop-2024\"\u003e\u003c/a\u003e\n\u003ca href=\"https://img.shields.io/badge/photoshop-2023-green\"\u003e\n\u003cimg src=\"https://img.shields.io/badge/photoshop-2023-green\" alt=\"photoshop-2023\"\u003e\u003c/a\u003e\n\u003ca href=\"https://img.shields.io/badge/photoshop-2022-green\"\u003e\n\u003cimg src=\"https://img.shields.io/badge/photoshop-2022-green\" alt=\"photoshop-2022\"\u003e\u003c/a\u003e\n\u003ca href=\"https://img.shields.io/badge/photoshop-2021-green\"\u003e\n\u003cimg src=\"https://img.shields.io/badge/photoshop-2021-green\" alt=\"photoshop-2021\"\u003e\u003c/a\u003e\n\u003ca href=\"https://img.shields.io/badge/photoshop-2020-green\"\u003e\n\u003cimg src=\"https://img.shields.io/badge/photoshop-2020-green\" alt=\"photoshop-2020\"\u003e\u003c/a\u003e\n\u003ca href=\"https://img.shields.io/badge/photoshop-CC2019-green\"\u003e\n\u003cimg src=\"https://img.shields.io/badge/photoshop-CC2019-green\" alt=\"photoshop-CC2019\"\u003e\u003c/a\u003e\n\u003ca href=\"https://img.shields.io/badge/photoshop-CC2018-green\"\u003e\n\u003cimg src=\"https://img.shields.io/badge/photoshop-CC2018-green\" alt=\"photoshop-CC2018\"\u003e\u003c/a\u003e\n\u003ca href=\"https://img.shields.io/badge/photoshop-CC2017-green\"\u003e\n\u003cimg src=\"https://img.shields.io/badge/photoshop-CC2017-green\" alt=\"photoshop-CC2017\"\u003e\u003c/a\u003e\n\n\u003c!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section --\u003e\n[![All Contributors](https://img.shields.io/badge/all_contributors-18-orange.svg?style=flat-square)](#contributors-)\n\u003c!-- ALL-CONTRIBUTORS-BADGE:END --\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003ePython API for Photoshop.\u003c/p\u003e\n\u003cp align=\"center\"\u003e\u003ci\u003e⚠️ Only for Windows platform !\u003c/i\u003e\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\u003cem\u003eThe example above was created with Photoshop Python API. Check it out at \u003ca href=\"https://loonghao.github.io/photoshop-python-api/examples\"\u003ehttps://loonghao.github.io/photoshop-python-api/examples\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\nHas been tested and used Photoshop version:\n\n| Photoshop Version | Supported          |\n|-------------------| ------------------ |\n| 2025              |       ✅           |\n| 2024              |       ✅           |\n| 2023              |       ✅           |\n| 2022              |       ✅           |\n| 2021              |       ✅           |\n| 2020              |       ✅           |\n| cc2019            |       ✅           |\n| cc2018            |       ✅           |\n| cc2017            |       ✅           |\n\n\nInstalling\n----------\nYou can install via pip.\n\n```cmd\npip install photoshop_python_api\n```\n\n\nSince it uses COM (Component Object Model) connect Photoshop, it can be used\nin any DCC software with a python interpreter.\n\n\nHello World\n-----------\n\n```python\n\nimport photoshop.api as ps\napp = ps.Application()\ndoc = app.documents.add()\nnew_doc = doc.artLayers.add()\ntext_color = ps.SolidColor()\ntext_color.rgb.red = 0\ntext_color.rgb.green = 255\ntext_color.rgb.blue = 0\nnew_text_layer = new_doc\nnew_text_layer.kind = ps.LayerKind.TextLayer\nnew_text_layer.textItem.contents = 'Hello, World!'\nnew_text_layer.textItem.position = [160, 167]\nnew_text_layer.textItem.size = 40\nnew_text_layer.textItem.color = text_color\noptions = ps.JPEGSaveOptions(quality=5)\n# # save to jpg\njpg = 'd:/hello_world.jpg'\ndoc.saveAs(jpg, options, asCopy=True)\napp.doJavaScript(f'alert(\"save to jpg: {jpg}\")')\n\n```\n![demo](https://i.imgur.com/25TrzbV.gif)\n\n\nPhotoshop Session\n-----------------\nUse it as context.\n\n```python\n\nfrom photoshop import Session\n\n\nwith Session(action=\"new_document\") as ps:\n    doc = ps.active_document\n    text_color = ps.SolidColor()\n    text_color.rgb.green = 255\n    new_text_layer = doc.artLayers.add()\n    new_text_layer.kind = ps.LayerKind.TextLayer\n    new_text_layer.textItem.contents = 'Hello, World!'\n    new_text_layer.textItem.position = [160, 167]\n    new_text_layer.textItem.size = 40\n    new_text_layer.textItem.color = text_color\n    options = ps.JPEGSaveOptions(quality=5)\n    jpg = 'd:/hello_world.jpg'\n    doc.saveAs(jpg, options, asCopy=True)\n    ps.app.doJavaScript(f'alert(\"save to jpg: {jpg}\")')\n\n\n```\n\n## Contributors ✨\n\nThanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):\n\n\u003c!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section --\u003e\n\u003c!-- prettier-ignore-start --\u003e\n\u003c!-- markdownlint-disable --\u003e\n\u003ctable\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/loonghao\"\u003e\u003cimg src=\"https://avatars1.githubusercontent.com/u/13111745?v=4?s=100\" width=\"100px;\" alt=\"Hal\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eHal\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/loonghao/photoshop-python-api/commits?author=loonghao\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/voodraizer\"\u003e\u003cimg src=\"https://avatars0.githubusercontent.com/u/1332729?v=4?s=100\" width=\"100px;\" alt=\"voodraizer\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003evoodraizer\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/loonghao/photoshop-python-api/issues?q=author%3Avoodraizer\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/brunosly\"\u003e\u003cimg src=\"https://avatars2.githubusercontent.com/u/4326547?v=4?s=100\" width=\"100px;\" alt=\"brunosly\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003ebrunosly\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/loonghao/photoshop-python-api/issues?q=author%3Abrunosly\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/tubi-carrillo\"\u003e\u003cimg src=\"https://avatars3.githubusercontent.com/u/33004093?v=4?s=100\" width=\"100px;\" alt=\"tubi\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003etubi\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/loonghao/photoshop-python-api/issues?q=author%3Atubi-carrillo\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/wjxiehaixin\"\u003e\u003cimg src=\"https://avatars0.githubusercontent.com/u/48039822?v=4?s=100\" width=\"100px;\" alt=\"wjxiehaixin\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003ewjxiehaixin\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/loonghao/photoshop-python-api/issues?q=author%3Awjxiehaixin\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"http://it.econline.net\"\u003e\u003cimg src=\"https://avatars0.githubusercontent.com/u/993544?v=4?s=100\" width=\"100px;\" alt=\"罗马钟\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003e罗马钟\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/loonghao/photoshop-python-api/issues?q=author%3Aenzozhong\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/ClementHector\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/7068597?v=4?s=100\" width=\"100px;\" alt=\"clement\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eclement\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/loonghao/photoshop-python-api/issues?q=author%3AClementHector\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/krevlinmen\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/56278440?v=4?s=100\" width=\"100px;\" alt=\"krevlinmen\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003ekrevlinmen\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/loonghao/photoshop-python-api/issues?q=author%3Akrevlinmen\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/SThomasN\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/63218023?v=4?s=100\" width=\"100px;\" alt=\"Thomas\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eThomas\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/loonghao/photoshop-python-api/issues?q=author%3ASThomasN\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/CaptainCsaba\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/59013751?v=4?s=100\" width=\"100px;\" alt=\"CaptainCsaba\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eCaptainCsaba\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/loonghao/photoshop-python-api/issues?q=author%3ACaptainCsaba\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://ilharper.vbox.moe\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/20179549?v=4?s=100\" width=\"100px;\" alt=\"Il Harper\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eIl Harper\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/loonghao/photoshop-python-api/commits?author=Afanyiyu\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/blunderedbishop\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/56189376?v=4?s=100\" width=\"100px;\" alt=\"blunderedbishop\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eblunderedbishop\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/loonghao/photoshop-python-api/issues?q=author%3Ablunderedbishop\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/MrTeferi\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/92750180?v=4?s=100\" width=\"100px;\" alt=\"MrTeferi\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eMrTeferi\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/loonghao/photoshop-python-api/commits?author=MrTeferi\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/damienchambe\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/42462209?v=4?s=100\" width=\"100px;\" alt=\"Damien Chambe\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eDamien Chambe\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/loonghao/photoshop-python-api/commits?author=damienchambe\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/be42day\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/20614168?v=4?s=100\" width=\"100px;\" alt=\"Ehsan Akbari Tabar\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eEhsan Akbari Tabar\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/loonghao/photoshop-python-api/issues?q=author%3Abe42day\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"http://www.linkedin.com/in/michael-ikemann\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/33489959?v=4?s=100\" width=\"100px;\" alt=\"Michael Ikemann\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eMichael Ikemann\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/loonghao/photoshop-python-api/issues?q=author%3AAlyxion\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/dsmtE\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/37016704?v=4?s=100\" width=\"100px;\" alt=\"Enguerrand DE SMET\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eEnguerrand DE SMET\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/loonghao/photoshop-python-api/commits?author=dsmtE\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"http://www.thbattle.net\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/857880?v=4?s=100\" width=\"100px;\" alt=\"Proton\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eProton\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/loonghao/photoshop-python-api/commits?author=feisuzhu\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\n\u003c!-- markdownlint-restore --\u003e\n\u003c!-- prettier-ignore-end --\u003e\n\n\u003c!-- ALL-CONTRIBUTORS-LIST:END --\u003e\n\nThis project follows the [all-contributors](https://allcontributors.org) specification.\nContributions of any kind are welcome!\n\n# Repobeats analytics\n![Repobeats analytics](https://repobeats.axiom.co/api/embed/0f4ab02065b94983fc95677c6587a61ce5fa8397.svg \"Repobeats analytics image\")\n\n\nhow to get Photoshop program ID\n-------------------------------\n```PS\u003e\nGet-ChildItem \"HKLM:\\SOFTWARE\\Classes\" |\n  ?{ ($_.PSChildName -match \"^[a-z]+\\.[a-z]+(\\.\\d+)?$\") -and ($_.GetSubKeyNames() -contains \"CLSID\") } |\n  ?{ $_.PSChildName -match \"Photoshop.Application\" } | ft PSChildName\n```\n![get_program_id](https://i.imgur.com/UwPN7qq.png)\n\n[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/)\n\nUseful links\n------------\n- https://theiviaxx.github.io/photoshop-docs/Photoshop/\n- http://wwwimages.adobe.com/www.adobe.com/content/dam/acom/en/devnet/photoshop/pdfs/photoshop-cc-javascript-ref-2015.pdf\n- https://github.com/lohriialo/photoshop-scripting-python\n- https://www.adobe.com/devnet/photoshop/scripting.html\n- https://www.youtube.com/playlist?list=PLUEniN8BpU8-Qmjyv3zyWaNvDYwJOJZ4m\n- http://yearbook.github.io/esdocs/#/Photoshop/Application\n- http://www.shining-lucy.com/wiki/page.php?id=appwiki:photoshop:ps_script\n- http://www.tonton-pixel.com/wp-content/uploads/DecisionTable.pdf\n- http://jongware.mit.edu/pscs5js_html/psjscs5/pc_Application.html\n- https://indd.adobe.com/view/a0207571-ff5b-4bbf-a540-07079bd21d75\n- http://shining-lucy.com/wiki/page.php?id=appwiki:photoshop:ps_script\n- http://web.archive.org/web/20140121053819/http://www.pcpix.com/Photoshop/char.html\n- http://www.tonton-pixel.com/scripts/utility-scripts/get-equivalent-id-code/index.html\n- https://github.com/Adobe-CEP/Samples/tree/master/PhotoshopEvents\n- https://evanmccall.wordpress.com/2015/03/09/how-to-develop-photoshop-tools-in-python\n\n\n## 🛠️ Development Guide\n\nWelcome to the development guide for the Photoshop Python API project! This section outlines our development practices and standards to ensure code quality and consistency.\n\n### 📋 Quick Start for Contributors\n\n```bash\n# Clone the repository\ngit clone https://github.com/loonghao/photoshop-python-api.git\ncd photoshop-python-api\n\n# Install dependencies with Poetry\npoetry install\n\n# Install pre-commit hooks\npre-commit install\n\n# Run tests\npytest\n```\n\n### 🎨 Code Style \u0026 Quality\n\nWe maintain high code quality standards through automated tools and consistent style guidelines:\n\n- **Style Guide**: We follow the [Google Python Style Guide](https://google.github.io/styleguide/pyguide.html) with project-specific adjustments:\n  - Line length: 120 characters max\n  - Docstrings: Google style format\n  - Quotes: Double quotes preferred\n\n- **Quality Tools**:\n  - [Black](https://black.readthedocs.io/) - Code formatting\n  - [isort](https://pycqa.github.io/isort/) - Import organization\n  - [flake8](https://flake8.pycqa.org/) - Style enforcement\n  - [pre-commit](https://pre-commit.com/) - Automated checks before commits\n\n### 🔄 Git Workflow\n\nWe use a structured workflow to maintain a clean and organized repository:\n\n- **Commit Messages**: Follow [Conventional Commits](https://www.conventionalcommits.org/) format\n\n  ```text\n  \u003ctype\u003e(\u003cscope\u003e): \u003cdescription\u003e\n\n  [optional body]\n\n  [optional footer(s)]\n  ```\n\n  Common types: `feat`, `fix`, `docs`, `style`, `refactor`, `test`, `chore`\n\n- **Branching Strategy**:\n  - Main branch: `main` - Always stable and deployable\n  - Feature branches: `feature/\u003cfeature-name\u003e`\n  - Bug fixes: `fix/\u003cbug-description\u003e`\n  - Documentation: `docs/\u003cdoc-description\u003e`\n\n### 🧪 Testing\n\nWe value thorough testing to ensure reliability:\n\n- **Framework**: We use `pytest` for all tests\n- **Coverage**: Aim for high test coverage on new features\n- **Run Tests**: `pytest` or `poetry run pytest`\n\n### 📦 Development Environment\n\n- **Python Versions**: We support Python 3.8+ (see `pyproject.toml` for specifics)\n- **Dependency Management**: [Poetry](https://python-poetry.org/) for consistent environments\n- **Virtual Environment**: Poetry automatically creates and manages virtual environments\n\n### 🤝 Contributing Process\n\n1. **Fork \u0026 Clone**: Fork the repository and clone your fork\n2. **Branch**: Create a feature branch with a descriptive name\n3. **Develop**: Make your changes following our code style guidelines\n4. **Test**: Ensure all tests pass and add new tests for new features\n5. **Commit**: Use conventional commit format for clear history\n6. **Push \u0026 PR**: Push your branch and create a Pull Request\n7. **Review**: Address any feedback from code reviews\n8. **Merge**: Once approved, your PR will be merged\n\nThank you for contributing to the Photoshop Python API project! 🎉\n","funding_links":[],"categories":["Game-Design-Tool","Libraries"],"sub_categories":["CG Software API"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Floonghao%2Fphotoshop-python-api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Floonghao%2Fphotoshop-python-api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Floonghao%2Fphotoshop-python-api/lists"}