Update roadmap with new features and icons

This commit is contained in:
Keavon Chambers 2024-03-29 03:24:20 -07:00
parent 72ba4ddfe4
commit 6a1a145d19
2 changed files with 129 additions and 77 deletions

View File

@ -90,7 +90,7 @@ Always on the bleeding edge and built to last— Graphite is written on a robust
<h3>— Pre-Alpha —</h3> <h3>— Pre-Alpha —</h3>
</div> </div>
<div class="informational complete" title="Development Complete"> <div class="informational complete" title="Development Complete">
<img class="atlas" style="--atlas-index: 0" src="https://static.graphite.rs/icons/icon-atlas-roadmap.png" alt="" /> <img class="atlas" style="--atlas-index: 1" src="https://static.graphite.rs/icons/icon-atlas-roadmap__2.png" alt="" />
<span>Editor systems; basic vector art tools</span> <span>Editor systems; basic vector art tools</span>
</div> </div>
<!-- Alpha 1 --> <!-- Alpha 1 -->
@ -98,7 +98,7 @@ Always on the bleeding edge and built to last— Graphite is written on a robust
<h3>— Alpha 1 —</h3> <h3>— Alpha 1 —</h3>
</div> </div>
<div class="informational complete" title="Development Complete"> <div class="informational complete" title="Development Complete">
<img class="atlas" style="--atlas-index: 1" src="https://static.graphite.rs/icons/icon-atlas-roadmap.png" alt="" /> <img class="atlas" style="--atlas-index: 2" src="https://static.graphite.rs/icons/icon-atlas-roadmap__2.png" alt="" />
<span>Better tools; node graph prototyping</span> <span>Better tools; node graph prototyping</span>
</div> </div>
<!-- Alpha 2 --> <!-- Alpha 2 -->
@ -106,7 +106,7 @@ Always on the bleeding edge and built to last— Graphite is written on a robust
<h3>— Alpha 2 —</h3> <h3>— Alpha 2 —</h3>
</div> </div>
<div class="informational complete" title="Development Complete"> <div class="informational complete" title="Development Complete">
<img class="atlas" style="--atlas-index: 5" src="https://static.graphite.rs/icons/icon-atlas-roadmap.png" alt="" /> <img class="atlas" style="--atlas-index: 6" src="https://static.graphite.rs/icons/icon-atlas-roadmap__2.png" alt="" />
<span>Fully node graph-driven documents</span> <span>Fully node graph-driven documents</span>
</div> </div>
<!-- Alpha 3 --> <!-- Alpha 3 -->
@ -114,119 +114,167 @@ Always on the bleeding edge and built to last— Graphite is written on a robust
<h3>— Alpha 3 —</h3> <h3>— Alpha 3 —</h3>
</div> </div>
<div class="informational ongoing" title="Development Ongoing"> <div class="informational ongoing" title="Development Ongoing">
<img class="atlas" style="--atlas-index: 9" src="https://static.graphite.rs/icons/icon-atlas-roadmap.png" alt="" /> <img class="atlas" style="--atlas-index: 3" src="https://static.graphite.rs/icons/icon-atlas-roadmap__2.png" alt="" />
<span>Procedurally-defined vector data</span> <span>Stackable adjustment layers</span>
</div> </div>
<div class="informational ongoing" title="Development Ongoing"> <div class="informational ongoing" title="Development Ongoing">
<img class="atlas" style="--atlas-index: 8" src="https://static.graphite.rs/icons/icon-atlas-roadmap.png" alt="" /> <img class="atlas" style="--atlas-index: 10" src="https://static.graphite.rs/icons/icon-atlas-roadmap__2.png" alt="" />
<span>Procedurally alterable vector data</span>
</div>
<div class="informational ongoing" title="Development Ongoing">
<img class="atlas" style="--atlas-index: 0" src="https://static.graphite.rs/icons/icon-atlas-roadmap__2.png" alt="" />
<span>Imaginate (Stable Diffusion node/tool)</span>
</div>
<div class="informational ongoing" title="Development Ongoing">
<img class="atlas" style="--atlas-index: 9" src="https://static.graphite.rs/icons/icon-atlas-roadmap__2.png" alt="" />
<span>Graph data attribute spreadsheet</span> <span>Graph data attribute spreadsheet</span>
</div> </div>
<div class="informational"> <div class="informational">
<img class="atlas" style="--atlas-index: 11" src="https://static.graphite.rs/icons/icon-atlas-roadmap.png" alt="" /> <img class="atlas" style="--atlas-index: 51" src="https://static.graphite.rs/icons/icon-atlas-roadmap__2.png" alt="" />
<span>WebGPU accelerated rendering</span> <span>Boolean operations for shapes</span>
</div> </div>
<div class="informational"> <div class="informational">
<img class="atlas" style="--atlas-index: 14" src="https://static.graphite.rs/icons/icon-atlas-roadmap.png" alt="" /> <img class="atlas" style="--atlas-index: 7" src="https://static.graphite.rs/icons/icon-atlas-roadmap__2.png" alt="" />
<span>Adaptive resolution raster rendering</span>
</div>
<div class="informational">
<img class="atlas" style="--atlas-index: 12" src="https://static.graphite.rs/icons/icon-atlas-roadmap.png" alt="" />
<span>New vector 2D renderer (with <a target="_blank" href="https://github.com/linebender/vello">Vello</a>)</span>
</div>
<div class="informational">
<img class="atlas" style="--atlas-index: 6" src="https://static.graphite.rs/icons/icon-atlas-roadmap.png" alt="" />
<span>Native desktop app (with <a target="_blank" href="https://tauri.app/">Tauri</a>)</span> <span>Native desktop app (with <a target="_blank" href="https://tauri.app/">Tauri</a>)</span>
</div> </div>
<div class="informational"> <div class="informational">
<img class="atlas" style="--atlas-index: 42" src="https://static.graphite.rs/icons/icon-atlas-roadmap.png" alt="" /> <img class="atlas" style="--atlas-index: 12" src="https://static.graphite.rs/icons/icon-atlas-roadmap__2.png" alt="" />
<span>Timeline and animation channels</span> <span>WebGPU accelerated rendering</span>
</div> </div>
<div class="informational"> <div class="informational">
<img class="atlas" style="--atlas-index: 22" src="https://static.graphite.rs/icons/icon-atlas-roadmap.png" alt="" /> <img class="atlas" style="--atlas-index: 14" src="https://static.graphite.rs/icons/icon-atlas-roadmap__2.png" alt="" />
<span>Select Mode: marquee masking</span> <span>Adaptive resolution raster rendering</span>
</div> </div>
<div class="informational"> <div class="informational">
<img class="atlas" style="--atlas-index: 7" src="https://static.graphite.rs/icons/icon-atlas-roadmap.png" alt="" /> <img class="atlas" style="--atlas-index: 41" src="https://static.graphite.rs/icons/icon-atlas-roadmap__2.png" alt="" />
<span>Timeline with animation channels</span>
</div>
<div class="informational">
<img class="atlas" style="--atlas-index: 26" src="https://static.graphite.rs/icons/icon-atlas-roadmap__2.png" alt="" />
<span>Interactive graph auto-layout</span>
</div>
<div class="informational">
<img class="atlas" style="--atlas-index: 19" src="https://static.graphite.rs/icons/icon-atlas-roadmap__2.png" alt="" />
<span>Imported RAW photo processing</span>
</div>
<div class="informational">
<img class="atlas" style="--atlas-index: 49" src="https://static.graphite.rs/icons/icon-atlas-roadmap__2.png" alt="" />
<span>AI nodes and tools (e.g. magic wand)</span>
</div>
<div class="informational">
<img class="atlas" style="--atlas-index: 13" src="https://static.graphite.rs/icons/icon-atlas-roadmap__2.png" alt="" />
<span>New vector 2D renderer (with <a target="_blank" href="https://github.com/linebender/vello">Vello</a>)</span>
</div>
<div class="informational">
<img class="atlas" style="--atlas-index: 5" src="https://static.graphite.rs/icons/icon-atlas-roadmap__2.png" alt="" />
<span>Fully-supported brush tool</span>
</div>
<div class="informational">
<img class="atlas" style="--atlas-index: 21" src="https://static.graphite.rs/icons/icon-atlas-roadmap__2.png" alt="" />
<span>Select mode (marquee masking)</span>
</div>
<div class="informational">
<img class="atlas" style="--atlas-index: 54" src="https://static.graphite.rs/icons/icon-atlas-roadmap__2.png" alt="" />
<span>Local file browser for saving/loading</span>
</div>
<div class="informational">
<img class="atlas" style="--atlas-index: 8" src="https://static.graphite.rs/icons/icon-atlas-roadmap__2.png" alt="" />
<span>Custom subgraph nodes</span> <span>Custom subgraph nodes</span>
</div> </div>
<div class="informational">
<img class="atlas" style="--atlas-index: 17" src="https://static.graphite.rs/icons/icon-atlas-roadmap__2.png" alt="" />
<span>Stable document format</span>
</div>
<!-- Alpha 4 --> <!-- Alpha 4 -->
<div class="informational heading" title="Expected to begin February 2025" data-year="2025"> <div class="informational heading" title="Expected to begin February 2025" data-year="2025">
<h3>— Alpha 4 —</h3> <h3>— Alpha 4 —</h3>
</div> </div>
<div class="informational"> <div class="informational">
<img class="atlas" style="--atlas-index: 3" src="https://static.graphite.rs/icons/icon-atlas-roadmap.png" alt="" /> <img class="atlas" style="--atlas-index: 53" src="https://static.graphite.rs/icons/icon-atlas-roadmap__2.png" alt="" />
<span>Outliner panel: node graph tree view</span> <span>Local fonts access</span>
</div> </div>
<div class="informational"> <div class="informational">
<img class="atlas" style="--atlas-index: 20" src="https://static.graphite.rs/icons/icon-atlas-roadmap.png" alt="" /> <img class="atlas" style="--atlas-index: 52" src="https://static.graphite.rs/icons/icon-atlas-roadmap__2.png" alt="" />
<span>Imported RAW photo processing</span> <span>Command palette and context menus</span>
</div> </div>
<div class="informational"> <div class="informational">
<img class="atlas" style="--atlas-index: 29" src="https://static.graphite.rs/icons/icon-atlas-roadmap.png" alt="" /> <img class="atlas" style="--atlas-index: 4" src="https://static.graphite.rs/icons/icon-atlas-roadmap__2.png" alt="" />
<span>Guide Mode: construction geometry</span> <span>Outliner panel (node graph tree view)</span>
</div> </div>
<div class="informational"> <div class="informational">
<img class="atlas" style="--atlas-index: 30" src="https://static.graphite.rs/icons/icon-atlas-roadmap.png" alt="" /> <img class="atlas" style="--atlas-index: 56" src="https://static.graphite.rs/icons/icon-atlas-roadmap__2.png" alt="" />
<span>Variable color swatches</span>
</div>
<div class="informational">
<img class="atlas" style="--atlas-index: 48" src="https://static.graphite.rs/icons/icon-atlas-roadmap__2.png" alt="" />
<span>Mesh vector format</span>
</div>
<div class="informational">
<img class="atlas" style="--atlas-index: 50" src="https://static.graphite.rs/icons/icon-atlas-roadmap__2.png" alt="" />
<span>Shape builder tool</span>
</div>
<div class="informational">
<img class="atlas" style="--atlas-index: 28" src="https://static.graphite.rs/icons/icon-atlas-roadmap__2.png" alt="" />
<span>Guide mode (construction geometry)</span>
</div>
<div class="informational">
<img class="atlas" style="--atlas-index: 29" src="https://static.graphite.rs/icons/icon-atlas-roadmap__2.png" alt="" />
<span>CAD-like constraint relationships</span> <span>CAD-like constraint relationships</span>
</div> </div>
<div class="informational"> <div class="informational">
<img class="atlas" style="--atlas-index: 16" src="https://static.graphite.rs/icons/icon-atlas-roadmap.png" alt="" /> <img class="atlas" style="--atlas-index: 15" src="https://static.graphite.rs/icons/icon-atlas-roadmap__2.png" alt="" />
<span>Remote compile/render server</span> <span>Hosted compile/render server</span>
</div> </div>
<div class="informational"> <div class="informational">
<img class="atlas" style="--atlas-index: 46" src="https://static.graphite.rs/icons/icon-atlas-roadmap.png" alt="" /> <img class="atlas" style="--atlas-index: 16" src="https://static.graphite.rs/icons/icon-atlas-roadmap__2.png" alt="" />
<span>Portable, embeddable render engine</span>
</div>
<div class="informational">
<img class="atlas" style="--atlas-index: 17" src="https://static.graphite.rs/icons/icon-atlas-roadmap.png" alt="" />
<span>Code editor for custom nodes</span> <span>Code editor for custom nodes</span>
</div> </div>
<div class="informational"> <div class="informational">
<img class="atlas" style="--atlas-index: 27" src="https://static.graphite.rs/icons/icon-atlas-roadmap.png" alt="" /> <img class="atlas" style="--atlas-index: 45" src="https://static.graphite.rs/icons/icon-atlas-roadmap__2.png" alt="" />
<span>Interactive graph auto-layout</span> <span>Portable, embeddable render engine</span>
</div>
<div class="informational">
<img class="atlas" style="--atlas-index: 18" src="https://static.graphite.rs/icons/icon-atlas-roadmap.png" alt="" />
<span>Stable document format</span>
</div> </div>
<!-- Beta --> <!-- Beta -->
<div class="informational heading"> <div class="informational heading">
<h3>— Beta —</h3> <h3>— Beta —</h3>
</div> </div>
<div class="informational"> <div class="informational">
<img class="atlas" style="--atlas-index: 19" src="https://static.graphite.rs/icons/icon-atlas-roadmap.png" alt="" /> <img class="atlas" style="--atlas-index: 18" src="https://static.graphite.rs/icons/icon-atlas-roadmap__2.png" alt="" />
<span>Document history system</span> <span>Document history management</span>
</div> </div>
<div class="informational"> <div class="informational">
<img class="atlas" style="--atlas-index: 24" src="https://static.graphite.rs/icons/icon-atlas-roadmap.png" alt="" /> <img class="atlas" style="--atlas-index: 23" src="https://static.graphite.rs/icons/icon-atlas-roadmap__2.png" alt="" />
<span>Internationalization and accessibility</span> <span>Internationalization and accessibility</span>
</div> </div>
<div class="informational"> <div class="informational">
<img class="atlas" style="--atlas-index: 23" src="https://static.graphite.rs/icons/icon-atlas-roadmap.png" alt="" /> <img class="atlas" style="--atlas-index: 22" src="https://static.graphite.rs/icons/icon-atlas-roadmap__2.png" alt="" />
<span>Frozen-in-time graph references</span> <span>Frozen-in-time graph references</span>
</div> </div>
<div class="informational"> <div class="informational">
<img class="atlas" style="--atlas-index: 26" src="https://static.graphite.rs/icons/icon-atlas-roadmap.png" alt="" /> <img class="atlas" style="--atlas-index: 25" src="https://static.graphite.rs/icons/icon-atlas-roadmap__2.png" alt="" />
<span>Liquify and non-affine rendering</span> <span>Liquify and non-affine rendering</span>
</div> </div>
<div class="informational"> <div class="informational">
<img class="atlas" style="--atlas-index: 25" src="https://static.graphite.rs/icons/icon-atlas-roadmap.png" alt="" /> <img class="atlas" style="--atlas-index: 24" src="https://static.graphite.rs/icons/icon-atlas-roadmap__2.png" alt="" />
<span>Reconfigurable workspace panels</span> <span>Reconfigurable workspace panels</span>
</div> </div>
<div class="informational"> <div class="informational">
<img class="atlas" style="--atlas-index: 28" src="https://static.graphite.rs/icons/icon-atlas-roadmap.png" alt="" /> <img class="atlas" style="--atlas-index: 27" src="https://static.graphite.rs/icons/icon-atlas-roadmap__2.png" alt="" />
<span>Automation and batch processing</span> <span>Automation and batch processing</span>
</div> </div>
<div class="informational"> <div class="informational">
<img class="atlas" style="--atlas-index: 34" src="https://static.graphite.rs/icons/icon-atlas-roadmap.png" alt="" /> <img class="atlas" style="--atlas-index: 33" src="https://static.graphite.rs/icons/icon-atlas-roadmap__2.png" alt="" />
<span>HDR and WCG color handling</span> <span>HDR and WCG color handling</span>
</div> </div>
<div class="informational"> <div class="informational">
<img class="atlas" style="--atlas-index: 35" src="https://static.graphite.rs/icons/icon-atlas-roadmap.png" alt="" /> <img class="atlas" style="--atlas-index: 55" src="https://static.graphite.rs/icons/icon-atlas-roadmap__2.png" alt="" />
<span>CMYK and other color spaces</span>
</div>
<div class="informational">
<img class="atlas" style="--atlas-index: 34" src="https://static.graphite.rs/icons/icon-atlas-roadmap__2.png" alt="" />
<span>Node manager and marketplace</span> <span>Node manager and marketplace</span>
</div> </div>
<div class="informational"> <div class="informational">
<img class="atlas" style="--atlas-index: 36" src="https://static.graphite.rs/icons/icon-atlas-roadmap.png" alt="" /> <img class="atlas" style="--atlas-index: 35" src="https://static.graphite.rs/icons/icon-atlas-roadmap__2.png" alt="" />
<span>Predictive graph rendering/caching</span> <span>Predictive graph rendering/caching</span>
</div> </div>
<!-- 1.0 Release --> <!-- 1.0 Release -->
@ -234,59 +282,63 @@ Always on the bleeding edge and built to last— Graphite is written on a robust
<h3>— 1.0 Release —</h3> <h3>— 1.0 Release —</h3>
</div> </div>
<div class="informational"> <div class="informational">
<img class="atlas" style="--atlas-index: 21" src="https://static.graphite.rs/icons/icon-atlas-roadmap.png" alt="" /> <img class="atlas" style="--atlas-index: 20" src="https://static.graphite.rs/icons/icon-atlas-roadmap__2.png" alt="" />
<span>Procedural styling of paint brushes</span> <span>Procedural styling of paint brushes</span>
</div> </div>
<div class="informational"> <div class="informational">
<img class="atlas" style="--atlas-index: 31" src="https://static.graphite.rs/icons/icon-atlas-roadmap.png" alt="" /> <img class="atlas" style="--atlas-index: 30" src="https://static.graphite.rs/icons/icon-atlas-roadmap__2.png" alt="" />
<span>Constraint models for UI layouts</span> <span>Constraint models for UI layouts</span>
</div> </div>
<div class="informational"> <div class="informational">
<img class="atlas" style="--atlas-index: 32" src="https://static.graphite.rs/icons/icon-atlas-roadmap.png" alt="" /> <img class="atlas" style="--atlas-index: 31" src="https://static.graphite.rs/icons/icon-atlas-roadmap__2.png" alt="" />
<span>Advanced typography and typesetting</span> <span>Advanced typography and typesetting</span>
</div> </div>
<div class="informational"> <div class="informational">
<img class="atlas" style="--atlas-index: 33" src="https://static.graphite.rs/icons/icon-atlas-roadmap.png" alt="" /> <img class="atlas" style="--atlas-index: 32" src="https://static.graphite.rs/icons/icon-atlas-roadmap__2.png" alt="" />
<span>PDF export</span> <span>PDF export</span>
</div> </div>
<div class="informational"> <div class="informational">
<img class="atlas" style="--atlas-index: 37" src="https://static.graphite.rs/icons/icon-atlas-roadmap.png" alt="" /> <img class="atlas" style="--atlas-index: 11" src="https://static.graphite.rs/icons/icon-atlas-roadmap__2.png" alt="" />
<span>Finer-grain control over SVG export</span>
</div>
<div class="informational">
<img class="atlas" style="--atlas-index: 36" src="https://static.graphite.rs/icons/icon-atlas-roadmap__2.png" alt="" />
<span>Distributed graph rendering</span> <span>Distributed graph rendering</span>
</div> </div>
<div class="informational"> <div class="informational">
<img class="atlas" style="--atlas-index: 38" src="https://static.graphite.rs/icons/icon-atlas-roadmap.png" alt="" /> <img class="atlas" style="--atlas-index: 37" src="https://static.graphite.rs/icons/icon-atlas-roadmap__2.png" alt="" />
<span>Cloud document storage</span> <span>Cloud document storage</span>
</div> </div>
<div class="informational"> <div class="informational">
<img class="atlas" style="--atlas-index: 39" src="https://static.graphite.rs/icons/icon-atlas-roadmap.png" alt="" /> <img class="atlas" style="--atlas-index: 38" src="https://static.graphite.rs/icons/icon-atlas-roadmap__2.png" alt="" />
<span>Multiplayer collaborative editing</span> <span>Multiplayer collaborative editing</span>
</div> </div>
<div class="informational"> <div class="informational">
<img class="atlas" style="--atlas-index: 40" src="https://static.graphite.rs/icons/icon-atlas-roadmap.png" alt="" /> <img class="atlas" style="--atlas-index: 39" src="https://static.graphite.rs/icons/icon-atlas-roadmap__2.png" alt="" />
<span>Offline edit resolution with CRDTs</span> <span>Offline edit resolution with CRDTs</span>
</div> </div>
<div class="informational"> <div class="informational">
<img class="atlas" style="--atlas-index: 41" src="https://static.graphite.rs/icons/icon-atlas-roadmap.png" alt="" /> <img class="atlas" style="--atlas-index: 40" src="https://static.graphite.rs/icons/icon-atlas-roadmap__2.png" alt="" />
<span>Native UI rewrite (no HTML frontend)</span> <span>Native UI rewrite (no HTML frontend)</span>
</div> </div>
<div class="informational"> <div class="informational">
<img class="atlas" style="--atlas-index: 48" src="https://static.graphite.rs/icons/icon-atlas-roadmap.png" alt="" /> <img class="atlas" style="--atlas-index: 46" src="https://static.graphite.rs/icons/icon-atlas-roadmap__2.png" alt="" />
<span>SVG animation authorship</span> <span>SVG animation authorship</span>
</div> </div>
<div class="informational"> <div class="informational">
<img class="atlas" style="--atlas-index: 43" src="https://static.graphite.rs/icons/icon-atlas-roadmap.png" alt="" /> <img class="atlas" style="--atlas-index: 42" src="https://static.graphite.rs/icons/icon-atlas-roadmap__2.png" alt="" />
<span>Live video compositing</span> <span>Live video compositing</span>
</div> </div>
<div class="informational"> <div class="informational">
<img class="atlas" style="--atlas-index: 44" src="https://static.graphite.rs/icons/icon-atlas-roadmap.png" alt="" /> <img class="atlas" style="--atlas-index: 43" src="https://static.graphite.rs/icons/icon-atlas-roadmap__2.png" alt="" />
<span>Pen and touch-only interaction</span> <span>Pen and touch-only interaction</span>
</div> </div>
<div class="informational"> <div class="informational">
<img class="atlas" style="--atlas-index: 45" src="https://static.graphite.rs/icons/icon-atlas-roadmap.png" alt="" /> <img class="atlas" style="--atlas-index: 44" src="https://static.graphite.rs/icons/icon-atlas-roadmap__2.png" alt="" />
<span>iPad app</span> <span>iPad app</span>
</div> </div>
<div class="informational"> <div class="informational">
<img class="atlas" style="--atlas-index: 49" src="https://static.graphite.rs/icons/icon-atlas-roadmap.png" alt="" /> <img class="atlas" style="--atlas-index: 47" src="https://static.graphite.rs/icons/icon-atlas-roadmap__2.png" alt="" />
<span><em>…and that's all just the beginning…</em></span> <span><em>…and that's all just the beginning…</em></span>
</div> </div>
</div> </div>

View File

@ -39,10 +39,10 @@ When it comes to writing the proposal, which you will submit to the GSoC applica
*For Graphite to support editing photos from professional digital cameras, it needs a raw decoding/processing library.* *For Graphite to support editing photos from professional digital cameras, it needs a raw decoding/processing library.*
<!-- - **Possible Mentors:** [Keavon](/about#keavon), [Dennis](/about#dennis), [Hypercube](/about#hypercube) -->
- **Needed Skills:** Rust, C++, binary format parsing - **Needed Skills:** Rust, C++, binary format parsing
- **Project Size:** Large *(GSoC: 350 hours)* - **Project Size:** Large *(GSoC: 350 hours)*
- **Difficulty:** Hard - **Difficulty:** Hard
- **Possible Mentors:** [Keavon](/about#keavon), [Dennis](/about#dennis), [Hypercube](/about#hypercube)
- **Expected Outcomes:** Develop a Rust library that ports LibRaw functionality to native Rust. A clean, well-structured code base and API. At a minimum, demonstrate the successful end-to-end decoding, debayering, and color space handling of Sony ARW format photos in Graphite. Publish the library to crates.io. - **Expected Outcomes:** Develop a Rust library that ports LibRaw functionality to native Rust. A clean, well-structured code base and API. At a minimum, demonstrate the successful end-to-end decoding, debayering, and color space handling of Sony ARW format photos in Graphite. Publish the library to crates.io.
For Graphite to work as a photo editing app, it needs to import raw photos. These contain compressed sensor imagery and metadata in a variety of formats. Sony ARW is the first target, and additional camera brands are stretch goals, while porting all useful functionality would be the best outcome. For Graphite to work as a photo editing app, it needs to import raw photos. These contain compressed sensor imagery and metadata in a variety of formats. Sony ARW is the first target, and additional camera brands are stretch goals, while porting all useful functionality would be the best outcome.
@ -55,10 +55,10 @@ This project involves diving into the LibRaw source code (~44,000 lines), unders
*Graphite's graph UI needs a system to automatically arrange layers and nodes given incremental changes to the graph contents.* *Graphite's graph UI needs a system to automatically arrange layers and nodes given incremental changes to the graph contents.*
<!-- - **Possible Mentors:** [Keavon](/about#keavon) -->
- **Needed Skills:** Rust, algorithm design ([constraint solving](https://en.wikipedia.org/wiki/Constraint_satisfaction_problem), [packing](https://en.wikipedia.org/wiki/Packing_problems), [graph drawing](https://en.wikipedia.org/wiki/Graph_drawing)) - **Needed Skills:** Rust, algorithm design ([constraint solving](https://en.wikipedia.org/wiki/Constraint_satisfaction_problem), [packing](https://en.wikipedia.org/wiki/Packing_problems), [graph drawing](https://en.wikipedia.org/wiki/Graph_drawing))
- **Project Size:** Medium *(GSoC: 175 hours)* or Large *(GSoC: 350 hours)* - **Project Size:** Medium *(GSoC: 175 hours)* or Large *(GSoC: 350 hours)*
- **Difficulty:** Medium - **Difficulty:** Medium
- **Possible Mentors:** [Keavon](/about#keavon)
- **Expected Outcomes:** A system that manages the placement of nodes based on a set of layout constraint rules and incremental updates to the graph topology. It should run efficiently, even with large graphs. It should be robust enough to handle a variety of graph topologies and user interactions, producing organized, useful, and stable layouts. - **Expected Outcomes:** A system that manages the placement of nodes based on a set of layout constraint rules and incremental updates to the graph topology. It should run efficiently, even with large graphs. It should be robust enough to handle a variety of graph topologies and user interactions, producing organized, useful, and stable layouts.
The Graphite concept is built around a node graph representation of layer stacks, while tools automatically generate and manipulate nodes. When a layer or node is inserted, deleted, moved, or referenced, the graph needs to be reorganized to maintain a clear and useful layout. Users can also interactively expand and collapse groups of nodes which occupies or frees up graph real estate. The Graphite concept is built around a node graph representation of layer stacks, while tools automatically generate and manipulate nodes. When a layer or node is inserted, deleted, moved, or referenced, the graph needs to be reorganized to maintain a clear and useful layout. Users can also interactively expand and collapse groups of nodes which occupies or frees up graph real estate.
@ -71,10 +71,10 @@ While general graph layout algorithms are complex and struggle to produce good r
*Graphite's node graph UI needs to be rewritten using a shader-based rendering system.* *Graphite's node graph UI needs to be rewritten using a shader-based rendering system.*
<!-- - **Possible Mentors:** [Keavon](/about#keavon), [Dennis](/about#dennis) -->
- **Needed Skills:** Rust, WGPU, computer graphics, shader programming - **Needed Skills:** Rust, WGPU, computer graphics, shader programming
- **Project Size:** Large *(GSoC: 350 hours)* - **Project Size:** Large *(GSoC: 350 hours)*
- **Difficulty:** Hard - **Difficulty:** Hard
- **Possible Mentors:** [Keavon](/about#keavon), [Dennis](/about#dennis)
- **Expected Outcomes:** A reimplemented graph UI that draws nodes, layers, connections, thumbnails, text, etc. with a custom shader UI rendering system written with WGPU. - **Expected Outcomes:** A reimplemented graph UI that draws nodes, layers, connections, thumbnails, text, etc. with a custom shader UI rendering system written with WGPU.
The current graph UI is implemented using HTML/CSS and SVG, which is too slow for large graphs and lacks the flexibility to create the desired visual effects like frosted glass. The new system should be able to handle thousands of nodes with ease, and it should be able to render all the visual effects that are envisioned in the design mockup: The current graph UI is implemented using HTML/CSS and SVG, which is too slow for large graphs and lacks the flexibility to create the desired visual effects like frosted glass. The new system should be able to handle thousands of nodes with ease, and it should be able to render all the visual effects that are envisioned in the design mockup:
@ -87,10 +87,10 @@ The proposed system is a custom immediate mode renderer built with shader progra
*Graphite's raster editing features requires the implementation of Select mode, where users can draw a mask which becomes a marquee (marching ants) selection.* *Graphite's raster editing features requires the implementation of Select mode, where users can draw a mask which becomes a marquee (marching ants) selection.*
<!-- - **Possible Mentors:** [Keavon](/about#keavon), [Hypercube](/about#hypercube) -->
- **Needed Skills:** Rust, computer graphics - **Needed Skills:** Rust, computer graphics
- **Project Size:** Medium *(GSoC: 175 hours)* - **Project Size:** Medium *(GSoC: 175 hours)*
- **Difficulty:** Medium - **Difficulty:** Medium
- **Possible Mentors:** [Keavon](/about#keavon), [Hypercube](/about#hypercube)
- **Expected Outcomes:** Complete implementation of Mask mode and its marquee selection. Marching ants visualization shader effect. Integration of selection mask with the node graph and raster editing tools. Useful raster editing workflow. - **Expected Outcomes:** Complete implementation of Mask mode and its marquee selection. Marching ants visualization shader effect. Integration of selection mask with the node graph and raster editing tools. Useful raster editing workflow.
A central part of the workflow in raster image editors is the selection of portions of the image to constrain manipulations just to the masked areas. Tools such as the circular and rectangular marquee, lasso, and magic wand are used to create masks. Instead of using dedicated tools, Graphite's design reuses the existing vector and raster drawing tools (like Rectangle, Ellipse, Pen, and Fill) to create masks in a dedicated Mask mode. Returning from Mask mode reveals the marching ants selection that constrains further editing operations. A central part of the workflow in raster image editors is the selection of portions of the image to constrain manipulations just to the masked areas. Tools such as the circular and rectangular marquee, lasso, and magic wand are used to create masks. Instead of using dedicated tools, Graphite's design reuses the existing vector and raster drawing tools (like Rectangle, Ellipse, Pen, and Fill) to create masks in a dedicated Mask mode. Returning from Mask mode reveals the marching ants selection that constrains further editing operations.
@ -101,10 +101,10 @@ This is a key feature in Graphite's evolution to a fully-featured raster editor.
*Generative AI and vision ML models will need to run in Graphite's node graph with a Rust-centric, modular, portable, deployable, scalable environment.* *Generative AI and vision ML models will need to run in Graphite's node graph with a Rust-centric, modular, portable, deployable, scalable environment.*
<!-- - **Possible Mentors:** [Keavon](/about#keavon), [Oliver](https://github.com/otdavies) -->
- **Needed Skills:** Machine learning (and potentially: Rust, Python, ONNX, Candle, Burn) - **Needed Skills:** Machine learning (and potentially: Rust, Python, ONNX, Candle, Burn)
- **Project Size:** Large *(GSoC: 350 hours)* - **Project Size:** Large *(GSoC: 350 hours)*
- **Difficulty:** Hard - **Difficulty:** Hard
- **Possible Mentors:** [Keavon](/about#keavon), [Oliver](https://github.com/otdavies)
- **Expected Outcomes:** Specifics will vary by proposal. In general, a useful end-to-end integration of at least one GenAI or vision model into Graphite's node graph which can run locally and deploy to a server. - **Expected Outcomes:** Specifics will vary by proposal. In general, a useful end-to-end integration of at least one GenAI or vision model into Graphite's node graph which can run locally and deploy to a server.
AI is filling a rapidly growing role as a tool in the creative process. Graphite's procedural node-based workflow is uniquely suited to leveraging the power and flexibility of machine learning nodes. AI is filling a rapidly growing role as a tool in the creative process. Graphite's procedural node-based workflow is uniquely suited to leveraging the power and flexibility of machine learning nodes.
@ -125,10 +125,10 @@ Based on the experience and insight brought to the table by the student, the nat
*Graphite's UI needs an upgraded layout system to support more complex and dynamic widget arrangements defined from the backend.* *Graphite's UI needs an upgraded layout system to support more complex and dynamic widget arrangements defined from the backend.*
<!-- - **Possible Mentors:** [Keavon](/about#keavon) -->
- **Needed Skills:** Rust, web (Svelte, CSS, TypeScript) - **Needed Skills:** Rust, web (Svelte, CSS, TypeScript)
- **Project Size:** Small *(GSoC: 90 hours)* or Medium *(GSoC: 175 hours)* - **Project Size:** Small *(GSoC: 90 hours)* or Medium *(GSoC: 175 hours)*
- **Difficulty:** Medium - **Difficulty:** Medium
- **Possible Mentors:** [Keavon](/about#keavon)
- **Expected Outcomes:** An improved system for defining widget layouts with better control and flexibility over arrangement and dynamic data binding. Reduction in boilerplate and plumbing required to define each new layout. Better control of styling between rows. - **Expected Outcomes:** An improved system for defining widget layouts with better control and flexibility over arrangement and dynamic data binding. Reduction in boilerplate and plumbing required to define each new layout. Better control of styling between rows.
The current system for defining the arrangement of widget layouts from the backend, created during a [previous student project](#2022-backend-layout-system), has served us well thus far but has limitations. This project aims to extend the system to better model our evolved requirements. The current system for defining the arrangement of widget layouts from the backend, created during a [previous student project](#2022-backend-layout-system), has served us well thus far but has limitations. This project aims to extend the system to better model our evolved requirements.
@ -141,10 +141,10 @@ Students should have a good level of familiarity with Rust design patterns to en
*The node graph data model for procedural content generation can be thought of as a spreadsheet, which needs a dedicated viewer/editor panel.* *The node graph data model for procedural content generation can be thought of as a spreadsheet, which needs a dedicated viewer/editor panel.*
<!-- - **Possible Mentors:** [Keavon](/about#keavon) -->
- **Needed Skills:** Rust, web (Svelte, TypeScript) - **Needed Skills:** Rust, web (Svelte, TypeScript)
- **Project Size:** Small *(GSoC: 90 hours)* - **Project Size:** Small *(GSoC: 90 hours)*
- **Difficulty:** Easy-to-medium - **Difficulty:** Easy-to-medium
- **Possible Mentors:** [Keavon](/about#keavon)
- **Expected Outcomes:** A functional panel in the editor that displays the selected node output data as a spreadsheet across multiple domains. Connection to the graph engine to read and edit the data. Virtual scrolling and efficient transfer of data to the frontend. - **Expected Outcomes:** A functional panel in the editor that displays the selected node output data as a spreadsheet across multiple domains. Connection to the graph engine to read and edit the data. Virtual scrolling and efficient transfer of data to the frontend.
The node graph is a powerful tool for procedural content generation, but it can be difficult to understand the data that flows through it. Node data can be represented as a spreadsheet, where each row presents a domain-specific instance (e.g., a point, segment, or face) and each column displays an attribute (like position, color, or radius). The node graph is a powerful tool for procedural content generation, but it can be difficult to understand the data that flows through it. Node data can be represented as a spreadsheet, where each row presents a domain-specific instance (e.g., a point, segment, or face) and each column displays an attribute (like position, color, or radius).
@ -157,10 +157,10 @@ A larger-scoped version of the project can expand this to focus also on displayi
*Adding a timeline-based animation system to Graphite would begin realizing the vision as a versatile content creation suite supporting motion graphics.* *Adding a timeline-based animation system to Graphite would begin realizing the vision as a versatile content creation suite supporting motion graphics.*
<!-- - **Possible Mentors:** [Keavon](/about#keavon) -->
- **Needed Skills:** Rust, web (Svelte, CSS, SVG, TypeScript) - **Needed Skills:** Rust, web (Svelte, CSS, SVG, TypeScript)
- **Project Size:** Medium *(GSoC: 175 hours)* or Large *(GSoC: 350 hours)* - **Project Size:** Medium *(GSoC: 175 hours)* or Large *(GSoC: 350 hours)*
- **Difficulty:** Easy-to-medium - **Difficulty:** Easy-to-medium
- **Possible Mentors:** [Keavon](/about#keavon)
- **Expected Outcomes:** A timeline panel in the editor that can create and edit keyframes and timing curves for animating data channels used by nodes. Ergonomic experience for keyframing properties. Efficient curve interpolation. Rendering optimizations for relatively smooth animation playback. - **Expected Outcomes:** A timeline panel in the editor that can create and edit keyframes and timing curves for animating data channels used by nodes. Ergonomic experience for keyframing properties. Efficient curve interpolation. Rendering optimizations for relatively smooth animation playback.
A powerful outcome of Graphite's node-driven architecture is the relatively simple ability to vary data parameters over time. A powerful outcome of Graphite's node-driven architecture is the relatively simple ability to vary data parameters over time.
@ -173,10 +173,10 @@ In the backend, the animation curves need to be evaluated at the playhead positi
*Graphite has many areas that could benefit from better automated testing for bugs and performance regressions.* *Graphite has many areas that could benefit from better automated testing for bugs and performance regressions.*
<!-- - **Possible Mentors:** [Dennis](/about#dennis), [Hypercube](/about#hypercube) -->
- **Needed Skills:** Rust, unit testing - **Needed Skills:** Rust, unit testing
- **Project Size:** Small *(GSoC: 90 hours)* or larger if proposed - **Project Size:** Small *(GSoC: 90 hours)* or larger if proposed
- **Difficulty:** Easy - **Difficulty:** Easy
- **Possible Mentors:** [Dennis](/about#dennis), [Hypercube](/about#hypercube)
- **Expected Outcomes:** Specific focus and scope may vary by the student's interests and proposal. In general, a significant increase in the coverage of tests in useful code areas (such as document loading, manipulation, and rendering) and attention towards systems which measure performance metrics and identify bottlenecks and regressions. - **Expected Outcomes:** Specific focus and scope may vary by the student's interests and proposal. In general, a significant increase in the coverage of tests in useful code areas (such as document loading, manipulation, and rendering) and attention towards systems which measure performance metrics and identify bottlenecks and regressions.
Graphite could benefit from better testing coverage in a number of areas, especially end-to-end testing in the tool, document, and node graph systems. This project is about identifying and addressing areas that are lacking and most vulnerable to suffering from regressions. The student will be responsible for identifying areas that could benefit from better testing. Graphite could benefit from better testing coverage in a number of areas, especially end-to-end testing in the tool, document, and node graph systems. This project is about identifying and addressing areas that are lacking and most vulnerable to suffering from regressions. The student will be responsible for identifying areas that could benefit from better testing.
@ -185,10 +185,10 @@ Graphite could benefit from better testing coverage in a number of areas, especi
*Infrastructure to generate visualizations of Graphite's system architecture would be a valuable addition to the project's documentation and debugging tools.* *Infrastructure to generate visualizations of Graphite's system architecture would be a valuable addition to the project's documentation and debugging tools.*
<!-- - **Possible Mentors:** [Keavon](/about#keavon), [Dennis](/about#dennis) -->
- **Needed Skills:** Rust (especially proc macros) - **Needed Skills:** Rust (especially proc macros)
- **Project Size:** Medium *(GSoC: 175 hours)* or Large *(GSoC: 350 hours)* - **Project Size:** Medium *(GSoC: 175 hours)* or Large *(GSoC: 350 hours)*
- **Difficulty:** Medium - **Difficulty:** Medium
- **Possible Mentors:** [Keavon](/about#keavon), [Dennis](/about#dennis)
- **Expected Outcomes:** A system built from proc macros which can generate useful visualizations of Graphite's system architecture. Depending on proposal scope, this can include static visualizations added to the documentation, dynamic message flow visualizations for debugging, and tools to help identify redundant message traffic. - **Expected Outcomes:** A system built from proc macros which can generate useful visualizations of Graphite's system architecture. Depending on proposal scope, this can include static visualizations added to the documentation, dynamic message flow visualizations for debugging, and tools to help identify redundant message traffic.
Graphite's editor architecture, based around a message-passing processing queue, is structured as a hierarchical system of message handlers. Each handler stores its own state, and references to the state data may be passed along to its child handlers they need it. Graphite's editor architecture, based around a message-passing processing queue, is structured as a hierarchical system of message handlers. Each handler stores its own state, and references to the state data may be passed along to its child handlers they need it.
@ -201,10 +201,10 @@ If proposed as part of the project's scope, a runtime component could be added a
*If you have an idea for a project that you think would be a good fit, we'd love to hear it!* *If you have an idea for a project that you think would be a good fit, we'd love to hear it!*
<!-- - **Possible Mentors:** Varies -->
- **Needed Skills:** Varies - **Needed Skills:** Varies
- **Project Size:** Varies - **Project Size:** Varies
- **Difficulty:** Varies - **Difficulty:** Varies
- **Possible Mentors:** Varies
- **Expected Outcomes:** Stated in your proposal. - **Expected Outcomes:** Stated in your proposal.
If none of the projects above suit your interests or experience, we are very open to discussing your own project ideas that could benefit Graphite. You may consult our [task board](https://github.com/orgs/GraphiteEditor/projects/1/views/1) and [roadmap](/features#roadmap) to get a feel for what our current priorities are. If none of the projects above suit your interests or experience, we are very open to discussing your own project ideas that could benefit Graphite. You may consult our [task board](https://github.com/orgs/GraphiteEditor/projects/1/views/1) and [roadmap](/features#roadmap) to get a feel for what our current priorities are.