{"id":38495077,"url":"https://github.com/jjshay/mockup-generator","last_synced_at":"2026-01-17T05:50:06.093Z","repository":{"id":332003183,"uuid":"1130630354","full_name":"jjshay/mockup-generator","owner":"jjshay","description":"Create professional product mockups automatically - artwork in frames, room scenes","archived":false,"fork":false,"pushed_at":"2026-01-12T02:40:11.000Z","size":116,"stargazers_count":1,"open_issues_count":4,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-01-12T04:43:15.322Z","etag":null,"topics":["automation","ecommerce","image-processing","mockup","mockups","pillow","product-photography","python"],"latest_commit_sha":null,"homepage":null,"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/jjshay.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","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-01-08T19:26:06.000Z","updated_at":"2026-01-12T02:40:14.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/jjshay/mockup-generator","commit_stats":null,"previous_names":["jjshay/mockup-generator"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/jjshay/mockup-generator","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jjshay%2Fmockup-generator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jjshay%2Fmockup-generator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jjshay%2Fmockup-generator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jjshay%2Fmockup-generator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jjshay","download_url":"https://codeload.github.com/jjshay/mockup-generator/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jjshay%2Fmockup-generator/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28501328,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-17T04:31:57.058Z","status":"ssl_error","status_checked_at":"2026-01-17T04:31:45.816Z","response_time":85,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6: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":["automation","ecommerce","image-processing","mockup","mockups","pillow","product-photography","python"],"created_at":"2026-01-17T05:50:05.996Z","updated_at":"2026-01-17T05:50:06.074Z","avatar_url":"https://github.com/jjshay.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Mockup Generator\n\n![CI](https://github.com/jjshay/mockup-generator/workflows/CI/badge.svg)\n![CodeQL](https://github.com/jjshay/mockup-generator/workflows/CodeQL/badge.svg)\n[![codecov](https://codecov.io/gh/jjshay/mockup-generator/branch/main/graph/badge.svg)](https://codecov.io/gh/jjshay/mockup-generator)\n![Release](https://img.shields.io/github/v/release/jjshay/mockup-generator)\n![Python](https://img.shields.io/badge/python-3.9+-blue.svg)\n![License](https://img.shields.io/badge/license-MIT-green.svg)\n![Pillow](https://img.shields.io/badge/Pillow-enabled-brightgreen.svg)\n![PhotoRoom](https://img.shields.io/badge/PhotoRoom-optional-lightgrey.svg)\n\n**Create professional product mockups automatically - place artwork into frame templates.**\n\n[![Demo](https://asciinema.org/a/rLVozlHxTjxVVPad.svg)](https://asciinema.org/a/rLVozlHxTjxVVPad)\n\n[![Watch Demo](https://img.shields.io/badge/▶%20Watch%20Demo-Click%20to%20Play-red?style=for-the-badge\u0026logo=asciinema)](https://asciinema.org/a/rLVozlHxTjxVVPad)\n\n---\n\n## What Does This Do?\n\nTakes your artwork image and automatically:\n- Places it into professional frame mockups\n- Generates multiple room scene variations\n- Creates gallery-quality product photos\n- Outputs in multiple sizes for eBay, Etsy, Shopify\n\n**Before:** Plain artwork photo\n**After:** Professional mockup in a living room setting\n\n---\n\n## Quick Start\n\n```bash\n# Clone the repo\ngit clone https://github.com/jjshay/mockup-generator.git\ncd mockup-generator\n\n# Install dependencies\npip install -r requirements.txt\n\n# Run the interactive demo\npython demo.py\n\n# Or run the visual showcase\npython showcase.py\n\n# Generate mockup with sample artwork\npython mockup_generator.py examples/sample_artwork.jpg --output output/\n```\n\n### Sample Files\n- `examples/sample_artwork.jpg` - Sample artwork image\n- `examples/mockup_config.json` - Configuration options\n- `sample_output/mockup_manifest.json` - Example output manifest\n\n---\n\n## Real Usage\n\n### Basic Mockup Generation\n\n```python\nfrom mockup_generator import MockupGenerator\n\ngenerator = MockupGenerator()\n\n# Generate mockup with default frame\nmockup = generator.create_mockup(\"my_artwork.jpg\")\nmockup.save(\"my_artwork_mockup.jpg\")\n\n# Generate with specific frame style\nmockup = generator.create_mockup(\n    \"my_artwork.jpg\",\n    frame_style=\"black_metal\",\n    room_scene=\"living_room\"\n)\n```\n\n### Command Line\n\n```bash\n# Single image\npython mockup_generator.py artwork.jpg -o output/\n\n# Batch process folder\npython mockup_generator.py artwork_folder/ -o mockups/ --frames all\n\n# Specific frame styles\npython mockup_generator.py artwork.jpg --frame black_metal --frame gold_ornate\n```\n\n### Available Frame Styles\n\n| Style | Best For |\n|-------|----------|\n| `black_metal` | Modern, minimalist art |\n| `white_wood` | Light, airy pieces |\n| `gold_ornate` | Classical, traditional art |\n| `natural_oak` | Rustic, nature themes |\n| `floating` | Contemporary, gallery style |\n| `none` | Frameless/canvas look |\n\n### Room Scenes\n\n- `living_room` - Cozy home setting\n- `office` - Professional workspace\n- `gallery` - White gallery wall\n- `bedroom` - Intimate setting\n- `minimal` - Plain wall background\n\n---\n\n## Architecture\n\n```mermaid\nflowchart TB\n    subgraph Input\n        A[Artwork Image] --\u003e B[Image Loader]\n        C[Config File] --\u003e D[Settings Parser]\n    end\n\n    subgraph Processing[\"Image Processing\"]\n        B --\u003e E[Perspective Transform]\n        D --\u003e E\n        E --\u003e F[Shadow Generator]\n        F --\u003e G[Layer Compositor]\n    end\n\n    subgraph Frames[\"Frame Application\"]\n        G --\u003e H{Frame Style}\n        H --\u003e|black_metal| I1[Black Frame]\n        H --\u003e|white_wood| I2[White Frame]\n        H --\u003e|gold_ornate| I3[Gold Frame]\n        H --\u003e|natural_oak| I4[Oak Frame]\n    end\n\n    subgraph Scenes[\"Room Scenes\"]\n        I1 \u0026 I2 \u0026 I3 \u0026 I4 --\u003e J{Room Scene}\n        J --\u003e|living_room| K1[Living Room]\n        J --\u003e|office| K2[Office]\n        J --\u003e|gallery| K3[Gallery]\n    end\n\n    subgraph Output\n        K1 \u0026 K2 \u0026 K3 --\u003e L[Size Exporter]\n        L --\u003e M[1200x1200 Square]\n        L --\u003e N[1600x1200 4:3]\n        L --\u003e O[1920x1080 16:9]\n    end\n\n    style A fill:#e1f5fe\n    style M fill:#c8e6c9\n    style N fill:#c8e6c9\n    style O fill:#c8e6c9\n```\n\n## How It Works\n\n1. **Load artwork image**\n2. **Apply perspective transform** to match frame angle\n3. **Composite onto room scene** with proper shadows\n4. **Add frame overlay** with realistic lighting\n5. **Export** in multiple sizes\n\n---\n\n## Installation\n\n```bash\ngit clone https://github.com/yourusername/mockup-generator.git\ncd mockup-generator\npip install -r requirements.txt\npython demo.py\n```\n\n---\n\n## API Integration (Optional)\n\nFor AI-powered background removal and smart placement:\n\n```bash\n# Add to .env file\nPHOTOROOM_API_KEY=your_key_here\n```\n\nWithout API keys, the system uses basic compositing which still produces good results.\n\n---\n\n## Output Formats\n\n```\noutput/\n├── artwork_black_frame_1200x1200.jpg    # Square (Instagram)\n├── artwork_black_frame_1600x1200.jpg    # 4:3 (eBay)\n├── artwork_black_frame_1920x1080.jpg    # 16:9 (Hero)\n└── artwork_black_frame_800x800.jpg      # Thumbnail\n```\n\n---\n\n## Files\n\n| File | Purpose |\n|------|---------|\n| `demo.py` | Quick demo - run this first |\n| `mockup_generator.py` | Main mockup creation |\n| `TEMPLATE_BASED_MOCKUP_GENERATOR.py` | Template-based system |\n| `SMART_MOCKUP_COMPOSITOR.py` | AI-powered compositing |\n| `photoroom_mockup.py` | PhotoRoom API integration |\n\n---\n\n## License\n\nMIT - Use freely!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjjshay%2Fmockup-generator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjjshay%2Fmockup-generator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjjshay%2Fmockup-generator/lists"}