From 774950de90dc9b9cc342361b7d42193996973d74 Mon Sep 17 00:00:00 2001 From: "Calum H." Date: Thu, 29 May 2025 12:19:19 +0100 Subject: [PATCH] feat: start impl of skin normalization on frontend --- .../src/helpers/rendering/batch-skin-renderer.ts | 4 ++-- apps/app-frontend/src/helpers/skins.ts | 9 +++++++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/apps/app-frontend/src/helpers/rendering/batch-skin-renderer.ts b/apps/app-frontend/src/helpers/rendering/batch-skin-renderer.ts index 5b4f06a19..d40418183 100644 --- a/apps/app-frontend/src/helpers/rendering/batch-skin-renderer.ts +++ b/apps/app-frontend/src/helpers/rendering/batch-skin-renderer.ts @@ -1,5 +1,5 @@ import * as THREE from 'three' -import type { Skin, Cape } from '../skins' +import {Skin, Cape, normalize_skin_texture, get_normalized_skin_texture_url} from '../skins' import { determineModelType } from '../skins' import { reactive } from 'vue' import { setupSkinModel, disposeCaches } from '@modrinth/utils' @@ -185,7 +185,7 @@ export async function generateSkinPreviews(skins: Skin[], capes: Cape[]): Promis const modelUrl = getModelUrlForVariant(variant) const cape: Cape | undefined = capes.find((_cape) => _cape.id === skin.cape_id) const renderResult = await renderer.renderSkin( - skin.texture, + await get_normalized_skin_texture_url(skin), modelUrl, cape?.texture, capeModelUrl, diff --git a/apps/app-frontend/src/helpers/skins.ts b/apps/app-frontend/src/helpers/skins.ts index 83b6f398b..6c4298fa1 100644 --- a/apps/app-frontend/src/helpers/skins.ts +++ b/apps/app-frontend/src/helpers/skins.ts @@ -142,6 +142,15 @@ export async function remove_custom_skin(skin: Skin): Promise { }) } +export async function get_normalized_skin_texture_url(skin: Skin): Promise { + const bytes: Uint8Array = await normalize_skin_texture(skin); + return `data:image/png;base64,` + Buffer.from(bytes).toString("base64"); +} + +export async function normalize_skin_texture(skin: Skin): Promise { + return await invoke('plugin:minecraft-skins|normalize_skin_texture', { skin }) +} + export async function unequip_skin(): Promise { await invoke('plugin:minecraft-skins|unequip_skin') }