| # Indic Heritage Studio v2 |
|
|
| **A multimodal content creation tool that reimagines modern photos and prompts through the lens of Indian heritage art forms β running on SDXL + Stable Video Diffusion + ControlNet + per-style LoRAs across 8 Γ NVIDIA 80GB GPUs (dev) and AMD Radeon Cloud (final demo).** |
|
|
| > Submission for the **AMD AI DevMaster Hackathon (July 15 β August 6, 2026)** |
| > Track 1: Multimodal AI β Development of Multimodal Content Creation Tools |
| > Team: **TeamIndicForge** |
|
|
| --- |
|
|
| ## π― What It Does (v2 β full rebuild) |
|
|
| Indic Heritage Studio v2 transforms everyday inputs into culturally-rooted visual art. Given a text prompt, a reference photo, or both, it produces: |
|
|
| 1. **Text β Heritage-styled image** β SDXL 1.0 (DreamShaper-XL turbo) at 1024Β² with per-style LoRA overlay |
| 2. **Image β Stylized image** β IP-Adapter XL on SDXL with optional multi-style blending (60% Madhubani + 40% Warli) |
| 3. **Image β 4-second video** β Stable Video Diffusion XT 1.1 (25 frames @ 8 fps, 1024Γ576) |
| 4. **ControlNet composition** β Canny / Depth / OpenPose conditioning for precise composition control |
| 5. **Inpainting** β mask a region, restyle it in any heritage style (heritage restoration use case) |
| 6. **Batch processing** β multi-GPU data parallelism across 4 worker GPUs (~4Γ speedup) |
|
|
| Each output is styled after one of five authentic Indian art traditions, each with its own **fine-tuned LoRA** trained on real heritage art samples: |
| - π’ **Madhubani** β Bihar folk art, geometric patterns, natural pigments |
| - π€ **Warli** β Maharashtra tribal art, white-on-earth, stick figures |
| - π΅ **Pattachitra** β Odisha cloth painting, mythological narratives |
| - π‘ **Mughal Miniature** β court painting, fine detail, gold leaf |
| - π΄ **Tanjore** β Tamil Nadu, gold-gilded devotional icons |
|
|
| An optional **AI Style Advisor** (powered by AMD's free Qwen API) helps users pick a style and refine prompts β but the **core generation runs 100% on AMD Radeon GPU** in compliance with Track 1 rules. |
|
|
| --- |
|
|
| ## π What's New in v2 |
|
|
| | Axis | v1 | v2 | |
| |---|---|---| |
| | T2I model | SD 1.5 (DreamShaper) | **SDXL 1.0 + DreamShaper-XL turbo** | |
| | Resolution | 512Γ512 | **1024Γ1024 (1536Β² for showcase)** | |
| | Style conditioning | Prompt tags only | **Per-style LoRA fine-tune + IP-Adapter XL** | |
| | Image β video | AnimateDiff 16f | **Stable Video Diffusion XT 1.1, 25 frames** | |
| | Composition control | β | **ControlNet (Canny/Depth/OpenPose)** | |
| | Image repair | β | **SDXL inpainting** | |
| | Batch | Single GPU | **Multi-GPU data parallel, 4 workers** | |
| | Pipelines | Load/unload on demand | **All 4 resident on dedicated GPUs** | |
|
|
| --- |
|
|
| ## ποΈ System Architecture (Multi-GPU) |
|
|
| ``` |
| βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ |
| β USER INTERFACE (Gradio) β |
| β 6 tabs + Style Advisor widget + GPU monitor sidebar β |
| ββββββββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββ |
| βΌ |
| βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ |
| β AGENT LAYER (free AMD Qwen/DeepSeek API) β |
| β StyleAdvisor Β· PromptEngineer Β· Critic β |
| ββββββββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββ |
| βΌ |
| βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ |
| β CORE GPU LAYER β MULTI-GPU (8 Γ 80 GB dev) β |
| β GPU 0: SDXL T2I + Inpainting GPU 4: Batch worker 0 β |
| β GPU 1: SDXL + IP-Adapter XL GPU 5: Batch worker 1 β |
| β GPU 2: SVD-XT 1.1 (I2V) GPU 6: Batch worker 2 β |
| β GPU 3: SDXL + ControlNet GPU 7: Batch worker 3 β |
| β Per-style LoRAs (~150 MB each) loaded on demand β |
| βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ |
| ``` |
|
|
| On AMD Radeon Cloud (single GPU), all pipelines share GPU 0 and load/unload on demand. The code auto-detects device count. |
|
|
| --- |
|
|
| ## π οΈ Tech Stack |
|
|
| | Layer | Tech | |
| |---|---| |
| | Dev hardware | 8 Γ NVIDIA A100/H100 80GB (640 GB total VRAM) | |
| | Final demo hardware | AMD Radeon Cloud (Radeon GPU, ~16 GB VRAM) | |
| | Software stack | ROCm 6.2 (AMD) / CUDA 12.1 (NVIDIA dev) | |
| | Deep learning | PyTorch 2.4.1 + Diffusers 0.30 + Accelerate 0.34 + PEFT 0.12 | |
| | T2I model | SDXL 1.0 + DreamShaper-XL turbo | |
| | Style transfer | IP-Adapter XL (`h94/IP-Adapter`) | |
| | Image-to-video | Stable Video Diffusion XT 1.1 (`stabilityai/stable-video-diffusion-img2vid-xt-1-1`) | |
| | Composition control | ControlNet (Canny/Depth/OpenPose SDXL variants) | |
| | Per-style LoRAs | Trained with PEFT, rank 32, ~800 steps each | |
| | Agent LLM | Free AMD Model APIs (Qwen3.6-35B-A3B / DeepSeek-V4-Flash) | |
| | UI | Gradio 4.x | |
| | Video post | FFmpeg + OpenCV + imageio | |
| | Image post | Pillow, imageio | |
|
|
| --- |
|
|
| ## π¦ Installation |
|
|
| ### Step 1 β Clone |
| ```bash |
| git clone https://huggingface.co/Dev2506/indic-heritage-studio |
| cd indic-heritage-studio |
| ``` |
|
|
| # Setup |
| python -m venv .venv |
| source .venv/bin/activate |
| pip install torch==2.4.1 torchvision==0.19.1 --index-url https://download.pytorch.org/whl/cu121 |
| pip install -r requirements.txt |
|
|
| # Configure |
| cp .env.example .env |
| # Edit .env to add AMD_MODEL_API_KEY (free at https://developer.amd.com.cn/radeon/modelapis) |
| |
| # Launch |
| python app.py |
| # Open http://localhost:7860 |
| \`\`\` |
| |
| --- |
| |
| ## π Usage |
| |
| ### CLI mode |
| |
| ```bash |
| # Text-to-image in Madhubani style (SDXL + LoRA) |
| python -m core.text_to_image \ |
| --prompt "a young woman reading under a banyan tree" \ |
| --style madhubani \ |
| --out outputs/t2i_madhubani.png \ |
| --steps 25 --size 1024 --seed 42 |
| |
| # Style transfer (IP-Adapter XL) |
| python -m core.style_transfer \ |
| --image inputs/photo.jpg \ |
| --style warli \ |
| --out outputs/styled_warli.png \ |
| --strength 0.7 --ip-scale 0.7 |
| |
| # Image-to-video (SVD) |
| python -m core.image_to_video \ |
| --image outputs/styled_warli.png \ |
| --out outputs/warli_animated.mp4 \ |
| --frames 25 --fps 8 |
| |
| # ControlNet (Canny β Mughal) |
| python -m core.controlnet \ |
| --condition-image inputs/sketch.png \ |
| --condition-type canny \ |
| --prompt "a courtly gathering" \ |
| --style mughal \ |
| --out outputs/controlnet_mughal.png |
| |
| # Inpainting |
| python -m core.inpainting \ |
| --image inputs/damaged_painting.jpg \ |
| --mask inputs/damage_mask.png \ |
| --prompt "restore the floral border" \ |
| --style tanjore \ |
| --out outputs/restored.png |
| |
| # Batch (multi-GPU, 4 workers) |
| python -m core.batch_processor \ |
| --mode style_transfer \ |
| --input-dir inputs/ \ |
| --output-dir outputs/batch/ \ |
| --workers 4 |
| ``` |
| |
| ### Web UI |
|
|
| ```bash |
| python app.py |
| ``` |
|
|
| The UI exposes all 6 modes plus the Style Advisor widget and GPU monitor. |
|
|
| --- |
|
|
| ## β‘ Multi-GPU Optimization |
|
|
| The codebase applies these optimizations: |
|
|
| 1. **Pipeline-to-GPU pinning** β T2I on GPU 0, IP-Adapter on GPU 1, SVD on GPU 2, ControlNet on GPU 3. No thrash. |
| 2. **Batch data parallelism** β Inputs sharded across GPUs 4-7 via `multiprocessing.spawn`. |
| 3. **Per-style LoRA hot-swap** β `unload_lora_weights` β `load_lora_weights` in ~3 seconds (vs 30+ sec full pipeline reload). |
| 4. **FP16 inference** β `torch_dtype=torch.float16` everywhere. |
| 5. **SDPA attention** β built into PyTorch 2.0+, replaces xformers (CUDA-only). |
| 6. **Attention + VAE slicing** β reduces VRAM peak ~30%. |
| 7. **`torch.inference_mode()`** β all hot paths. |
| 8. **Pipeline singleton reuse** β load once, serve many requests. |
| |
| ### Multi-GPU Benchmark |
| |
| ```bash |
| python scripts/benchmark.py --configs 1 2 4 8 --samples 4 |
| ``` |
| |
| Reports: latency per image, throughput (img/min), peak VRAM, scaling chart. |
| |
| --- |
| |
| ## π Evaluation Rubric Coverage |
| |
| | Rubric item | Points | How v2 hits it | |
| |---|---|---| |
| | Complete inputβprocessingβoutput workflow | 40 | 6 pipelines: T2I, I2I-style, I2V, ControlNet, Inpaint, batch | |
| | Innovative creation scenarios | 20 | Indian heritage art Γ LoRA fine-tuning Γ ControlNet Γ SVD = unique vertical | |
| | Practical application & social value | 20 | Cultural preservation + heritage restoration + accessible creator tool | |
| | Clear, stable, diverse output on Radeon GPU | 20 | 6 output modes Γ 5 art styles Γ LoRA = 30+ high-quality demo outputs | |
| |
| --- |
| |
| ## ποΈ Project Structure |
| |
| ``` |
| indic-heritage-studio-v2/ |
| βββ README.md # This file |
| βββ app.py # Gradio UI entry point |
| βββ requirements.txt # Python dependencies |
| βββ .env.example # Environment template |
| βββ .gitignore |
| βββ config/ |
| β βββ settings.py # v2 global config (SDXL, multi-GPU, LoRA paths) |
| β βββ styles.py # 5 heritage styles + LoRA scales + motion tuning |
| βββ agents/ # LLM agent layer (free AMD API) |
| β βββ base.py |
| β βββ style_advisor.py |
| β βββ prompt_engineer.py # SDXL-aware prompt enrichment |
| β βββ critic.py # Heuristic + LLM critique |
| βββ core/ # GPU layer |
| β βββ text_to_image.py # SDXL + LoRA + optional refiner |
| β βββ style_transfer.py # IP-Adapter XL + multi-style blending |
| β βββ image_to_video.py # Stable Video Diffusion XT 1.1 |
| β βββ controlnet.py # Canny / Depth / OpenPose |
| β βββ inpainting.py # SDXL inpainting + LoRA |
| β βββ batch_processor.py # Multi-GPU data parallel |
| βββ training/ # NEW β LoRA training |
| β βββ prepare_dataset.py # Heritage art dataset prep |
| β βββ train_lora.py # PEFT LoRA on SDXL UNet |
| βββ ui/ |
| β βββ gradio_app.py # 6-tab web UI |
| βββ utils/ |
| β βββ gpu_utils.py # Multi-GPU device management |
| β βββ image_utils.py |
| β βββ video_utils.py |
| βββ scripts/ |
| β βββ benchmark.py # Multi-GPU scaling benchmark |
| β βββ download_models.py # All v2 models (~35 GB) |
| β βββ generate_demo_outputs.py # Pre-bake demo gallery |
| β βββ verify_rocm.py # Env health check |
| β βββ day1_setup.sh # Day 1 environment setup |
| β βββ amd_demo_recording.sh # AMD demo recording script |
| βββ assets/ |
| β βββ styles/ # IP-Adapter reference images (5) |
| β βββ datasets/ # LoRA training datasets |
| β βββ loras/ # Trained LoRA weights (5 Γ ~150 MB) |
| βββ docs/ |
| β βββ architecture.md # Detailed v2 architecture |
| β βββ 2_week_plan.md # Replan for 8Γ80GB dev |
| β βββ local_dev_setup.md # NVIDIA CUDA setup |
| β βββ architecture_diagram.png |
| βββ examples/ # Demo gallery (pre-baked) |
| βββ tests/ # Smoke tests |
| ``` |
| |
| --- |
| |
| ## π
Build Schedule (2-week plan) |
| |
| See [`docs/2_week_plan.md`](docs/2_week_plan.md) for the day-by-day plan. Summary: |
| |
| - **Week 1 (Jul 16β22):** Env setup, source heritage art datasets, train 5 LoRAs, smoke-test all 6 pipelines. |
| - **Week 2 (Jul 23β29):** Pre-bake demo gallery, run multi-GPU benchmark, write PDF + PPT, code freeze. |
| - **Week 3 (Jul 30βAug 5):** AMD verification + demo recording + submit. Burns ~1.5 of 10 AMD credits. |
| |
| --- |
| |
| ## π Submission Package |
| |
| The 4 required deliverables (Track 1): |
| |
| 1. **Project Profile Document (PDF)** β generated via the `pdf` skill in Week 2 |
| 2. **Source Code (this repo)** β fork of `AMD-DEV-CONTEST/Radeon-hackathon-2026-07` |
| 3. **Demo Video (3β5 min)** β `rocm-smi` β CLI β live GPU inference β UI walkthrough |
| 4. **PPT / Poster** β generated via the `pptx` skill in Week 2 |
| |
| PR title format: `Track 1, TeamIndicForge, Indic Heritage Studio` |
| |
| --- |
| |
| ## π Troubleshooting |
| |
| | Issue | Fix | |
| |---|---| |
| | `torch.cuda.is_available() == False` | Reinstall PyTorch with `--index-url https://download.pytorch.org/whl/cu121` | |
| | LoRA training OOMs | Lower `--rank` from 32 β 16, or `--batch-size` from 1 β 1 with `--grad-accum 8` | |
| | SVD OOM on AMD | Use `--frames 14` (instead of 25) | |
| | ControlNet preprocessor download fails | `python -c "from controlnet_aux import CannyDetector; CannyDetector.from_pretrained('lllyasviel/Annotators')"` | |
| | Multi-GPU batch fails to spawn | Set `MULTI_GPU=0` in `.env` | |
| | HuggingFace download slow | `HF_HUB_ENABLE_HF_TRANSFER=1` (already in `.env`) | |
| | Qwen API 429 errors | Agent layer is optional; core tool still works | |
| |
| --- |
| |
| ## π§ Contact |
| |
| - **Hackathon email:** ai_dev_contests@amd.com |
| - **Discord:** https://discord.gg/zt9caur5B3 |
| - **Team:** TeamIndicForg |
| |
| --- |
| |
| ## π License |
| |
| MIT for project code. Model checkpoints retain their original licenses (see HuggingFace model cards). |
| |