# #welovetheart Metaverse Gallery [toc] --- ## Information - https://welovetheart.optimism.io/ Main website - https://github.com/madjin/welovetheart-gallery project repo (WIP) - dhttps://docs.google.com/spreadsheets/d/1rK9Fw_cUOc7vTXxjkLUufYl5dtBG7kjpnkVhkVRPyuA/ data into 4 sheets, 1 per category Average filesize of website preview images: 1.5 MB Total: 8 GB ### Prizes > **Visualize as branded stacks of OP tokens** 1,200,000 OP in prizes! 47 winners per category - 1st tier: 50K OP prize (2 winners per category) - 2nd tier: 20K OP prize (5 winners per category) - 3rd tier: 7K OP prize (10 winners per category) - 4th tier: 1K OP prize (30 winners per category) #### Winners https://docs.google.com/spreadsheets/d/1t2cyyqZgpIjXssvpt-twe0qmPTeUSEZBEoJeFTtA6Qo/edit#gid=719725938 ### Entries Total around ~6336 entries submitted, broken down into the following categories: ![image](https://hackmd.io/_uploads/ryeDKXwYp.png) --- ## Metaverse Gallery Ideas ### Anarchy Arcade style metadata, create meta-object shortcuts ETA 1 day for JSON, 1 week for world ```json {"title":"Neon Drive","file":"steam://run/433910","screen":"http://cdn.steamstatic.com/steam/apps/433910/header.jpg","preview":"http://www.youtube.com/watch?v=UTkioWWjpsw","reference":"http://store.steampowered.com/app/433910","type":"pc"} {"title":"SuperSmashLand","file":"SuperSmashLand.exe","screen":"http://www.supersmashland.com/imgs/screenshot1.png","marquee":"https://i.ytimg.com/vi/KVROb_FPZCc/maxresdefault.jpg","preview":"https://www.youtube.com/watch?v=351CO5_8fbM","download":"http://www.supersmashland.com/","reference":"http://en.wikipedia.org/wiki/Super_Smash_Land","description":"Super Smash Land is a demake of Super Smash Bros. released in September 14, 2011 by Dan Fornace. The game features 6 playable characters and 11 stages. The game visual design resembles the graphics from the Nintendo Game Boy. The game was developed with GameMaker 7.","keywords":"retro, nintendo","type":"pc"} {"title":"The Simpsons","file":"https://www.hulu.com/the-simpsons","screen":"http://a248.e.akamai.net/ib.huluim.com/show_key_art/58?size=1280x720","marquee":"http://assetshuluimcom-a.akamaihd.net/h2o/facebook_share_thumb_default_hulu.png","description":"Watch The Simpsons online. Stream episodes and clips of The Simpsons instantly.","keywords":"homer, bart","type":"tv"} ``` --- ### Blender Import/Export Script ETA 3-4 days Want to be able to associate the art with Title + Description + Platform minted on, perhaps via generating textures for 2 separate materials in Blender or adjoining them together into 1 texture and using a UVmap to separate into different meshes. It might become tricky if using an atlas since things will get mixed up easily, creating more manual work for us. Some ideas on how to solve: 1. Order things together based on size / resolution 2. Adjoin metadata pieces together, can be same size for UVmap placement 3. Make sure each artwork is associated with its metadata / placement Need a couple scripts: - [x] CSV with Number (1-100), ID, Title, Description, Featured Image, Platform - **Imagemagick script** - [x] Check Featured Image URLs to avoid basename conflicts, download - [x]]Ignore gifs for now - [x] Measure size of each image (`identify -ping -format '%w %h' image.jpg`) - [x] Add data to each row - [x] Create title / description image texture (https://imagemagick.org/Usage/text/) - [x] Compose logo of minting platform at bottom right - Download / Convert Featured Image URLs to nearest Power of Two (see Anata scripts) - [x] Can rename image filenames to `$id.ext` - [x] `$id_metadata.jpg` for metadata textures - **Python script** - [x] Import into Blender with `Image as Planes` - [x] Scale according to resolution (each image starts as square) - Move each image in the scene to be separated - Experiment with different layouts - Grid - Circular - Cascade - Street - Gallery - Export as glTF file - Atlas all images smaller than ~1024x1024 - Can use pureref or UVmap plugin? - Apply resizing / compression / optimizations > https://blender.stackexchange.com/questions/193520/auto-apply-a-frame-to-over-50-imported-paintings > http://www.fmwconcepts.com/imagemagick/picframe/index.php ![Screenshot_2024-01-20_23-24-42](https://hackmd.io/_uploads/Bk9rCMqKa.jpg) ```python! import bpy def import_image_plane(image_path): # Clear existing mesh objects bpy.ops.object.select_all(action='DESELECT') bpy.ops.object.select_by_type(type='MESH') bpy.ops.object.delete() # Import image as plane bpy.ops.mesh.primitive_plane_add(size=1, enter_editmode=False, align='WORLD', location=(0, 0, 0)) plane = bpy.context.object plane.name = "ImagePlane" # Set the material using the image texture mat = bpy.data.materials.new(name="ImageMaterial") mat.use_nodes = True bsdf = mat.node_tree.nodes["Principled BSDF"] tex_image = mat.node_tree.nodes.new(type="ShaderNodeTexImage") tex_image.image = bpy.data.images.load(image_path) mat.node_tree.links.new(bsdf.inputs['Base Color'], tex_image.outputs['Color']) # Assign the material to the plane if plane.data.materials: plane.data.materials[0] = mat else: plane.data.materials.append(mat) return plane def scale_plane_to_texture_size(plane): # Get image texture dimensions tex_width = plane.material_slots[0].material.node_tree.nodes["Image Texture"].image.size[0] tex_height = plane.material_slots[0].material.node_tree.nodes["Image Texture"].image.size[1] # Calculate scale factors scale_x = tex_width / 1024 scale_y = tex_height / 1024 # Apply scale to the plane plane.scale.x = scale_x plane.scale.y = scale_y # Example usage image_path = "/path/to/image/1of1s/16048.png" plane = import_image_plane(image_path) scale_plane_to_texture_size(plane) ``` **Ideas** - try extruding into canvas frame - try creating a custom frame for every image on plane **Pros** - Can create reusable assets for many different platforms - More optimized assets and reduced draw calls - Could turn into an interesting NFT collection, mementos **Cons** - Not useful for gifs, mp4, HTML, audio NFTs - More advanced, might take more work --- ### Portal Street - view-source:https://web.janusxr.org/ - https://vesta.janusxr.org/files/Spyduck/assets/vesta-new-lobby/scripts/index_script.js ![Screenshot_2024-01-19_21-04-13](https://hackmd.io/_uploads/rkRN5iOta.jpg) --- ### Hyperfy Regenerative World Cronjob to rotate permaurl links to submissions on server every X days to dynamically update an image or model in-world, possibly a video as well if using FFMPEG to concat media together for video walls. | [![image](https://hackmd.io/_uploads/BynFWEvta.png)](https://hackmd.io/_uploads/BynFWEvta.png) | [![image](https://hackmd.io/_uploads/BJOsb4wt6.png)](https://hackmd.io/_uploads/BJOsb4wt6.png) | | -------- | -------- | - Create a hyperfy gallery world with placeholder objects - Can reuse Oncyber galleries that jin bought - Create something new in [color scheme](https://github.com/ethereum-optimism/brand-kit) for Optimism - Implement some kind of counter that signed in users can use to vote on each piece - Gather votes after each day before next rotation, reset counter - Only those that bought the NFT or are judges can vote, token gate it --- ### Assets <details> <summary> Logos and Thumbnails</summary> - Contest Logo: https://welovetheart.optimism.io/wp-content/themes/minter/assets/img/content/heartart1.webp - Minting Platform Logos - Full size - https://welovetheart.optimism.io/wp-content/uploads/2023/10/manifold-1400x321.webp - https://welovetheart.optimism.io/wp-content/uploads/2023/11/opensea-1-1400x405.png - https://welovetheart.optimism.io/wp-content/uploads/2023/11/zora-1400x418.png - https://welovetheart.optimism.io/wp-content/uploads/2023/11/mint_fun_sticker-1400x334.png - https://welovetheart.optimism.io/wp-content/uploads/2023/11/holograph_sticker-1400x345.png - https://welovetheart.optimism.io/wp-content/uploads/2023/11/sound-1.png - https://welovetheart.optimism.io/wp-content/uploads/2023/11/highlightxyz_sticker-1400x223.png - https://welovetheart.optimism.io/wp-content/uploads/2023/11/decent-1-1400x334.png - https://welovetheart.optimism.io/wp-content/uploads/2023/11/titles-1-1400x370.png - Medium Size - https://welovetheart.optimism.io/wp-content/uploads/2023/11/opensea.png - https://welovetheart.optimism.io/wp-content/uploads/2023/11/stability-1.png - https://welovetheart.optimism.io/wp-content/uploads/2023/11/highlight.png - https://welovetheart.optimism.io/wp-content/uploads/2023/11/zora-wide.webp - https://welovetheart.optimism.io/wp-content/uploads/2023/11/decent.png - https://welovetheart.optimism.io/wp-content/uploads/2023/11/mint.png - https://welovetheart.optimism.io/wp-content/uploads/2023/11/titles.png - https://welovetheart.optimism.io/wp-content/uploads/2023/11/holograph.png - https://welovetheart.optimism.io/wp-content/uploads/2023/11/manifold.png - https://welovetheart.optimism.io/wp-content/uploads/2023/11/sound.png - Thumbnail - https://welovetheart.optimism.io/wp-content/uploads/2023/10/manifold-1-200x200.png - https://welovetheart.optimism.io/wp-content/uploads/2023/10/opensea-200x200.png - https://welovetheart.optimism.io/wp-content/uploads/2023/10/zora.webp - https://welovetheart.optimism.io/wp-content/uploads/2023/10/mint_fun-200x200.png - https://welovetheart.optimism.io/wp-content/uploads/2023/10/holograph-1-200x200.png - https://welovetheart.optimism.io/wp-content/uploads/2023/10/sound-1-200x200.png - https://welovetheart.optimism.io/wp-content/uploads/2023/10/highlight-1-200x200.png - https://welovetheart.optimism.io/wp-content/uploads/2023/10/decent-1-200x200.png - https://welovetheart.optimism.io/wp-content/uploads/2023/10/titles-200x200.png - Sponsors - https://welovetheart.optimism.io/wp-content/themes/minter/assets/img/content/sponsors/base.png - https://welovetheart.optimism.io/wp-content/themes/minter/assets/img/content/sponsors/fwb.png - https://welovetheart.optimism.io/wp-content/themes/minter/assets/img/content/sponsors/1_of_1.png - https://welovetheart.optimism.io/wp-content/themes/minter/assets/img/content/sponsors/rug_radio.png - https://welovetheart.optimism.io/wp-content/themes/minter/assets/img/content/sponsors/nifty_kit.png - https://welovetheart.optimism.io/wp-content/themes/minter/assets/img/content/sponsors/rainbow.png - https://welovetheart.optimism.io/wp-content/themes/minter/assets/img/content/sponsors/ufo.png - https://welovetheart.optimism.io/wp-content/themes/minter/assets/img/content/sponsors/crossmint.png - https://welovetheart.optimism.io/wp-content/themes/minter/assets/img/content/sponsors/rarible.png - https://welovetheart.optimism.io/wp-content/themes/minter/assets/img/content/sponsors/vector.png </details> --- ## Inspiration ### Swag - Simple tshirt (Vroid / MetaFactory) with contest logo + sponsors on the back - Open edition on Zora + Optimism with in-world hyperfy minting ### Presentation Formats ![image](https://hackmd.io/_uploads/S15tJm5Kp.png) https://www.awwwards.com/immersive-webgl-virtual-gallery-exhibition-collection.html ![](https://d2u3kfwd92fzu7.cloudfront.net/asset/news/Frame_13.jpg) ![image](https://hackmd.io/_uploads/BJpylEvta.png) ![image](https://hackmd.io/_uploads/H1zDi9_F6.png) ## Notes 277 cases of missing featured images for submission entries, including jin's "Burning the Midnight Oil" which is a HTML NFT. For entries that are not static media (jpg, png, gif), having a featured image might give the wrong impression of the art if viewed only as the thumbnail. ![image](https://hackmd.io/_uploads/ry8WsmPFa.png) Noticed there were cases of spam entries, this one is ~10% of generative art category. Can easily check for duplicate entries by searching columns for duplicates using Google Sheets. ![image](https://hackmd.io/_uploads/SyxxtXDYT.png)