11 KiB
KRA Optimize Plan — Krita .kra İthalat ve İhracat Optimizasyonu
Hedef
Krita tarafından yazılmış/beklenen .kra dosyaları için hem ihracat (export) hem de ithalat (import) performansını, boyutunu ve açılış doğruluğunu optimize etmek. Ayrıca Krita’da açılan PSD-benzeri layer stillerinin (drop shadow, inner shadow, outer glow, inner glow, bevel/emboss, stroke, color/gradient/pattern overlay, satin) HCIE içinde Photoshop referansına yakın görünmesini sağlamak.
Kapsam
hcie-kra/src/lib.rs— KRA ithalatı (maindoc.xml + VERS tile decoder + layerstyles.asl)hcie-kra/src/kra_saver.rs— KRA ihracatı (maindoc.xml + VERS tile encoder + SVG shapelayer)hcie-io/examples/— referans KRA seti üreten/tune eden yeni örnekler- Gerekirse
hcie-fxASL parser’ı genişletmeleri (amahcie-fxlocked crate; sadece gerekirse unlock) - Gerekirse
hcie-protocol::effects::LayerEffectrenk/birim haritalamaları için eşleme güncellemeleri (locked crate; sadece gerekirse unlock)
Bugünkü Durum
hcie-kra çift yönlü çalışıyor fakat birkaç zayıf noktası var:
İthalat Zafiyetleri
- Tile decoder sınırlı:
- Sadece
LZFve raw tile compression destekliyor; Krita’nın bazı yeni varyantları (DATA,RAW,RLE, deflate, zlib, store) desteklenmiyor. parse_vers_tilesher satırıfrom_utf8_lossyile tarıyor; bu yavaş ve binary-tolerant değil.- Header parsing header string üzerinden yapılıyor; DATA offset hesabı hataya açık.
- Sadece
- Layer file discovery kırılgan:
find_layer_fileçok fazla aday suffix deniyor;filenamebazen XML’de tam yol (layers/xxx.png) veriliyor, bazen de göreli.- VERS tile’ın
.defaultpixeldosyası olmayınca tile tamamen 0 doluyor; default pixel hesabı hatalı.
- ASL layerstyle parse:
hcie_fx::parse_asl_stylesKRA’dakilayerstyles.aslüzerinden dönüyor.- Renk değerleri, teknik (technique), soften, v.b. protokole aktarılıyor; bazı enum mapping’ler
format!("{:?}", ...)ile string yapılıyor vehcie-engine-apiiçinde tekrar parse ediliyor, bu hata kaynağı.
- Bellek:
- Her layer tam canvas boyutunda
Vec<u8>oluşturuyor (canvas_w * canvas_h * 4). Büyük dosyalarda çok pahalı.
- Her layer tam canvas boyutunda
- Shape/Text layer:
vectorlayer/shapelayerfarkı parse edilmiyor; Krita’nın SVG layer’ları sadeceLayerType::Vectorolarak alınıyor, Krita’ya export edilirkencontent.svgyazılıyor fakat import edilirken okunmuyor.
İhracat Zafiyetleri
- Tile format:
- Her tile 64×64, sadece LZF v1 (literaller 32 bayt) kullanılıyor; Krita 5/6 bazı durumlarda farklı tile boyutu, farklı sıkıştırma bekleyebilir.
- Tile’lar
has_contentkontrolüyle atılıyor; default pixel dolu olmayan transparent layer’lar Krita’da eksik görünebilir.
- Layer attributes:
x="0" y="0"sabit; orijinal layer offsetleri kayboluyor.parent_id/ grouplayer hiyerarşisi KRA’ya yazılmıyor.fill_opacity,clipping_mask,locked,collapsedvb. XML’e aktarılmıyor.
- Layer styles export:
hcie-kralayer styles ihracatı yapmıyor (layerstyles.aslüretilmiyor).- Krita’da açıldığında HCIE’de ayarlanan drop shadow / bevel emboss gibi efektler kaybolur.
- Sıkıştırma:
- Tüm ZIP içeriği
Stored(sıkıştırılmamış). KRA dosyaları gereksiz yere büyük.
- Tüm ZIP içeriği
Genel Doğruluk
- KRA ↔ HCIE ↔ PSD üçgeninde round-trip test yok.
hcie-fxMAE tune scriptleri sadece PSD üzerinden çalışıyor; KRA referansları yok.
Yapılacaklar
Aşama 1: İthalat Optimizasyonu ve Robustluk
Hedef: Daha büyük, daha çeşitli KRA dosyalarını hızlı ve doğru açmak.
- Tile decoder yeniden yazımı
parse_vers_tilesbinary-safe hale getir: header satırlarınıüzerinden ayır ama ardındanDATAsonrası binary blokları doğrudan oku.TILEWIDTH/TILEHEIGHT/PIXELSIZE/DATAparse mantığını ayrı birVersHeaderstruct’ına çek.- Hatalı tile’ları atlayıp geri kalanını decode et (graceful degradation).
- Compression desteği genişletme
LZFzaten var;RAW(literal copy) veRLE-benzeri varyantları ekle.- Zlib/deflate tile payload’larına destek ekle (Krita 5 bazen kullanıyor).
- Default pixel mantığı
- Eğer layer’ın
.defaultpixeldosyası yoksa ve hiç tile yoksa, layer’ı tamamen transparent kabul et; canvas boyutunda 0 buffer yerine lazy olarak bir solid renk maskesi üret.
- Eğer layer’ın
- Layer file discovery hızlandırma
find_layer_fileyerine önce XML’dekifilename’ı olduğu gibi dene, sonra normalize et.archive.file_names()HashSet’e çevir;O(1)lookup.
- Memory optimization
Layer::from_rgbacanvas boyutunda allocate ediyor; KRA importunda bu gerekli ama sparse tile layer’lar için tile-basedLayerDatakullanmak daha iyi. Protokole dokunmadanhcie-kraiçinde tile cache’den doğrudanhcie-tileformatına dönüştürme seçeneği ekle (opsiyonel).
- Shape/Text import
shapelayernodetype için SVG parse desteği ekle:content.svgdosyasını oku,VectorShapelistesine çevir (basit<path>,<rect>,<ellipse>,<text>tagleri).textlayer/adjustmentlayeriçin uygun placeholder behavior belirle (şimdilik rasterize veya skip).
Aşama 2: İhracat Optimizasyonu ve Boyut
Hedef: Daha küçük, Krita uyumlu KRA dosyaları üretmek.
- ZIP compression
zip::CompressionMethod::Deflatedkullan; en hızlı/iyi oran için compression level 6 (Krita default).
- Tile sıkıştırma iyileştirmesi
- LZF encoder’ı daha büyük literallerle (64 bayt+) çalışacak şekilde güncelle; tekrarlayan satırlar için back-ref kullan.
- Layer offset ve hiyerarşi
x,ydeğerlerini layer boundary’den hesapla ve XML’e yaz.parent_id’ye göregrouplayerve iç içe layer yapısınımaindoc.xml’e yaz.
- Layer styles export (ASL üretimi)
hcie-fxASL writer yok. Eğer KRA’daki efektleri Krita’da görmek istiyorsak,hcie-kraiçinde basit bir ASL binary writer implemente et veyahcie-fx’e yeni writer ekle.- Öncelik: Drop Shadow, Inner Shadow, Outer Glow, Inner Glow, Stroke, Color Overlay, BevelEmboss.
- Her effect için UUID üret,
<layer layerstyle="{uuid}" ... />yaz,layerstyles.aslolarak ZIP’e ekle.
- Default pixel
- Tamamen tek renk (solid) layer’lar için tile yerine sadece
.defaultpixelyaz; Krita bunu destekliyor.
- Tamamen tek renk (solid) layer’lar için tile yerine sadece
- Merged image / preview
mergedimage.pngvepreview.pngzaten yazılıyor; preview 256×256 thumbnail olarak scale edilebilir.
Aşama 3: Krita Efekt Doğruluğu (MAE Döngüsü)
Hedef: KRA formatı üzerinden Krita’ya yazılan HCIE efektleri, Krita tarafından render edilip tekrar açıldığında Photoshop referansına yakın olsun. Bu aynı zamanda HCIE’nin kendi renderer’ını da doğrulayan bir çapraz test olacak.
- Referans KRA seti üretimi
hcie-io/examples/generate_drop_shadow_kra_set.rsgibi örnekler yaz.- Aynı parametreleri (açı, mesafe, size, spread, renk, blend) hem PSD hem KRA olarak üret; sonra Krita ve Photoshop’ta açıp transparent PNG export al.
- Ground-truth PNG pipeline
- Krita batch render için
krita --exportCLI kullanılabilir (sistemde Krita yüklüyse). - Eğer Krita CLI yoksa, manuel açma/kaydetme talimatları + dosya bekleyen bir
tune_mae_*_kra_grid.rsscripti yaz.
- Krita batch render için
- MAE tune scriptleri
hcie-io/examples/tune_mae_drop_shadow_kra_grid.rshcie-io/examples/tune_mae_inner_shadow_kra_grid.rshcie-io/examples/tune_mae_outer_glow_kra_grid.rshcie-io/examples/tune_mae_inner_glow_kra_grid.rshcie-io/examples/tune_mae_stroke_kra_grid.rshcie-io/examples/tune_mae_bevel_emboss_kra_grid.rs- Bunlar PSD tune scriptlerinin KRA varyantları olacak;
hcie-kra::export_kra+hcie-kra::import_kra+hcie-engine-apicomposite kullanarak HCIE render’ını Krita referansıyla karşılaştıracak.
- Teknik haritalama
- Krita’nın ASL/Photoshop efekt parametrelerini HCIE
LayerEffectdeğerlerine doğru çevir:distance/size/spread/chokeaynı.angleaynı.opacity0..1 ↔ Krita 0..255.- Renkler RGBA8, doğrudan passthrough.
- Blend mode isimleri Krita’nın
compositeopnamespace’inden alınacak.
- Bevel/Emboss için
style,technique,directionenum mapping’lerini netleştir.
- Krita’nın ASL/Photoshop efekt parametrelerini HCIE
Aşama 4: Test ve Validasyon
- Round-trip testleri
hcie-kra/tests/roundtrip.rs: rastgele layer’ları KRA’ya yaz, tekrar oku, piksel / stil / blend / opacity / visibility eşitliğini kontrol et.- Büyük boyutlu (4K, çok katmanlı) test ekle.
- Krita açılış testi
- Eğer sistemde Krita varsa:
examples/verify_krita_opens.rsile üretilen KRA’yı Krita’da açma komutunu çalıştır vemergedimage.pngkarşılaştır.
- Eğer sistemde Krita varsa:
- Regresyon testleri
cargo test -p hcie-kracargo test -p hcie-engine-api --test visual_regressioncargo test -p hcie-engine-api --test performance_stroke_4k -- --nocapture
Kilitleme / Unlock Notları
hcie-kraşu an locked crate değil (Cargo.toml root workspace’te listeli;AGENTS.md’dehcie-kra/src/*.rslocked listesinde yok). Ancakhcie-fx/src/parser.rs,hcie-protocol/src/*.rs,hcie-engine-api/src/*.rslocked. Aşağıdaki durumlarda unlock gerekebilir:hcie-fxASL writer eklenirse:unlock.sh hcie-fx- Yeni
LayerEffectvaryant veya alan gerekirse:unlock.sh hcie-protocol - Engine API’de yeni bir import/export helper gerekirse:
unlock.sh hcie-engine-api
Riskler
- Krita’nın ASL formatı Photoshop’unkindan hafifçe farklı; writer yazarken Krita’nın beklediği farklılıklar (örneğin ekstra Unicode name prefix) gözden kaçabilir.
- ZIP deflated kullanmak build zamanını hafifçe artırır ama dosya boyutunu ciddi azaltır.
- Tile-based layer data geçişi protokol değişikliği gerektirebilir; bu planın ilk fazında yapılmayacak.
Çıktılar (Deliverables)
- Optimize edilmiş
hcie-kra/src/lib.rsvehcie-kra/src/kra_saver.rs. - Yeni
hcie-io/examples/generate_*_kra_set.rsdosyaları. - Yeni
hcie-io/examples/tune_mae_*_kra_grid.rsdosyaları (örnek olarak 2-3 efekt, sonra gerisi kopyalanabilir). hcie-kra/tests/roundtrip.rsround-trip testleri.- Güncellenmiş
hcie-egui-app/crates/hcie-gui-egui/src/app/mod.rsKRA aç/kaydet yollarında hata raporlama iyileştirmeleri (opsiyonel). - Performans/boyut ölçüm raporu (örnek: 4K 10 layer dosyanın eski/yeni boyutu ve açma süresi).
Öncelik Sırası
- ZIP deflate + tile encoder iyileştirmesi (hızlı kazanım, dosya boyutu düşer).
- Tile decoder robustluk ve hız (import hatası azalır).
- Layer offset / grouplayer / basic attributes (doğruluk artar).
- Layer styles export ASL writer (Krita’da efektler görünür).
- Referans KRA setleri + MAE tune scriptleri (doğruluk ölçülebilir hale gelir).
- Shape/Text import desteği.
- Tile-based bellek optimizasyonu (gelecek aşama).