Spaces:
				
			
			
	
			
			
		Running
		
			on 
			
			Zero
	
	
	
			
			
	
	
	
	
		
		
		Running
		
			on 
			
			Zero
	3d model output added
Browse files- 3d_model_player.glb +0 -0
- 64x32to64x64skin3dmodel.sh +14 -0
- app.py +73 -5
- packages.txt +1 -0
- requirements.txt +3 -1
    	
        3d_model_player.glb
    ADDED
    
    | Binary file (61.5 kB). View file | 
|  | 
    	
        64x32to64x64skin3dmodel.sh
    ADDED
    
    | @@ -0,0 +1,14 @@ | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | 
|  | |
| 1 | 
            +
            convert "$1" -background transparent -extent 64x64 \
         | 
| 2 | 
            +
            	\( "$1" -crop 4x4+4+16 -flop \) -geometry +20+48 -composite \
         | 
| 3 | 
            +
            	\( "$1" -crop 4x4+8+16 -flop \) -geometry +24+48 -composite \
         | 
| 4 | 
            +
            	\( "$1" -crop 4x12+8+20 -flop \) -geometry +16+52 -composite \
         | 
| 5 | 
            +
            	\( "$1" -crop 4x12+4+20 -flop \) -geometry +20+52 -composite \
         | 
| 6 | 
            +
            	\( "$1" -crop 4x12+0+20 -flop \) -geometry +24+52 -composite \
         | 
| 7 | 
            +
            	\( "$1" -crop 4x12+12+20 -flop \) -geometry +28+52 -composite \
         | 
| 8 | 
            +
            	\( "$1" -crop 4x4+44+16 -flop \) -geometry +36+48 -composite \
         | 
| 9 | 
            +
            	\( "$1" -crop 4x4+48+16 -flop \) -geometry +40+48 -composite \
         | 
| 10 | 
            +
            	\( "$1" -crop 4x12+48+20 -flop \) -geometry +32+52 -composite \
         | 
| 11 | 
            +
            	\( "$1" -crop 4x12+44+20 -flop \) -geometry +36+52 -composite \
         | 
| 12 | 
            +
            	\( "$1" -crop 4x12+40+20 -flop \) -geometry +40+52 -composite \
         | 
| 13 | 
            +
            	\( "$1" -crop 4x12+52+20 -flop \) -geometry +44+52 -composite \
         | 
| 14 | 
            +
            "$1-converted.png"
         | 
    	
        app.py
    CHANGED
    
    | @@ -2,8 +2,12 @@ import subprocess | |
| 2 | 
             
            import os
         | 
| 3 | 
             
            import gradio as gr
         | 
| 4 | 
             
            import torch
         | 
|  | |
|  | |
|  | |
| 5 | 
             
            import spaces
         | 
| 6 |  | 
|  | |
| 7 | 
             
            if torch.cuda.is_available():
         | 
| 8 | 
             
                device = "cuda"
         | 
| 9 | 
             
                print("Using GPU")
         | 
| @@ -13,21 +17,82 @@ else: | |
| 13 |  | 
| 14 |  | 
| 15 | 
             
            subprocess.run(["git", "clone", "https://github.com/Nick088Official/Stable_Diffusion_Finetuned_Minecraft_Skin_Generator.git"])
         | 
| 16 | 
            -
             | 
| 17 |  | 
| 18 | 
             
            @spaces.GPU()
         | 
| 19 | 
             
            def run_inference(prompt, stable_diffusion_model, num_inference_steps, guidance_scale, model_precision_type, seed, output_image_name, verbose):
         | 
|  | |
|  | |
|  | |
| 20 | 
             
                if stable_diffusion_model == '2':
         | 
| 21 | 
             
                    sd_model = "minecraft-skins"
         | 
| 22 | 
             
                else:
         | 
| 23 | 
             
                    sd_model = "minecraft-skins-sdxl"
         | 
| 24 |  | 
| 25 | 
            -
                 | 
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
| 26 |  | 
| 27 | 
            -
                os.system( | 
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
| 28 |  | 
| 29 | 
            -
             | 
|  | |
|  | |
|  | |
|  | |
| 30 |  | 
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
| 31 |  | 
| 32 | 
             
            # Define Gradio UI components
         | 
| 33 | 
             
            prompt = gr.Textbox(label="Your Prompt", info="What the Minecraft Skin should look like")
         | 
| @@ -53,7 +118,10 @@ gr.Interface( | |
| 53 | 
             
                    output_image_name,
         | 
| 54 | 
             
                    verbose
         | 
| 55 | 
             
                ],
         | 
| 56 | 
            -
                outputs= | 
|  | |
|  | |
|  | |
| 57 | 
             
                title="Minecraft Skin Generator",
         | 
| 58 | 
             
                description="Make AI generated Minecraft Skins by a Finetuned Stable Diffusion Version!<br>Model used: https://github.com/Nick088Official/Stable_Diffusion_Finetuned_Minecraft_Skin_Generator<br>Hugging Face Space made by [Nick088](https://linktr.ee/Nick088)",
         | 
| 59 | 
             
            ).launch(show_api=False, share=True)
         | 
|  | |
| 2 | 
             
            import os
         | 
| 3 | 
             
            import gradio as gr
         | 
| 4 | 
             
            import torch
         | 
| 5 | 
            +
            from PIL import Image, ImageEnhance
         | 
| 6 | 
            +
            from pygltflib import GLTF2
         | 
| 7 | 
            +
            from pygltflib.utils import ImageFormat, Texture, Material, Image as GLTFImage
         | 
| 8 | 
             
            import spaces
         | 
| 9 |  | 
| 10 | 
            +
             | 
| 11 | 
             
            if torch.cuda.is_available():
         | 
| 12 | 
             
                device = "cuda"
         | 
| 13 | 
             
                print("Using GPU")
         | 
|  | |
| 17 |  | 
| 18 |  | 
| 19 | 
             
            subprocess.run(["git", "clone", "https://github.com/Nick088Official/Stable_Diffusion_Finetuned_Minecraft_Skin_Generator.git"])
         | 
| 20 | 
            +
             | 
| 21 |  | 
| 22 | 
             
            @spaces.GPU()
         | 
| 23 | 
             
            def run_inference(prompt, stable_diffusion_model, num_inference_steps, guidance_scale, model_precision_type, seed, output_image_name, verbose):
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                os.chdir("Stable_Diffusion_Finetuned_Minecraft_Skin_Generator")
         | 
| 26 | 
            +
                
         | 
| 27 | 
             
                if stable_diffusion_model == '2':
         | 
| 28 | 
             
                    sd_model = "minecraft-skins"
         | 
| 29 | 
             
                else:
         | 
| 30 | 
             
                    sd_model = "minecraft-skins-sdxl"
         | 
| 31 |  | 
| 32 | 
            +
                inference_command = f"python Python_Scripts/{sd_model}.py '{prompt}' {num_inference_steps} {guidance_scale} {model_precision_type} {seed} {output_image_name} {'--verbose' if verbose else ''}"
         | 
| 33 | 
            +
                
         | 
| 34 | 
            +
                os.system(inference_command)
         | 
| 35 | 
            +
                
         | 
| 36 | 
            +
                os.chdir("..")
         | 
| 37 | 
            +
                
         | 
| 38 | 
            +
                to3d_model_command = f"sh 64x32to64x64skin3dmodel.sh Stable_Diffusion_Finetuned_Minecraft_Skin_Generator/output_minecraft_skins/{output_image_name}"
         | 
| 39 |  | 
| 40 | 
            +
                os.system(to3d_model_command)
         | 
| 41 | 
            +
             | 
| 42 | 
            +
                
         | 
| 43 | 
            +
                filename = "3d_model_player.glb"
         | 
| 44 | 
            +
                gltf = GLTF2().load(filename)
         | 
| 45 | 
            +
             | 
| 46 | 
            +
                # Step 1: Find the index of the existing texture you want to replace
         | 
| 47 | 
            +
                # Let's assume the texture you want to replace is at index 1 (you need to replace 1 with the actual index)
         | 
| 48 | 
            +
                existing_texture_index = 0
         | 
| 49 | 
            +
             | 
| 50 | 
            +
                # Check if the existing_texture_index is valid
         | 
| 51 | 
            +
                if existing_texture_index < len(gltf.textures):
         | 
| 52 | 
            +
                    # Step 2: Remove the old texture and its associated image from the GLB
         | 
| 53 | 
            +
                    # Remove the texture
         | 
| 54 | 
            +
                    gltf.textures.pop(existing_texture_index)
         | 
| 55 | 
            +
             | 
| 56 | 
            +
                    # Remove the image associated with the texture
         | 
| 57 | 
            +
                    existing_image_index = gltf.materials[0].pbrMetallicRoughness.baseColorTexture.index
         | 
| 58 | 
            +
                    gltf.images.pop(existing_image_index)
         | 
| 59 | 
            +
             | 
| 60 |  | 
| 61 | 
            +
                    # Step 3: Add the new image and texture to the GLB
         | 
| 62 | 
            +
                    # Create and add a new image to the glTF (same as before)
         | 
| 63 | 
            +
                    new_image = GLTFImage()
         | 
| 64 | 
            +
                    new_image.uri = os.path.join(f"Stable_Diffusion_Finetuned_Minecraft_Skin_Generator/output_minecraft_skins/{output_image_name}-converted.png")
         | 
| 65 | 
            +
                    gltf.images.append(new_image)
         | 
| 66 |  | 
| 67 | 
            +
             | 
| 68 | 
            +
             | 
| 69 | 
            +
                    # Create a new texture and associate it with the added image
         | 
| 70 | 
            +
                    new_texture = Texture()
         | 
| 71 | 
            +
                    new_texture.source = len(gltf.images) - 1  # Index of the newly added image
         | 
| 72 | 
            +
                    new_texture.sampler = 0
         | 
| 73 | 
            +
                    # set to nearest neighbor
         | 
| 74 | 
            +
             | 
| 75 | 
            +
                    gltf.textures.append(new_texture)
         | 
| 76 | 
            +
             | 
| 77 | 
            +
                    # Step 4: Assign the new texture to the appropriate material(s) or mesh(es)
         | 
| 78 | 
            +
                    # Assuming you have a mesh/primitive that was using the old texture and you want to apply the new texture to it, you need to set the material index for that mesh/primitive.
         | 
| 79 | 
            +
                    # Replace 0 with the actual index of the mesh/primitive you want to update.
         | 
| 80 | 
            +
                    gltf.materials[0].pbrMetallicRoughness.baseColorTexture.index = len(gltf.textures) - 1
         | 
| 81 | 
            +
             | 
| 82 | 
            +
             | 
| 83 | 
            +
                    # Now you can convert the images to data URIs and save the updated GLB
         | 
| 84 | 
            +
                    gltf.convert_images(ImageFormat.DATAURI)
         | 
| 85 | 
            +
             | 
| 86 | 
            +
                    output_3d_model = "output_3d_model.glb"
         | 
| 87 | 
            +
                    gltf.save(output_3d_model)
         | 
| 88 | 
            +
                else:
         | 
| 89 | 
            +
                    print("Invalid existing_texture_index")
         | 
| 90 | 
            +
             | 
| 91 | 
            +
             | 
| 92 | 
            +
                # Return the generated image and the processed model
         | 
| 93 | 
            +
                return os.path.join(f"Stable_Diffusion_Finetuned_Minecraft_Skin_Generator/output_minecraft_skins/{output_image_name}"), output_3d_model
         | 
| 94 | 
            +
             | 
| 95 | 
            +
                
         | 
| 96 |  | 
| 97 | 
             
            # Define Gradio UI components
         | 
| 98 | 
             
            prompt = gr.Textbox(label="Your Prompt", info="What the Minecraft Skin should look like")
         | 
|  | |
| 118 | 
             
                    output_image_name,
         | 
| 119 | 
             
                    verbose
         | 
| 120 | 
             
                ],
         | 
| 121 | 
            +
                outputs=[
         | 
| 122 | 
            +
                    gr.Image(label="Generated Minecraft Skin Image Asset"),
         | 
| 123 | 
            +
                    gr.Model3D(clear_color=[0.0, 0.0, 0.0, 0.0],  label="3D Model")
         | 
| 124 | 
            +
                ],
         | 
| 125 | 
             
                title="Minecraft Skin Generator",
         | 
| 126 | 
             
                description="Make AI generated Minecraft Skins by a Finetuned Stable Diffusion Version!<br>Model used: https://github.com/Nick088Official/Stable_Diffusion_Finetuned_Minecraft_Skin_Generator<br>Hugging Face Space made by [Nick088](https://linktr.ee/Nick088)",
         | 
| 127 | 
             
            ).launch(show_api=False, share=True)
         | 
    	
        packages.txt
    ADDED
    
    | @@ -0,0 +1 @@ | |
|  | 
|  | |
| 1 | 
            +
            imagemagick
         | 
    	
        requirements.txt
    CHANGED
    
    | @@ -3,4 +3,6 @@ transformers | |
| 3 | 
             
            diffusers
         | 
| 4 | 
             
            accelerate
         | 
| 5 | 
             
            gradio
         | 
| 6 | 
            -
            scipy
         | 
|  | |
|  | 
|  | |
| 3 | 
             
            diffusers
         | 
| 4 | 
             
            accelerate
         | 
| 5 | 
             
            gradio
         | 
| 6 | 
            +
            scipy
         | 
| 7 | 
            +
            Pillow===9.0.1
         | 
| 8 | 
            +
            pygltflib
         | 
