Metadata-Version: 2.4
Name: shaderbridge
Version: 1.0.1
Summary: Convert Unity ShaderLab/HLSL shaders to Godot 4.x GDShader — CLI, Python API, and Web UI
Author-email: Sreejith Nair <sreejith0511nair@gmail.com>
License-Expression: MIT
Project-URL: Homepage, https://github.com/Sreejith-nair511/SWC-Redux-2033
Project-URL: Repository, https://github.com/Sreejith-nair511/SWC-Redux-2033
Project-URL: Bug Tracker, https://github.com/Sreejith-nair511/SWC-Redux-2033/issues
Keywords: unity,godot,shader,hlsl,glsl,converter,game-development,shaderlab,gdshader
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Games/Entertainment
Classifier: Topic :: Software Development :: Code Generators
Classifier: Topic :: Multimedia :: Graphics
Requires-Python: >=3.8
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: click>=8.0.0
Requires-Dist: rich>=13.0.0
Provides-Extra: web
Requires-Dist: flask>=2.0.0; extra == "web"
Requires-Dist: groq>=0.4.2; extra == "web"
Requires-Dist: python-dotenv>=1.0.0; extra == "web"
Provides-Extra: watch
Requires-Dist: watchdog>=3.0.0; extra == "watch"
Provides-Extra: all
Requires-Dist: flask>=2.0.0; extra == "all"
Requires-Dist: groq>=0.4.2; extra == "all"
Requires-Dist: python-dotenv>=1.0.0; extra == "all"
Requires-Dist: watchdog>=3.0.0; extra == "all"
Dynamic: license-file

# ShaderBridge

**Convert Unity ShaderLab/HLSL shaders to Godot 4.x GDShader — CLI, Python API, and Web UI.**

[![PyPI version](https://badge.fury.io/py/shaderbridge.svg)](https://pypi.org/project/shaderbridge/)
[![Python 3.8+](https://img.shields.io/badge/python-3.8+-blue.svg)](https://www.python.org/)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)

---

## Features

- **Full ShaderLab parser** — Properties, SubShaders, Passes, CGPROGRAM/HLSLPROGRAM
- **HLSL → GDShader translator** — types, functions, matrices, time, lighting
- **Surface shader support** — `surf()` → `fragment()` with PBR output mapping
- **Compatibility checker** — scores shaders 0–100%, flags unsupported features
- **Rich CLI** — convert, batch, validate, info, watch, serve, pipe
- **Python API** — import and use in your own tools
- **Web UI** — browser-based editor with live validation and 3D preview
- **AI conversion** — optional Groq LLM fallback for complex shaders

---

## Install

```bash
# Core CLI only (no web server)
pip install shaderbridge

# With web UI server
pip install "shaderbridge[web]"

# With file-watch mode
pip install "shaderbridge[watch]"

# Everything
pip install "shaderbridge[all]"
```

---

## CLI Usage

### Convert a single shader

```bash
shaderbridge convert MyShader.shader
shaderbridge convert MyShader.shader -o out/MyShader.gdshader
shaderbridge convert MyShader.shader --validate --verbose --show-output
```

### Batch convert a directory

```bash
shaderbridge batch ./Assets/Shaders/ -o ./GodotProject/shaders/
shaderbridge batch ./Assets/ -o ./out/ --validate --fail-fast
```

### Validate compatibility

```bash
shaderbridge validate MyShader.shader
shaderbridge validate MyShader.shader --json
```

### Inspect shader metadata

```bash
shaderbridge info MyShader.shader
```

### Watch mode (auto-convert on save)

```bash
pip install "shaderbridge[watch]"
shaderbridge watch ./Assets/Shaders/ -o ./GodotProject/shaders/
```

### Launch web UI

```bash
pip install "shaderbridge[web]"
shaderbridge serve
shaderbridge serve --port 8080 --no-browser
```

### Pipe / stdin mode (CI-friendly)

```bash
cat MyShader.shader | shaderbridge pipe > MyShader.gdshader
cat MyShader.shader | shaderbridge pipe --validate --json
```

### JSON output for scripting

```bash
shaderbridge convert MyShader.shader --json
shaderbridge batch ./shaders/ --json | jq '.results[] | select(.success == false)'
```

---

## Python API

```python
from shader_converter.parser.unity_shader_parser import UnityShaderParser
from shader_converter.generator.godot_shader_generator import AdvancedGodotShaderGenerator
from shader_converter.validator.compatibility_checker import DetailedCompatibilityChecker

unity_code = open("MyShader.shader").read()

# Parse
parser = UnityShaderParser()
ast = parser.parse(unity_code)

# Validate
checker = DetailedCompatibilityChecker()
report = checker.check_compatibility(ast)
print(f"Compatibility: {report['compatibility_score'] * 100:.0f}%")

# Generate
generator = AdvancedGodotShaderGenerator()
result = generator.generate(ast)

if result["success"]:
    open("MyShader.gdshader", "w").write(result["code"])
    print(result["code"])
```

---

## What Gets Converted

| Unity / HLSL | Godot 4.x |
|---|---|
| `float4`, `half4`, `fixed4` | `vec4` |
| `float3x3`, `float4x4` | `mat3`, `mat4` |
| `tex2D(tex, uv)` | `texture(tex, uv)` |
| `lerp(a, b, t)` | `mix(a, b, t)` |
| `saturate(x)` | `clamp(x, 0.0, 1.0)` |
| `frac(x)` | `fract(x)` |
| `ddx` / `ddy` | `dFdx` / `dFdy` |
| `clip(x)` | `if (x < 0.0) discard;` |
| `UNITY_MATRIX_MVP` | `MODELVIEWPROJECTION_MATRIX` |
| `unity_ObjectToWorld` | `MODEL_MATRIX` |
| `_Time.y` | `TIME` |
| `UnityObjectToClipPos(v)` | `MODELVIEWPROJECTION_MATRIX * vec4(v, 1.0)` |
| `TRANSFORM_TEX(uv, tex)` | `uv * tex_ST.xy + tex_ST.zw` |
| `o.Albedo =` | `ALBEDO =` |
| `o.Metallic =` | `METALLIC =` |
| `o.Smoothness =` | `ROUGHNESS = 1.0 -` |
| `o.Emission =` | `EMISSION =` |
| `o.Normal =` | `NORMAL_MAP =` |

---

## Unsupported Features

These Unity features have no direct Godot equivalent and will be flagged:

- Geometry shaders (`#pragma geometry`)
- Tessellation (`#pragma hull` / `#pragma domain`)
- Compute shaders (`#pragma kernel`)
- `GrabPass` (use Godot viewport textures instead)
- Ray tracing (`RayQuery`, `RayDesc`)
- UAV / RW resources

---

## Web UI

```bash
shaderbridge serve
# Opens http://localhost:5000
```

Features:
- Side-by-side Unity / Godot editor
- Live compatibility validation
- 3D WebGL preview (Three.js)
- AI-powered conversion (requires `GROQ_API_KEY`)
- Conversion history
- Download / copy output

---

## Environment Variables

| Variable | Description |
|---|---|
| `GROQ_API_KEY` | Groq API key for AI-powered conversion (optional) |

Create a `.env` file in the project root:

```
GROQ_API_KEY=your_key_here
```

---

## Development

```bash
git clone https://github.com/Sreejith-nair511/SWC-Redux-2033
pip install -e ".[all]"
pytest tests/ -v
```

---

## License

MIT — see [LICENSE](LICENSE)
