{"id":50916748,"url":"https://github.com/dcc-mcp/adobepy","last_synced_at":"2026-06-16T16:01:58.796Z","repository":{"id":360384795,"uuid":"1249898047","full_name":"dcc-mcp/adobepy","owner":"dcc-mcp","description":"Shared Adobe desktop communication runtime for Python and DCC MCP adapters","archived":false,"fork":false,"pushed_at":"2026-06-06T11:55:09.000Z","size":635,"stargazers_count":0,"open_issues_count":3,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-06T12:12:10.438Z","etag":null,"topics":["adobe","cep","dcc","mcp","photoshop","python","uxp"],"latest_commit_sha":null,"homepage":"https://github.com/loonghao/adobepy","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dcc-mcp.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE-APACHE","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":"2026-05-26T06:10:01.000Z","updated_at":"2026-06-06T09:52:59.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/dcc-mcp/adobepy","commit_stats":null,"previous_names":["loonghao/adobepy","dcc-mcp/adobepy"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/dcc-mcp/adobepy","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dcc-mcp%2Fadobepy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dcc-mcp%2Fadobepy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dcc-mcp%2Fadobepy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dcc-mcp%2Fadobepy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dcc-mcp","download_url":"https://codeload.github.com/dcc-mcp/adobepy/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dcc-mcp%2Fadobepy/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34412795,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-16T02:00:06.860Z","response_time":126,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["adobe","cep","dcc","mcp","photoshop","python","uxp"],"created_at":"2026-06-16T16:01:55.162Z","updated_at":"2026-06-16T16:01:58.790Z","avatar_url":"https://github.com/dcc-mcp.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# adobepy\n\nShared Adobe desktop communication runtime for Python tools and DCC MCP\nadapters. Python talks to a local Rust broker; Adobe applications run thin UXP\nor CEP/ExtendScript bridges.\n\n`adobepy` is intended to be the common Adobe host layer for projects such as\n[`dcc-mcp-photoshop`](https://github.com/loonghao/dcc-mcp-photoshop) and future\nAdobe adapters. The public Python surface mirrors Adobe's JavaScript DOM where\npossible, while adding Pythonic aliases for agent and script ergonomics.\n\nImplemented pieces:\n\n- Rust `adobepy` CLI with `broker`, `doctor`, `install-bridge`, and `repl`.\n- Local JSON-RPC broker with per-session token, target, timeout, and capability gates.\n- Python SDK under `adobe.core`, `adobe.raw`, `adobe.photoshop`, `adobe.indesign`, `adobe.premiere`, `adobe.after_effects`, and `adobe.illustrator`.\n- Optional DCC MCP result helpers under `adobe.dcc_mcp` for adapter skill code.\n- UXP bridge templates for Photoshop, InDesign, and Premiere that dispatch to host APIs and broker raw JavaScript escape hatches.\n- CEP bridge templates for After Effects and Illustrator.\n- IR validation, proxy-aware `.pyi` stub generation, and stub/runtime drift checks.\n- `vx just package` distribution workflow.\n\nValidate everything:\n\n```powershell\nnpm install\nnpm run test:all\n```\n\nThe full test suite type-checks bridge code, builds and exercises UXP/CEP\nbundles with mocked host runtimes, validates IR contracts, checks Python\ncoverage, and runs Rust workspace tests.\n\nPython support starts at 3.8. The current SDK wheel is pure Python; any future\nnative Python extension must publish `cp38-abi3-*` wheels rather than\nper-minor-version wheels.\n\nBuild a redistributable Windows package:\n\n```powershell\nvx just package\n```\n\nThe archive is written to `dist/adobepy-0.1.0-windows-x64.zip` with a sibling\nSHA256 file. Usage and packaging notes are in `docs/usage.md` and\n`docs/distribution-contract.md`. Architecture boundaries and Adobe API source tracking\nare documented in `docs/architecture.md`, `docs/api-sources.md`, and\n`docs/dcc-mcp-integration.md`.\n\nPython facade example:\n\n```python\nfrom adobe.photoshop import Photoshop\n\napp = Photoshop()\nfor layer in app.activeLayers:\n    print(layer.name)\n\ndoc = app.activeDocument\ndoc.selection.select_rectangle({\"top\": 10, \"left\": 10, \"bottom\": 256, \"right\": 256})\nfor channel in doc.channels:\n    print(channel.name)\n\ntext = app.activeText\nif text:\n    text.set_contents(\"Hello from Python\")\n    text.character_style.update(size=36, tracking=20)\n    text.paragraph_style.update(justification=\"center\")\n\nlayer = app.activeLayer\nif layer:\n    layer.filters.apply_gaussian_blur(2)\n    layer.smart_object.convert_to_smart_object()\n\ndoc.exports.jpg_high(\"C:/renders/demo.jpg\")\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdcc-mcp%2Fadobepy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdcc-mcp%2Fadobepy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdcc-mcp%2Fadobepy/lists"}