zendor2 1
zendor2
Bvural41 1
Bvural41
noisiv 1
noisiv
Manwe Work 1
Manwe Work
Almira2 1
Almira2
romegames 1
romegames
D 1
delimuratt
melankolıa18 1
melankolıa18
shrpnl 1
shrpnl
Fethi Polat 1
Fethi Polat
kralhakan2009 1
kralhakan2009
Vahsi Uzman 1
Vahsi Uzman
Hikaye Ekle
Reklam vermek için turkmmo@gmail.com

dds upscaler python3

  • Konuyu başlatan Konuyu başlatan apikomt2
  • Başlangıç tarihi Başlangıç tarihi
  • Cevaplar Cevaplar 16
  • Görüntüleme Görüntüleme 806

ROHAN2 WORLD 1-120 TR TİPİ OFFICIAL YOHARA, BALATHOR VE AMON! 80. GÜNÜNDE! +10.000 ONLİNE! HİLE VE BOT %100 ENGELLİ HEMEN TIKLA!

soldaki hd olan

1770672537584.png
 
4x kaliteye update

sadece mavi çelik
warrior_4-1.dds
342 kb den
5.462 kb yükseldi.
16 kat pack boyutu yükselme var.

yani bu şu demek oluyor.



2 gb clientiniz varsa bu
10-32 gb kadar çıkabilir.


Kod:
import os
import subprocess
import shutil
from pathlib import Path

class TextureProcessor:
    def __init__(self):
        # --- ARAÇ YOLLARI (Tam olarak belirttiğin yerler) ---
        self.base_tools = r"C:\pythonupscaler\Tools"
        
        # ImageMagick Portable
        self.magick = os.path.join(self.base_tools, "imagemagick", "magick.exe")
        
        # Real-ESRGAN Portable
        self.realesrgan = os.path.join(self.base_tools, "Realesrgan", "realesrgan-ncnn-vulkan.exe")
        
        # DirectXTex (Texconv) Portable
        self.texconv = os.path.join(self.base_tools, "DirectxTex", "texconv.exe")
        
        # Geçici çalışma klasörü
        self.temp_dir = Path(r"C:\pythonupscaler") / "temp_work"

    def run_cmd(self, cmd):
        try:
            # shell=True bazı portable araçların Windows yetkilerini aşmasını sağlar
            subprocess.run(cmd, check=True, capture_output=True, text=True)
            return True
        except Exception as e:
            print(f"HATA [{os.path.basename(cmd[0])}]: {e}")
            return False

    def process_file(self, file_path, dds_format="BC3_UNORM"):
        if not self.temp_dir.exists(): self.temp_dir.mkdir()
        
        ext = file_path.suffix.lower()
        if ext not in ['.png', '.dds', '.tga', '.jpg']: return

        print(f"\n>>> ISLENIYOR: {file_path.name}")

        # Geçici dosyalar (Çakışma olmaması için)
        op = self.temp_dir / "op.png"
        mask = self.temp_dir / "mask.png"
        op_up = self.temp_dir / "op_up.png"
        mask_up = self.temp_dir / "mask_up.png"
        combined = self.temp_dir / "combined.png"

        # 1. Alpha Ayırma
        if not self.run_cmd([self.magick, str(file_path), "-alpha", "off", str(op)]): return
        if not self.run_cmd([self.magick, str(file_path), "-alpha", "extract", str(mask)]): return
        
        # 2. Real-ESRGAN Upscale (2x)
        print("    -> AI Upscale (x4plus-anime) çalışıyor...")
        self.run_cmd([self.realesrgan, "-i", str(op), "-o", str(op_up), "-n", "realesrgan-x4plus-anime", "-s", "4"])
        self.run_cmd([self.realesrgan, "-i", str(mask), "-o", str(mask_up), "-n", "realesrgan-x4plus-anime", "-s", "4"])

        # 3. Alpha Birleştirme
        if not self.run_cmd([self.magick, str(op_up), str(mask_up), "-alpha", "off", "-compose", "CopyOpacity", "-composite", str(combined)]): return
import os
import subprocess
import shutil
from pathlib import Path

class Metin2TextureMaster:
    def __init__(self):
        # --- ARAÇ YOLLARI ---
        self.base_tools = r"C:\pythonupscaler\Tools"
        self.magick = os.path.join(self.base_tools, "imagemagick", "magick.exe")
        self.realesrgan = os.path.join(self.base_tools, "Realesrgan", "realesrgan-ncnn-vulkan.exe")
        self.texconv = os.path.join(self.base_tools, "DirectxTex", "texconv.exe")
        
        # Geçici çalışma klasörü
        self.temp_dir = Path(r"C:\pythonupscaler") / "temp_work"

    def run_cmd(self, cmd):
        try:
            # capture_output=True hataları loglamamızı sağlar
            result = subprocess.run(cmd, check=True, capture_output=True, text=True)
            return True
        except subprocess.CalledProcessError as e:
            print(f"HATA Oluştu: {e.stderr}")
            return False

    def process_file(self, file_path):
        if not self.temp_dir.exists(): self.temp_dir.mkdir(parents=True)
        
        ext = file_path.suffix.lower()
        if ext not in ['.png', '.dds', '.tga', '.jpg']: return

        print(f"\n[+] İŞLENİYOR: {file_path.name}")

        # Geçici dosya isimleri
        op = self.temp_dir / "base_color.png"
        mask = self.temp_dir / "alpha_mask.png"
        op_up = self.temp_dir / "base_up.png"
        mask_up = self.temp_dir / "alpha_up.png"
        combined = self.temp_dir / "combined_result.png"

        # 1. ADIM: Renk ve Alpha Kanallarını Ayır
        # Renk katmanını (RGB) al
        self.run_cmd([self.magick, str(file_path), "-alpha", "off", str(op)])
        # Şeffaflık katmanını (A) siyah-beyaz olarak al
        self.run_cmd([self.magick, str(file_path), "-alpha", "extract", str(mask)])
        
        # 2. ADIM: Real-ESRGAN ile 4x Upscale
        # -n: Model adı (klasördeki .bin dosyasının adı ile aynı olmalı)
        # -s: 4 (x4plus modelleri 4 kat büyütür)
        print("    -> AI Upscale (x4plus-anime) çalışıyor...")
        self.run_cmd([self.realesrgan, "-i", str(op), "-o", str(op_up), "-n", "realesrgan-x4plus-anime", "-s", "4"])
        self.run_cmd([self.realesrgan, "-i", str(mask), "-o", str(mask_up), "-n", "realesrgan-x4plus-anime", "-s", "4"])

        # 3. ADIM: Kanalları Tekrar Birleştir
        if op_up.exists() and mask_up.exists():
            print("    -> Kanallar birleştiriliyor...")
            self.run_cmd([self.magick, str(op_up), str(mask_up), "-alpha", "off", "-compose", "CopyOpacity", "-composite", str(combined)])
        else:
            print("    [!] Upscale başarısız, atlanıyor.")
            return

        # 4. ADIM: Texconv ile DDS'ye Çevir (Metin2 Standartı)
        if ext == ".dds":
            print("    -> DDS Paketleme (BC3_UNORM + Mipmaps)...")
            # -f BC3_UNORM: DXT5 kalitesi (Alpha destekli)
            # -m 0: Tüm Mipmap seviyelerini oluştur (Uzakta titremeyi önler)
            # -y: Mevcut dosyanın üzerine yaz
            tc_cmd = [
                self.texconv,
                "-f", "BC3_UNORM",
                "-y",
                "-m", "0",
                "-o", str(file_path.parent),
                str(combined)
            ]
            
            if self.run_cmd(tc_cmd):
                # Texconv "combined_result.dds" üretir, bunu orijinal isimle değiştiriyoruz
                generated_dds = file_path.parent / "combined_result.dds"
                if generated_dds.exists():
                    if file_path.exists(): os.remove(file_path)
                    os.rename(generated_dds, file_path)
        else:
            # Eğer orijinal dosya PNG/JPG ise direkt üzerine yaz
            self.run_cmd([self.magick, str(combined), str(file_path)])

        print(f"[V] TAMAMLANDI.")

    def start_batch(self, target_folder):
        target_path = Path(target_folder)
        if not target_path.exists():
            print("Hata: Hedef klasör bulunamadı!")
            return

        files = list(target_path.rglob("*"))
        valid_files = [f for f in files if f.suffix.lower() in ['.dds', '.png', '.tga']]
        
        print(f"=== Toplam {len(valid_files)} dosya işlenecek ===")
        
        for f in valid_files:
            self.process_file(f)
            
        # Temizlik
        if self.temp_dir.exists():
            shutil.rmtree(self.temp_dir)
        print("\n[!!!] TÜM İŞLEMLER BİTTİ [!!!]")

# --- ÇALIŞTIRMA ---
if __name__ == "__main__":
    processor = Metin2TextureMaster()
    
    # İŞLENECEK KLASÖRÜ BURAYA YAZ
    HEDEF_KLASOR = r"C:\S3llMetin2-v22.5.7.0\pack\yw_pc\ymir work\pc\warrior"
    
    processor.start_batch(HEDEF_KLASOR)
 
hocam merhaba iyi geceler bi konu için rahatsız edicektim grannywiever kullanmayı öğreniyorum elimde bir çok kostüm var dds dosyası şeklinde bunları granny wiewerdan görüntüleyebileceğimi söylediler nasıl yapabilirim konudan bağımsız kusura bakmayın
 
Setup gibi yukluyorsun .gr2 ye çift tikliyotsun otomatik wiwerli açiliyor
 

Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)

Geri
Üst