63a2a11871636437be2498ae9d956bd1cc6458d1
Portal
A VR immersive media viewer. Wrap a 3D tunnel with a sphere of video tiles around you — float inside a psychedelic portalscape.
Tech Stack
- Engine: Godot 4.6 (Forward Plus / Mobile renderer)
- Language: GDScript
- XR: OpenXR (hand tracking, controllers, haptics)
- Physics: Jolt Physics
- Video format: Ogg (
.ogv) - Audio format: MP3 (
.mp3) - Platforms: Windows (D3D12), Linux, Android / Meta Quest
Opening in Godot
# Editor path:
/home/kyle/Downloads/Apps/Godot_v4.6.1-stable_linux.x86_64
# Open the project:
/path/to/godot4.6 --path /home/kyle/Documents/portal
# Or just double-click `project.godot` if your file manager knows Godot.
Main scene: boot.tscn
Converting Video
Drop a video file onto convert.sh to transcode it to Godot-friendly Ogg format:
chmod +x convert.sh
./convert.sh my_video.mp4
# Produces: my_video.mp4.ogv
# The script uses ffmpeg with these flags:
# -vf "scale=-1:420" → scale to 420p height, width auto
# -q:v 2 → video quality (near-lossless, good for Godot)
# -q:a 1 → audio quality
# -g:v 50 → keyframe interval (50 frames)
Drop the resulting .ogv file into the project, reference it from EmissionPoint in portal.tscn, and rebuild your export preset.
Content Variants
Different builds play different videos. Each is controlled via an export preset in export_presets.cfg:
| Variant | Video Pattern |
|---|---|
| stoner_dad_2 | *stoner_dad_2*.ogv |
| stoner_dad_3 | *stoner_dad_3*.ogv |
| stoner_plastic | *stoner_plastic*.ogv |
| chubs_compilation | *chubs*.ogv |
| 420_special | *420_special*.ogv |
| 420_special_diet | *420_special_diet*.ogv |
| orc_domination | *orc*.ogv |
| furry_poppers_daddy | *poppers*.ogv |
| furry_poppers_stable_stud | *poppers*.ogv |
| toon_goon | *toon*.ogv |
| furry_goon_encouragement | *furry_goon*.ogv |
| furry_big_bad_wolf | *wolf*.ogv |
To add a new variant, create a new export preset in Godot's Export dialog and set:
custom_features: comma-separated flags (used at runtime for conditional logic)include_filter: glob for the video file to bundle (e.g.my_video.ogv)export_path: output binary path (e.g.bin/windows/portal_my_variant.exe)
Platforms
- Windows — 3 export presets (Desktop 64-bit, D3D12, etc.)
- Linux — 4 export presets
- Android — 17 Meta Quest presets (APK, arm64-v8a)
Project Structure
Everything lives flat in the project root:
project.godot Godot project config
boot.tscn Entry scene (loads portal.tscn)
portal.tscn Main scene (tunnels, emission point, prompts)
emission_point.tscn Video sphere manager
tile.tscn Reusable tile scene
game_loader.gd Boot loader script (1 line)
portal.gd Main scene controller
emission_point.gd Video sphere + tile layout
tile.gd Individual video tile
cap.gdshader Blurry sphere cap shader
cloud_1.gdshader Tunnel cloud + spiral shader
convert.sh Video conversion utility
Languages
GDScript
98.2%
GDShader
1.4%
Dockerfile
0.4%