{"id":30874758,"url":"https://github.com/peterjakubowski/clawdia-monet","last_synced_at":"2026-06-19T01:31:21.889Z","repository":{"id":312494499,"uuid":"953638036","full_name":"peterjakubowski/Clawdia-Monet","owner":"peterjakubowski","description":"Clawdia Monet is a digital art project utilizing a team of AI agents that work collaboratively to form the persona of an artist. Through an agentic workflow, Clawdia Monet generates new drawings and paintings by observing existing photographs of cats.","archived":false,"fork":false,"pushed_at":"2025-09-07T02:01:54.000Z","size":1707,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-09-07T04:09:52.459Z","etag":null,"topics":["agentic-ai","cats","digital-art","gemini-api","google-gemini","image-generation","python","streamlit"],"latest_commit_sha":null,"homepage":"https://monet.petes.tools/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/peterjakubowski.png","metadata":{"files":{"readme":"README.md","changelog":null,"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":"2025-03-23T20:05:04.000Z","updated_at":"2025-09-07T02:01:58.000Z","dependencies_parsed_at":"2025-09-07T04:07:37.337Z","dependency_job_id":null,"html_url":"https://github.com/peterjakubowski/Clawdia-Monet","commit_stats":null,"previous_names":["peterjakubowski/clawdia-monet"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/peterjakubowski/Clawdia-Monet","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/peterjakubowski%2FClawdia-Monet","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/peterjakubowski%2FClawdia-Monet/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/peterjakubowski%2FClawdia-Monet/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/peterjakubowski%2FClawdia-Monet/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/peterjakubowski","download_url":"https://codeload.github.com/peterjakubowski/Clawdia-Monet/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/peterjakubowski%2FClawdia-Monet/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34514282,"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-18T02:00:06.871Z","response_time":128,"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":["agentic-ai","cats","digital-art","gemini-api","google-gemini","image-generation","python","streamlit"],"created_at":"2025-09-08T01:32:28.916Z","updated_at":"2026-06-19T01:31:21.878Z","avatar_url":"https://github.com/peterjakubowski.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🎨🐈 Clawdia Monet\n\n**Clawdia Monet** is an interactive AI art application that transforms photos of your cats into beautiful sketches and paintings. Powered by Google Gemini models, this Streamlit application simulates a commission with the virtual artist, Clawdia Monet, who specializes in feline art.\n\n![Clawdia Monet Sketch](images/sketch.jpg)\n\n## Overview\n\nThis project showcases a multi-agent workflow where different AI agents collaborate to perform a creative task. Users upload a photo, and the application first verifies the presence of a cat. If a cat is found, a series of AI agents work together to first generate a detailed sketch and then a full-color painting based on the original image.\n\nThe application is built with Python and Streamlit, making it easy to run locally or deploy as a web app.\n\n## Agentic Workflow\n\nThe core of Clawdia Monet is its pipeline of specialized AI agents. Each agent has a distinct role, and they pass information to one another to complete the final artwork.\n\n```mermaid\nflowchart TB\n    User[User]\n    Upload[Upload Image]\n    IsCat{Is it a Cat?}\n    CatCheck[1. Cat Check Agent]\n    InstructSketch[2. Sketch Instructor Agent]\n    CatSketch[3. Sketch Artist Agent]\n    InstructPaint[4. Painting Instructor Agent]\n    CatPaint[5. Painting Artist Agent]\n    Exit[End Session]\n    DisplaySketch[Display Sketch]\n    DisplayPainting[Display Painting]\n\n    User -- Uploads Photo --\u003e Upload\n    Upload -- Passes Image --\u003e CatCheck\n    CatCheck -- Analyzes Image --\u003e IsCat\n    IsCat -- No --\u003e Exit\n    IsCat -- Yes --\u003e InstructSketch\n    InstructSketch -- Creates Instructions --\u003e CatSketch\n    CatSketch -- Generates Sketch --\u003e DisplaySketch\n    DisplaySketch -- User Clicks 'Paint' \u0026 Passes Sketch --\u003e InstructPaint\n    InstructPaint -- Creates Instructions --\u003e CatPaint\n    CatPaint -- Generates Painting --\u003e DisplayPainting\n```\n\n1.  **Cat Check Agent (`cat_check`):** An AI agent that analyzes the uploaded image to verify it contains a cat. It returns a structured JSON response.\n2.  **Sketch Instructor Agent (`instruct_sketch`):** If a cat is found, this agent generates detailed, step-by-step instructions for creating a pencil sketch from the image.\n3.  **Sketch Artist Agent (`cat_sketch`):** This agent takes the instructions and the original image to generate a new image—the sketch.\n4.  **Painting Instructor Agent (`instruct_artist`):** After the sketch is approved, this agent creates new, detailed instructions for turning the sketch into a painting, referencing both the original photo and the sketch.\n5.  **Painting Artist Agent (`cat_paint`):** The final agent uses the painting instructions and the sketch to generate the final, full-color painting.\n\n### Breakdown of the workflow:\n\n1.  **Image Upload \u0026 Validation (`upload_workflow`):**\n\n      * The user is prompted to upload an image of their cat.\n      * The application checks if the file is a valid image format (JPG, PNG) and opens it.\n      * The image is resized if it's larger than 1024x1024 pixels to ensure it can be processed by the models.\n\n2.  **Cat Identification (`cat_check_workflow`):**\n\n      * The first agent, **`cat_check`**, is invoked to determine if the uploaded image actually contains a cat.\n      * This agent uses the `gemini-2.0-flash` model with a JSON response schema (`CatCheck`) to return a boolean `is_cat` and a creative `observation` message for the user.\n      * If no cat is found, the process stops, and the user is prompted to start over.\n\n3.  **Sketch Instruction \u0026 Generation (`draw_cat_workflow`):**\n\n      * If a cat is identified, the **`instruct_sketch`** agent is called. This agent acts as an \"art instructor,\" generating detailed, step-by-step instructions on how to draw the cat and its background in a traditional pencil-on-brown-paper style.\n      * These instructions are then passed to the **`cat_sketch`** agent, which embodies the artist \"Clawdia Monet.\" This agent uses the `gemini-2.0-flash-preview-image-generation` model to generate a sketch based on the original image and the detailed instructions.\n      * The generated sketch is displayed to the user, who can then choose to \"Start Painting\" or \"Sketch Again.\"\n\n4.  **Painting Instruction \u0026 Generation (`paint_cat_workflow`):**\n\n      * When the user proceeds, the **`instruct_artist`** agent is called. This agent acts as an \"artist's assistant,\" creating a new set of instructions for Clawdia Monet. It uses both the original photo and the newly created sketch as references to describe how to turn the drawing into a painting in a specific artistic style.\n      * Finally, the **`cat_paint`** agent takes these painting instructions and the sketch to generate the final painting, again using the `gemini-2.0-flash-preview-image-generation` model.\n      * The final painting is displayed, and the user can choose to \"Paint Again\" or \"Start Over.\"\n    \n## Technology Stack\n\n  - **Backend:** Python\n  - **Frontend:** Streamlit\n  - **AI Models:** Google Gemini (including `gemini-2.0-flash` and image generation models)\n  - **Core Libraries:** `google-genai`, `streamlit`, `pydantic`, `pillow`\n  - **Deployment:** Docker\n\n## Repository Structure\n\nHere is a summary of the key files in this repository:\n\n```\n.\n├── .gitignore         # Standard Python gitignore file.\n├── .streamlit/\n│   └── config.toml    # Streamlit theme and configuration.\n├── Dockerfile         # Docker configuration for containerizing the app.\n├── LICENSE            # Apache 2.0 License.\n├── README.md          # You are here!\n├── app.py             # The main Streamlit application logic and agent definitions.\n├── flow.mmd           # Mermaid diagram of the agentic workflow.\n├── images/            # Contains the app icon and other static images.\n├── requirements.txt   # Python package dependencies.\n└── run.py             # Startup script to modify Streamlit's HTML before running the app.\n```\n\n## Setup and Installation\n\nTo run this project locally, you will need Python 3.12+ and an environment management tool like `venv`.\n\n1.  **Clone the repository:**\n\n    ```bash\n    git clone https://github.com/peterjakubowski/clawdia-monet.git\n    cd clawdia-monet\n    ```\n\n2.  **Create and activate a virtual environment:**\n\n    ```bash\n    python -m venv venv\n    source venv/bin/activate  # On Windows, use `venv\\Scripts\\activate`\n    ```\n\n3.  **Install the dependencies:**\n\n    ```bash\n    pip install -r requirements.txt\n    ```\n\n4.  **Set up your API Key:**\n    You need a Google AI API key to use the Gemini models.\n\n      - Create a file named `.env` in the root of the project.\n      - Add your API key to this file:\n        ```\n        GOOGLE_API_KEY=\"YOUR_API_KEY_HERE\"\n        ```\n\n    The application will load this key automatically.\n\n## Running the Application\n\nOnce the setup is complete, you can run the application using Streamlit.\n\n**Local Development:**\n\nLaunch the Streamlit server with the following command:\n\n```bash\nstreamlit run app.py --server.port 8501 --server.headless false\n```\n\nAlternatively, you can run the `run.py` script first to apply branding changes and then launch the app:\n\n```bash\npython run.py\nstreamlit run app.py\n```\n\n**Using Docker:**\n\nThis repository includes a `Dockerfile` for easy containerization.\n\n1.  **Build the Docker image:**\n\n    ```bash\n    docker build -t clawdia-monet .\n    ```\n\n2.  **Run the Docker container:**\n    Make sure to pass your `GOOGLE_API_KEY` as an environment variable.\n\n    ```bash\n    docker run -p 8501:8501 -e GOOGLE_API_KEY=\"YOUR_API_KEY_HERE\" clawdia-monet\n    ```\n\n    The application will be available at `http://localhost:8501`.\n\n## License\n\nThis project is licensed under the Apache License, Version 2.0. See the [LICENSE](LICENSE) file for more details.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpeterjakubowski%2Fclawdia-monet","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpeterjakubowski%2Fclawdia-monet","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpeterjakubowski%2Fclawdia-monet/lists"}