├── .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 |
--------------------------------------------------------------------------------
/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 |
113 |
Build Tab
114 |
115 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
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
--------------------------------------------------------------------------------