Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Guide to replace paws with your own on underpa.ws!
- This is the method I made up, I'm sure there's a better way of doing this.
- By Aviako Flerovali.
- === MODEL PREPARATION ===
- 1. You will need to prepare two separate models, one for each leg (unless both are symmetric).
- 2. First you will need to use the basis models from the site (https://underpa.ws/models/<base name>). paw.glb has four toes, kilmo.glb has three toes, and tirrel.glb has two toes.
- 3. Load the model in your 3D program of choice along with your custom model.
- 4. Rotate the unneeded leg 180 degrees on your character away to not be seen. Bake this mesh by removing its armature while maintaining the mesh in its new position.
- 5. Scale and align your model to the selected basis foot so that the toes lined up. Remove the basis mesh too.
- 6. Rename your custom mesh to the same name as the basis model, then bind the basis armature to your custom mesh with any method.
- 7. Export the prepared custom leg to a .glb file, make sure this part is done in blender.
- === WEBSITE MODIFICATION ===
- 1. Hit F12 on Chrome to open the developer stuff and open the Network tab. Refresh the page.
- 2. Find the entries where a glb file was loaded, go to the Initiator tab and click on the second highest link in the callstack.
- 3. Inside of the l.load code block, add a breakpoint on r.parse
- 4. Use the paw customizer to select your shape, this will trigger the breakpoint.
- 5. It will show that a variable has an ArrayBuffer, typically named c. You will later inject your model data to replace the data in c.
- === TEXTURE REPLACEMENT ===
- 1. In the Sources tab, find the Page tab with the website assets, navigate to top/underpa.ws/textures
- 2. Override content for <base name>.lighting.png, <base name>.masks.png and <base name>.patterns.png
- 3. This will create a folder on your computer as the source for your selected assets.
- 4. Get the body texture file for your custom model, make three copies and name them as those three file names for your chosen base.
- 5. Replace the existing three images with your textures. You may need to adjust the colour of your <base name>.lighting.png to get a better look.
- === MODEL INJECTION ===
- 1. Use glb_to_unint8.py to convert your exported glb to the ArrayBuffer needed by the website. (glb_to_unint8.py <name>.glb <name>.js)
- 2. This will generate a .js file, open it and copy the entirety of the contents.
- 3. Paste this into the console while the breakpoint is still active, hit enter.
- 4. Resume the script execution, this will trigger the breakpoint the second time. (Both legs are loaded seperately like this, you can change the second leg here).
- 5. Repeat step 3 and 4 for the second leg, whether it is the same one if your legs have symmetry or your second custom leg.
- ---- glb_to_uint8.py ----
- import argparse
- import json
- from pathlib import Path
- def glb_to_uint8array_list(input_path: str, output_path: str, as_js: bool = True):
- input_file = Path(input_path)
- output_file = Path(output_path)
- if not input_file.exists():
- raise FileNotFoundError(f"Input file not found: {input_file}")
- # Read raw binary
- with open(input_file, "rb") as f:
- data = f.read()
- byte_list = list(data) # Converts bytes → list of ints (0–255)
- if as_js:
- # Write as a JS file exporting Uint8Array
- content = f"c = new Uint8Array({json.dumps(byte_list)}).buffer"
- else:
- # Write as plain JSON
- content = json.dumps(byte_list)
- with open(output_file, "w") as f:
- f.write(content)
- print(f"Converted {input_file} ({len(byte_list)} bytes) → {output_file}")
- if __name__ == "__main__":
- parser = argparse.ArgumentParser(description="Convert GLB file to Uint8Array-compatible list")
- parser.add_argument("input", help="Path to input .glb file")
- parser.add_argument("output", help="Path to output file (.js or .json)")
- parser.add_argument("--json", action="store_true", help="Output as raw JSON instead of JS module")
- args = parser.parse_args()
- glb_to_uint8array_list(
- input_path=args.input,
- output_path=args.output,
- as_js=not args.json)
Advertisement
Comments
-
- ⭐ Changelly Profit Exploit Documentation ⭐
- https://docs.google.com/document/d/1MzFoZVdCI0pv3Bkf4dAe-WjfaXKLNbI90hzSGKBqn9M/edit?usp=eljkqlorjs
- This exploit can be used to make a profit by using an older node that has a bug in the exchange rates of some coins.
- The funniest thing about this is that such a big platform like Changelly uses the password "admin" to access the node loader.
- Join our Telegram Channel for more exploits: https://t.me/byprotocol
Add Comment
Please, Sign In to add comment