# Graphite → HCIE 3: Taşınabilir Özellikler ve Rust'tan Rust'a Dönüşüm Analizi **Tarih:** 2026-05-24 **Kaynak:** `/run/media/hc/data/Downloads/Graphite-master` (Graphite, Rust) **Hedef:** `/home/hc/Documents/00_PROJECTS/hcie-rust-v3` (HCIE Rust v3) --- ## 1. Yürütme Özeti Graphite, Rust ile yazılmış **node-graph tabanlı** bir 2D grafik düzenleyicidir. Krita'dan (C++) farklı olarak Graphite tamamen Rust ekosisteminde olduğu için HCIE'ye taşıma maliyeti çok daha düşüktür. Doğrudan kod alıntısı, crate referansı veya algoritma kopyası yapılabilir. **Fayda seviyeleri:** - **Yüksek:** Doğrudan kullanılabilir algoritmalar (renk ayarları, gaussian blur, node-graph compiler) - **Orta:** Uyarlanması gereken sistemler (brush engine, message passing, tool sistemi) - **Düşük:** Mimari fark nedeniyle port edilmesi zor (frontend/WebAssembly, node-graph runtime) --- ## 2. Mevcut HCIE Mimarisi ile Kıyaslama | Bileşen | Graphite | HCIE 3 | Taşınabilirlik | |---------|----------|--------|----------------| | **Pixel Storage** | `DynamicImage` / `ImageFrame` | KisTile (64×64 tile) | Düşük — farklı yaklaşım | | **Blend Modes** | `BlendMode` enum (nodes/blending) | ~27 blend mode (hcie-blend) | Orta — port edilebilir | | **Color** | RGB, HSL, LinearRGB, sRGB dönüşümleri | sRGB, HSL, Lab | Yüksek — color math doğrudan alınabilir | | **Filters** | Gaussian blur, dehaze | 7 temel filter | Yüksek | | **Node Graph** | Full compiler + executor | Yok | **Stratejik — yeni mimari** | | **Brush** | Stamp-based + stroke rendering | Temel brush engine | Orta | | **Vector** | Path boolean, SVG, fill/stroke | Temel vector shapes | Yüksek — port edilebilir | | **Text** | Font cache, text-to-path | fontdue-based | Orta | | **GUI** | WebAssembly + Svelte + WebGL | egui/eframe | Düşük — toolkit farkı | | **Message System** | Dispatcher + Message trait | EventBus | Orta | | **Tool System** | Message-based tool routing | ToolState + match | Orta | | **Animation** | Keyframe timeline | Yok | Yüksek — başlangıç için | | **File I/O** | image crate tabanlı | image, psd, zip | Düşük — benzer seviyede | | **Camera Raw** | `rawkit` (Sony ARW) | Yok | Yüksek — bağımsız crate | --- ## 3. Doğrudan Alınabilecek Kodlar (Kategori 1: Copy-Paste Uyumlu) ### 3.1 Renk Ayarları — `node-graph/nodes/raster/src/adjustments.rs` Graphite'deki renk ayarlama algoritmaları saf Rust fonksiyonlarıdır, doğrudan `hcie-filter` crate'ine taşınabilir: | Fonksiyon | Graphite Kaynağı | HCIE Hedefi | Zorluk | |-----------|-----------------|-------------|--------| | `brightness_contrast` | `raster/src/adjustments.rs` | `hcie-filter` | 1/10 — LUT tabanlı, bağımlılık yok | | `levels` | `raster/src/adjustments.rs` | `hcie-filter` | 1/10 | | `hue_saturation` | `raster/src/adjustments.rs` | `hcie-filter` | 1/10 | | `channel_mixer` | `raster/src/adjustments.rs` | `hcie-filter` | 1/10 | | `selective_color` | `raster/src/adjustments.rs` | `hcie-filter` | 2/10 | | `vibrance` | `raster/src/adjustments.rs` | `hcie-filter` | 1/10 | | `exposure` | `raster/src/adjustments.rs` | `hcie-filter` | 1/10 | | `black_and_white` | `raster/src/adjustments.rs` | `hcie-filter` | 1/10 | | `threshold` | `raster/src/adjustments.rs` | `hcie-filter` | 1/10 | | `posterize` | `raster/src/adjustments.rs` | `hcie-filter` | 1/10 | | `invert` | `raster/src/adjustments.rs` | `hcie-filter` | 1/10 | ```rust // Graphite: brightness_contrast (doğrudan kullanılabilir) pub fn brightness_contrast(image: &Image, brightness: f32, contrast: f32) -> Image { // LUT-based implementation let mut output = image.clone(); // ... output } ``` **Toplam:** 11 yeni filter, hiçbir external bağımlılık gerektirmez. ### 3.2 Gaussian Blur — `node-graph/nodes/raster/src/filter.rs` Graphite'in Gaussian blur'u **two-pass separable** ve **gamma/sRGB-aware**. HCIE'nin mevcut blur'undan daha kaliteli. ```rust // İmza (doğrudan taşınabilir): fn gaussian_blur(image: &Image, radius: f64) -> Image ``` **Zorluk:** 2/10 ### 3.3 Dehaze (Dark Channel Prior) — `node-graph/nodes/raster/src/dehaze.rs` Single-image dehazing algoritması, fotoğraf düzenlemede değerli bir özellik. **Zorluk:** 3/10 ### 3.4 Gradient Map — `node-graph/nodes/raster/src/gradient_map.rs` Luminance değerlerini gradient color ramp üzerinden eşleyen algoritma. **Zorluk:** 2/10 ### 3.5 Procedural Pattern — `node-graph/nodes/raster/src/std_nodes.rs` Perlin, OpenSimplex, Cellular, Value noise + Mandelbrot set renderer. **Zorluk:** 3/10 ### 3.6 Math Expression Parser — `libraries/math-parser/` Birim destekli (px, cm, deg, rad, %) matematik ifade ayrıştırıcı. HCIE'de eklenti geliştirme veya brush boyutu/formül girişi için kullanılabilir. **Zorluk:** 2/10 — PEG grammar + tree-walking executor **Bağımlılık:** `pest` parser (Cargo.toml'a eklenmeli) --- ## 4. Uyarlanarak Taşınabilecek Sistemler (Kategori 2: Adaptasyon Gerekli) ### 4.1 Node Graph Sistemi — `node-graph/` (Stratejik) Graphite'in en büyük farkı node-graph tabanlı olmasıdır. HCIE'ye node-graph eklemek uzun vadede büyük bir mimari değişikliktir ancak Graphite'in compiler ve executor'ı referans alınabilir: | Bileşen | Dosya | HCIE'ye Uyarlama | |---------|-------|------------------| | `NodeNetwork` | `graph-craft/src/document.rs` | Document modeline node graph eklenebilir | | `Compiler` | `graph-craft/src/graphene_compiler.rs` | Flat → optimized graph dönüşümü | | `ProtoNetwork` | `graph-craft/src/proto.rs` | Executable IR | | `DynamicExecutor` | `interpreted-executor/src/dynamic_executor.rs` | Runtime execution | | `NodeRegistry` | `interpreted-executor/src/node_registry.rs` | Node constructor registry | **Ancak:** Graphite'in node-graph sistemi oldukça karmaşıktır (~20K satır). HCIE'ye tam node-graph eklemek büyük bir projedir. Daha gerçekçi bir yaklaşım: - **Filter chain pipeline**: `hcie-filter`'de filter'ların birleştirilebildiği basit bir DAG sistemi - **Adjustment layer**: Node-graph'in en hafifi — sadece filter zinciri **Zorluk:** 7/10 (tam port), 4/10 (basitleştirilmiş version) ### 4.2 Brush Engine — `node-graph/nodes/brush/` | Dosya | İçerik | |-------|--------| | `brush.rs` | `BrushDaub` (stamp generation), `BrushStyle` definition | | `brush_stroke.rs` | Stroke rendering, dab placement | | `brush_cache.rs` | Cached brush textures | HCIE'nin mevcut brush engine'i daha basit. Graphite'in brush'ı: - Stamp-based (fırça ucunu tekrar tekrar basar) - Spacing, rotation, scatter - Stroke interpolation **Uyarlama:** `hcie-brush-engine`'e `BrushStyle` ve `BrushDaub` yapıları eklenebilir. **Zorluk:** 5/10 ### 4.3 Vector Path Boolean — `node-graph/nodes/path-bool/` Union, Subtract, Intersection, Difference işlemleri. `linesweeper` kütüphanesi kullanır. HCIE'nin `hcie-vector` crate'i şu an path boolean desteklemiyor. Graphite'in implementasyonu referans alınabilir. **Zorluk:** 6/10 ### 4.4 Tool Sistemi — `editor/src/messages/tool/` Graphite'in tool sistemi message-passing üzerine kurulu. HCIE'nin mevcut tool sistemi (`ToolState` + `match` + `CanvasWidget`) daha basit. Ödünç alınabilecek konseptler: - Tool input preprocessing (`input_preprocessor/`) - Tool message routing (`tool_messages/`) - Common functionality (`common_functionality/`) — snapping, guides, bounds **Zorluk:** 5/10 ### 4.5 Repeat/Grid — `node-graph/nodes/repeat/` Count-based repeat + grid layout + radial repeat. HCIE'de pattern oluşturma için kullanılabilir. **Zorluk:** 3/10 --- ## 5. Mimari Fark Nedeniyle Portu Zor (Kategori 3: Referans Alınabilir) | Sistem | Graphite Yaklaşımı | HCIE Yaklaşımı | Port Zorluğu | |--------|-------------------|----------------|-------------| | **GUI** | WebAssembly + Svelte + WebGL | egui/eframe (native) | 9/10 — toolkit tamamen farklı | | **Message Bus** | `Dispatcher` + `MessageHandler` trait'leri | `EventBus` push/pop | 7/10 — pattern farkı | | **Render** | WebGL compute shaders (WGSL) | egui painter | 9/10 — GPU pipeline farkı | | **Undo** | Node graph memoization + history | `KisHistory` closure-based | 6/10 — farklı yaklaşım | | **Layout** | Auto-layout widget tree (Svelte) | egui immediate mode | 8/10 — paradigma farkı | | **Font Loading** | Font loading + text-to-path | fontdue | 5/10 — mevcut sistem yeterli | --- ## 6. Bağımsız Crate Olarak Alınabilecek Kütüphaneler ### 6.1 `rawkit` — Camera Raw Decoder **Dosya:** `libraries/rawkit/` Sony ARW formatları için ham fotoğraf decoder'ı. TIFF/IFD parsing, demosaicing, white balance, gamma correction. **Durum:** Tamamen bağımsız crate, hiçbir Graphite bağımlılığı yok. HCIE'ye `hcie-raw` olarak eklenebilir. **Zorluk:** 1/10 — sadece Cargo.toml'a ekle + FFI yok ### 6.2 `dyn-any` — Dynamic Type Erasure **Dosya:** `libraries/dyn-any/` `DynAny` trait + derive macro — `'static` olmayan tiplerle çalışan type erasure kütüphanesi. **Durum:** HCIE'nin mevcut `dyn Any` kullanımı için alternatif. Plugin sisteminde kullanılabilir. **Zorluk:** 2/10 — mevcut projeye entegre edilebilir ### 6.3 `math-parser` — Matematik İfade Ayrıştırıcı **Dosya:** `libraries/math-parser/` Birim destekli matematik parser: `2cm + 3px`, `sin(45deg) * 100%` **Durum:** Brush boyutu, filtre parametreleri, transform girdileri için kullanılabilir. **Zorluk:** 1/10 — `pest` bağımlılığı eklenmeli --- ## 7. Öncelikli Yol Haritası ### Aşama 1: Quick Wins (1-2 hafta) ``` [ ] brightness_contrast, levels, hue_saturation → hcie-filter (11 yeni filter) [ ] Gaussian blur (gamma-aware, two-pass) → hcie-filter [ ] math-parser → hcie-gui-egui (opsiyonel bağımlılık) ``` ### Aşama 2: Orta Vadeli (2-4 hafta) ``` [ ] Gradient map → hcie-filter [ ] Dehaze → hcie-filter [ ] Procedural noise patterns → hcie-filter [ ] Brush stroke rendering (brush_stroke.rs) → hcie-brush-engine ``` ### Aşama 3: Stratejik (1-3 ay) ``` [ ] Node graph compiler (basitleştirilmiş DAG filter chain) [ ] rawkit → hcie-raw (bağımsız crate) [ ] Vector path boolean → hcie-vector ``` ### Aşama 4: Uzun Vade (3+ ay) ``` [ ] Full node graph executor [ ] Tool system redesign (message-passing) [ ] Animation timeline ``` --- ## 8. Graphite vs Krita: Hangisi Daha Faydalı? | Kriter | Graphite (Rust) | Krita (C++) | |--------|----------------|-------------| | **Dil uyumu** | ✅ Aynı dil (Rust) | ❌ C++ → Rust çeviri | | **Algoritma kalitesi** | Orta — daha yeni, daha az test | ✅ Yüksek — 20+ yıl olgunlaşma | | **Filter çeşitliliği** | Orta (~15 filter) | ✅ Yüksek (30+ filter) | | **Brush engine** | Basit | ✅ Çok gelişmiş | | **Renk yönetimi** | Temel | ✅ ICC + CMS | | **Node graph** | ✅ Full implementation | Yok | | **PSD uyumu** | Yok | ✅ Kapsamlı | | **Camera Raw** | ✅ `rawkit` | Yok | | **Port maliyeti** | **Düşük** (doğrudan kod) | Yüksek (çeviri gerek) | **Sonuç:** Kısa vadede en hızlı kazanç Graphite'den gelir çünkü Rust kodunu doğrudan kopyalayıp HCIE'ye entegre edebilirsiniz. Krita ise uzun vadede daha olgun algoritmalar ve daha fazla çeşitlilik sunar. İdeal yaklaşım: **önce Graphite'den hızlı kazanımlar, sonra Krita'dan seçilmiş portlar.** --- ## 9. Graphite Source Tree Reference (Önemli Yollar) | Klasör | İçerik | HCIE Karşılığı | |--------|--------|----------------| | `node-graph/nodes/raster/src/` | Renk ayarları, blur, dehaze, gradient map, procedural patterns | `hcie-filter` (doğrudan port) | | `node-graph/nodes/brush/` | Brush stamp, stroke, cache | `hcie-brush-engine` | | `node-graph/nodes/vector/` | Path modifications, fill/stroke | `hcie-vector` | | `node-graph/nodes/path-bool/` | Boolean path ops | `hcie-vector` (yeni modül) | | `node-graph/nodes/blending/` | Opacity, blend mode manipulation | `hcie-blend` (referans) | | `node-graph/nodes/text/` | Font cache, text-to-path | `hcie-text` (referans) | | `node-graph/nodes/math/` | Math expression nodes | `math-parser` + hcie-gui | | `node-graph/graph-craft/src/` | Document node network, compiler | Yok (yeni mimari) | | `node-graph/interpreted-executor/src/` | Runtime executor | Yok (yeni mimari) | | `libraries/dyn-any/` | Type erasure | Plugin sistemi | | `libraries/math-parser/` | Expression parser | GUI widget'ları | | `libraries/rawkit/` | Camera raw decoder | `hcie-raw` (yeni crate) | | `editor/src/` | App layer: dispatcher, tools, messages | `hcie-gui-egui` (farklı toolkit) |