├── .github └── workflows │ └── executables-build.yml ├── .gitignore ├── LICENSE ├── README.md ├── electron_app ├── build │ ├── icon.ico │ ├── icon.png │ └── icon.svg ├── building_v2.csv ├── config.js ├── index.html ├── main.js ├── modules │ ├── csvGenerator.js │ ├── folderManager.js │ ├── jsonFileHandler.js │ ├── paths.js │ ├── pythonexecutor.js │ ├── serverManager.js │ └── urlReplacer.js ├── package-lock.json ├── package.json ├── renderer.js └── styles.css ├── python ├── .gitkeep ├── VR_gallery.ipynb ├── VR_gallery.py └── building_v2.csv └── web_server ├── build └── http_server │ ├── Analysis-00.toc │ ├── EXE-00.toc │ ├── PKG-00.toc │ ├── PYZ-00.pyz │ ├── PYZ-00.toc │ ├── base_library.zip │ ├── http_server.pkg │ ├── localpycs │ ├── pyimod01_archive.pyc │ ├── pyimod02_importers.pyc │ ├── pyimod03_ctypes.pyc │ ├── pyimod04_pywin32.pyc │ └── struct.pyc │ ├── warn-http_server.txt │ └── xref-http_server.html ├── content ├── building_v2.json ├── declarations.js ├── gallery1 │ ├── AdeliePenguin.jpg │ ├── AdeliePenguin2.jpg │ ├── AdeliePenguin3.jpg │ ├── AdelieTempano.jpg │ ├── AdeliesSalto.jpg │ ├── AdeliesSalto2.jpg │ ├── AlbatrosCerca2.jpg │ ├── AlbatrosPareja2.jpg │ ├── AlbatrosViento2.jpg │ ├── AlbatrosVuelo.jpg │ ├── BarcaLagoFagnano.jpg │ ├── CapePetrels2.jpg │ ├── CasaOndulada.jpg │ ├── ChinstrapPenguin2.jpg │ ├── ChinstrapPenguin3.jpg │ ├── Cimas.jpg │ ├── Crabeaterseal2.jpg │ ├── ElefanteMarinoFrontal.jpg │ ├── ElefanteMarinoHerido.jpg │ ├── Espejo2.jpg │ ├── Fiordo.jpg │ ├── FocaHerida.jpg │ ├── GlaciarDrygalski.jpg │ ├── GlaciarPetrel.jpg │ ├── GlaciarReflejo.jpg │ ├── GrytvikenBarco.jpg │ ├── GrytvikenBarcos.jpg │ ├── GrytvikenChatarra2.jpg │ ├── GrytvikenChatarra3.jpg │ ├── GrytvikenChatarra4.jpg │ ├── GrytvikenChatarra5.jpg │ ├── Halo2.jpg │ ├── Hielo2.jpg │ ├── Iceberg3.jpg │ ├── IcebergDetalle.jpg │ ├── IcebergDetalle2.jpg │ ├── IcebergDetalle4.jpg │ ├── IcebergPajaro.jpg │ ├── IcebergPajaros.jpg │ ├── LarsenHarbour.jpg │ ├── MarHielo.jpg │ ├── Nubes2.jpg │ ├── Orilla.jpg │ ├── ParejaRoyal.jpg │ ├── ParejaRoyal2.jpg │ ├── PlayaPano.jpg │ ├── PuestaSol.jpg │ ├── Quark.jpg │ ├── Royal2.jpg │ ├── RoyalPareja2.jpg │ ├── Tormenta2.jpg │ ├── Tormenta3.jpg │ ├── Weddel2.jpg │ ├── WildIceberg.jpg │ ├── WildMar.jpg │ ├── WildRocas.jpg │ ├── WillisIsland.JPG │ └── iceberg.jpg ├── gallery2 │ ├── Altiplano Descanso.jpg │ ├── ArequipaMercado.jpg │ ├── ArequipaStaCat3.jpg │ ├── CataratasAlcamayoEscarabajoBisBis.jpg │ ├── ChivayNina.jpg │ ├── ChivayRestaurante.jpg │ ├── ColcaManos.jpg │ ├── CuscoTorre.jpg │ ├── Flamenco.jpg │ ├── LaPazNina.jpg │ ├── LaPazVendedora.jpg │ ├── LagunaColoradaPlaya.jpg │ ├── LagunaMorijon2.jpg │ ├── LagunaVerdeBis.jpg │ ├── Lipez.jpg │ ├── MachuArbol.jpg │ ├── MachuPuenteIncaNiebla.jpg │ ├── MachuTarde.jpg │ ├── PuntoBaileBis.jpg │ ├── RocasCamello.jpg │ ├── RocasHombre.jpg │ ├── Sabancaya.jpg │ ├── SalarCoche.jpg │ ├── SalarPareja.jpg │ ├── TaquileNino.jpg │ ├── Titicaca.jpg │ ├── Trenes.jpg │ ├── TupizaVicuna.jpg │ ├── UrosAdorno.jpg │ ├── UrosMadreNino2.jpg │ ├── UrosNinoMochila.jpg │ ├── UrosNinoSmart.jpg │ └── UrosNinoTotora.jpg ├── gallery3 │ ├── CanyonRoadhouse.jpg │ ├── CanyonRoadhouse3.jpg │ ├── Chobe_RF_elef.jpg │ ├── Chobe_RF_impala.jpg │ ├── Etosha_Impala.jpg │ ├── Etosha_cebra2.jpg │ ├── Etosha_jirafa2.jpg │ ├── Etosha_okaukuejo.jpg │ ├── Etosha_okaukuejo2.jpg │ ├── Etosha_okaukuejo5.jpg │ ├── KasanaPuesta2.jpg │ ├── KubuBaobabs.jpg │ ├── KubuPuesta.jpg │ ├── KubuPuesta2.jpg │ ├── Kubu_noche.jpg │ ├── Mahango_mono2.jpg │ ├── Sesriem_south3.jpg │ ├── Walvis-sesriem5.jpg │ ├── Walvis-sesriem6.jpg │ ├── Walvis-sesriem7.jpg │ ├── chobe_camping.jpg │ ├── mahango_juncos2.jpg │ ├── savuti_elef2.jpg │ ├── savuti_elef3.jpg │ ├── savuti_leon4.jpg │ ├── savuti_sol.jpg │ ├── sesriem5.jpg │ ├── sesriem7.jpg │ ├── sesriem8.jpg │ ├── sesriem_deadvlei2.jpg │ ├── sesriem_deadvlei3.jpg │ ├── sesriem_deadvlei4.jpg │ ├── sesriem_deadvlei5.jpg │ ├── skeleton2.jpg │ ├── skeleton5.jpg │ ├── skeleton_arena.jpg │ └── skeleton_barco3.jpg ├── gallery4 │ ├── Askoki Group 2.jpg │ ├── Askoli.jpg │ ├── Baltoro Morraine.jpg │ ├── Baltoro Morraine2.jpg │ ├── Baltoro Morraine3.jpg │ ├── Baltoro Tributary.jpg │ ├── Baltoro Tributary2.jpg │ ├── Baltoro Tributary3.jpg │ ├── Baltoro from Urdukas.jpg │ ├── Broad Glacier.jpg │ ├── Concordia Clouds.jpg │ ├── Concordia Storm.jpg │ ├── Gasherbrum.jpg │ ├── Godwin Austen Glacier.jpg │ ├── Jhol at night.jpg │ ├── K2 Moonlight.jpg │ ├── K2 from BroadPeak BC.jpg │ ├── K2 from Concordia.jpg │ ├── Khal Khal Glacier.jpg │ ├── Leaving Concordia.jpg │ ├── Liligo Glacier.jpg │ ├── Liligo Glacier2.jpg │ ├── Marble Peak.jpg │ ├── Muztagh Glacier.jpg │ ├── Paiju Clouds.jpg │ ├── Paiju Sunset.jpg │ ├── RoadAskoli.jpg │ ├── RoadAskoli2.jpg │ ├── Skardu Kids.jpg │ ├── Skardu.jpg │ ├── Skardu2.jpg │ ├── Skardu3.jpg │ ├── Skardu4.jpg │ ├── Skardu5.jpg │ ├── Tiny figures Baltoro.jpg │ ├── Trango Glaciar Morraine.jpg │ ├── Trango Towers Jan.jpg │ ├── Truck.jpg │ ├── Uli Biafo Glaciar.jpg │ ├── Vigne Glacier.jpg │ ├── Vigne Peak.jpg │ ├── Vigne Peak2.jpg │ ├── Way to Jhola.jpg │ └── Way to Jhola2.jpg ├── gallery5 │ ├── Buenos Aires 2.jpg │ ├── Buenos Aires 3.jpg │ ├── Buenos Aires Caminito 2.jpg │ ├── Buenos Aires Caminito 4.jpg │ ├── Buenos Aires Caminito.jpg │ ├── Buenos Aires.jpg │ ├── Cardones 2.jpg │ ├── Cardones 3.jpg │ ├── Cardones 4.jpg │ ├── Cardones.jpg │ ├── CerroTorre 2.jpg │ ├── CerroTorre 3.jpg │ ├── Crucero.jpg │ ├── Fitz Roy Silueta.jpg │ ├── FitzRoy Laguna Sucia.jpg │ ├── Glaciar Spegazzini 6.jpg │ ├── Glaciar Spegazzini 7.jpg │ ├── Glaciar Spegazzini 8.jpg │ ├── Glaciar Viedma 4.jpg │ ├── Glaciar Viedma.jpg │ ├── Humahuaca 3.jpg │ ├── Iguazu Garganta 2.jpg │ ├── Iguazu Garganta 3.jpg │ ├── Iguazu Garganta.jpg │ ├── Iguazu Hoja.jpg │ ├── Iguazu Hotel.jpg │ ├── Iguazu Inferior.jpg │ ├── Iguazu Lagarto 2.jpg │ ├── Iguazu Lagarto.jpg │ ├── Iguazu Mariposa 3.jpg │ ├── Iguazu Mariposa 4.jpg │ ├── Iguazu Mariposa.jpg │ ├── Iguazu Superior 3.jpg │ ├── Iguazu Superior 6.jpg │ ├── Iguazu Superior 7.jpg │ ├── Laguna Cerro Torre Pano.jpg │ ├── Perito Moreno 3.jpg │ ├── Perito Seracs.jpg │ ├── Purmamarca 2.jpg │ ├── Purmamarca 5.jpg │ ├── Purmamarca 6.jpg │ ├── Purmamarca 7.jpg │ ├── Purmamarca 8.jpg │ ├── Purmamarca Coca.jpg │ ├── Salinas Grandes 2.jpg │ ├── Salinas Grandes 3.jpg │ ├── Salinas Grandes Conchi.jpg │ ├── perito pano.jpg │ └── perito pano2.jpg ├── gallery6 │ ├── 10_0.15_kiss2.png │ ├── 11_0.15_senoras2.png │ ├── 12_0.15_jardindelicias.png │ ├── 12_0.15_modriani.png │ ├── 12_0.15_yaol.png │ ├── 13_0.15_001.png │ ├── 14_0.15_monalisa.png │ ├── 15_0.15_meninas2.png │ ├── 16_1.5_jardindelicias.png │ ├── 17_0.15_jardindelicias.png │ ├── 18_0.15_jardindelicias.png │ ├── 19_0.015_GrytvikenChatarra4.png │ ├── 2_1.5_the-starry-night_002.png │ ├── 3_1.5_the-starry-night_002.png │ ├── 4_0.15_the-starry-night_002.png │ ├── 5_0.15_the-starry-night_002.png │ ├── 6_0.15_the-starry-night_002.png │ ├── 8_0.15_sunrise2.png │ └── 9_0.15_scream2.png ├── icons │ ├── keyboard_move.png │ ├── keyboard_pan.png │ ├── touch_move.png │ └── touch_pan.png ├── index.html ├── materials │ ├── BJS_black_metal.json │ ├── BJS_chrome.json │ ├── BJS_default_ceiling.json │ ├── BJS_default_floor.json │ ├── BJS_default_wall.json │ ├── BJS_glow.json │ ├── BJS_glow_masked.json │ ├── BJS_rough_white.json │ ├── BJS_rust.json │ ├── BJS_white.json │ ├── Wallpaper │ │ ├── Wallpaper001A_2K-JPG.usda │ │ ├── Wallpaper001A_2K-JPG.usdc │ │ ├── Wallpaper001A_2K_Color.jpg │ │ ├── Wallpaper001A_2K_Displacement.jpg │ │ ├── Wallpaper001A_2K_NormalDX.jpg │ │ ├── Wallpaper001A_2K_NormalGL.jpg │ │ ├── Wallpaper001A_2K_Roughness.jpg │ │ └── Wallpaper001A_PREVIEW.jpg │ ├── concrete-23 │ │ ├── Concrete023.png │ │ ├── Concrete023_1K-JPG.mtlx │ │ ├── Concrete023_1K-JPG.usdc │ │ ├── Concrete023_1K-JPG_Color.jpg │ │ ├── Concrete023_1K-JPG_Displacement.jpg │ │ ├── Concrete023_1K-JPG_NormalDX.jpg │ │ ├── Concrete023_1K-JPG_NormalGL.jpg │ │ └── Concrete023_1K-JPG_Roughness.jpg │ ├── logo.png │ ├── rust2 │ │ ├── Rust006.png │ │ ├── Rust006_1K-JPG.mtlx │ │ ├── Rust006_1K-JPG.usdc │ │ ├── Rust006_1K-JPG_Color.jpg │ │ ├── Rust006_1K-JPG_Displacement.jpg │ │ ├── Rust006_1K-JPG_Metalness.jpg │ │ ├── Rust006_1K-JPG_NormalDX.jpg │ │ ├── Rust006_1K-JPG_NormalGL.jpg │ │ └── Rust006_1K-JPG_Roughness.jpg │ ├── shadow.png │ └── wood_floor │ │ ├── WoodFloor051_2K-JPG.usda │ │ ├── WoodFloor051_2K-JPG.usdc │ │ ├── WoodFloor051_2K_AmbientOcclusion.jpg │ │ ├── WoodFloor051_2K_Color.jpg │ │ ├── WoodFloor051_2K_Displacement.jpg │ │ ├── WoodFloor051_2K_NormalDX.jpg │ │ ├── WoodFloor051_2K_NormalGL.jpg │ │ ├── WoodFloor051_2K_Roughness.jpg │ │ └── WoodFloor051_PREVIEW.jpg ├── room_builder_aux.js └── templates │ ├── T_nopannels.glb │ ├── T_pannels.glb │ ├── T_root.glb │ └── T_small.glb ├── http_server.py └── requirements.txt /.github/workflows/executables-build.yml: -------------------------------------------------------------------------------- 1 | name: Multi-platform Build CI & Release 2 | 3 | on: 4 | push: 5 | tags: 6 | - 'v*' # Trigger for Release builds 7 | 8 | jobs: 9 | build_and_release: 10 | strategy: 11 | matrix: 12 | os: [windows-latest, ubuntu-22.04, macos-latest] 13 | runs-on: ${{ matrix.os }} 14 | permissions: 15 | contents: write 16 | 17 | steps: 18 | - name: Checkout code 19 | uses: actions/checkout@v3 20 | with: 21 | fetch-depth: 0 # Needed for electron-builder versioning and release step 22 | 23 | - name: Set up Node.js 24 | uses: actions/setup-node@v3 25 | with: 26 | node-version: '18.x' 27 | cache: 'npm' 28 | cache-dependency-path: electron_app/package-lock.json 29 | 30 | - name: Set up Python 31 | uses: actions/setup-python@v4 32 | with: 33 | python-version: '3.11' 34 | cache: 'pip' 35 | 36 | - name: Install Node.js dependencies 37 | run: | 38 | cd electron_app 39 | npm ci 40 | cd .. 41 | shell: bash 42 | 43 | - name: Install Python dependencies 44 | run: | 45 | python -m pip install --upgrade pip 46 | pip install pyinstaller 47 | pip install -r web_server/requirements.txt 48 | shell: bash 49 | 50 | # --- Generate macOS icons from PNG --- 51 | - name: Generate macOS icons (Release Only) 52 | if: startsWith(github.ref, 'refs/tags/') && matrix.os == 'macos-latest' 53 | run: | 54 | mkdir -p electron_app/build/tmp.iconset 55 | # Create temporary icon directory 56 | 57 | # Copy the original PNG file to the required sizes 58 | # macOS requires multiple sizes in a specific format 59 | cp electron_app/build/icon.png electron_app/build/tmp.iconset/icon_512x512.png 60 | 61 | # Resize to other required dimensions (using sips which is built into macOS) 62 | sips -z 16 16 electron_app/build/icon.png --out electron_app/build/tmp.iconset/icon_16x16.png 63 | sips -z 32 32 electron_app/build/icon.png --out electron_app/build/tmp.iconset/icon_32x32.png 64 | sips -z 64 64 electron_app/build/icon.png --out electron_app/build/tmp.iconset/icon_64x64.png 65 | sips -z 128 128 electron_app/build/icon.png --out electron_app/build/tmp.iconset/icon_128x128.png 66 | sips -z 256 256 electron_app/build/icon.png --out electron_app/build/tmp.iconset/icon_256x256.png 67 | 68 | # Create 2x versions (not resizing, just renaming since we don't have higher res) 69 | cp electron_app/build/tmp.iconset/icon_16x16.png electron_app/build/tmp.iconset/icon_16x16@2x.png 70 | cp electron_app/build/tmp.iconset/icon_32x32.png electron_app/build/tmp.iconset/icon_32x32@2x.png 71 | cp electron_app/build/tmp.iconset/icon_64x64.png electron_app/build/tmp.iconset/icon_64x64@2x.png 72 | cp electron_app/build/tmp.iconset/icon_128x128.png electron_app/build/tmp.iconset/icon_128x128@2x.png 73 | cp electron_app/build/tmp.iconset/icon_256x256.png electron_app/build/tmp.iconset/icon_256x256@2x.png 74 | 75 | # Convert the iconset to icns file (macOS command) 76 | iconutil -c icns electron_app/build/tmp.iconset -o electron_app/build/icon.icns 77 | 78 | # Clean up temporary directory 79 | rm -rf electron_app/build/tmp.iconset 80 | shell: bash 81 | 82 | # --- Steps below are potentially useful for CI on 'main' --- 83 | 84 | - name: Build Python executables (CI Check / Prerequisite for Release) 85 | # This runs on both main pushes and tag pushes 86 | # Ensures python code builds correctly even before tagging 87 | run: | 88 | cd web_server 89 | pyinstaller --onefile --clean --noconfirm --distpath . http_server.py 90 | cd .. 91 | cd python 92 | pyinstaller --onefile --clean --noconfirm --distpath . VR_gallery.py 93 | cd .. 94 | shell: bash 95 | 96 | - name: Verify Python executables (CI Check) - Windows 97 | if: matrix.os == 'windows-latest' 98 | run: | 99 | dir web_server/http_server.exe 100 | dir python/VR_gallery.exe 101 | shell: powershell 102 | 103 | - name: Verify Python executables (CI Check) - Linux/macOS 104 | if: matrix.os == 'ubuntu-22.04' || matrix.os == 'macos-latest' 105 | run: | 106 | ls -la web_server/http_server 107 | ls -la python/VR_gallery 108 | shell: bash 109 | 110 | # --- Steps below ONLY run when a tag is pushed --- 111 | 112 | - name: Build Portable App for Windows (Release Only) 113 | if: startsWith(github.ref, 'refs/tags/') && matrix.os == 'windows-latest' 114 | run: | 115 | cd electron_app 116 | npx electron-builder --win --dir 117 | # Create portable zip 118 | cd dist 119 | powershell Compress-Archive -Path 'win-unpacked/*' -DestinationPath 'OpenVGal-win-portable.zip' 120 | cd ../.. 121 | shell: bash 122 | env: 123 | GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} 124 | 125 | - name: Build Portable App for Linux (Release Only) 126 | if: startsWith(github.ref, 'refs/tags/') && matrix.os == 'ubuntu-22.04' 127 | run: | 128 | cd electron_app 129 | npx electron-builder --linux --dir 130 | # Create portable zip 131 | cd dist/linux-unpacked 132 | zip -r ../OpenVGal-linux-portable.zip . 133 | cd ../.. 134 | shell: bash 135 | env: 136 | GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} 137 | 138 | - name: Build Portable App for macOS (Release Only - Apple Silicon) 139 | if: startsWith(github.ref, 'refs/tags/') && matrix.os == 'macos-latest' 140 | run: | 141 | cd electron_app 142 | # Build for Apple Silicon specifically 143 | npx electron-builder --mac --arm64 --dir 144 | # Create portable zip of the .app bundle 145 | cd dist/mac-arm64 146 | zip -r ../OpenVGal-mac-arm64-portable.zip OpenVGal.app 147 | cd ../../.. 148 | shell: bash 149 | env: 150 | GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} 151 | 152 | - name: Create GitHub Release (Release Only) 153 | uses: softprops/action-gh-release@v1 154 | if: startsWith(github.ref, 'refs/tags/') 155 | with: 156 | draft: false 157 | prerelease: false 158 | files: | 159 | electron_app/dist/OpenVGal-win-portable.zip 160 | electron_app/dist/OpenVGal-linux-portable.zip 161 | electron_app/dist/OpenVGal-mac-arm64-portable.zip 162 | env: 163 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | python/.ipynb_checkpoints/VR_gallery-checkpoint.ipynb 3 | electron_app/node_modules/* 4 | electron_app/dist 5 | python/VR_gallery.exe 6 | python/VR_gallery.spec 7 | web_server/http_server.exe 8 | web_server/http_server.spec 9 | 10 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 lbartworks 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /electron_app/build/icon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/electron_app/build/icon.ico -------------------------------------------------------------------------------- /electron_app/build/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/electron_app/build/icon.png -------------------------------------------------------------------------------- /electron_app/build/icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | VG 4 | -------------------------------------------------------------------------------- /electron_app/building_v2.csv: -------------------------------------------------------------------------------- 1 | Gallery name,Parent,Folder 2 | root,none, 3 | gallery1,root,C:\Users\Luis\Documents\GitHub\official\openvgal\web_resources\gallery1 4 | -------------------------------------------------------------------------------- /electron_app/config.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/electron_app/config.js -------------------------------------------------------------------------------- /electron_app/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | OpenVGal 2.0 Support tool 6 | 88 | 89 | 90 |

OpenVGal 2.0 support tool

91 |
92 | 93 | 94 |
95 | 96 | 97 | 98 | 99 |
100 |

URL Replacement Tool

101 |
102 |

Replace text:

103 |
104 |

With:

105 |
106 | 107 |
108 |
109 |
110 | 111 | 112 |
113 |

Build Tab

114 | 115 |
116 | 117 |
118 |
119 | 120 | 121 | 122 | 123 |
124 |
125 | 126 |
127 |
128 |
129 | 130 | 131 | 148 | 149 | -------------------------------------------------------------------------------- /electron_app/main.js: -------------------------------------------------------------------------------- 1 | const { app, BrowserWindow, ipcMain, dialog } = require('electron'); 2 | const path = require('path'); 3 | const ServerManager = require('./modules/serverManager'); 4 | 5 | let mainWindow; 6 | 7 | 8 | 9 | // Create the main window 10 | function createWindow() { 11 | mainWindow = new BrowserWindow({ 12 | width: 1080, 13 | height: 800, 14 | webPreferences: { 15 | nodeIntegration: true, 16 | contextIsolation: false, 17 | }, 18 | }); 19 | mainWindow.loadFile('index.html'); 20 | } 21 | 22 | app.whenReady().then(() => { 23 | createWindow(); 24 | app.on('activate', () => { 25 | if (BrowserWindow.getAllWindows().length === 0) createWindow(); 26 | }); 27 | }); 28 | 29 | 30 | 31 | app.on('window-all-closed', () => { 32 | if (process.platform !== 'darwin') app.quit(); 33 | }); 34 | 35 | // Initialize server manager 36 | const serverManager = new ServerManager(); 37 | 38 | // Kill web server when app is quitting 39 | app.on('quit', () => { 40 | serverManager.cleanup(); 41 | }); 42 | 43 | // Launch web server 44 | ipcMain.on('launch-web-server', (event, config) => { 45 | console.log('Launching web server with config:', config); 46 | serverManager.launchServer(event, config); 47 | }); 48 | 49 | // Stop web server IPC handler 50 | ipcMain.on('stop-web-server', (event) => { 51 | serverManager.stopServer(event); 52 | }); 53 | 54 | // Existing folder selection IPC handler 55 | ipcMain.on('open-folder-dialog', (event) => { 56 | dialog 57 | .showOpenDialog({ 58 | properties: ['openDirectory', 'multiSelections'], 59 | defaultPath: path.join(__dirname, '..', 'web_server', 'content') 60 | }) 61 | .then((result) => { 62 | if (!result.canceled) { 63 | event.sender.send('selected-folders', result.filePaths); 64 | } 65 | }) 66 | .catch((err) => { 67 | console.error(err); 68 | }); 69 | }); 70 | 71 | 72 | 73 | // File selection dialog for Python executable 74 | ipcMain.on('select-python-executable', (event) => { 75 | // Set platform-specific filters for Python executable 76 | let filters; 77 | if (process.platform === 'win32') { 78 | filters = [{ name: 'Executable', extensions: ['exe'] }]; 79 | } else if (process.platform === 'darwin') { 80 | filters = [ 81 | { name: 'All Executables', extensions: ['*'] }, 82 | { name: 'Python', extensions: ['py', 'pyc'] } 83 | ]; 84 | } else { 85 | // Linux and other platforms 86 | filters = [{ name: 'All Executables', extensions: ['*'] }]; 87 | } 88 | 89 | dialog 90 | .showOpenDialog({ 91 | properties: ['openFile'], 92 | filters: filters 93 | }) 94 | .then((result) => { 95 | if (!result.canceled) { 96 | event.sender.send('selected-python-executable', result.filePaths[0]); 97 | } 98 | }) 99 | .catch((err) => { 100 | console.error(err); 101 | }); 102 | }); 103 | 104 | 105 | 106 | // Python script execution IPC handler 107 | ipcMain.on('run-python-script', (event, { executablePath, args }) => { 108 | const { spawn } = require('child_process'); 109 | const process = spawn(executablePath, args); 110 | 111 | process.stdout.on('data', (data) => { 112 | event.sender.send('python-stdout', data.toString()); 113 | }); 114 | 115 | process.stderr.on('data', (data) => { 116 | event.sender.send('python-stderr', data.toString()); 117 | }); 118 | 119 | process.on('close', (code) => { 120 | event.sender.send('python-script-result', { 121 | stdout: null, 122 | stderr: null, 123 | error: code !== 0 ? `Process exited with code ${code}` : null, 124 | exitCode: code 125 | }); 126 | }); 127 | 128 | process.on('error', (error) => { 129 | event.sender.send('python-script-result', { 130 | stdout: null, 131 | stderr: null, 132 | error: `Error executing script: ${error.message}` 133 | }); 134 | }); 135 | }); -------------------------------------------------------------------------------- /electron_app/modules/csvGenerator.js: -------------------------------------------------------------------------------- 1 | /** 2 | * CSV Generation Module 3 | * Handles CSV file generation from folder paths 4 | */ 5 | 6 | const path = require('path'); 7 | const fs = require('fs'); 8 | const { resourcesBasePath } = require('./paths'); 9 | 10 | class CSVGenerator { 11 | constructor() { 12 | this.messageCallback = null; 13 | } 14 | 15 | /** 16 | * Initializes the CSV generator 17 | * @param {function} messageCallback - Callback function to display messages 18 | */ 19 | initialize(messageCallback) { 20 | this.messageCallback = messageCallback; 21 | } 22 | 23 | /** 24 | * Generates a CSV file from the provided folders 25 | * @param {string[]} folders - Array of folder paths 26 | * @returns {boolean} - Whether the generation was successful 27 | */ 28 | generateCSV(folders) { 29 | if (folders.length === 0) { 30 | this.displayMessage('Error: No folders selected. Please add at least one folder.', 'red'); 31 | return false; 32 | } 33 | 34 | let csvContent = 'Gallery name,Parent,Folder\n'; 35 | csvContent += 'root,none,\n'; 36 | 37 | folders.forEach((folder) => { 38 | const galleryName = path.basename(folder); 39 | const parent = 'root'; 40 | 41 | // Extract only the path after 'web_server/content' 42 | let folderPath = folder; 43 | // Handle both Windows and Unix-style paths 44 | const contentIndexWin = folder.indexOf('web_server\\content'); 45 | const contentIndexUnix = folder.indexOf('web_server/content'); 46 | 47 | if (contentIndexWin !== -1) { 48 | // Windows path handling 49 | folderPath = folder.substring(contentIndexWin + 'web_server\\content'.length).replace(/\\/g, '/'); 50 | } else if (contentIndexUnix !== -1) { 51 | // Unix path handling 52 | folderPath = folder.substring(contentIndexUnix + 'web_server/content'.length); 53 | } 54 | 55 | // Ensure the path starts with a slash 56 | if (folderPath && !folderPath.startsWith('/')) { 57 | folderPath = '/' + folderPath; 58 | } 59 | 60 | csvContent += `${galleryName},${parent},${folderPath}\n`; 61 | }); 62 | 63 | //manage paths 64 | const localPath = '/python/building_v2.csv'; 65 | const csvPath = path.join(resourcesBasePath, localPath); 66 | 67 | 68 | 69 | try { 70 | fs.writeFileSync(csvPath, csvContent); 71 | this.displayMessage(`Success: building_v2.csv generated at ${localPath}`, 'green'); 72 | return true; 73 | } catch (err) { 74 | this.displayMessage(`Error: Failed to generate CSV - ${err.message}`, 'red'); 75 | return false; 76 | } 77 | } 78 | 79 | /** 80 | * Displays a message using the provided callback 81 | * @param {string} message - The message to display 82 | * @param {string} color - The color of the message 83 | */ 84 | displayMessage(message, color) { 85 | if (this.messageCallback) { 86 | this.messageCallback(message, color); 87 | } 88 | } 89 | } 90 | 91 | module.exports = CSVGenerator; -------------------------------------------------------------------------------- /electron_app/modules/folderManager.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Folder Management Module 3 | * Handles folder operations and tree visualization 4 | */ 5 | 6 | const path = require('path'); 7 | const fs = require('fs'); 8 | 9 | class FolderManager { 10 | constructor() { 11 | this.addedFolders = []; 12 | this.folderTree = null; 13 | } 14 | 15 | /** 16 | * Initializes the folder manager 17 | * @param {HTMLElement} folderTreeElement - The DOM element for the folder tree 18 | */ 19 | initialize(folderTreeElement) { 20 | this.folderTree = folderTreeElement; 21 | this.buildFolderTree(); 22 | } 23 | 24 | /** 25 | * Adds new folders to the manager 26 | * @param {string[]} folderPaths - Array of folder paths to add 27 | */ 28 | addFolders(folderPaths) { 29 | this.addedFolders.push(...folderPaths); 30 | this.buildFolderTree(); 31 | } 32 | 33 | /** 34 | * Removes a folder from the manager 35 | * @param {string} folderPath - The path of the folder to remove 36 | */ 37 | removeFolder(folderPath) { 38 | this.addedFolders = this.addedFolders.filter(f => f !== folderPath); 39 | this.buildFolderTree(); 40 | } 41 | 42 | /** 43 | * Gets all currently managed folders 44 | * @returns {string[]} Array of folder paths 45 | */ 46 | getFolders() { 47 | return [...this.addedFolders]; 48 | } 49 | 50 | /** 51 | * Builds the folder tree UI 52 | */ 53 | buildFolderTree() { 54 | if (!this.folderTree) return; 55 | 56 | this.folderTree.innerHTML = ''; 57 | 58 | this.addedFolders.forEach((folder) => { 59 | const li = document.createElement('li'); 60 | li.innerHTML = `[+] ${path.basename(folder)} ×`; 61 | li.addEventListener('click', (e) => { 62 | if (e.target.classList.contains('toggle')) { 63 | this.toggleFolder(li, folder); 64 | } else if (e.target.classList.contains('remove')) { 65 | this.removeFolder(folder); 66 | } 67 | }); 68 | this.folderTree.appendChild(li); 69 | }); 70 | } 71 | 72 | /** 73 | * Toggles folder expansion in the UI 74 | * @param {HTMLElement} li - The list item element 75 | * @param {string} folderPath - The path of the folder to toggle 76 | */ 77 | toggleFolder(li, folderPath) { 78 | const toggleSpan = li.querySelector('.toggle'); 79 | 80 | if (li.classList.contains('open')) { 81 | // Close folder 82 | li.classList.remove('open'); 83 | toggleSpan.textContent = '[+]'; 84 | const subUl = li.nextSibling; 85 | if (subUl && subUl.tagName === 'UL') { 86 | li.parentNode.removeChild(subUl); 87 | } 88 | } else { 89 | // Open folder 90 | li.classList.add('open'); 91 | toggleSpan.textContent = '[-]'; 92 | const subUl = document.createElement('ul'); 93 | 94 | try { 95 | const files = fs.readdirSync(folderPath); 96 | files.forEach((file) => { 97 | const fullPath = path.join(folderPath, file); 98 | const stats = fs.statSync(fullPath); 99 | const subLi = document.createElement('li'); 100 | 101 | if (stats.isDirectory()) { 102 | subLi.innerHTML = `[+] ${file}`; 103 | subLi.addEventListener('click', (e) => { 104 | if (e.target.classList.contains('toggle')) { 105 | this.toggleFolder(subLi, fullPath); 106 | } 107 | }); 108 | } else { 109 | subLi.textContent = file; 110 | } 111 | 112 | subUl.appendChild(subLi); 113 | }); 114 | 115 | li.parentNode.insertBefore(subUl, li.nextSibling); 116 | } catch (err) { 117 | console.error(`Error reading folder: ${err.message}`); 118 | throw err; 119 | } 120 | } 121 | } 122 | } 123 | 124 | module.exports = FolderManager; -------------------------------------------------------------------------------- /electron_app/modules/jsonFileHandler.js: -------------------------------------------------------------------------------- 1 | /** 2 | * JSON File Handler Module 3 | * Handles JSON file operations and text replacement 4 | */ 5 | 6 | const fs = require('fs'); 7 | const path = require('path'); 8 | 9 | class JSONFileHandler { 10 | /** 11 | * Finds all JSON files in the specified directory and its subdirectories 12 | * @param {string} directory - The directory to search in 13 | * @returns {string[]} - Array of JSON file paths 14 | */ 15 | static findJSONFiles(directory) { 16 | const jsonFiles = []; 17 | try { 18 | const files = fs.readdirSync(directory); 19 | for (const file of files) { 20 | const filePath = path.join(directory, file); 21 | const stat = fs.statSync(filePath); 22 | 23 | if (stat.isDirectory()) { 24 | jsonFiles.push(...this.findJSONFiles(filePath)); 25 | } else if (path.extname(file).toLowerCase() === '.json') { 26 | jsonFiles.push(filePath); 27 | } 28 | } 29 | } catch (error) { 30 | console.error('Error finding JSON files:', error); 31 | } 32 | return jsonFiles; 33 | } 34 | 35 | /** 36 | * Replaces text in JSON files 37 | * @param {string} directory - The directory containing JSON files 38 | * @param {string} searchText - The text to search for 39 | * @param {string} replacementText - The text to replace with 40 | * @param {Function} statusCallback - Callback function to update status 41 | * @returns {Object} - Results of the replacement operation 42 | */ 43 | static replaceInJSONFiles(directory, searchText, replacementText, statusCallback) { 44 | const results = { 45 | success: true, 46 | filesProcessed: 0, 47 | filesModified: 0, 48 | errors: [] 49 | }; 50 | 51 | try { 52 | const jsonFiles = this.findJSONFiles(directory); 53 | results.filesProcessed = jsonFiles.length; 54 | 55 | if (jsonFiles.length === 0) { 56 | statusCallback('No JSON files found in the specified directory', 'red'); 57 | results.success = false; 58 | return results; 59 | } 60 | 61 | for (const filePath of jsonFiles) { 62 | try { 63 | let content = fs.readFileSync(filePath, 'utf8'); 64 | const originalContent = content; 65 | 66 | // Replace all occurrences of searchText with replacementText 67 | content = content.split(searchText).join(replacementText); 68 | 69 | if (content !== originalContent) { 70 | fs.writeFileSync(filePath, content, 'utf8'); 71 | results.filesModified++; 72 | statusCallback(`Modified file: ${path.basename(filePath)}`, 'green'); 73 | } 74 | } catch (error) { 75 | results.errors.push(`Error processing ${filePath}: ${error.message}`); 76 | results.success = false; 77 | } 78 | } 79 | 80 | const summary = `Processed ${results.filesProcessed} files, modified ${results.filesModified} files`; 81 | statusCallback(summary, results.success ? 'green' : 'orange'); 82 | 83 | } catch (error) { 84 | results.success = false; 85 | results.errors.push(`General error: ${error.message}`); 86 | statusCallback('Error processing files: ' + error.message, 'red'); 87 | } 88 | 89 | return results; 90 | } 91 | } 92 | 93 | module.exports = JSONFileHandler; -------------------------------------------------------------------------------- /electron_app/modules/paths.js: -------------------------------------------------------------------------------- 1 | const path = require('path'); 2 | const electron = require('electron'); 3 | 4 | // In Electron 12+, remote module is deprecated and removed 5 | // We need to check if we're in the main process or renderer process 6 | let app; 7 | try { 8 | // Try to get app from main process 9 | app = electron.app; 10 | } catch (e) { 11 | // If that fails, we're in the renderer process 12 | app = null; 13 | } 14 | 15 | // Define resourcesBasePath with a fallback for renderer process 16 | const resourcesBasePath = app && app.isPackaged 17 | ? process.resourcesPath 18 | : path.join(__dirname, '..', '..'); 19 | 20 | console.log('resourcesBasePath:', resourcesBasePath); 21 | 22 | 23 | 24 | module.exports = { 25 | resourcesBasePath, 26 | }; -------------------------------------------------------------------------------- /electron_app/modules/pythonexecutor.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Executable Manager Module 3 | * Handles execution of predefined executables for JSON generation 4 | */ 5 | 6 | const { ipcRenderer } = require('electron'); 7 | const { resourcesBasePath } = require('./paths'); 8 | 9 | class PythonExecutor { 10 | constructor() { 11 | this.executablePath = ''; 12 | this.messageCallback = null; 13 | } 14 | 15 | /** 16 | * Initializes the executor 17 | * @param {function} messageCallback - Callback function to display messages 18 | */ 19 | initialize(messageCallback) { 20 | this.messageCallback = messageCallback; 21 | this.setupEventListeners(); 22 | } 23 | 24 | /** 25 | * Sets the executable path 26 | * @param {Object} paths - Object containing the predefined executable path 27 | * @param {string} paths.predefinedPath - Path to predefined executable 28 | */ 29 | setExecutionConfig(mode, paths) { 30 | this.executablePath = paths.predefinedPath + (process.platform === 'win32' ? '.exe' : ''); 31 | } 32 | 33 | /** 34 | * Sets up IPC event listeners for executable output 35 | */ 36 | setupEventListeners() { 37 | ipcRenderer.on('python-stdout', (event, data) => { 38 | this.displayMessage(data, 'blue'); 39 | }); 40 | 41 | ipcRenderer.on('python-stderr', (event, data) => { 42 | this.displayMessage(data, 'red'); 43 | }); 44 | 45 | ipcRenderer.on('python-script-result', (event, result) => { 46 | this.processPythonScriptResult(result); 47 | }); 48 | } 49 | 50 | /** 51 | * Generates JSON using predefined executable 52 | * @param {string[]} folders - Array of folder paths 53 | */ 54 | generateJSON(folders) { 55 | if (folders.length === 0) { 56 | this.displayMessage('Error: No folders selected. Please add at least one folder.', 'red'); 57 | return; 58 | } 59 | 60 | if (!this.executablePath) { 61 | this.displayMessage('Error: Executable path not set.', 'red'); 62 | return; 63 | } 64 | 65 | const openvgalFolder = resourcesBasePath; 66 | 67 | this.displayMessage('Generating JSON...', 'blue'); 68 | 69 | const args = ['--openvgal_folder', openvgalFolder]; 70 | const executablePath = this.executablePath; 71 | 72 | // Send IPC message to main process 73 | ipcRenderer.send('run-python-script', { 74 | executablePath, 75 | args, 76 | }) 77 | } 78 | 79 | /** 80 | * Processes the Python script execution result 81 | * @param {Object} result - The result object from Python script execution 82 | */ 83 | processPythonScriptResult({ stdout, stderr, error, exitCode }) { 84 | // Log raw output for debugging 85 | console.log('Raw Python output:', stdout); 86 | console.log('stderr:', stderr); 87 | console.log('exit code:', exitCode); 88 | 89 | if (error) { 90 | this.displayMessage(`Error executing Python script: ${error}`, 'red'); 91 | console.error('Python execution error:', error); 92 | return; 93 | } 94 | 95 | if (stderr && stderr.trim() !== '') { 96 | this.displayMessage(`Python script error output: ${stderr}`, 'red'); 97 | console.warn('Python stderr:', stderr); 98 | return; 99 | } 100 | 101 | if (exitCode !== 0) { 102 | this.displayMessage(`Python script failed with exit code: ${exitCode}`, 'red'); 103 | return; 104 | } 105 | 106 | if (stdout && stdout.trim() !== '') { 107 | console.log('Python progress message:', stdout); 108 | } 109 | 110 | this.displayMessage('JSON generation completed successfully', 'green'); 111 | } 112 | 113 | /** 114 | * Displays a message using the provided callback 115 | * @param {string} message - The message to display 116 | * @param {string} color - The color of the message 117 | */ 118 | displayMessage(message, color) { 119 | if (this.messageCallback) { 120 | this.messageCallback(message, color); 121 | } 122 | } 123 | } 124 | 125 | module.exports = PythonExecutor; -------------------------------------------------------------------------------- /electron_app/modules/serverManager.js: -------------------------------------------------------------------------------- 1 | /** 2 | * ServerManager class to handle web server operations 3 | */ 4 | class ServerManager { 5 | constructor() { 6 | this.webServerProcess = null; 7 | this.serverStartTimeout = null; 8 | } 9 | 10 | /** 11 | * Launch the web server 12 | * @param {Object} event - IPC event object 13 | * @param {Object} config - Configuration object containing server settings 14 | * @param {string} config.serverPath - Path to server executable 15 | */ 16 | launchServer(event, config) { 17 | // Check if server is already running 18 | if (this.isServerRunning()) { 19 | console.log('Server is already running, opening browser'); 20 | event.sender.send('launch-success', 'http://localhost:80'); 21 | require('electron').shell.openExternal('http://localhost:80'); 22 | return; 23 | } 24 | 25 | // Validate config object 26 | if (!config || typeof config !== 'object') { 27 | const errorMsg = 'Invalid configuration provided'; 28 | console.error(errorMsg); 29 | event.sender.send('launch-error', errorMsg); 30 | return; 31 | } 32 | 33 | const fs = require('fs'); 34 | 35 | // Validate executable path 36 | if (!config.serverPath || !fs.existsSync(config.serverPath)) { 37 | const errorMsg = `Server executable not found at ${config.serverPath || 'undefined path'}`; 38 | console.error(errorMsg); 39 | event.sender.send('launch-error', errorMsg); 40 | return; 41 | } 42 | 43 | try { 44 | this.startServerProcess(event, config); 45 | } catch (error) { 46 | console.error(`Failed to launch web server: ${error.message}`); 47 | event.sender.send('launch-error', `Failed to launch web server: ${error.message}`); 48 | } 49 | } 50 | 51 | /** 52 | * Start the server process 53 | * @private 54 | */ 55 | startServerProcess(event, config) { 56 | const { spawn } = require('child_process'); 57 | const path = require('path'); 58 | const contentFolderPath = path.join(__dirname, '..', '..', 'web_server', 'content'); 59 | const args = ['--port', '80', '--content_folder', contentFolderPath]; 60 | 61 | // Run executable with arguments 62 | this.webServerProcess = spawn(config.serverPath, args, { shell: false }); 63 | 64 | this.setupProcessTimeout(event); 65 | this.setupProcessListeners(event); 66 | } 67 | 68 | /** 69 | * Setup process timeout 70 | * @private 71 | */ 72 | setupProcessTimeout(event) { 73 | // Clear any existing timeout first 74 | if (this.serverStartTimeout) { 75 | clearTimeout(this.serverStartTimeout); 76 | } 77 | 78 | this.serverStartTimeout = setTimeout(() => { 79 | if (this.webServerProcess) { 80 | // Check if server is actually running despite not receiving the ready message 81 | const http = require('http'); 82 | const testConnection = http.get('http://localhost:80', (res) => { 83 | if (res.statusCode === 200) { 84 | this.handleServerStart(event); 85 | } else { 86 | this._handleStartupFailure(event, 'Server responded with non-200 status code'); 87 | } 88 | }); 89 | testConnection.on('error', (err) => { 90 | this._handleStartupFailure(event, `Connection error: ${err.message}`); 91 | }); 92 | 93 | // Set a timeout for the connection attempt 94 | testConnection.setTimeout(2000, () => { 95 | testConnection.abort(); 96 | this._handleStartupFailure(event, 'Connection timeout'); 97 | }); 98 | } 99 | }, 5000); 100 | } 101 | 102 | /** 103 | * Setup process event listeners 104 | * @private 105 | */ 106 | setupProcessListeners(event) { 107 | const shell = require('electron').shell; 108 | 109 | this.webServerProcess.stdout.on('data', (data) => { 110 | const output = data.toString(); 111 | console.log(`Web server stdout: ${output}`); 112 | 113 | if (output.includes('Server started') || output.includes('listening on port')) { 114 | this.handleServerStart(event); 115 | } 116 | }); 117 | 118 | this.webServerProcess.stderr.on('data', (data) => { 119 | const error = data.toString(); 120 | console.error(`Web server stderr: ${error}`); 121 | event.sender.send('server-error', error); 122 | }); 123 | 124 | this.webServerProcess.on('close', (code) => { 125 | this.handleServerClose(event, code); 126 | }); 127 | 128 | this.webServerProcess.on('error', (error) => { 129 | this.handleServerError(event, error); 130 | }); 131 | } 132 | 133 | /** 134 | * Handle server start 135 | * @private 136 | */ 137 | handleServerStart(event) { 138 | console.log('Web server is ready'); 139 | // Clear any pending timeouts 140 | if (this.serverStartTimeout) { 141 | clearTimeout(this.serverStartTimeout); 142 | this.serverStartTimeout = null; 143 | } 144 | 145 | // Small delay to ensure server is fully ready before opening browser 146 | setTimeout(() => { 147 | if (!this.webServerProcess) { 148 | console.warn('Server process no longer exists, cannot open browser'); 149 | return; 150 | } 151 | 152 | const serverUrl = 'http://localhost:80'; 153 | event.sender.send('launch-success', serverUrl); 154 | 155 | // Open browser with error handling 156 | require('electron').shell.openExternal(serverUrl).catch(err => { 157 | console.error('Failed to open browser:', err); 158 | event.sender.send('server-error', `Server started but failed to open browser: ${err.message}`); 159 | }); 160 | }, 1000); 161 | } 162 | 163 | /** 164 | * Handle server close 165 | * @private 166 | */ 167 | handleServerClose(event, code) { 168 | console.log(`Web server process exited with code ${code}`); 169 | if (this.serverStartTimeout) { 170 | clearTimeout(this.serverStartTimeout); 171 | this.serverStartTimeout = null; 172 | } 173 | this.webServerProcess = null; 174 | 175 | if (code !== 0) { 176 | event.sender.send('launch-error', `Web server process exited with code ${code}`); 177 | } 178 | event.sender.send('server-stopped'); 179 | } 180 | 181 | /** 182 | * Handle server startup failure 183 | * @private 184 | */ 185 | _handleStartupFailure(event, reason) { 186 | console.error(`Server failed to start: ${reason}`); 187 | event.sender.send('launch-error', `Server failed to start: ${reason}`); 188 | this.stopServer(); 189 | } 190 | 191 | /** 192 | * Handle server error 193 | * @private 194 | */ 195 | handleServerError(event, error) { 196 | console.error(`Web server process error: ${error.message}`); 197 | if (this.serverStartTimeout) { 198 | clearTimeout(this.serverStartTimeout); 199 | this.serverStartTimeout = null; 200 | } 201 | event.sender.send('launch-error', `Failed to start web server: ${error.message}`); 202 | this.webServerProcess = null; 203 | } 204 | 205 | /** 206 | * Terminates the web server process 207 | * @private 208 | * @param {Object} [event] - IPC event object (optional) 209 | * @param {boolean} [isCleanup=false] - Whether this is being called during cleanup 210 | * @returns {Promise} A promise that resolves when the process is terminated 211 | */ 212 | _terminateProcess(event, isCleanup = false) { 213 | return new Promise((resolve) => { 214 | if (!this.webServerProcess) { 215 | console.log('No web server process to stop'); 216 | if (event && event.sender && !isCleanup) { 217 | event.sender.send('server-stopped'); 218 | } 219 | resolve(); 220 | return; 221 | } 222 | 223 | try { 224 | console.log(isCleanup ? 'Cleaning up web server process tree...' : 'Attempting to stop web server process and its children...'); 225 | const treeKill = require('tree-kill'); 226 | 227 | // Use tree-kill to terminate the process tree 228 | treeKill(this.webServerProcess.pid, 'SIGTERM', (err) => { 229 | if (err) { 230 | console.error(isCleanup ? 'Error cleaning up process tree:' : 'Error stopping process tree:', err); 231 | // Try force kill if SIGTERM fails 232 | treeKill(this.webServerProcess.pid, 'SIGKILL', (killErr) => { 233 | if (killErr) { 234 | console.error(isCleanup ? 'Error force killing process tree during cleanup:' : 'Error force killing process tree:', killErr); 235 | if (event && event.sender && !isCleanup) { 236 | event.sender.send('server-error', `Failed to stop web server process tree: ${killErr.message}`); 237 | } 238 | } else { 239 | console.log(isCleanup ? 'Web server process tree cleaned up successfully' : 'Web server process tree force killed successfully'); 240 | } 241 | this.webServerProcess = null; 242 | if (event && event.sender && !isCleanup) { 243 | event.sender.send('server-stopped'); 244 | } 245 | resolve(); 246 | }); 247 | } else { 248 | console.log(isCleanup ? 'Web server process tree cleaned up successfully' : 'Web server process tree stopped successfully'); 249 | this.webServerProcess = null; 250 | if (event && event.sender && !isCleanup) { 251 | event.sender.send('server-stopped'); 252 | } 253 | resolve(); 254 | } 255 | }); 256 | } catch (err) { 257 | console.error(isCleanup ? 'Error cleaning up web server process:' : 'Error stopping web server:', err); 258 | if (event && event.sender && !isCleanup) { 259 | event.sender.send('server-error', `Failed to stop web server: ${err.message}`); 260 | } 261 | this.webServerProcess = null; 262 | resolve(); 263 | } 264 | }); 265 | } 266 | 267 | /** 268 | * Stop the web server 269 | * @param {Object} [event] - IPC event object (optional) 270 | */ 271 | stopServer(event) { 272 | this._terminateProcess(event, false); 273 | } 274 | 275 | /** 276 | * Check if server is running 277 | * @returns {boolean} 278 | */ 279 | isServerRunning() { 280 | if (this.webServerProcess) { 281 | try { 282 | // More reliable check for Windows process status 283 | const isRunning = this.webServerProcess.pid && this.webServerProcess.exitCode === null; 284 | if (!isRunning) { 285 | this.webServerProcess = null; 286 | } 287 | return isRunning; 288 | } catch (e) { 289 | console.error('Error checking server status:', e); 290 | this.webServerProcess = null; 291 | return false; 292 | } 293 | } 294 | return false; 295 | } 296 | 297 | /** 298 | * Clean up resources 299 | */ 300 | cleanup() { 301 | // Clear any pending timeouts first 302 | if (this.serverStartTimeout) { 303 | clearTimeout(this.serverStartTimeout); 304 | this.serverStartTimeout = null; 305 | } 306 | 307 | // Terminate the process if it exists 308 | this._terminateProcess(null, true); 309 | } 310 | } 311 | 312 | module.exports = ServerManager; -------------------------------------------------------------------------------- /electron_app/modules/urlReplacer.js: -------------------------------------------------------------------------------- 1 | /** 2 | * URL Replacement Module 3 | * Handles URL search and replacement functionality 4 | */ 5 | 6 | // ===== URL REPLACEMENT TOOL ===== 7 | const path = require('path'); 8 | 9 | class URLReplacer { 10 | constructor() { 11 | this.statusDiv = null; 12 | this.searchInput = null; 13 | this.replacementInput = null; 14 | this.convertButton = null; 15 | } 16 | 17 | /** 18 | * Initializes the URL replacer UI elements and event listeners 19 | */ 20 | initialize() { 21 | this.convertButton = document.getElementById('convert-button'); 22 | this.statusDiv = document.getElementById('replacement-status'); 23 | this.searchInput = document.getElementById('search-url'); 24 | this.replacementInput = document.getElementById('replacement-url'); 25 | 26 | this.setupEventListeners(); 27 | } 28 | 29 | /** 30 | * Sets up event listeners for the URL replacement functionality 31 | */ 32 | setupEventListeners() { 33 | this.convertButton.addEventListener('click', () => this.handleConvertClick()); 34 | } 35 | 36 | /** 37 | * Handles the convert button click event 38 | */ 39 | handleConvertClick() { 40 | const searchText = this.searchInput.value.trim(); 41 | const replacementText = this.replacementInput.value.trim(); 42 | 43 | if (!this.validateInputs(searchText, replacementText)) { 44 | return; 45 | } 46 | 47 | const contentDir = path.join(__dirname, '..', '..', 'web_server', 'content', 'materials'); 48 | const jsonHandler = require('./jsonFileHandler'); 49 | 50 | try { 51 | const results = jsonHandler.replaceInJSONFiles( 52 | contentDir, 53 | searchText, 54 | replacementText, 55 | (message, color) => this.setStatus(message, color) 56 | ); 57 | 58 | if (!results.success && results.errors.length > 0) { 59 | console.error('Errors during replacement:', results.errors); 60 | } 61 | } catch (error) { 62 | this.setStatus(`Error: ${error.message}`, 'red'); 63 | console.error('Error during replacement:', error); 64 | } 65 | } 66 | 67 | /** 68 | * Validates the search and replacement inputs 69 | * @param {string} searchText - The text to search for 70 | * @param {string} replacementText - The text to replace with 71 | * @returns {boolean} - Whether the inputs are valid 72 | */ 73 | validateInputs(searchText, replacementText) { 74 | if (!searchText) { 75 | this.setStatus('Please enter text to search for', 'red'); 76 | return false; 77 | } 78 | 79 | if (!replacementText) { 80 | this.setStatus('Please enter replacement text', 'red'); 81 | return false; 82 | } 83 | 84 | return true; 85 | } 86 | 87 | /** 88 | * Sets the status message with the specified color 89 | * @param {string} message - The message to display 90 | * @param {string} color - The color of the message 91 | */ 92 | setStatus(message, color) { 93 | this.statusDiv.textContent = message; 94 | this.statusDiv.style.color = color; 95 | } 96 | } 97 | 98 | module.exports = URLReplacer; -------------------------------------------------------------------------------- /electron_app/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "openvgal", 3 | "version": "2.0.0", 4 | "author": { 5 | "name": "LB Artworks", 6 | "email": "lba_socials@protonmail.com" 7 | }, 8 | "description": "OpenVGal Electron Application", 9 | "main": "main.js", 10 | "scripts": { 11 | "start": "electron .", 12 | "build": "electron-builder --win", 13 | "dist:win": "electron-builder --win --dir && npm run zip:win", 14 | "dist:mac": "electron-builder --mac --dir && npm run zip:mac", 15 | "dist:linux": "electron-builder --linux --dir && npm run zip:linux", 16 | "dist:all": "npm run dist:win && npm run dist:mac && npm run dist:linux", 17 | "zip:win": "cd dist/win-unpacked && zip -r ../OpenVGal-win-portable.zip .", 18 | "zip:mac": "cd dist && zip -r OpenVGal-mac-portable.zip OpenVGal.app", 19 | "zip:linux": "cd dist/linux-unpacked && zip -r ../OpenVGal-linux-portable.zip ." 20 | }, 21 | "repository": { 22 | "type": "git", 23 | "url": "https://github.com/lbartworks/openvgal_electron" 24 | }, 25 | "keywords": [ 26 | "Electron", 27 | "OpenVGal", 28 | "VR", 29 | "Gallery" 30 | ], 31 | "license": "CC0-1.0", 32 | "devDependencies": { 33 | "electron": "^35.0.0", 34 | "electron-builder": "^24.6.4" 35 | }, 36 | "dependencies": { 37 | "tree-kill": "^1.2.2" 38 | }, 39 | "build": { 40 | "appId": "com.openvgal.app", 41 | "productName": "OpenVGal", 42 | "directories": { 43 | "output": "dist" 44 | }, 45 | "win": { 46 | "target": "dir", 47 | "icon": "build/icon.ico" 48 | }, 49 | "linux": { 50 | "target": "dir", 51 | "icon": "build/icon.png" 52 | }, 53 | "mac": { 54 | "target": ["dir"], 55 | "icon": "build/icon.icns", 56 | "category": "public.app-category.developer-tools", 57 | "artifactName": "OpenVGal.app" 58 | }, 59 | "files": [ 60 | "**/*", 61 | "!**/node_modules/*/{CHANGELOG.md,README.md,README,readme.md,readme}", 62 | "!**/node_modules/*/{test,__tests__,tests,powered-test,example,examples}", 63 | "!**/node_modules/*.d.ts", 64 | "!**/node_modules/.bin", 65 | "!**/.{idea,git,cache,github,vscode,vs}", 66 | "!**/{.DS_Store,.git,.hg,.svn,CVS,RCS,SCCS,__pycache__,thumbs.db,.gitignore,.gitattributes}", 67 | "!**/{tsconfig.json,tslint.json,*.yml}", 68 | "../python/**/*.py", 69 | "../python/**/*.csv" 70 | ], 71 | "extraResources": [ 72 | { 73 | "from": "../web_server", 74 | "to": "web_server", 75 | "filter": ["*.exe", "http_server"] 76 | }, 77 | { 78 | "from": "../python", 79 | "to": "python", 80 | "filter": ["*.exe", "VR_gallery"] 81 | }, 82 | { 83 | "from": "../web_server", 84 | "to": "web_server", 85 | "filter": ["**/*", "!dist/**/*", "!*.exe", "!http_server"] 86 | }, 87 | { 88 | "from": "../python", 89 | "to": "python", 90 | "filter": ["**/*", "!dist/**/*", "!*.exe", "!VR_gallery"] 91 | } 92 | ] 93 | } 94 | } -------------------------------------------------------------------------------- /electron_app/renderer.js: -------------------------------------------------------------------------------- 1 | /** 2 | * OpenVGal Electron App - Renderer Process 3 | * 4 | * This file handles the renderer process logic for the OpenVGal application, 5 | * including folder management, CSV/JSON generation, and Python script execution. 6 | */ 7 | 8 | // Import required modules 9 | const { ipcRenderer } = require('electron'); 10 | const path = require('path'); 11 | const { resourcesBasePath } = require('./modules/paths'); 12 | const URLReplacer = require('./modules/urlReplacer'); 13 | const FolderManager = require('./modules/folderManager'); 14 | const CSVGenerator = require('./modules/csvGenerator'); 15 | const PythonExecutor = require('./modules/pythonexecutor'); 16 | 17 | // Initialize modules 18 | const urlReplacer = new URLReplacer(); 19 | const folderManager = new FolderManager(); 20 | const csvGenerator = new CSVGenerator(); 21 | const pythonExecutor = new PythonExecutor(); 22 | 23 | // Initialize modules when DOM is loaded 24 | document.addEventListener('DOMContentLoaded', () => { 25 | // Initialize URL replacer 26 | urlReplacer.initialize(); 27 | 28 | // Initialize folder manager 29 | folderManager.initialize(document.getElementById('folder-tree')); 30 | 31 | csvGenerator.initialize(displayMessage); 32 | pythonExecutor.initialize(displayMessage); 33 | }); 34 | 35 | // ===== UI HELPER FUNCTIONS ===== 36 | 37 | /** 38 | * Displays a message in the UI with specified color 39 | * @param {string} text - The message to display 40 | * @param {string} color - The color of the message (default: 'red') 41 | */ 42 | function displayMessage(text, color = 'black') { 43 | const messageDiv = document.getElementById('generate-message'); 44 | if (!messageDiv) { 45 | console.error('Error: generate-message element not found'); 46 | return; 47 | } 48 | console.log('Setting message:', text); 49 | 50 | // Clear previous content 51 | messageDiv.innerHTML = ''; 52 | 53 | // Handle multi-line messages by preserving line breaks 54 | if (text.includes('\n')) { 55 | // For multi-line messages, create a pre element to preserve formatting 56 | const pre = document.createElement('pre'); 57 | pre.style.margin = '0'; 58 | pre.style.fontFamily = 'monospace'; 59 | pre.style.whiteSpace = 'pre-wrap'; 60 | pre.style.wordBreak = 'break-word'; 61 | pre.style.color = color; 62 | pre.textContent = text; 63 | messageDiv.appendChild(pre); 64 | } else { 65 | // For single line messages, just set the text content 66 | messageDiv.textContent = text; 67 | messageDiv.style.color = color; 68 | } 69 | } 70 | 71 | /** 72 | * Shows the loading overlay 73 | */ 74 | function showLoadingOverlay() { 75 | document.querySelector('.loading-overlay').style.display = 'flex'; 76 | } 77 | 78 | /** 79 | * Hides the loading overlay 80 | */ 81 | function hideLoadingOverlay() { 82 | document.querySelector('.loading-overlay').style.display = 'none'; 83 | } 84 | 85 | // ===== EVENT LISTENERS ===== 86 | 87 | // Handle execution mode selection - Python functionality disabled 88 | document.querySelectorAll('input[name="execution-mode"]').forEach(radio => { 89 | radio.addEventListener('change', (e) => { 90 | const localConfig = document.getElementById('local-python-config'); 91 | 92 | // Always keep Python inputs disabled 93 | const pythonInput = document.getElementById('python'); 94 | const selectPythonBtn = document.getElementById('select-python'); 95 | 96 | // Always hide local config and keep inputs disabled 97 | localConfig.style.display = 'none'; 98 | pythonInput.disabled = true; 99 | selectPythonBtn.disabled = true; 100 | }); 101 | }); 102 | 103 | // Python executable file selection - functionality disabled 104 | document.getElementById('select-python')?.addEventListener('click', () => { 105 | // Python selection functionality removed 106 | displayMessage('Python interpreter selection has been disabled. Using predefined executables only.', 'blue'); 107 | }); 108 | 109 | // Add folder button 110 | document.getElementById('add-folder').addEventListener('click', () => { 111 | ipcRenderer.send('open-folder-dialog'); 112 | }); 113 | 114 | // Generate CSV button 115 | document.getElementById('generate-csv').addEventListener('click', () => { 116 | csvGenerator.generateCSV(folderManager.getFolders()); 117 | }); 118 | 119 | // Generate JSON button 120 | document.getElementById('generate-json').addEventListener('click', () => { 121 | // Always use predefined executables regardless of radio button selection 122 | const executionMode = 'predefined'; 123 | const paths = { 124 | localPath: '', // Not used 125 | predefinedPath: path.join(resourcesBasePath, 'python', 'VR_gallery') // Use path.join for cross-platform compatibility 126 | }; 127 | pythonExecutor.setExecutionConfig(executionMode, paths); 128 | pythonExecutor.generateJSON(folderManager.getFolders()); 129 | }); 130 | 131 | // Launch button 132 | document.getElementById('launch').addEventListener('click', () => { 133 | console.log('Launch clicked'); 134 | displayMessage('Launching web server and opening browser...', 'blue'); 135 | showLoadingOverlay(); 136 | 137 | // Always use predefined executables 138 | const executionMode = 'predefined'; 139 | 140 | // Determine file extensions based on platform 141 | const isWin = process.platform === 'win32'; 142 | const exeExt = isWin ? '.exe' : ''; 143 | 144 | const config = { 145 | mode: executionMode, 146 | pythonPath: '', // Not used 147 | serverPath: resourcesBasePath + '/web_server/http_server' + exeExt, 148 | galleryScript: resourcesBasePath + '/python/dist/VR_gallery' + exeExt 149 | }; 150 | 151 | // Send IPC message to main process to launch web server with config 152 | ipcRenderer.send('launch-web-server', config); 153 | }); 154 | 155 | // ===== IPC EVENT HANDLERS ===== 156 | 157 | // Handle selected Python executable 158 | ipcRenderer.on('selected-python-executable', (event, filePath) => { 159 | document.getElementById('python').value = filePath; 160 | pythonExecutor.setPythonPath(filePath); 161 | }); 162 | 163 | // Handle selected folders 164 | ipcRenderer.on('selected-folders', (event, folderPaths) => { 165 | folderManager.addFolders(folderPaths); 166 | }); 167 | 168 | // Handle launch success 169 | ipcRenderer.on('launch-success', (event, url) => { 170 | hideLoadingOverlay(); 171 | displayMessage(`Successfully launched OpenVGal at ${url}`, 'green'); 172 | }); 173 | 174 | // Handle launch error 175 | ipcRenderer.on('launch-error', (event, errorMessage) => { 176 | hideLoadingOverlay(); 177 | displayMessage(`Launch failed: ${errorMessage}`, 'red'); 178 | }); 179 | 180 | // Shutdown button 181 | document.getElementById('shutdown').addEventListener('click', () => { 182 | console.log('Shutdown clicked'); 183 | displayMessage('Shutting down web server...', 'blue'); 184 | showLoadingOverlay(); 185 | 186 | // Send IPC message to main process to stop web server 187 | ipcRenderer.send('stop-web-server'); 188 | }); 189 | 190 | // Handle server stopped 191 | ipcRenderer.on('server-stopped', () => { 192 | hideLoadingOverlay(); 193 | displayMessage('Web server stopped successfully', 'green'); 194 | }); 195 | 196 | // Handle server error 197 | ipcRenderer.on('server-error', (event, errorMessage) => { 198 | hideLoadingOverlay(); 199 | 200 | // Check if message is actually a successful request (contains HTTP 200) 201 | if (errorMessage.includes('" 200 -')) { 202 | displayMessage(`Server request: ${errorMessage}`, 'green'); 203 | } else { 204 | displayMessage(`Server error: ${errorMessage}`, 'red'); 205 | } 206 | }); -------------------------------------------------------------------------------- /electron_app/styles.css: -------------------------------------------------------------------------------- 1 | /* styles.css */ 2 | .button-group { 3 | margin-top: 10px; 4 | } 5 | 6 | .button-group button { 7 | margin-right: 10px; 8 | } 9 | /* Add styles here to customize the appearance of your app */ -------------------------------------------------------------------------------- /python/.gitkeep: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /python/building_v2.csv: -------------------------------------------------------------------------------- 1 | Gallery name,Parent,Folder 2 | root,none, 3 | gallery3,root,/gallery3 4 | gallery4,root,/gallery4 5 | -------------------------------------------------------------------------------- /web_server/build/http_server/EXE-00.toc: -------------------------------------------------------------------------------- 1 | ('C:\\Users\\Luis\\Documents\\GitHub\\official\\openvgal\\web_server\\dist\\http_server.exe', 2 | True, 3 | False, 4 | False, 5 | 'C:\\Users\\Luis\\Documents\\GitHub\\official\\openvgal\\venv\\Lib\\site-packages\\PyInstaller\\bootloader\\images\\icon-console.ico', 6 | None, 7 | False, 8 | False, 9 | b'\n\n \n \n \n \n \n \n \n ' 14 | b'\n <' 15 | b'application>\n \n \n ' 17 | b' \n \n \n \n <' 20 | b'/compatibility>\n ' 21 | b'\n \n true\n \n \n \n \n \n \n \n', 27 | True, 28 | False, 29 | None, 30 | None, 31 | None, 32 | 'C:\\Users\\Luis\\Documents\\GitHub\\official\\openvgal\\web_server\\build\\http_server\\http_server.pkg', 33 | [('pyi-contents-directory _internal', '', 'OPTION'), 34 | ('PYZ-00.pyz', 35 | 'C:\\Users\\Luis\\Documents\\GitHub\\official\\openvgal\\web_server\\build\\http_server\\PYZ-00.pyz', 36 | 'PYZ'), 37 | ('struct', 38 | 'C:\\Users\\Luis\\Documents\\GitHub\\official\\openvgal\\web_server\\build\\http_server\\localpycs\\struct.pyc', 39 | 'PYMODULE'), 40 | ('pyimod01_archive', 41 | 'C:\\Users\\Luis\\Documents\\GitHub\\official\\openvgal\\web_server\\build\\http_server\\localpycs\\pyimod01_archive.pyc', 42 | 'PYMODULE'), 43 | ('pyimod02_importers', 44 | 'C:\\Users\\Luis\\Documents\\GitHub\\official\\openvgal\\web_server\\build\\http_server\\localpycs\\pyimod02_importers.pyc', 45 | 'PYMODULE'), 46 | ('pyimod03_ctypes', 47 | 'C:\\Users\\Luis\\Documents\\GitHub\\official\\openvgal\\web_server\\build\\http_server\\localpycs\\pyimod03_ctypes.pyc', 48 | 'PYMODULE'), 49 | ('pyimod04_pywin32', 50 | 'C:\\Users\\Luis\\Documents\\GitHub\\official\\openvgal\\web_server\\build\\http_server\\localpycs\\pyimod04_pywin32.pyc', 51 | 'PYMODULE'), 52 | ('pyiboot01_bootstrap', 53 | 'C:\\Users\\Luis\\Documents\\GitHub\\official\\openvgal\\venv\\Lib\\site-packages\\PyInstaller\\loader\\pyiboot01_bootstrap.py', 54 | 'PYSOURCE'), 55 | ('pyi_rth_inspect', 56 | 'C:\\Users\\Luis\\Documents\\GitHub\\official\\openvgal\\venv\\Lib\\site-packages\\PyInstaller\\hooks\\rthooks\\pyi_rth_inspect.py', 57 | 'PYSOURCE'), 58 | ('http_server', 59 | 'C:\\Users\\Luis\\Documents\\GitHub\\official\\openvgal\\web_server\\http_server.py', 60 | 'PYSOURCE'), 61 | ('python313.dll', 62 | 'C:\\Users\\Luis\\AppData\\Local\\Programs\\Python\\Python313\\python313.dll', 63 | 'BINARY'), 64 | ('unicodedata.pyd', 65 | 'C:\\Users\\Luis\\AppData\\Local\\Programs\\Python\\Python313\\DLLs\\unicodedata.pyd', 66 | 'EXTENSION'), 67 | ('_decimal.pyd', 68 | 'C:\\Users\\Luis\\AppData\\Local\\Programs\\Python\\Python313\\DLLs\\_decimal.pyd', 69 | 'EXTENSION'), 70 | ('_hashlib.pyd', 71 | 'C:\\Users\\Luis\\AppData\\Local\\Programs\\Python\\Python313\\DLLs\\_hashlib.pyd', 72 | 'EXTENSION'), 73 | ('select.pyd', 74 | 'C:\\Users\\Luis\\AppData\\Local\\Programs\\Python\\Python313\\DLLs\\select.pyd', 75 | 'EXTENSION'), 76 | ('_socket.pyd', 77 | 'C:\\Users\\Luis\\AppData\\Local\\Programs\\Python\\Python313\\DLLs\\_socket.pyd', 78 | 'EXTENSION'), 79 | ('_lzma.pyd', 80 | 'C:\\Users\\Luis\\AppData\\Local\\Programs\\Python\\Python313\\DLLs\\_lzma.pyd', 81 | 'EXTENSION'), 82 | ('_bz2.pyd', 83 | 'C:\\Users\\Luis\\AppData\\Local\\Programs\\Python\\Python313\\DLLs\\_bz2.pyd', 84 | 'EXTENSION'), 85 | ('_ssl.pyd', 86 | 'C:\\Users\\Luis\\AppData\\Local\\Programs\\Python\\Python313\\DLLs\\_ssl.pyd', 87 | 'EXTENSION'), 88 | ('api-ms-win-crt-conio-l1-1-0.dll', 89 | 'C:\\Program Files (x86)\\Windows Kits\\10\\Windows Performance ' 90 | 'Toolkit\\api-ms-win-crt-conio-l1-1-0.dll', 91 | 'BINARY'), 92 | ('api-ms-win-crt-time-l1-1-0.dll', 93 | 'C:\\Program Files (x86)\\Windows Kits\\10\\Windows Performance ' 94 | 'Toolkit\\api-ms-win-crt-time-l1-1-0.dll', 95 | 'BINARY'), 96 | ('api-ms-win-crt-locale-l1-1-0.dll', 97 | 'C:\\Program Files (x86)\\Windows Kits\\10\\Windows Performance ' 98 | 'Toolkit\\api-ms-win-crt-locale-l1-1-0.dll', 99 | 'BINARY'), 100 | ('api-ms-win-crt-string-l1-1-0.dll', 101 | 'C:\\Program Files (x86)\\Windows Kits\\10\\Windows Performance ' 102 | 'Toolkit\\api-ms-win-crt-string-l1-1-0.dll', 103 | 'BINARY'), 104 | ('api-ms-win-crt-convert-l1-1-0.dll', 105 | 'C:\\Program Files (x86)\\Windows Kits\\10\\Windows Performance ' 106 | 'Toolkit\\api-ms-win-crt-convert-l1-1-0.dll', 107 | 'BINARY'), 108 | ('api-ms-win-crt-heap-l1-1-0.dll', 109 | 'C:\\Program Files (x86)\\Windows Kits\\10\\Windows Performance ' 110 | 'Toolkit\\api-ms-win-crt-heap-l1-1-0.dll', 111 | 'BINARY'), 112 | ('VCRUNTIME140.dll', 113 | 'C:\\Users\\Luis\\AppData\\Local\\Programs\\Python\\Python313\\VCRUNTIME140.dll', 114 | 'BINARY'), 115 | ('api-ms-win-crt-filesystem-l1-1-0.dll', 116 | 'C:\\Program Files (x86)\\Windows Kits\\10\\Windows Performance ' 117 | 'Toolkit\\api-ms-win-crt-filesystem-l1-1-0.dll', 118 | 'BINARY'), 119 | ('api-ms-win-crt-stdio-l1-1-0.dll', 120 | 'C:\\Program Files (x86)\\Windows Kits\\10\\Windows Performance ' 121 | 'Toolkit\\api-ms-win-crt-stdio-l1-1-0.dll', 122 | 'BINARY'), 123 | ('api-ms-win-crt-math-l1-1-0.dll', 124 | 'C:\\Program Files (x86)\\Windows Kits\\10\\Windows Performance ' 125 | 'Toolkit\\api-ms-win-crt-math-l1-1-0.dll', 126 | 'BINARY'), 127 | ('api-ms-win-crt-process-l1-1-0.dll', 128 | 'C:\\Program Files (x86)\\Windows Kits\\10\\Windows Performance ' 129 | 'Toolkit\\api-ms-win-crt-process-l1-1-0.dll', 130 | 'BINARY'), 131 | ('api-ms-win-crt-runtime-l1-1-0.dll', 132 | 'C:\\Program Files (x86)\\Windows Kits\\10\\Windows Performance ' 133 | 'Toolkit\\api-ms-win-crt-runtime-l1-1-0.dll', 134 | 'BINARY'), 135 | ('api-ms-win-crt-environment-l1-1-0.dll', 136 | 'C:\\Program Files (x86)\\Windows Kits\\10\\Windows Performance ' 137 | 'Toolkit\\api-ms-win-crt-environment-l1-1-0.dll', 138 | 'BINARY'), 139 | ('libcrypto-3.dll', 140 | 'C:\\Users\\Luis\\AppData\\Local\\Programs\\Python\\Python313\\DLLs\\libcrypto-3.dll', 141 | 'BINARY'), 142 | ('libssl-3.dll', 143 | 'C:\\Users\\Luis\\AppData\\Local\\Programs\\Python\\Python313\\DLLs\\libssl-3.dll', 144 | 'BINARY'), 145 | ('ucrtbase.dll', 146 | 'C:\\Program Files (x86)\\Windows Kits\\10\\Windows Performance ' 147 | 'Toolkit\\ucrtbase.dll', 148 | 'BINARY'), 149 | ('api-ms-win-crt-utility-l1-1-0.dll', 150 | 'C:\\Program Files (x86)\\Windows Kits\\10\\Windows Performance ' 151 | 'Toolkit\\api-ms-win-crt-utility-l1-1-0.dll', 152 | 'BINARY'), 153 | ('api-ms-win-core-file-l1-2-0.dll', 154 | 'C:\\Program Files (x86)\\Windows Kits\\10\\Windows Performance ' 155 | 'Toolkit\\api-ms-win-core-file-l1-2-0.dll', 156 | 'BINARY'), 157 | ('api-ms-win-core-file-l2-1-0.dll', 158 | 'C:\\Program Files (x86)\\Windows Kits\\10\\Windows Performance ' 159 | 'Toolkit\\api-ms-win-core-file-l2-1-0.dll', 160 | 'BINARY'), 161 | ('api-ms-win-core-profile-l1-1-0.dll', 162 | 'C:\\Program Files (x86)\\Windows Kits\\10\\Windows Performance ' 163 | 'Toolkit\\api-ms-win-core-profile-l1-1-0.dll', 164 | 'BINARY'), 165 | ('api-ms-win-core-processthreads-l1-1-1.dll', 166 | 'C:\\Program Files (x86)\\Windows Kits\\10\\Windows Performance ' 167 | 'Toolkit\\api-ms-win-core-processthreads-l1-1-1.dll', 168 | 'BINARY'), 169 | ('api-ms-win-core-util-l1-1-0.dll', 170 | 'C:\\Program Files (x86)\\Windows Kits\\10\\Windows Performance ' 171 | 'Toolkit\\api-ms-win-core-util-l1-1-0.dll', 172 | 'BINARY'), 173 | ('api-ms-win-core-rtlsupport-l1-1-0.dll', 174 | 'C:\\Program Files (x86)\\Windows Kits\\10\\Windows Performance ' 175 | 'Toolkit\\api-ms-win-core-rtlsupport-l1-1-0.dll', 176 | 'BINARY'), 177 | ('api-ms-win-core-synch-l1-1-0.dll', 178 | 'C:\\Program Files (x86)\\Windows Kits\\10\\Windows Performance ' 179 | 'Toolkit\\api-ms-win-core-synch-l1-1-0.dll', 180 | 'BINARY'), 181 | ('api-ms-win-core-file-l1-1-0.dll', 182 | 'C:\\Program Files (x86)\\Windows Kits\\10\\Windows Performance ' 183 | 'Toolkit\\api-ms-win-core-file-l1-1-0.dll', 184 | 'BINARY'), 185 | ('api-ms-win-core-localization-l1-2-0.dll', 186 | 'C:\\Program Files (x86)\\Windows Kits\\10\\Windows Performance ' 187 | 'Toolkit\\api-ms-win-core-localization-l1-2-0.dll', 188 | 'BINARY'), 189 | ('api-ms-win-core-string-l1-1-0.dll', 190 | 'C:\\Program Files (x86)\\Windows Kits\\10\\Windows Performance ' 191 | 'Toolkit\\api-ms-win-core-string-l1-1-0.dll', 192 | 'BINARY'), 193 | ('api-ms-win-core-console-l1-1-0.dll', 194 | 'C:\\Program Files (x86)\\Windows Kits\\10\\Windows Performance ' 195 | 'Toolkit\\api-ms-win-core-console-l1-1-0.dll', 196 | 'BINARY'), 197 | ('api-ms-win-core-debug-l1-1-0.dll', 198 | 'C:\\Program Files (x86)\\Windows Kits\\10\\Windows Performance ' 199 | 'Toolkit\\api-ms-win-core-debug-l1-1-0.dll', 200 | 'BINARY'), 201 | ('api-ms-win-core-sysinfo-l1-1-0.dll', 202 | 'C:\\Program Files (x86)\\Windows Kits\\10\\Windows Performance ' 203 | 'Toolkit\\api-ms-win-core-sysinfo-l1-1-0.dll', 204 | 'BINARY'), 205 | ('api-ms-win-core-synch-l1-2-0.dll', 206 | 'C:\\Program Files (x86)\\Windows Kits\\10\\Windows Performance ' 207 | 'Toolkit\\api-ms-win-core-synch-l1-2-0.dll', 208 | 'BINARY'), 209 | ('api-ms-win-core-processthreads-l1-1-0.dll', 210 | 'C:\\Program Files (x86)\\Windows Kits\\10\\Windows Performance ' 211 | 'Toolkit\\api-ms-win-core-processthreads-l1-1-0.dll', 212 | 'BINARY'), 213 | ('api-ms-win-core-datetime-l1-1-0.dll', 214 | 'C:\\Program Files (x86)\\Windows Kits\\10\\Windows Performance ' 215 | 'Toolkit\\api-ms-win-core-datetime-l1-1-0.dll', 216 | 'BINARY'), 217 | ('api-ms-win-core-processenvironment-l1-1-0.dll', 218 | 'C:\\Program Files (x86)\\Windows Kits\\10\\Windows Performance ' 219 | 'Toolkit\\api-ms-win-core-processenvironment-l1-1-0.dll', 220 | 'BINARY'), 221 | ('api-ms-win-core-interlocked-l1-1-0.dll', 222 | 'C:\\Program Files (x86)\\Windows Kits\\10\\Windows Performance ' 223 | 'Toolkit\\api-ms-win-core-interlocked-l1-1-0.dll', 224 | 'BINARY'), 225 | ('api-ms-win-core-heap-l1-1-0.dll', 226 | 'C:\\Program Files (x86)\\Windows Kits\\10\\Windows Performance ' 227 | 'Toolkit\\api-ms-win-core-heap-l1-1-0.dll', 228 | 'BINARY'), 229 | ('api-ms-win-core-libraryloader-l1-1-0.dll', 230 | 'C:\\Program Files (x86)\\Windows Kits\\10\\Windows Performance ' 231 | 'Toolkit\\api-ms-win-core-libraryloader-l1-1-0.dll', 232 | 'BINARY'), 233 | ('api-ms-win-core-namedpipe-l1-1-0.dll', 234 | 'C:\\Program Files (x86)\\Windows Kits\\10\\Windows Performance ' 235 | 'Toolkit\\api-ms-win-core-namedpipe-l1-1-0.dll', 236 | 'BINARY'), 237 | ('api-ms-win-core-errorhandling-l1-1-0.dll', 238 | 'C:\\Program Files (x86)\\Windows Kits\\10\\Windows Performance ' 239 | 'Toolkit\\api-ms-win-core-errorhandling-l1-1-0.dll', 240 | 'BINARY'), 241 | ('api-ms-win-core-timezone-l1-1-0.dll', 242 | 'C:\\Program Files (x86)\\Windows Kits\\10\\Windows Performance ' 243 | 'Toolkit\\api-ms-win-core-timezone-l1-1-0.dll', 244 | 'BINARY'), 245 | ('api-ms-win-core-memory-l1-1-0.dll', 246 | 'C:\\Program Files (x86)\\Windows Kits\\10\\Windows Performance ' 247 | 'Toolkit\\api-ms-win-core-memory-l1-1-0.dll', 248 | 'BINARY'), 249 | ('api-ms-win-core-handle-l1-1-0.dll', 250 | 'C:\\Program Files (x86)\\Windows Kits\\10\\Windows Performance ' 251 | 'Toolkit\\api-ms-win-core-handle-l1-1-0.dll', 252 | 'BINARY'), 253 | ('base_library.zip', 254 | 'C:\\Users\\Luis\\Documents\\GitHub\\official\\openvgal\\web_server\\build\\http_server\\base_library.zip', 255 | 'DATA')], 256 | [], 257 | False, 258 | False, 259 | 1742457972, 260 | [('run.exe', 261 | 'C:\\Users\\Luis\\Documents\\GitHub\\official\\openvgal\\venv\\Lib\\site-packages\\PyInstaller\\bootloader\\Windows-64bit-intel\\run.exe', 262 | 'EXECUTABLE')], 263 | 'C:\\Users\\Luis\\AppData\\Local\\Programs\\Python\\Python313\\python313.dll') 264 | -------------------------------------------------------------------------------- /web_server/build/http_server/PKG-00.toc: -------------------------------------------------------------------------------- 1 | ('C:\\Users\\Luis\\Documents\\GitHub\\official\\openvgal\\web_server\\build\\http_server\\http_server.pkg', 2 | {'BINARY': True, 3 | 'DATA': True, 4 | 'EXECUTABLE': True, 5 | 'EXTENSION': True, 6 | 'PYMODULE': True, 7 | 'PYSOURCE': True, 8 | 'PYZ': False, 9 | 'SPLASH': True, 10 | 'SYMLINK': False}, 11 | [('pyi-contents-directory _internal', '', 'OPTION'), 12 | ('PYZ-00.pyz', 13 | 'C:\\Users\\Luis\\Documents\\GitHub\\official\\openvgal\\web_server\\build\\http_server\\PYZ-00.pyz', 14 | 'PYZ'), 15 | ('struct', 16 | 'C:\\Users\\Luis\\Documents\\GitHub\\official\\openvgal\\web_server\\build\\http_server\\localpycs\\struct.pyc', 17 | 'PYMODULE'), 18 | ('pyimod01_archive', 19 | 'C:\\Users\\Luis\\Documents\\GitHub\\official\\openvgal\\web_server\\build\\http_server\\localpycs\\pyimod01_archive.pyc', 20 | 'PYMODULE'), 21 | ('pyimod02_importers', 22 | 'C:\\Users\\Luis\\Documents\\GitHub\\official\\openvgal\\web_server\\build\\http_server\\localpycs\\pyimod02_importers.pyc', 23 | 'PYMODULE'), 24 | ('pyimod03_ctypes', 25 | 'C:\\Users\\Luis\\Documents\\GitHub\\official\\openvgal\\web_server\\build\\http_server\\localpycs\\pyimod03_ctypes.pyc', 26 | 'PYMODULE'), 27 | ('pyimod04_pywin32', 28 | 'C:\\Users\\Luis\\Documents\\GitHub\\official\\openvgal\\web_server\\build\\http_server\\localpycs\\pyimod04_pywin32.pyc', 29 | 'PYMODULE'), 30 | ('pyiboot01_bootstrap', 31 | 'C:\\Users\\Luis\\Documents\\GitHub\\official\\openvgal\\venv\\Lib\\site-packages\\PyInstaller\\loader\\pyiboot01_bootstrap.py', 32 | 'PYSOURCE'), 33 | ('pyi_rth_inspect', 34 | 'C:\\Users\\Luis\\Documents\\GitHub\\official\\openvgal\\venv\\Lib\\site-packages\\PyInstaller\\hooks\\rthooks\\pyi_rth_inspect.py', 35 | 'PYSOURCE'), 36 | ('http_server', 37 | 'C:\\Users\\Luis\\Documents\\GitHub\\official\\openvgal\\web_server\\http_server.py', 38 | 'PYSOURCE'), 39 | ('python313.dll', 40 | 'C:\\Users\\Luis\\AppData\\Local\\Programs\\Python\\Python313\\python313.dll', 41 | 'BINARY'), 42 | ('unicodedata.pyd', 43 | 'C:\\Users\\Luis\\AppData\\Local\\Programs\\Python\\Python313\\DLLs\\unicodedata.pyd', 44 | 'EXTENSION'), 45 | ('_decimal.pyd', 46 | 'C:\\Users\\Luis\\AppData\\Local\\Programs\\Python\\Python313\\DLLs\\_decimal.pyd', 47 | 'EXTENSION'), 48 | ('_hashlib.pyd', 49 | 'C:\\Users\\Luis\\AppData\\Local\\Programs\\Python\\Python313\\DLLs\\_hashlib.pyd', 50 | 'EXTENSION'), 51 | ('select.pyd', 52 | 'C:\\Users\\Luis\\AppData\\Local\\Programs\\Python\\Python313\\DLLs\\select.pyd', 53 | 'EXTENSION'), 54 | ('_socket.pyd', 55 | 'C:\\Users\\Luis\\AppData\\Local\\Programs\\Python\\Python313\\DLLs\\_socket.pyd', 56 | 'EXTENSION'), 57 | ('_lzma.pyd', 58 | 'C:\\Users\\Luis\\AppData\\Local\\Programs\\Python\\Python313\\DLLs\\_lzma.pyd', 59 | 'EXTENSION'), 60 | ('_bz2.pyd', 61 | 'C:\\Users\\Luis\\AppData\\Local\\Programs\\Python\\Python313\\DLLs\\_bz2.pyd', 62 | 'EXTENSION'), 63 | ('_ssl.pyd', 64 | 'C:\\Users\\Luis\\AppData\\Local\\Programs\\Python\\Python313\\DLLs\\_ssl.pyd', 65 | 'EXTENSION'), 66 | ('api-ms-win-crt-conio-l1-1-0.dll', 67 | 'C:\\Program Files (x86)\\Windows Kits\\10\\Windows Performance ' 68 | 'Toolkit\\api-ms-win-crt-conio-l1-1-0.dll', 69 | 'BINARY'), 70 | ('api-ms-win-crt-time-l1-1-0.dll', 71 | 'C:\\Program Files (x86)\\Windows Kits\\10\\Windows Performance ' 72 | 'Toolkit\\api-ms-win-crt-time-l1-1-0.dll', 73 | 'BINARY'), 74 | ('api-ms-win-crt-locale-l1-1-0.dll', 75 | 'C:\\Program Files (x86)\\Windows Kits\\10\\Windows Performance ' 76 | 'Toolkit\\api-ms-win-crt-locale-l1-1-0.dll', 77 | 'BINARY'), 78 | ('api-ms-win-crt-string-l1-1-0.dll', 79 | 'C:\\Program Files (x86)\\Windows Kits\\10\\Windows Performance ' 80 | 'Toolkit\\api-ms-win-crt-string-l1-1-0.dll', 81 | 'BINARY'), 82 | ('api-ms-win-crt-convert-l1-1-0.dll', 83 | 'C:\\Program Files (x86)\\Windows Kits\\10\\Windows Performance ' 84 | 'Toolkit\\api-ms-win-crt-convert-l1-1-0.dll', 85 | 'BINARY'), 86 | ('api-ms-win-crt-heap-l1-1-0.dll', 87 | 'C:\\Program Files (x86)\\Windows Kits\\10\\Windows Performance ' 88 | 'Toolkit\\api-ms-win-crt-heap-l1-1-0.dll', 89 | 'BINARY'), 90 | ('VCRUNTIME140.dll', 91 | 'C:\\Users\\Luis\\AppData\\Local\\Programs\\Python\\Python313\\VCRUNTIME140.dll', 92 | 'BINARY'), 93 | ('api-ms-win-crt-filesystem-l1-1-0.dll', 94 | 'C:\\Program Files (x86)\\Windows Kits\\10\\Windows Performance ' 95 | 'Toolkit\\api-ms-win-crt-filesystem-l1-1-0.dll', 96 | 'BINARY'), 97 | ('api-ms-win-crt-stdio-l1-1-0.dll', 98 | 'C:\\Program Files (x86)\\Windows Kits\\10\\Windows Performance ' 99 | 'Toolkit\\api-ms-win-crt-stdio-l1-1-0.dll', 100 | 'BINARY'), 101 | ('api-ms-win-crt-math-l1-1-0.dll', 102 | 'C:\\Program Files (x86)\\Windows Kits\\10\\Windows Performance ' 103 | 'Toolkit\\api-ms-win-crt-math-l1-1-0.dll', 104 | 'BINARY'), 105 | ('api-ms-win-crt-process-l1-1-0.dll', 106 | 'C:\\Program Files (x86)\\Windows Kits\\10\\Windows Performance ' 107 | 'Toolkit\\api-ms-win-crt-process-l1-1-0.dll', 108 | 'BINARY'), 109 | ('api-ms-win-crt-runtime-l1-1-0.dll', 110 | 'C:\\Program Files (x86)\\Windows Kits\\10\\Windows Performance ' 111 | 'Toolkit\\api-ms-win-crt-runtime-l1-1-0.dll', 112 | 'BINARY'), 113 | ('api-ms-win-crt-environment-l1-1-0.dll', 114 | 'C:\\Program Files (x86)\\Windows Kits\\10\\Windows Performance ' 115 | 'Toolkit\\api-ms-win-crt-environment-l1-1-0.dll', 116 | 'BINARY'), 117 | ('libcrypto-3.dll', 118 | 'C:\\Users\\Luis\\AppData\\Local\\Programs\\Python\\Python313\\DLLs\\libcrypto-3.dll', 119 | 'BINARY'), 120 | ('libssl-3.dll', 121 | 'C:\\Users\\Luis\\AppData\\Local\\Programs\\Python\\Python313\\DLLs\\libssl-3.dll', 122 | 'BINARY'), 123 | ('ucrtbase.dll', 124 | 'C:\\Program Files (x86)\\Windows Kits\\10\\Windows Performance ' 125 | 'Toolkit\\ucrtbase.dll', 126 | 'BINARY'), 127 | ('api-ms-win-crt-utility-l1-1-0.dll', 128 | 'C:\\Program Files (x86)\\Windows Kits\\10\\Windows Performance ' 129 | 'Toolkit\\api-ms-win-crt-utility-l1-1-0.dll', 130 | 'BINARY'), 131 | ('api-ms-win-core-file-l1-2-0.dll', 132 | 'C:\\Program Files (x86)\\Windows Kits\\10\\Windows Performance ' 133 | 'Toolkit\\api-ms-win-core-file-l1-2-0.dll', 134 | 'BINARY'), 135 | ('api-ms-win-core-file-l2-1-0.dll', 136 | 'C:\\Program Files (x86)\\Windows Kits\\10\\Windows Performance ' 137 | 'Toolkit\\api-ms-win-core-file-l2-1-0.dll', 138 | 'BINARY'), 139 | ('api-ms-win-core-profile-l1-1-0.dll', 140 | 'C:\\Program Files (x86)\\Windows Kits\\10\\Windows Performance ' 141 | 'Toolkit\\api-ms-win-core-profile-l1-1-0.dll', 142 | 'BINARY'), 143 | ('api-ms-win-core-processthreads-l1-1-1.dll', 144 | 'C:\\Program Files (x86)\\Windows Kits\\10\\Windows Performance ' 145 | 'Toolkit\\api-ms-win-core-processthreads-l1-1-1.dll', 146 | 'BINARY'), 147 | ('api-ms-win-core-util-l1-1-0.dll', 148 | 'C:\\Program Files (x86)\\Windows Kits\\10\\Windows Performance ' 149 | 'Toolkit\\api-ms-win-core-util-l1-1-0.dll', 150 | 'BINARY'), 151 | ('api-ms-win-core-rtlsupport-l1-1-0.dll', 152 | 'C:\\Program Files (x86)\\Windows Kits\\10\\Windows Performance ' 153 | 'Toolkit\\api-ms-win-core-rtlsupport-l1-1-0.dll', 154 | 'BINARY'), 155 | ('api-ms-win-core-synch-l1-1-0.dll', 156 | 'C:\\Program Files (x86)\\Windows Kits\\10\\Windows Performance ' 157 | 'Toolkit\\api-ms-win-core-synch-l1-1-0.dll', 158 | 'BINARY'), 159 | ('api-ms-win-core-file-l1-1-0.dll', 160 | 'C:\\Program Files (x86)\\Windows Kits\\10\\Windows Performance ' 161 | 'Toolkit\\api-ms-win-core-file-l1-1-0.dll', 162 | 'BINARY'), 163 | ('api-ms-win-core-localization-l1-2-0.dll', 164 | 'C:\\Program Files (x86)\\Windows Kits\\10\\Windows Performance ' 165 | 'Toolkit\\api-ms-win-core-localization-l1-2-0.dll', 166 | 'BINARY'), 167 | ('api-ms-win-core-string-l1-1-0.dll', 168 | 'C:\\Program Files (x86)\\Windows Kits\\10\\Windows Performance ' 169 | 'Toolkit\\api-ms-win-core-string-l1-1-0.dll', 170 | 'BINARY'), 171 | ('api-ms-win-core-console-l1-1-0.dll', 172 | 'C:\\Program Files (x86)\\Windows Kits\\10\\Windows Performance ' 173 | 'Toolkit\\api-ms-win-core-console-l1-1-0.dll', 174 | 'BINARY'), 175 | ('api-ms-win-core-debug-l1-1-0.dll', 176 | 'C:\\Program Files (x86)\\Windows Kits\\10\\Windows Performance ' 177 | 'Toolkit\\api-ms-win-core-debug-l1-1-0.dll', 178 | 'BINARY'), 179 | ('api-ms-win-core-sysinfo-l1-1-0.dll', 180 | 'C:\\Program Files (x86)\\Windows Kits\\10\\Windows Performance ' 181 | 'Toolkit\\api-ms-win-core-sysinfo-l1-1-0.dll', 182 | 'BINARY'), 183 | ('api-ms-win-core-synch-l1-2-0.dll', 184 | 'C:\\Program Files (x86)\\Windows Kits\\10\\Windows Performance ' 185 | 'Toolkit\\api-ms-win-core-synch-l1-2-0.dll', 186 | 'BINARY'), 187 | ('api-ms-win-core-processthreads-l1-1-0.dll', 188 | 'C:\\Program Files (x86)\\Windows Kits\\10\\Windows Performance ' 189 | 'Toolkit\\api-ms-win-core-processthreads-l1-1-0.dll', 190 | 'BINARY'), 191 | ('api-ms-win-core-datetime-l1-1-0.dll', 192 | 'C:\\Program Files (x86)\\Windows Kits\\10\\Windows Performance ' 193 | 'Toolkit\\api-ms-win-core-datetime-l1-1-0.dll', 194 | 'BINARY'), 195 | ('api-ms-win-core-processenvironment-l1-1-0.dll', 196 | 'C:\\Program Files (x86)\\Windows Kits\\10\\Windows Performance ' 197 | 'Toolkit\\api-ms-win-core-processenvironment-l1-1-0.dll', 198 | 'BINARY'), 199 | ('api-ms-win-core-interlocked-l1-1-0.dll', 200 | 'C:\\Program Files (x86)\\Windows Kits\\10\\Windows Performance ' 201 | 'Toolkit\\api-ms-win-core-interlocked-l1-1-0.dll', 202 | 'BINARY'), 203 | ('api-ms-win-core-heap-l1-1-0.dll', 204 | 'C:\\Program Files (x86)\\Windows Kits\\10\\Windows Performance ' 205 | 'Toolkit\\api-ms-win-core-heap-l1-1-0.dll', 206 | 'BINARY'), 207 | ('api-ms-win-core-libraryloader-l1-1-0.dll', 208 | 'C:\\Program Files (x86)\\Windows Kits\\10\\Windows Performance ' 209 | 'Toolkit\\api-ms-win-core-libraryloader-l1-1-0.dll', 210 | 'BINARY'), 211 | ('api-ms-win-core-namedpipe-l1-1-0.dll', 212 | 'C:\\Program Files (x86)\\Windows Kits\\10\\Windows Performance ' 213 | 'Toolkit\\api-ms-win-core-namedpipe-l1-1-0.dll', 214 | 'BINARY'), 215 | ('api-ms-win-core-errorhandling-l1-1-0.dll', 216 | 'C:\\Program Files (x86)\\Windows Kits\\10\\Windows Performance ' 217 | 'Toolkit\\api-ms-win-core-errorhandling-l1-1-0.dll', 218 | 'BINARY'), 219 | ('api-ms-win-core-timezone-l1-1-0.dll', 220 | 'C:\\Program Files (x86)\\Windows Kits\\10\\Windows Performance ' 221 | 'Toolkit\\api-ms-win-core-timezone-l1-1-0.dll', 222 | 'BINARY'), 223 | ('api-ms-win-core-memory-l1-1-0.dll', 224 | 'C:\\Program Files (x86)\\Windows Kits\\10\\Windows Performance ' 225 | 'Toolkit\\api-ms-win-core-memory-l1-1-0.dll', 226 | 'BINARY'), 227 | ('api-ms-win-core-handle-l1-1-0.dll', 228 | 'C:\\Program Files (x86)\\Windows Kits\\10\\Windows Performance ' 229 | 'Toolkit\\api-ms-win-core-handle-l1-1-0.dll', 230 | 'BINARY'), 231 | ('base_library.zip', 232 | 'C:\\Users\\Luis\\Documents\\GitHub\\official\\openvgal\\web_server\\build\\http_server\\base_library.zip', 233 | 'DATA')], 234 | 'python313.dll', 235 | False, 236 | False, 237 | False, 238 | [], 239 | None, 240 | None, 241 | None) 242 | -------------------------------------------------------------------------------- /web_server/build/http_server/PYZ-00.pyz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/build/http_server/PYZ-00.pyz -------------------------------------------------------------------------------- /web_server/build/http_server/base_library.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/build/http_server/base_library.zip -------------------------------------------------------------------------------- /web_server/build/http_server/http_server.pkg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/build/http_server/http_server.pkg -------------------------------------------------------------------------------- /web_server/build/http_server/localpycs/pyimod01_archive.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/build/http_server/localpycs/pyimod01_archive.pyc -------------------------------------------------------------------------------- /web_server/build/http_server/localpycs/pyimod02_importers.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/build/http_server/localpycs/pyimod02_importers.pyc -------------------------------------------------------------------------------- /web_server/build/http_server/localpycs/pyimod03_ctypes.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/build/http_server/localpycs/pyimod03_ctypes.pyc -------------------------------------------------------------------------------- /web_server/build/http_server/localpycs/pyimod04_pywin32.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/build/http_server/localpycs/pyimod04_pywin32.pyc -------------------------------------------------------------------------------- /web_server/build/http_server/localpycs/struct.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/build/http_server/localpycs/struct.pyc -------------------------------------------------------------------------------- /web_server/build/http_server/warn-http_server.txt: -------------------------------------------------------------------------------- 1 | 2 | This file lists modules PyInstaller was not able to find. This does not 3 | necessarily mean this module is required for running your program. Python and 4 | Python 3rd-party packages include a lot of conditional or optional modules. For 5 | example the module 'ntpath' only exists on Windows, whereas the module 6 | 'posixpath' only exists on Posix systems. 7 | 8 | Types if import: 9 | * top-level: imported at the top-level - look at these first 10 | * conditional: imported within an if-statement 11 | * delayed: imported within a function 12 | * optional: imported within a try-except-statement 13 | 14 | IMPORTANT: Do NOT post this list to the issue-tracker. Use it as a basis for 15 | tracking down the missing module yourself. Thanks! 16 | 17 | missing module named grp - imported by shutil (delayed, optional), tarfile (optional), pathlib._local (optional), subprocess (delayed, conditional, optional) 18 | missing module named pwd - imported by posixpath (delayed, conditional, optional), shutil (delayed, optional), tarfile (optional), pathlib._local (optional), subprocess (delayed, conditional, optional), http.server (delayed, optional) 19 | missing module named _frozen_importlib_external - imported by importlib._bootstrap (delayed), importlib (optional), importlib.abc (optional) 20 | excluded module named _frozen_importlib - imported by importlib (optional), importlib.abc (optional) 21 | missing module named 'collections.abc' - imported by traceback (top-level), inspect (top-level), logging (top-level), typing (top-level), importlib.resources.readers (top-level), selectors (top-level), tracemalloc (top-level), http.client (top-level) 22 | missing module named posix - imported by posixpath (optional), shutil (conditional), importlib._bootstrap_external (conditional), os (conditional, optional) 23 | missing module named resource - imported by posix (top-level) 24 | missing module named _suggestions - imported by traceback (delayed, optional) 25 | missing module named _posixsubprocess - imported by subprocess (conditional) 26 | missing module named fcntl - imported by subprocess (optional) 27 | -------------------------------------------------------------------------------- /web_server/content/declarations.js: -------------------------------------------------------------------------------- 1 | // user custom variables that you need to modify 2 | const openvgal_location=window.openvgal_location; //empty strin if at the root folder 3 | const glb_location= openvgal_location + '/templates/'; 4 | const config_file_name=openvgal_location + '/building_v2.json'; 5 | const materials_folder=openvgal_location + '/materials'; 6 | const hallspics_prefix= openvgal_location + ''; //empty string if pics at the root folder 7 | const icons_folder=openvgal_location + '/icons'; 8 | 9 | 10 | //program constants 11 | const regul_exp_door=/^d_/; 12 | const regul_exp_tail= /_[0-9]*$/; 13 | //const regul_exp_artworks=/^(?!d_).*_\d{1,3}$/; 14 | const regul_exp_artworks=/_\d{1,3}$/; 15 | const frame_material="BJS_white" -------------------------------------------------------------------------------- /web_server/content/gallery1/AdeliePenguin.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery1/AdeliePenguin.jpg -------------------------------------------------------------------------------- /web_server/content/gallery1/AdeliePenguin2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery1/AdeliePenguin2.jpg -------------------------------------------------------------------------------- /web_server/content/gallery1/AdeliePenguin3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery1/AdeliePenguin3.jpg -------------------------------------------------------------------------------- /web_server/content/gallery1/AdelieTempano.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery1/AdelieTempano.jpg -------------------------------------------------------------------------------- /web_server/content/gallery1/AdeliesSalto.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery1/AdeliesSalto.jpg -------------------------------------------------------------------------------- /web_server/content/gallery1/AdeliesSalto2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery1/AdeliesSalto2.jpg -------------------------------------------------------------------------------- /web_server/content/gallery1/AlbatrosCerca2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery1/AlbatrosCerca2.jpg -------------------------------------------------------------------------------- /web_server/content/gallery1/AlbatrosPareja2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery1/AlbatrosPareja2.jpg -------------------------------------------------------------------------------- /web_server/content/gallery1/AlbatrosViento2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery1/AlbatrosViento2.jpg -------------------------------------------------------------------------------- /web_server/content/gallery1/AlbatrosVuelo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery1/AlbatrosVuelo.jpg -------------------------------------------------------------------------------- /web_server/content/gallery1/BarcaLagoFagnano.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery1/BarcaLagoFagnano.jpg -------------------------------------------------------------------------------- /web_server/content/gallery1/CapePetrels2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery1/CapePetrels2.jpg -------------------------------------------------------------------------------- /web_server/content/gallery1/CasaOndulada.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery1/CasaOndulada.jpg -------------------------------------------------------------------------------- /web_server/content/gallery1/ChinstrapPenguin2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery1/ChinstrapPenguin2.jpg -------------------------------------------------------------------------------- /web_server/content/gallery1/ChinstrapPenguin3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery1/ChinstrapPenguin3.jpg -------------------------------------------------------------------------------- /web_server/content/gallery1/Cimas.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery1/Cimas.jpg -------------------------------------------------------------------------------- /web_server/content/gallery1/Crabeaterseal2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery1/Crabeaterseal2.jpg -------------------------------------------------------------------------------- /web_server/content/gallery1/ElefanteMarinoFrontal.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery1/ElefanteMarinoFrontal.jpg -------------------------------------------------------------------------------- /web_server/content/gallery1/ElefanteMarinoHerido.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery1/ElefanteMarinoHerido.jpg -------------------------------------------------------------------------------- /web_server/content/gallery1/Espejo2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery1/Espejo2.jpg -------------------------------------------------------------------------------- /web_server/content/gallery1/Fiordo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery1/Fiordo.jpg -------------------------------------------------------------------------------- /web_server/content/gallery1/FocaHerida.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery1/FocaHerida.jpg -------------------------------------------------------------------------------- /web_server/content/gallery1/GlaciarDrygalski.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery1/GlaciarDrygalski.jpg -------------------------------------------------------------------------------- /web_server/content/gallery1/GlaciarPetrel.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery1/GlaciarPetrel.jpg -------------------------------------------------------------------------------- /web_server/content/gallery1/GlaciarReflejo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery1/GlaciarReflejo.jpg -------------------------------------------------------------------------------- /web_server/content/gallery1/GrytvikenBarco.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery1/GrytvikenBarco.jpg -------------------------------------------------------------------------------- /web_server/content/gallery1/GrytvikenBarcos.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery1/GrytvikenBarcos.jpg -------------------------------------------------------------------------------- /web_server/content/gallery1/GrytvikenChatarra2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery1/GrytvikenChatarra2.jpg -------------------------------------------------------------------------------- /web_server/content/gallery1/GrytvikenChatarra3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery1/GrytvikenChatarra3.jpg -------------------------------------------------------------------------------- /web_server/content/gallery1/GrytvikenChatarra4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery1/GrytvikenChatarra4.jpg -------------------------------------------------------------------------------- /web_server/content/gallery1/GrytvikenChatarra5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery1/GrytvikenChatarra5.jpg -------------------------------------------------------------------------------- /web_server/content/gallery1/Halo2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery1/Halo2.jpg -------------------------------------------------------------------------------- /web_server/content/gallery1/Hielo2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery1/Hielo2.jpg -------------------------------------------------------------------------------- /web_server/content/gallery1/Iceberg3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery1/Iceberg3.jpg -------------------------------------------------------------------------------- /web_server/content/gallery1/IcebergDetalle.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery1/IcebergDetalle.jpg -------------------------------------------------------------------------------- /web_server/content/gallery1/IcebergDetalle2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery1/IcebergDetalle2.jpg -------------------------------------------------------------------------------- /web_server/content/gallery1/IcebergDetalle4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery1/IcebergDetalle4.jpg -------------------------------------------------------------------------------- /web_server/content/gallery1/IcebergPajaro.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery1/IcebergPajaro.jpg -------------------------------------------------------------------------------- /web_server/content/gallery1/IcebergPajaros.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery1/IcebergPajaros.jpg -------------------------------------------------------------------------------- /web_server/content/gallery1/LarsenHarbour.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery1/LarsenHarbour.jpg -------------------------------------------------------------------------------- /web_server/content/gallery1/MarHielo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery1/MarHielo.jpg -------------------------------------------------------------------------------- /web_server/content/gallery1/Nubes2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery1/Nubes2.jpg -------------------------------------------------------------------------------- /web_server/content/gallery1/Orilla.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery1/Orilla.jpg -------------------------------------------------------------------------------- /web_server/content/gallery1/ParejaRoyal.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery1/ParejaRoyal.jpg -------------------------------------------------------------------------------- /web_server/content/gallery1/ParejaRoyal2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery1/ParejaRoyal2.jpg -------------------------------------------------------------------------------- /web_server/content/gallery1/PlayaPano.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery1/PlayaPano.jpg -------------------------------------------------------------------------------- /web_server/content/gallery1/PuestaSol.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery1/PuestaSol.jpg -------------------------------------------------------------------------------- /web_server/content/gallery1/Quark.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery1/Quark.jpg -------------------------------------------------------------------------------- /web_server/content/gallery1/Royal2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery1/Royal2.jpg -------------------------------------------------------------------------------- /web_server/content/gallery1/RoyalPareja2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery1/RoyalPareja2.jpg -------------------------------------------------------------------------------- /web_server/content/gallery1/Tormenta2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery1/Tormenta2.jpg -------------------------------------------------------------------------------- /web_server/content/gallery1/Tormenta3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery1/Tormenta3.jpg -------------------------------------------------------------------------------- /web_server/content/gallery1/Weddel2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery1/Weddel2.jpg -------------------------------------------------------------------------------- /web_server/content/gallery1/WildIceberg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery1/WildIceberg.jpg -------------------------------------------------------------------------------- /web_server/content/gallery1/WildMar.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery1/WildMar.jpg -------------------------------------------------------------------------------- /web_server/content/gallery1/WildRocas.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery1/WildRocas.jpg -------------------------------------------------------------------------------- /web_server/content/gallery1/WillisIsland.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery1/WillisIsland.JPG -------------------------------------------------------------------------------- /web_server/content/gallery1/iceberg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery1/iceberg.jpg -------------------------------------------------------------------------------- /web_server/content/gallery2/Altiplano Descanso.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery2/Altiplano Descanso.jpg -------------------------------------------------------------------------------- /web_server/content/gallery2/ArequipaMercado.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery2/ArequipaMercado.jpg -------------------------------------------------------------------------------- /web_server/content/gallery2/ArequipaStaCat3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery2/ArequipaStaCat3.jpg -------------------------------------------------------------------------------- /web_server/content/gallery2/CataratasAlcamayoEscarabajoBisBis.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery2/CataratasAlcamayoEscarabajoBisBis.jpg -------------------------------------------------------------------------------- /web_server/content/gallery2/ChivayNina.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery2/ChivayNina.jpg -------------------------------------------------------------------------------- /web_server/content/gallery2/ChivayRestaurante.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery2/ChivayRestaurante.jpg -------------------------------------------------------------------------------- /web_server/content/gallery2/ColcaManos.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery2/ColcaManos.jpg -------------------------------------------------------------------------------- /web_server/content/gallery2/CuscoTorre.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery2/CuscoTorre.jpg -------------------------------------------------------------------------------- /web_server/content/gallery2/Flamenco.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery2/Flamenco.jpg -------------------------------------------------------------------------------- /web_server/content/gallery2/LaPazNina.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery2/LaPazNina.jpg -------------------------------------------------------------------------------- /web_server/content/gallery2/LaPazVendedora.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery2/LaPazVendedora.jpg -------------------------------------------------------------------------------- /web_server/content/gallery2/LagunaColoradaPlaya.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery2/LagunaColoradaPlaya.jpg -------------------------------------------------------------------------------- /web_server/content/gallery2/LagunaMorijon2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery2/LagunaMorijon2.jpg -------------------------------------------------------------------------------- /web_server/content/gallery2/LagunaVerdeBis.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery2/LagunaVerdeBis.jpg -------------------------------------------------------------------------------- /web_server/content/gallery2/Lipez.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery2/Lipez.jpg -------------------------------------------------------------------------------- /web_server/content/gallery2/MachuArbol.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery2/MachuArbol.jpg -------------------------------------------------------------------------------- /web_server/content/gallery2/MachuPuenteIncaNiebla.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery2/MachuPuenteIncaNiebla.jpg -------------------------------------------------------------------------------- /web_server/content/gallery2/MachuTarde.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery2/MachuTarde.jpg -------------------------------------------------------------------------------- /web_server/content/gallery2/PuntoBaileBis.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery2/PuntoBaileBis.jpg -------------------------------------------------------------------------------- /web_server/content/gallery2/RocasCamello.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery2/RocasCamello.jpg -------------------------------------------------------------------------------- /web_server/content/gallery2/RocasHombre.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery2/RocasHombre.jpg -------------------------------------------------------------------------------- /web_server/content/gallery2/Sabancaya.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery2/Sabancaya.jpg -------------------------------------------------------------------------------- /web_server/content/gallery2/SalarCoche.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery2/SalarCoche.jpg -------------------------------------------------------------------------------- /web_server/content/gallery2/SalarPareja.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery2/SalarPareja.jpg -------------------------------------------------------------------------------- /web_server/content/gallery2/TaquileNino.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery2/TaquileNino.jpg -------------------------------------------------------------------------------- /web_server/content/gallery2/Titicaca.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery2/Titicaca.jpg -------------------------------------------------------------------------------- /web_server/content/gallery2/Trenes.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery2/Trenes.jpg -------------------------------------------------------------------------------- /web_server/content/gallery2/TupizaVicuna.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery2/TupizaVicuna.jpg -------------------------------------------------------------------------------- /web_server/content/gallery2/UrosAdorno.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery2/UrosAdorno.jpg -------------------------------------------------------------------------------- /web_server/content/gallery2/UrosMadreNino2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery2/UrosMadreNino2.jpg -------------------------------------------------------------------------------- /web_server/content/gallery2/UrosNinoMochila.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery2/UrosNinoMochila.jpg -------------------------------------------------------------------------------- /web_server/content/gallery2/UrosNinoSmart.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery2/UrosNinoSmart.jpg -------------------------------------------------------------------------------- /web_server/content/gallery2/UrosNinoTotora.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery2/UrosNinoTotora.jpg -------------------------------------------------------------------------------- /web_server/content/gallery3/CanyonRoadhouse.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery3/CanyonRoadhouse.jpg -------------------------------------------------------------------------------- /web_server/content/gallery3/CanyonRoadhouse3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery3/CanyonRoadhouse3.jpg -------------------------------------------------------------------------------- /web_server/content/gallery3/Chobe_RF_elef.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery3/Chobe_RF_elef.jpg -------------------------------------------------------------------------------- /web_server/content/gallery3/Chobe_RF_impala.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery3/Chobe_RF_impala.jpg -------------------------------------------------------------------------------- /web_server/content/gallery3/Etosha_Impala.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery3/Etosha_Impala.jpg -------------------------------------------------------------------------------- /web_server/content/gallery3/Etosha_cebra2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery3/Etosha_cebra2.jpg -------------------------------------------------------------------------------- /web_server/content/gallery3/Etosha_jirafa2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery3/Etosha_jirafa2.jpg -------------------------------------------------------------------------------- /web_server/content/gallery3/Etosha_okaukuejo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery3/Etosha_okaukuejo.jpg -------------------------------------------------------------------------------- /web_server/content/gallery3/Etosha_okaukuejo2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery3/Etosha_okaukuejo2.jpg -------------------------------------------------------------------------------- /web_server/content/gallery3/Etosha_okaukuejo5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery3/Etosha_okaukuejo5.jpg -------------------------------------------------------------------------------- /web_server/content/gallery3/KasanaPuesta2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery3/KasanaPuesta2.jpg -------------------------------------------------------------------------------- /web_server/content/gallery3/KubuBaobabs.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery3/KubuBaobabs.jpg -------------------------------------------------------------------------------- /web_server/content/gallery3/KubuPuesta.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery3/KubuPuesta.jpg -------------------------------------------------------------------------------- /web_server/content/gallery3/KubuPuesta2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery3/KubuPuesta2.jpg -------------------------------------------------------------------------------- /web_server/content/gallery3/Kubu_noche.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery3/Kubu_noche.jpg -------------------------------------------------------------------------------- /web_server/content/gallery3/Mahango_mono2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery3/Mahango_mono2.jpg -------------------------------------------------------------------------------- /web_server/content/gallery3/Sesriem_south3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery3/Sesriem_south3.jpg -------------------------------------------------------------------------------- /web_server/content/gallery3/Walvis-sesriem5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery3/Walvis-sesriem5.jpg -------------------------------------------------------------------------------- /web_server/content/gallery3/Walvis-sesriem6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery3/Walvis-sesriem6.jpg -------------------------------------------------------------------------------- /web_server/content/gallery3/Walvis-sesriem7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery3/Walvis-sesriem7.jpg -------------------------------------------------------------------------------- /web_server/content/gallery3/chobe_camping.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery3/chobe_camping.jpg -------------------------------------------------------------------------------- /web_server/content/gallery3/mahango_juncos2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery3/mahango_juncos2.jpg -------------------------------------------------------------------------------- /web_server/content/gallery3/savuti_elef2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery3/savuti_elef2.jpg -------------------------------------------------------------------------------- /web_server/content/gallery3/savuti_elef3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery3/savuti_elef3.jpg -------------------------------------------------------------------------------- /web_server/content/gallery3/savuti_leon4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery3/savuti_leon4.jpg -------------------------------------------------------------------------------- /web_server/content/gallery3/savuti_sol.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery3/savuti_sol.jpg -------------------------------------------------------------------------------- /web_server/content/gallery3/sesriem5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery3/sesriem5.jpg -------------------------------------------------------------------------------- /web_server/content/gallery3/sesriem7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery3/sesriem7.jpg -------------------------------------------------------------------------------- /web_server/content/gallery3/sesriem8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery3/sesriem8.jpg -------------------------------------------------------------------------------- /web_server/content/gallery3/sesriem_deadvlei2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery3/sesriem_deadvlei2.jpg -------------------------------------------------------------------------------- /web_server/content/gallery3/sesriem_deadvlei3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery3/sesriem_deadvlei3.jpg -------------------------------------------------------------------------------- /web_server/content/gallery3/sesriem_deadvlei4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery3/sesriem_deadvlei4.jpg -------------------------------------------------------------------------------- /web_server/content/gallery3/sesriem_deadvlei5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery3/sesriem_deadvlei5.jpg -------------------------------------------------------------------------------- /web_server/content/gallery3/skeleton2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery3/skeleton2.jpg -------------------------------------------------------------------------------- /web_server/content/gallery3/skeleton5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery3/skeleton5.jpg -------------------------------------------------------------------------------- /web_server/content/gallery3/skeleton_arena.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery3/skeleton_arena.jpg -------------------------------------------------------------------------------- /web_server/content/gallery3/skeleton_barco3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery3/skeleton_barco3.jpg -------------------------------------------------------------------------------- /web_server/content/gallery4/Askoki Group 2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery4/Askoki Group 2.jpg -------------------------------------------------------------------------------- /web_server/content/gallery4/Askoli.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery4/Askoli.jpg -------------------------------------------------------------------------------- /web_server/content/gallery4/Baltoro Morraine.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery4/Baltoro Morraine.jpg -------------------------------------------------------------------------------- /web_server/content/gallery4/Baltoro Morraine2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery4/Baltoro Morraine2.jpg -------------------------------------------------------------------------------- /web_server/content/gallery4/Baltoro Morraine3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery4/Baltoro Morraine3.jpg -------------------------------------------------------------------------------- /web_server/content/gallery4/Baltoro Tributary.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery4/Baltoro Tributary.jpg -------------------------------------------------------------------------------- /web_server/content/gallery4/Baltoro Tributary2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery4/Baltoro Tributary2.jpg -------------------------------------------------------------------------------- /web_server/content/gallery4/Baltoro Tributary3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery4/Baltoro Tributary3.jpg -------------------------------------------------------------------------------- /web_server/content/gallery4/Baltoro from Urdukas.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery4/Baltoro from Urdukas.jpg -------------------------------------------------------------------------------- /web_server/content/gallery4/Broad Glacier.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery4/Broad Glacier.jpg -------------------------------------------------------------------------------- /web_server/content/gallery4/Concordia Clouds.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery4/Concordia Clouds.jpg -------------------------------------------------------------------------------- /web_server/content/gallery4/Concordia Storm.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery4/Concordia Storm.jpg -------------------------------------------------------------------------------- /web_server/content/gallery4/Gasherbrum.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery4/Gasherbrum.jpg -------------------------------------------------------------------------------- /web_server/content/gallery4/Godwin Austen Glacier.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery4/Godwin Austen Glacier.jpg -------------------------------------------------------------------------------- /web_server/content/gallery4/Jhol at night.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery4/Jhol at night.jpg -------------------------------------------------------------------------------- /web_server/content/gallery4/K2 Moonlight.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery4/K2 Moonlight.jpg -------------------------------------------------------------------------------- /web_server/content/gallery4/K2 from BroadPeak BC.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery4/K2 from BroadPeak BC.jpg -------------------------------------------------------------------------------- /web_server/content/gallery4/K2 from Concordia.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery4/K2 from Concordia.jpg -------------------------------------------------------------------------------- /web_server/content/gallery4/Khal Khal Glacier.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery4/Khal Khal Glacier.jpg -------------------------------------------------------------------------------- /web_server/content/gallery4/Leaving Concordia.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery4/Leaving Concordia.jpg -------------------------------------------------------------------------------- /web_server/content/gallery4/Liligo Glacier.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery4/Liligo Glacier.jpg -------------------------------------------------------------------------------- /web_server/content/gallery4/Liligo Glacier2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery4/Liligo Glacier2.jpg -------------------------------------------------------------------------------- /web_server/content/gallery4/Marble Peak.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery4/Marble Peak.jpg -------------------------------------------------------------------------------- /web_server/content/gallery4/Muztagh Glacier.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery4/Muztagh Glacier.jpg -------------------------------------------------------------------------------- /web_server/content/gallery4/Paiju Clouds.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery4/Paiju Clouds.jpg -------------------------------------------------------------------------------- /web_server/content/gallery4/Paiju Sunset.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery4/Paiju Sunset.jpg -------------------------------------------------------------------------------- /web_server/content/gallery4/RoadAskoli.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery4/RoadAskoli.jpg -------------------------------------------------------------------------------- /web_server/content/gallery4/RoadAskoli2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery4/RoadAskoli2.jpg -------------------------------------------------------------------------------- /web_server/content/gallery4/Skardu Kids.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery4/Skardu Kids.jpg -------------------------------------------------------------------------------- /web_server/content/gallery4/Skardu.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery4/Skardu.jpg -------------------------------------------------------------------------------- /web_server/content/gallery4/Skardu2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery4/Skardu2.jpg -------------------------------------------------------------------------------- /web_server/content/gallery4/Skardu3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery4/Skardu3.jpg -------------------------------------------------------------------------------- /web_server/content/gallery4/Skardu4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery4/Skardu4.jpg -------------------------------------------------------------------------------- /web_server/content/gallery4/Skardu5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery4/Skardu5.jpg -------------------------------------------------------------------------------- /web_server/content/gallery4/Tiny figures Baltoro.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery4/Tiny figures Baltoro.jpg -------------------------------------------------------------------------------- /web_server/content/gallery4/Trango Glaciar Morraine.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery4/Trango Glaciar Morraine.jpg -------------------------------------------------------------------------------- /web_server/content/gallery4/Trango Towers Jan.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery4/Trango Towers Jan.jpg -------------------------------------------------------------------------------- /web_server/content/gallery4/Truck.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery4/Truck.jpg -------------------------------------------------------------------------------- /web_server/content/gallery4/Uli Biafo Glaciar.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery4/Uli Biafo Glaciar.jpg -------------------------------------------------------------------------------- /web_server/content/gallery4/Vigne Glacier.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery4/Vigne Glacier.jpg -------------------------------------------------------------------------------- /web_server/content/gallery4/Vigne Peak.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery4/Vigne Peak.jpg -------------------------------------------------------------------------------- /web_server/content/gallery4/Vigne Peak2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery4/Vigne Peak2.jpg -------------------------------------------------------------------------------- /web_server/content/gallery4/Way to Jhola.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery4/Way to Jhola.jpg -------------------------------------------------------------------------------- /web_server/content/gallery4/Way to Jhola2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery4/Way to Jhola2.jpg -------------------------------------------------------------------------------- /web_server/content/gallery5/Buenos Aires 2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery5/Buenos Aires 2.jpg -------------------------------------------------------------------------------- /web_server/content/gallery5/Buenos Aires 3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery5/Buenos Aires 3.jpg -------------------------------------------------------------------------------- /web_server/content/gallery5/Buenos Aires Caminito 2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery5/Buenos Aires Caminito 2.jpg -------------------------------------------------------------------------------- /web_server/content/gallery5/Buenos Aires Caminito 4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery5/Buenos Aires Caminito 4.jpg -------------------------------------------------------------------------------- /web_server/content/gallery5/Buenos Aires Caminito.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery5/Buenos Aires Caminito.jpg -------------------------------------------------------------------------------- /web_server/content/gallery5/Buenos Aires.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery5/Buenos Aires.jpg -------------------------------------------------------------------------------- /web_server/content/gallery5/Cardones 2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery5/Cardones 2.jpg -------------------------------------------------------------------------------- /web_server/content/gallery5/Cardones 3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery5/Cardones 3.jpg -------------------------------------------------------------------------------- /web_server/content/gallery5/Cardones 4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery5/Cardones 4.jpg -------------------------------------------------------------------------------- /web_server/content/gallery5/Cardones.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery5/Cardones.jpg -------------------------------------------------------------------------------- /web_server/content/gallery5/CerroTorre 2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery5/CerroTorre 2.jpg -------------------------------------------------------------------------------- /web_server/content/gallery5/CerroTorre 3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery5/CerroTorre 3.jpg -------------------------------------------------------------------------------- /web_server/content/gallery5/Crucero.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery5/Crucero.jpg -------------------------------------------------------------------------------- /web_server/content/gallery5/Fitz Roy Silueta.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery5/Fitz Roy Silueta.jpg -------------------------------------------------------------------------------- /web_server/content/gallery5/FitzRoy Laguna Sucia.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery5/FitzRoy Laguna Sucia.jpg -------------------------------------------------------------------------------- /web_server/content/gallery5/Glaciar Spegazzini 6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery5/Glaciar Spegazzini 6.jpg -------------------------------------------------------------------------------- /web_server/content/gallery5/Glaciar Spegazzini 7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery5/Glaciar Spegazzini 7.jpg -------------------------------------------------------------------------------- /web_server/content/gallery5/Glaciar Spegazzini 8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery5/Glaciar Spegazzini 8.jpg -------------------------------------------------------------------------------- /web_server/content/gallery5/Glaciar Viedma 4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery5/Glaciar Viedma 4.jpg -------------------------------------------------------------------------------- /web_server/content/gallery5/Glaciar Viedma.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery5/Glaciar Viedma.jpg -------------------------------------------------------------------------------- /web_server/content/gallery5/Humahuaca 3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery5/Humahuaca 3.jpg -------------------------------------------------------------------------------- /web_server/content/gallery5/Iguazu Garganta 2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery5/Iguazu Garganta 2.jpg -------------------------------------------------------------------------------- /web_server/content/gallery5/Iguazu Garganta 3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery5/Iguazu Garganta 3.jpg -------------------------------------------------------------------------------- /web_server/content/gallery5/Iguazu Garganta.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery5/Iguazu Garganta.jpg -------------------------------------------------------------------------------- /web_server/content/gallery5/Iguazu Hoja.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery5/Iguazu Hoja.jpg -------------------------------------------------------------------------------- /web_server/content/gallery5/Iguazu Hotel.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery5/Iguazu Hotel.jpg -------------------------------------------------------------------------------- /web_server/content/gallery5/Iguazu Inferior.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery5/Iguazu Inferior.jpg -------------------------------------------------------------------------------- /web_server/content/gallery5/Iguazu Lagarto 2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery5/Iguazu Lagarto 2.jpg -------------------------------------------------------------------------------- /web_server/content/gallery5/Iguazu Lagarto.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery5/Iguazu Lagarto.jpg -------------------------------------------------------------------------------- /web_server/content/gallery5/Iguazu Mariposa 3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery5/Iguazu Mariposa 3.jpg -------------------------------------------------------------------------------- /web_server/content/gallery5/Iguazu Mariposa 4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery5/Iguazu Mariposa 4.jpg -------------------------------------------------------------------------------- /web_server/content/gallery5/Iguazu Mariposa.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery5/Iguazu Mariposa.jpg -------------------------------------------------------------------------------- /web_server/content/gallery5/Iguazu Superior 3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery5/Iguazu Superior 3.jpg -------------------------------------------------------------------------------- /web_server/content/gallery5/Iguazu Superior 6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery5/Iguazu Superior 6.jpg -------------------------------------------------------------------------------- /web_server/content/gallery5/Iguazu Superior 7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery5/Iguazu Superior 7.jpg -------------------------------------------------------------------------------- /web_server/content/gallery5/Laguna Cerro Torre Pano.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery5/Laguna Cerro Torre Pano.jpg -------------------------------------------------------------------------------- /web_server/content/gallery5/Perito Moreno 3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery5/Perito Moreno 3.jpg -------------------------------------------------------------------------------- /web_server/content/gallery5/Perito Seracs.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery5/Perito Seracs.jpg -------------------------------------------------------------------------------- /web_server/content/gallery5/Purmamarca 2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery5/Purmamarca 2.jpg -------------------------------------------------------------------------------- /web_server/content/gallery5/Purmamarca 5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery5/Purmamarca 5.jpg -------------------------------------------------------------------------------- /web_server/content/gallery5/Purmamarca 6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery5/Purmamarca 6.jpg -------------------------------------------------------------------------------- /web_server/content/gallery5/Purmamarca 7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery5/Purmamarca 7.jpg -------------------------------------------------------------------------------- /web_server/content/gallery5/Purmamarca 8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery5/Purmamarca 8.jpg -------------------------------------------------------------------------------- /web_server/content/gallery5/Purmamarca Coca.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery5/Purmamarca Coca.jpg -------------------------------------------------------------------------------- /web_server/content/gallery5/Salinas Grandes 2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery5/Salinas Grandes 2.jpg -------------------------------------------------------------------------------- /web_server/content/gallery5/Salinas Grandes 3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery5/Salinas Grandes 3.jpg -------------------------------------------------------------------------------- /web_server/content/gallery5/Salinas Grandes Conchi.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery5/Salinas Grandes Conchi.jpg -------------------------------------------------------------------------------- /web_server/content/gallery5/perito pano.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery5/perito pano.jpg -------------------------------------------------------------------------------- /web_server/content/gallery5/perito pano2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery5/perito pano2.jpg -------------------------------------------------------------------------------- /web_server/content/gallery6/10_0.15_kiss2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery6/10_0.15_kiss2.png -------------------------------------------------------------------------------- /web_server/content/gallery6/11_0.15_senoras2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery6/11_0.15_senoras2.png -------------------------------------------------------------------------------- /web_server/content/gallery6/12_0.15_jardindelicias.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery6/12_0.15_jardindelicias.png -------------------------------------------------------------------------------- /web_server/content/gallery6/12_0.15_modriani.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery6/12_0.15_modriani.png -------------------------------------------------------------------------------- /web_server/content/gallery6/12_0.15_yaol.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery6/12_0.15_yaol.png -------------------------------------------------------------------------------- /web_server/content/gallery6/13_0.15_001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery6/13_0.15_001.png -------------------------------------------------------------------------------- /web_server/content/gallery6/14_0.15_monalisa.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery6/14_0.15_monalisa.png -------------------------------------------------------------------------------- /web_server/content/gallery6/15_0.15_meninas2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery6/15_0.15_meninas2.png -------------------------------------------------------------------------------- /web_server/content/gallery6/16_1.5_jardindelicias.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery6/16_1.5_jardindelicias.png -------------------------------------------------------------------------------- /web_server/content/gallery6/17_0.15_jardindelicias.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery6/17_0.15_jardindelicias.png -------------------------------------------------------------------------------- /web_server/content/gallery6/18_0.15_jardindelicias.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery6/18_0.15_jardindelicias.png -------------------------------------------------------------------------------- /web_server/content/gallery6/19_0.015_GrytvikenChatarra4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery6/19_0.015_GrytvikenChatarra4.png -------------------------------------------------------------------------------- /web_server/content/gallery6/2_1.5_the-starry-night_002.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery6/2_1.5_the-starry-night_002.png -------------------------------------------------------------------------------- /web_server/content/gallery6/3_1.5_the-starry-night_002.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery6/3_1.5_the-starry-night_002.png -------------------------------------------------------------------------------- /web_server/content/gallery6/4_0.15_the-starry-night_002.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery6/4_0.15_the-starry-night_002.png -------------------------------------------------------------------------------- /web_server/content/gallery6/5_0.15_the-starry-night_002.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery6/5_0.15_the-starry-night_002.png -------------------------------------------------------------------------------- /web_server/content/gallery6/6_0.15_the-starry-night_002.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery6/6_0.15_the-starry-night_002.png -------------------------------------------------------------------------------- /web_server/content/gallery6/8_0.15_sunrise2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery6/8_0.15_sunrise2.png -------------------------------------------------------------------------------- /web_server/content/gallery6/9_0.15_scream2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/gallery6/9_0.15_scream2.png -------------------------------------------------------------------------------- /web_server/content/icons/keyboard_move.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/icons/keyboard_move.png -------------------------------------------------------------------------------- /web_server/content/icons/keyboard_pan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/icons/keyboard_pan.png -------------------------------------------------------------------------------- /web_server/content/icons/touch_move.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/icons/touch_move.png -------------------------------------------------------------------------------- /web_server/content/icons/touch_pan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/icons/touch_pan.png -------------------------------------------------------------------------------- /web_server/content/materials/BJS_glow.json: -------------------------------------------------------------------------------- 1 | { 2 | "tags": null, 3 | "ignoreAlpha": false, 4 | "maxSimultaneousLights": 4, 5 | "mode": 0, 6 | "forceAlphaBlending": false, 7 | "id": "node", 8 | "name": "node", 9 | "checkReadyOnEveryCall": false, 10 | "checkReadyOnlyOnce": false, 11 | "state": "", 12 | "alpha": 1, 13 | "backFaceCulling": true, 14 | "cullBackFaces": true, 15 | "sideOrientation": 1, 16 | "alphaMode": 2, 17 | "_needDepthPrePass": false, 18 | "disableDepthWrite": false, 19 | "disableColorWrite": false, 20 | "forceDepthWrite": false, 21 | "depthFunction": 0, 22 | "separateCullingPass": false, 23 | "fogEnabled": true, 24 | "pointSize": 1, 25 | "zOffset": 0, 26 | "zOffsetUnits": 0, 27 | "pointsCloud": false, 28 | "fillMode": 0, 29 | "editorData": { 30 | "locations": [ 31 | { 32 | "blockId": 10, 33 | "x": 1120, 34 | "y": 140 35 | }, 36 | { 37 | "blockId": 9, 38 | "x": 600, 39 | "y": 100 40 | }, 41 | { 42 | "blockId": 7, 43 | "x": 320, 44 | "y": 40 45 | }, 46 | { 47 | "blockId": 5, 48 | "x": 0, 49 | "y": 0 50 | }, 51 | { 52 | "blockId": 6, 53 | "x": 0, 54 | "y": 120 55 | }, 56 | { 57 | "blockId": 8, 58 | "x": 300, 59 | "y": 180 60 | }, 61 | { 62 | "blockId": 12, 63 | "x": 640, 64 | "y": 320 65 | }, 66 | { 67 | "blockId": 11, 68 | "x": 0, 69 | "y": 320 70 | } 71 | ], 72 | "frames": [], 73 | "x": 382, 74 | "y": 121, 75 | "zoom": 1 76 | }, 77 | "customType": "BABYLON.NodeMaterial", 78 | "outputNodes": [ 79 | 10, 80 | 12 81 | ], 82 | "blocks": [ 83 | { 84 | "customType": "BABYLON.VertexOutputBlock", 85 | "id": 10, 86 | "name": "VertexOutput", 87 | "comments": "", 88 | "visibleInInspector": false, 89 | "visibleOnFrame": false, 90 | "target": 1, 91 | "inputs": [ 92 | { 93 | "name": "vector", 94 | "inputName": "vector", 95 | "targetBlockId": 9, 96 | "targetConnectionName": "output", 97 | "isExposedOnFrame": true, 98 | "exposedPortPosition": -1 99 | } 100 | ], 101 | "outputs": [] 102 | }, 103 | { 104 | "customType": "BABYLON.TransformBlock", 105 | "id": 9, 106 | "name": "WorldPos * ViewProjectionTransform", 107 | "comments": "", 108 | "visibleInInspector": false, 109 | "visibleOnFrame": false, 110 | "target": 1, 111 | "inputs": [ 112 | { 113 | "name": "vector", 114 | "inputName": "vector", 115 | "targetBlockId": 7, 116 | "targetConnectionName": "output", 117 | "isExposedOnFrame": true, 118 | "exposedPortPosition": -1 119 | }, 120 | { 121 | "name": "transform", 122 | "inputName": "transform", 123 | "targetBlockId": 8, 124 | "targetConnectionName": "output", 125 | "isExposedOnFrame": true, 126 | "exposedPortPosition": -1 127 | } 128 | ], 129 | "outputs": [ 130 | { 131 | "name": "output" 132 | }, 133 | { 134 | "name": "xyz" 135 | } 136 | ], 137 | "complementZ": 0, 138 | "complementW": 1 139 | }, 140 | { 141 | "customType": "BABYLON.TransformBlock", 142 | "id": 7, 143 | "name": "WorldPos", 144 | "comments": "", 145 | "visibleInInspector": false, 146 | "visibleOnFrame": false, 147 | "target": 1, 148 | "inputs": [ 149 | { 150 | "name": "vector", 151 | "inputName": "vector", 152 | "targetBlockId": 5, 153 | "targetConnectionName": "output", 154 | "isExposedOnFrame": true, 155 | "exposedPortPosition": -1 156 | }, 157 | { 158 | "name": "transform", 159 | "inputName": "transform", 160 | "targetBlockId": 6, 161 | "targetConnectionName": "output", 162 | "isExposedOnFrame": true, 163 | "exposedPortPosition": -1 164 | } 165 | ], 166 | "outputs": [ 167 | { 168 | "name": "output" 169 | }, 170 | { 171 | "name": "xyz" 172 | } 173 | ], 174 | "complementZ": 0, 175 | "complementW": 1 176 | }, 177 | { 178 | "customType": "BABYLON.InputBlock", 179 | "id": 5, 180 | "name": "position", 181 | "comments": "", 182 | "visibleInInspector": false, 183 | "visibleOnFrame": false, 184 | "target": 1, 185 | "inputs": [], 186 | "outputs": [ 187 | { 188 | "name": "output" 189 | } 190 | ], 191 | "type": 8, 192 | "mode": 1, 193 | "systemValue": null, 194 | "animationType": 0, 195 | "min": 0, 196 | "max": 0, 197 | "isBoolean": false, 198 | "matrixMode": 0, 199 | "isConstant": false, 200 | "groupInInspector": "", 201 | "convertToGammaSpace": false, 202 | "convertToLinearSpace": false 203 | }, 204 | { 205 | "customType": "BABYLON.InputBlock", 206 | "id": 6, 207 | "name": "World", 208 | "comments": "", 209 | "visibleInInspector": false, 210 | "visibleOnFrame": false, 211 | "target": 1, 212 | "inputs": [], 213 | "outputs": [ 214 | { 215 | "name": "output" 216 | } 217 | ], 218 | "type": 128, 219 | "mode": 0, 220 | "systemValue": 1, 221 | "animationType": 0, 222 | "min": 0, 223 | "max": 0, 224 | "isBoolean": false, 225 | "matrixMode": 0, 226 | "isConstant": false, 227 | "groupInInspector": "", 228 | "convertToGammaSpace": false, 229 | "convertToLinearSpace": false 230 | }, 231 | { 232 | "customType": "BABYLON.InputBlock", 233 | "id": 8, 234 | "name": "ViewProjection", 235 | "comments": "", 236 | "visibleInInspector": false, 237 | "visibleOnFrame": false, 238 | "target": 1, 239 | "inputs": [], 240 | "outputs": [ 241 | { 242 | "name": "output" 243 | } 244 | ], 245 | "type": 128, 246 | "mode": 0, 247 | "systemValue": 4, 248 | "animationType": 0, 249 | "min": 0, 250 | "max": 0, 251 | "isBoolean": false, 252 | "matrixMode": 0, 253 | "isConstant": false, 254 | "groupInInspector": "", 255 | "convertToGammaSpace": false, 256 | "convertToLinearSpace": false 257 | }, 258 | { 259 | "customType": "BABYLON.FragmentOutputBlock", 260 | "id": 12, 261 | "name": "FragmentOutput", 262 | "comments": "", 263 | "visibleInInspector": false, 264 | "visibleOnFrame": false, 265 | "target": 2, 266 | "inputs": [ 267 | { 268 | "name": "rgba", 269 | "inputName": "rgba", 270 | "targetBlockId": 11, 271 | "targetConnectionName": "output", 272 | "isExposedOnFrame": true, 273 | "exposedPortPosition": -1 274 | }, 275 | { 276 | "name": "rgb" 277 | }, 278 | { 279 | "name": "a" 280 | } 281 | ], 282 | "outputs": [], 283 | "convertToGammaSpace": false, 284 | "convertToLinearSpace": false, 285 | "useLogarithmicDepth": false 286 | }, 287 | { 288 | "customType": "BABYLON.InputBlock", 289 | "id": 11, 290 | "name": "color", 291 | "comments": "", 292 | "visibleInInspector": false, 293 | "visibleOnFrame": false, 294 | "target": 1, 295 | "inputs": [], 296 | "outputs": [ 297 | { 298 | "name": "output" 299 | } 300 | ], 301 | "type": 64, 302 | "mode": 0, 303 | "systemValue": null, 304 | "animationType": 0, 305 | "min": 0, 306 | "max": 0, 307 | "isBoolean": false, 308 | "matrixMode": 0, 309 | "isConstant": false, 310 | "groupInInspector": "", 311 | "convertToGammaSpace": false, 312 | "convertToLinearSpace": false, 313 | "valueType": "BABYLON.Color4", 314 | "value": [ 315 | 0.8862745098039215, 316 | 0.8862745098039215, 317 | 0.8862745098039215, 318 | 1 319 | ] 320 | } 321 | ] 322 | } -------------------------------------------------------------------------------- /web_server/content/materials/Wallpaper/Wallpaper001A_2K-JPG.usda: -------------------------------------------------------------------------------- 1 | #usda 1.0 2 | ( 3 | customLayerData = { 4 | string author = "ambientCG (ambientCG.com)" 5 | string copyright = "CC0 1.0 Public Domain Dedication (https://creativecommons.org/publicdomain/zero/1.0/)" 6 | string generator = "ambientCG USD Script v3 (build_usda_pbr_material.py)" 7 | string title = "Wallpaper001A by ambientCG" 8 | string url = "https://ambientcg.com/a/Wallpaper001A" 9 | } 10 | defaultPrim = "ambientCG_Material_Wallpaper001A_2K_JPG" 11 | metersPerUnit = 1 12 | upAxis = "Z" 13 | ) 14 | 15 | def Material "ambientCG_Material_Wallpaper001A_2K_JPG" 16 | { 17 | token outputs:surface.connect = 18 | 19 | def Shader "TextureCoordinateReader" 20 | { 21 | uniform token info:id = "UsdPrimvarReader_float2" 22 | token inputs:varname = "st" 23 | float2 outputs:result 24 | } 25 | 26 | def Shader "PBRShader" 27 | { 28 | uniform token info:id = "UsdPreviewSurface" 29 | color3f inputs:diffuseColor.connect = 30 | float inputs:displacement.connect = 31 | normal3f inputs:normal.connect = 32 | float inputs:roughness.connect = 33 | int inputs:useSpecularWorkflow = 0 34 | token outputs:surface 35 | } 36 | 37 | def Shader "roughness" 38 | { 39 | uniform token info:id = "UsdUVTexture" 40 | float4 inputs:fallback = (0.5, 0.5, 0.5, 1) 41 | asset inputs:file = @Wallpaper001A_2K_Roughness.jpg@ 42 | token inputs:sourceColorSpace = "raw" 43 | token inputs:st.connect = 44 | token inputs:wrapS = "repeat" 45 | token inputs:wrapT = "repeat" 46 | float3 outputs:r 47 | } 48 | 49 | def Shader "displacement" 50 | { 51 | uniform token info:id = "UsdUVTexture" 52 | float4 inputs:fallback = (0, 0, 0, 1) 53 | asset inputs:file = @Wallpaper001A_2K_Displacement.jpg@ 54 | token inputs:sourceColorSpace = "raw" 55 | token inputs:st.connect = 56 | token inputs:wrapS = "repeat" 57 | token inputs:wrapT = "repeat" 58 | float3 outputs:r 59 | } 60 | 61 | def Shader "diffuseColor" 62 | { 63 | uniform token info:id = "UsdUVTexture" 64 | float4 inputs:fallback = (0.75, 0.75, 0.75, 1) 65 | asset inputs:file = @Wallpaper001A_2K_Color.jpg@ 66 | token inputs:sourceColorSpace = "sRGB" 67 | token inputs:st.connect = 68 | token inputs:wrapS = "repeat" 69 | token inputs:wrapT = "repeat" 70 | float3 outputs:rgb 71 | } 72 | 73 | def Shader "normal" 74 | { 75 | uniform token info:id = "UsdUVTexture" 76 | float4 inputs:bias = (-1, -1, -1, 0) 77 | float4 inputs:fallback = (0, 0, 1, 1) 78 | asset inputs:file = @Wallpaper001A_2K_NormalGL.jpg@ 79 | float4 inputs:scale = (2, 2, 2, 1) 80 | token inputs:sourceColorSpace = "raw" 81 | token inputs:st.connect = 82 | token inputs:wrapS = "repeat" 83 | token inputs:wrapT = "repeat" 84 | float3 outputs:rgb 85 | } 86 | } 87 | 88 | -------------------------------------------------------------------------------- /web_server/content/materials/Wallpaper/Wallpaper001A_2K-JPG.usdc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/materials/Wallpaper/Wallpaper001A_2K-JPG.usdc -------------------------------------------------------------------------------- /web_server/content/materials/Wallpaper/Wallpaper001A_2K_Color.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/materials/Wallpaper/Wallpaper001A_2K_Color.jpg -------------------------------------------------------------------------------- /web_server/content/materials/Wallpaper/Wallpaper001A_2K_Displacement.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/materials/Wallpaper/Wallpaper001A_2K_Displacement.jpg -------------------------------------------------------------------------------- /web_server/content/materials/Wallpaper/Wallpaper001A_2K_NormalDX.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/materials/Wallpaper/Wallpaper001A_2K_NormalDX.jpg -------------------------------------------------------------------------------- /web_server/content/materials/Wallpaper/Wallpaper001A_2K_NormalGL.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/materials/Wallpaper/Wallpaper001A_2K_NormalGL.jpg -------------------------------------------------------------------------------- /web_server/content/materials/Wallpaper/Wallpaper001A_2K_Roughness.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/materials/Wallpaper/Wallpaper001A_2K_Roughness.jpg -------------------------------------------------------------------------------- /web_server/content/materials/Wallpaper/Wallpaper001A_PREVIEW.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/materials/Wallpaper/Wallpaper001A_PREVIEW.jpg -------------------------------------------------------------------------------- /web_server/content/materials/concrete-23/Concrete023.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/materials/concrete-23/Concrete023.png -------------------------------------------------------------------------------- /web_server/content/materials/concrete-23/Concrete023_1K-JPG.mtlx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /web_server/content/materials/concrete-23/Concrete023_1K-JPG.usdc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/materials/concrete-23/Concrete023_1K-JPG.usdc -------------------------------------------------------------------------------- /web_server/content/materials/concrete-23/Concrete023_1K-JPG_Color.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/materials/concrete-23/Concrete023_1K-JPG_Color.jpg -------------------------------------------------------------------------------- /web_server/content/materials/concrete-23/Concrete023_1K-JPG_Displacement.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/materials/concrete-23/Concrete023_1K-JPG_Displacement.jpg -------------------------------------------------------------------------------- /web_server/content/materials/concrete-23/Concrete023_1K-JPG_NormalDX.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/materials/concrete-23/Concrete023_1K-JPG_NormalDX.jpg -------------------------------------------------------------------------------- /web_server/content/materials/concrete-23/Concrete023_1K-JPG_NormalGL.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/materials/concrete-23/Concrete023_1K-JPG_NormalGL.jpg -------------------------------------------------------------------------------- /web_server/content/materials/concrete-23/Concrete023_1K-JPG_Roughness.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/materials/concrete-23/Concrete023_1K-JPG_Roughness.jpg -------------------------------------------------------------------------------- /web_server/content/materials/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/materials/logo.png -------------------------------------------------------------------------------- /web_server/content/materials/rust2/Rust006.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/materials/rust2/Rust006.png -------------------------------------------------------------------------------- /web_server/content/materials/rust2/Rust006_1K-JPG.mtlx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | -------------------------------------------------------------------------------- /web_server/content/materials/rust2/Rust006_1K-JPG.usdc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/materials/rust2/Rust006_1K-JPG.usdc -------------------------------------------------------------------------------- /web_server/content/materials/rust2/Rust006_1K-JPG_Color.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/materials/rust2/Rust006_1K-JPG_Color.jpg -------------------------------------------------------------------------------- /web_server/content/materials/rust2/Rust006_1K-JPG_Displacement.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/materials/rust2/Rust006_1K-JPG_Displacement.jpg -------------------------------------------------------------------------------- /web_server/content/materials/rust2/Rust006_1K-JPG_Metalness.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/materials/rust2/Rust006_1K-JPG_Metalness.jpg -------------------------------------------------------------------------------- /web_server/content/materials/rust2/Rust006_1K-JPG_NormalDX.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/materials/rust2/Rust006_1K-JPG_NormalDX.jpg -------------------------------------------------------------------------------- /web_server/content/materials/rust2/Rust006_1K-JPG_NormalGL.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/materials/rust2/Rust006_1K-JPG_NormalGL.jpg -------------------------------------------------------------------------------- /web_server/content/materials/rust2/Rust006_1K-JPG_Roughness.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/materials/rust2/Rust006_1K-JPG_Roughness.jpg -------------------------------------------------------------------------------- /web_server/content/materials/shadow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/materials/shadow.png -------------------------------------------------------------------------------- /web_server/content/materials/wood_floor/WoodFloor051_2K-JPG.usda: -------------------------------------------------------------------------------- 1 | #usda 1.0 2 | ( 3 | customLayerData = { 4 | string author = "ambientCG (ambientCG.com)" 5 | string copyright = "CC0 1.0 Public Domain Dedication (https://creativecommons.org/publicdomain/zero/1.0/)" 6 | string generator = "ambientCG USD Script v3 (build_usda_pbr_material.py)" 7 | string title = "WoodFloor051 by ambientCG" 8 | string url = "https://ambientcg.com/a/WoodFloor051" 9 | } 10 | defaultPrim = "ambientCG_Material_WoodFloor051_2K_JPG" 11 | metersPerUnit = 1 12 | upAxis = "Z" 13 | ) 14 | 15 | def Material "ambientCG_Material_WoodFloor051_2K_JPG" 16 | { 17 | token outputs:surface.connect = 18 | 19 | def Shader "TextureCoordinateReader" 20 | { 21 | uniform token info:id = "UsdPrimvarReader_float2" 22 | token inputs:varname = "st" 23 | float2 outputs:result 24 | } 25 | 26 | def Shader "PBRShader" 27 | { 28 | uniform token info:id = "UsdPreviewSurface" 29 | color3f inputs:diffuseColor.connect = 30 | float inputs:displacement.connect = 31 | normal3f inputs:normal.connect = 32 | float inputs:occlusion.connect = 33 | float inputs:roughness.connect = 34 | int inputs:useSpecularWorkflow = 0 35 | token outputs:surface 36 | } 37 | 38 | def Shader "displacement" 39 | { 40 | uniform token info:id = "UsdUVTexture" 41 | float4 inputs:fallback = (0, 0, 0, 1) 42 | asset inputs:file = @WoodFloor051_2K_Displacement.jpg@ 43 | token inputs:sourceColorSpace = "raw" 44 | token inputs:st.connect = 45 | token inputs:wrapS = "repeat" 46 | token inputs:wrapT = "repeat" 47 | float3 outputs:r 48 | } 49 | 50 | def Shader "roughness" 51 | { 52 | uniform token info:id = "UsdUVTexture" 53 | float4 inputs:fallback = (0.5, 0.5, 0.5, 1) 54 | asset inputs:file = @WoodFloor051_2K_Roughness.jpg@ 55 | token inputs:sourceColorSpace = "raw" 56 | token inputs:st.connect = 57 | token inputs:wrapS = "repeat" 58 | token inputs:wrapT = "repeat" 59 | float3 outputs:r 60 | } 61 | 62 | def Shader "occlusion" 63 | { 64 | uniform token info:id = "UsdUVTexture" 65 | float4 inputs:fallback = (1, 1, 1, 1) 66 | asset inputs:file = @WoodFloor051_2K_AmbientOcclusion.jpg@ 67 | token inputs:sourceColorSpace = "raw" 68 | token inputs:st.connect = 69 | token inputs:wrapS = "repeat" 70 | token inputs:wrapT = "repeat" 71 | float3 outputs:r 72 | } 73 | 74 | def Shader "diffuseColor" 75 | { 76 | uniform token info:id = "UsdUVTexture" 77 | float4 inputs:fallback = (0.75, 0.75, 0.75, 1) 78 | asset inputs:file = @WoodFloor051_2K_Color.jpg@ 79 | token inputs:sourceColorSpace = "sRGB" 80 | token inputs:st.connect = 81 | token inputs:wrapS = "repeat" 82 | token inputs:wrapT = "repeat" 83 | float3 outputs:rgb 84 | } 85 | 86 | def Shader "normal" 87 | { 88 | uniform token info:id = "UsdUVTexture" 89 | float4 inputs:bias = (-1, -1, -1, 0) 90 | float4 inputs:fallback = (0, 0, 1, 1) 91 | asset inputs:file = @WoodFloor051_2K_NormalGL.jpg@ 92 | float4 inputs:scale = (2, 2, 2, 1) 93 | token inputs:sourceColorSpace = "raw" 94 | token inputs:st.connect = 95 | token inputs:wrapS = "repeat" 96 | token inputs:wrapT = "repeat" 97 | float3 outputs:rgb 98 | } 99 | } 100 | 101 | -------------------------------------------------------------------------------- /web_server/content/materials/wood_floor/WoodFloor051_2K-JPG.usdc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/materials/wood_floor/WoodFloor051_2K-JPG.usdc -------------------------------------------------------------------------------- /web_server/content/materials/wood_floor/WoodFloor051_2K_AmbientOcclusion.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/materials/wood_floor/WoodFloor051_2K_AmbientOcclusion.jpg -------------------------------------------------------------------------------- /web_server/content/materials/wood_floor/WoodFloor051_2K_Color.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/materials/wood_floor/WoodFloor051_2K_Color.jpg -------------------------------------------------------------------------------- /web_server/content/materials/wood_floor/WoodFloor051_2K_Displacement.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/materials/wood_floor/WoodFloor051_2K_Displacement.jpg -------------------------------------------------------------------------------- /web_server/content/materials/wood_floor/WoodFloor051_2K_NormalDX.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/materials/wood_floor/WoodFloor051_2K_NormalDX.jpg -------------------------------------------------------------------------------- /web_server/content/materials/wood_floor/WoodFloor051_2K_NormalGL.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/materials/wood_floor/WoodFloor051_2K_NormalGL.jpg -------------------------------------------------------------------------------- /web_server/content/materials/wood_floor/WoodFloor051_2K_Roughness.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/materials/wood_floor/WoodFloor051_2K_Roughness.jpg -------------------------------------------------------------------------------- /web_server/content/materials/wood_floor/WoodFloor051_PREVIEW.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/materials/wood_floor/WoodFloor051_PREVIEW.jpg -------------------------------------------------------------------------------- /web_server/content/room_builder_aux.js: -------------------------------------------------------------------------------- 1 | async function doDownload(filename, scene) { 2 | console.log('start download ' + filename); 3 | 4 | await BABYLON.GLTF2Export.GLBAsync(scene, filename).then((glb) => { 5 | glb.downloadFiles(); 6 | console.log('end download ' + filename); 7 | }); 8 | 9 | } 10 | 11 | 12 | var text3D_builder=function(name, item_position, vector, parent, scene){ 13 | const north_vector=new BABYLON.Vector3(0, 0, 1); 14 | maxLength=1.3; 15 | 16 | texto=name.replace("root", "Hall"); 17 | texto=texto.replace(/d_(.+)_\d+/, "$1"); 18 | 19 | myText = BABYLON.MeshBuilder.CreateText("T_" + texto, texto, fontContent, { 20 | size: 0.2, 21 | resolution: 5, 22 | depth: 0.1, 23 | sideOrientation:2 }, scene); 24 | 25 | //scale it 26 | scene.executeWhenReady(function () { 27 | // Assuming the text is aligned along the X axis, measure its length 28 | myText.refreshBoundingInfo(); 29 | var boundingInfo = myText.getBoundingInfo(); 30 | var textWidth = boundingInfo.maximum.x - boundingInfo.minimum.x; 31 | 32 | // Check if the text exceeds the maximum length 33 | if (textWidth > maxLength) { 34 | // Calculate the required scaling factor 35 | var scaleFactor = maxLength / textWidth; 36 | 37 | // Apply the scaling factor to the text mesh 38 | myText.scaling.x = scaleFactor; 39 | myText.scaling.y = scaleFactor; // Optional: Scale uniformly in Y to maintain aspect ratio 40 | // Note: Adjust Z scaling as needed, or leave it if uniform scaling is desired 41 | } 42 | }); 43 | 44 | //place it 45 | myText.parent=parent; 46 | myText.position=new BABYLON.Vector3(item_position.x, item_position.y, item_position.z); 47 | 48 | //rotate 49 | var crossProduct = BABYLON.Vector3.Cross(north_vector, vector); 50 | // Calculate the dot product and use it to find the angle between vectors 51 | let dotProduct = BABYLON.Vector3.Dot(north_vector, vector); 52 | let angle = Math.acos(dotProduct); 53 | 54 | // Adjust the angle based on the direction of the cross product 55 | if (crossProduct.y < 0) { 56 | angle = -angle; 57 | } 58 | //let angle=Math.acos(BABYLON.Vector3.Dot(north_vector, vector)) * Math.sign(crossProduct.y); 59 | 60 | myText.rotate(BABYLON.Axis.Y, angle , BABYLON.Space.LOCAL); 61 | 62 | //assign material 63 | myText.material = BJS_materials["BJS_black_metal"]; 64 | 65 | 66 | } 67 | 68 | var item_builder= function(name, item_position, item_size, vector, material,scene, item_shadow_material=null){ 69 | //places artwork as an image texture 70 | //adds a frame and both elements have a customizable separation from the wall 71 | //the thickness of the frame is half the separation 72 | 73 | const shadow_scale=1.3; 74 | var base_vector=new BABYLON.Vector3(0, 0, 0); 75 | const north_vector=new BABYLON.Vector3(0, 0, 1); 76 | var abstractPlane = BABYLON.Plane.FromPositionAndNormal(base_vector,vector ); 77 | var item = BABYLON.MeshBuilder.CreatePlane(name, {sourcePlane: abstractPlane, width:item_size.width, height: item_size.height, sideOrientation: BABYLON.Mesh.SINGLESIDE},scene); 78 | 79 | //create the item shadow 80 | if (item_shadow_material!=null) { 81 | var item_shadow = BABYLON.MeshBuilder.CreatePlane("shadow", {sourcePlane: abstractPlane, width:item_size.width*shadow_scale, height: item_size.height*shadow_scale, sideOrientation: BABYLON.Mesh.SINGLESIDE},scene); 82 | item_shadow.position=new BABYLON.Vector3(item_position.x, item_position.y, item_position.z).add(vector.scale(0.01)); 83 | item_shadow.material=item_shadow_material; 84 | 85 | let existing_shadow_object=scene.getMeshByName('shadows'); 86 | if (existing_shadow_object){ 87 | var merged_mesh = BABYLON.Mesh.MergeMeshes([existing_shadow_object, item_shadow], true); 88 | merged_mesh.name="shadows"; 89 | } else { 90 | item_shadow.name="shadows"; 91 | } 92 | 93 | } 94 | 95 | 96 | //the position is shifted away from the wall in the direction of the item vector (normal) 97 | item.position=new BABYLON.Vector3(item_position.x, item_position.y, item_position.z).add(vector.scale(3*item_separation/2)); 98 | item.checkCollisions= true; 99 | if (material!= undefined){ 100 | item.material=material; 101 | item.material.specularColor=new BABYLON.Color3(0,0,0); 102 | 103 | } 104 | 105 | 106 | 107 | // Create the box at the position of the base vector with the plane's rotation 108 | let item2 = BABYLON.MeshBuilder.CreateBox("box" +name, { 109 | size: 1, 110 | updatable: true 111 | }, scene); 112 | 113 | // Set the position, rotation and scale of the box/frame 114 | item2.position = new BABYLON.Vector3(item_position.x, item_position.y, item_position.z).add(vector.scale(item_separation/2-0.001)); 115 | item2.rotate(BABYLON.Axis.Y, Math.acos(BABYLON.Vector3.Dot(vector, north_vector)), BABYLON.Space.LOCAL); 116 | item2.scaling = new BABYLON.Vector3(item_size.width+margin, item_size.height+margin, item_separation); 117 | 118 | 119 | //check if the mesh that merges all the frames is already created 120 | let existing_frame_object=scene.getMeshByName('frames'); 121 | if (existing_frame_object){ 122 | var merged_mesh = BABYLON.Mesh.MergeMeshes([existing_frame_object, item2], true); 123 | merged_mesh.name="frames"; 124 | } else { 125 | item2.name="frames"; 126 | } 127 | 128 | 129 | 130 | 131 | 132 | return item 133 | } 134 | 135 | function populate_template(config_file, room_name,scene){ 136 | 137 | let item_size=config_file["Technical"]["scaleFactor"]; //parameter controlling the scale of the items 138 | 139 | const vector_n=new BABYLON.Vector3(0, 0, 1); 140 | const vector_s=new BABYLON.Vector3(0, 0, -1); 141 | const vector_e=new BABYLON.Vector3(1, 0, 0); 142 | const vector_w=new BABYLON.Vector3(-1, 0, 0); 143 | 144 | //position the items 145 | // get all the non image items 146 | var gallery=config_file[room_name]; 147 | var dict_items=Object.keys(gallery).filter(key => gallery[key]["resource_type"]== "image"); 148 | num_items=dict_items.length; 149 | 150 | //get frame shadow material 151 | var shadow_texture = new BABYLON.Texture(materials_folder +"/shadow.png", scene, false, BABYLON.Texture.LINEAR_LINEAR); 152 | shadow_texture.hasAlpha=true; 153 | 154 | var item_shadow_material = new BABYLON.StandardMaterial("shadow_mat", scene); 155 | item_shadow_material.specularColor=new BABYLON.Color3(0,0,0); 156 | item_shadow_material.diffuseTexture = shadow_texture; 157 | item_shadow_material.useAlphaFromDiffuseTexture = true; 158 | 159 | let i=3 160 | for (var item of dict_items){ 161 | //get location 162 | let location=JSON.parse(gallery[item]["location"]) 163 | 164 | //get material 165 | let items_material=new BABYLON.StandardMaterial("item_mat_"+ item); 166 | items_material.freeze(); 167 | items_material.specularColor=new BABYLON.Color3(0,0,0); 168 | items_material.maxSimultaneousLights=max_lights; 169 | let tex=new BABYLON.Texture(hallspics_prefix + gallery[item]["resource"]); 170 | items_material.diffuseTexture=tex; 171 | 172 | //get orientation 173 | let orientation=JSON.parse(gallery[item]["vector"]) 174 | orientation=new BABYLON.Vector3(orientation[0], 0, orientation[1]) 175 | 176 | //get sizse 177 | scaled_width=item_size*gallery[item]["width"]; 178 | scaled_height=item_size*gallery[item]["height"]; 179 | 180 | //notice that y and z are flippped 181 | item_builder(item + "_" + i ,{x:location[0], y:location[2], z:location[1]}, {width:scaled_width, height:scaled_height}, orientation, items_material, scene, item_shadow_material); 182 | 183 | //update loading bar 184 | tex.onLoadObservable.add(((j) => { 185 | return() => { 186 | percentage_artwork=percentage_artwork + j; 187 | const round_per=Math.round(percentage_artwork); 188 | document.getElementById("percentLoaded_artwork").innerHTML = `${round_per}%`; 189 | document.getElementById("loadingBar_artwork").style.width =`${round_per}%`; 190 | if (round_per==100){ 191 | //finish load bar 192 | reset_loadbar(); 193 | } 194 | 195 | }; 196 | })(100/num_items)); 197 | 198 | 199 | i=i+1; 200 | } 201 | 202 | if (dict_items.length>0) { 203 | scene.getMeshByName("frames").createNormals(true); 204 | scene.getMeshByName("frames").material=BJS_materials[frame_material]; 205 | } else { 206 | reset_loadbar(); 207 | } 208 | 209 | 210 | 211 | //locate doors in the json file 212 | var renamed_doors=0; 213 | dict_items=Object.keys(gallery).filter(key => gallery[key]["resource_type"]== "door"); 214 | max_doors=dict_items.length; 215 | 216 | //go through the mesh check for doors and replace materials 217 | scene.meshes.map((mesh) => { 218 | 219 | if ((mesh.material != null) && mesh.material.name.startsWith("BJS_")){ 220 | console.log("updating material " + mesh.material.name); 221 | let temp_name=mesh.material.name; 222 | mesh.material=BJS_materials[temp_name]; 223 | mesh.material.maxSimultaneousLights =max_lights; 224 | } 225 | 226 | if (regul_exp_door.test(mesh.name)){ 227 | if (renamed_doors >= max_doors){ //delete the door from the mesh 228 | mesh.name="dummydoor" + renamed_doors; 229 | 230 | } else { 231 | mesh.name="d_" + dict_items[renamed_doors] + "_" + renamed_doors; 232 | normals = mesh.getVerticesData(BABYLON.VertexBuffer.NormalKind); 233 | normal = new BABYLON.Vector3(normals[0], normals[1], normals[2]); 234 | 235 | //put text 236 | text3D_builder(dict_items[renamed_doors].replace("#", " "), mesh.position, normal, mesh.parent, scene); 237 | 238 | } 239 | renamed_doors++; 240 | } 241 | }); 242 | 243 | if (renamed_doors < max_doors){ 244 | console.log("ERROR: Some doors in the json are not present in the template"); 245 | } 246 | 247 | 248 | 249 | 250 | //remove replaced materials 251 | scene.materials.forEach(material => { 252 | if (material.name.startsWith('BJS_')) 253 | material.dispose(); 254 | 255 | }); 256 | 257 | 258 | } 259 | 260 | 261 | function reset_loadbar(){ 262 | percentage_materials=0; 263 | percentage_template=0; 264 | percentage_artwork=0; 265 | document.getElementById("loader").style.display = "none"; 266 | document.getElementById("loader").id= "loaded"; 267 | document.getElementById("percentLoaded_template").innerHTML = `${percentage_template}%`; 268 | document.getElementById("loadingBar_template").style.width =`${percentage_template}%`; 269 | document.getElementById("percentLoaded_materials").innerHTML = `${percentage_materials}%`; 270 | document.getElementById("loadingBar_materials").style.width =`${percentage_materials}%`; 271 | document.getElementById("percentLoaded_artwork").innerHTML = `${percentage_artwork}%`; 272 | document.getElementById("loadingBar_artwork").style.width =`${percentage_artwork}%`; 273 | } 274 | 275 | 276 | 277 | -------------------------------------------------------------------------------- /web_server/content/templates/T_nopannels.glb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/templates/T_nopannels.glb -------------------------------------------------------------------------------- /web_server/content/templates/T_pannels.glb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/templates/T_pannels.glb -------------------------------------------------------------------------------- /web_server/content/templates/T_root.glb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/templates/T_root.glb -------------------------------------------------------------------------------- /web_server/content/templates/T_small.glb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lbartworks/openvgal/d14250a8f8a424a44dba4d3c7fd897b590f4f089/web_server/content/templates/T_small.glb -------------------------------------------------------------------------------- /web_server/http_server.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | import http.server 3 | import socketserver 4 | import os 5 | import sys 6 | from functools import partial 7 | import argparse 8 | 9 | class NoCacheHTTPRequestHandler(http.server.SimpleHTTPRequestHandler): 10 | """HTTP request handler with no caching headers.""" 11 | 12 | def __init__(self, *args, **kwargs): 13 | super().__init__(*args, **kwargs) 14 | 15 | def end_headers(self): 16 | """Add headers to prevent caching and allow CORS.""" 17 | self.send_header('Cache-Control', 'no-store, no-cache, must-revalidate, max-age=0') 18 | self.send_header('Pragma', 'no-cache') 19 | self.send_header('Expires', '0') 20 | 21 | # CORS headers 22 | self.send_header('Access-Control-Allow-Origin', '*') 23 | self.send_header('Access-Control-Allow-Methods', 'GET, POST, OPTIONS') 24 | self.send_header('Access-Control-Allow-Headers', 'X-Requested-With, Content-Type, Accept') 25 | 26 | super().end_headers() 27 | 28 | def do_OPTIONS(self): 29 | """Handle OPTIONS method for CORS preflight requests.""" 30 | self.send_response(200) 31 | self.end_headers() 32 | 33 | def main(web_root, port): 34 | 35 | # Change to the desired directory 36 | os.chdir(web_root) 37 | print(f"Setting web root to: {web_root}") 38 | 39 | 40 | 41 | # Create a handler with the specified directory 42 | handler = partial(NoCacheHTTPRequestHandler, directory=web_root) 43 | 44 | # Create and start the server 45 | with socketserver.TCPServer(("", port), handler) as httpd: 46 | print(f"Serving at http://localhost:{port}") 47 | print("Server started successfully") 48 | print("Press Ctrl+C to stop the server") 49 | try: 50 | httpd.serve_forever() 51 | except KeyboardInterrupt: 52 | print("\nServer stopped.") 53 | 54 | if __name__ == "__main__": 55 | 56 | # Set up argument parser 57 | parser = argparse.ArgumentParser(description="OpenVGal. Web server launcher.") 58 | parser.add_argument("--content_folder", type=str, help="Path of the web root folder") 59 | parser.add_argument("--port", type=int, help="Port of the server") 60 | 61 | 62 | # Parse arguments 63 | args = parser.parse_args() 64 | 65 | # Call main function with parsed arguments 66 | main(web_root=args.content_folder, port=args.port) -------------------------------------------------------------------------------- /web_server/requirements.txt: -------------------------------------------------------------------------------- 1 | pyinstaller==6.3.0 2 | pandas 3 | pillow --------------------------------------------------------------------------------