[build-system] requires = ["setuptools>=77"] build-backend = "setuptools.build_meta" [project] name = "openenv-design-canvas" version = "0.1.0" description = "Recreate graphic designs from Crello in a real editor: tool calls, MCP, HTML, or computer use, one document model and one renderer" requires-python = ">=3.11,<3.14" license = "Apache-2.0" dependencies = [ "openenv==0.7.0", "fastmcp>=3,<4", "skia-python>=138,<200", "numpy>=1.26,<3", "scipy>=1.13,<2", "Pillow>=11,<13", "pydantic>=2.8,<3", "huggingface-hub>=0.34,<2", "gradio>=6,<7", "uvicorn[standard]>=0.30", "websockets>=12", # The GUI surface and task-pack preparation are core features, not add-ons. "playwright>=1.48,<2", "datasets>=3,<6", "pyarrow>=17", ] [project.optional-dependencies] rollout = ["anthropic>=0.60", "openai>=1.60,<3", "python-dotenv>=1"] # real apps in Daytona sandboxes run by the env server (realapps/daytona.py, DESIGN_CANVAS_APPS=daytona) daytona = ["daytona>=0.220,<1"] dev = ["pytest>=8,<10", "ruff>=0.12,<1", "httpx>=0.27", "openenv-design-canvas[rollout]"] [project.scripts] # OpenEnv's entry point (uv run server / openenv serve); PORT, DESIGN_CANVAS_WORKERS and DESIGN_CANVAS_HOST configure it server = "design_canvas.server.app:main" design-canvas = "design_canvas.cli:main" design-canvas-smoke = "design_canvas.smoke:main" [tool.setuptools] packages = ["design_canvas", "design_canvas.core", "design_canvas.server", "design_canvas.realapps", "design_canvas.realapps.penpot", "design_canvas.realapps.desktop"] package-dir = {design_canvas = "."} [tool.setuptools.package-data] design_canvas = ["openenv.yaml", "web/*", "web/**/*"] [tool.pytest.ini_options] testpaths = ["tests"] [tool.ruff] target-version = "py311" line-length = 100 [tool.ruff.lint] select = ["E4", "E7", "E9", "F", "I", "B"] [tool.ruff.lint.flake8-bugbear] # FastAPI and Gradio read these call defaults as declarations, not shared state. extend-immutable-calls = ["fastapi.Body", "gradio.Progress"]