`joy_moveskybox.py`

### What it is for
A GUI skybox reprojection tool that shifts the horizon vertically and writes a new cubemap.

This is more advanced than simple rotation. It converts the cubemap to an equirectangular panorama, remaps the horizon, and converts it back into a cubemap.

### Dependencies
```bash
pip install PyQt5 pillow numpy
```

### Usage
```bash
python joy_moveskybox.py
```

### Expected filenames
It identifies face files by suffix in the filename:

- `up`
- `rt`
- `ft`
- `lf`
- `bk`
- `dn`

Supported source extensions:
- `.tga`
- `.png`
- `.jpg`
- `.jpeg`
- `.webp`

### How to use
1. Launch the program.
2. Drag the six cubemap face images into the list.
3. Confirm the thumbnails line up with the intended faces.
4. If needed, drag thumbnails onto each other to swap face assignments.
5. Set:
   - output face resolution
   - horizon move percent
   - optional TGA conversion
6. Click **Preview** or **Process Cubemap**.

### GUI controls
- **Output Face Resolution (square)**  
  Any value from 16 to 8192. Default: 512.

- **Move Horizon %**  
  Range: `-100` to `100`.  
  Default: `0`.  
  Positive and negative values shift the horizon up or down through reprojection.

- **Convert output images to 24-bit compressed TGA**  
  If checked, outputs `.tga`; otherwise keeps the source extension.

### Arguments
None. This is GUI-only.

### Output naming
The tool writes a new version of each face in the same folder as the input.

If the source filename already has a number before the face suffix, it increments that number.  
If not, it inserts `2`.

Examples:
- `myskyft.tga` -> `mysky2ft.tga`
- `mysky1ft.tga` -> `mysky2ft.tga`

### Notes
This tool is intended for changing the vertical sky/horizon composition without manually repainting all 6 faces.