Skip to content

Graphics accelerated vector paint program for compositing nerds

Notifications You must be signed in to change notification settings

Fuzzyzilla/fuzzpaint

Repository files navigation

Baa Fuzzpaint

a screenshot of the app, with a sheep mascot drawn

A graphics-accelerated digital art software combining the ease-of-use of raster with the lossless quality of vector.

This project is in heavy development, many features are in-progress and semver is ignored. Notably, drawings cannot yet be saved - but you can doodle to your heart's content!

Goals

  • Fast, efficient, and instant to launch even on low power hardware.
  • A workflow that serves everything from quick jotting down of ideas to detailed artworks.
  • No choice is set in stone - change brushes, resolution, and colors retroactively in your work.
  • Every edit is lossless and undo-able, even after you close the program - files include their entire undo tree.
  • Small, portable, self-contained document files (for people like me who save every doodle!)
  • In an error, unsaved changes should never be lost - losing user work is unacceptable!
  • Resources are viral - take and use the brushes, textures, effects, fonts, etc. found in drawings you've downloaded.
  • A modular application design allowing CLI, headless servers, and graphical clients to all share the same codebase.

Dreams

  • Client/Server design allowing realtime peer-to-peer collaboration.

Non goals

  • Image editing - though this project aims to provide my ideal digital art creation environment over traditional raster software, it does not aim to implement the other functions of a raster image editor.
  • Vector design - Despite it's vector nature, Fuzzpaint does not aim to provide precise control over curves and is instead intended for freeform hand-drawn artwork.

Building

Requires the most recent Rust nightly toolchain. Clone and execute cargo +nightly run --release from within the root directory of this repo!

Platform Support

This app is cross platform and should run on any device that meets the current vulkan requirements. (if your device doesnt work - even if it's because of these requirements - please file an issue!).

For tablet support, see the octotablet sister project.

Road to 0.2.0

To declare 0.2.0, I would like to be able to freely doodle a thing and save it to disk. We're getting dangerously close!

  • File I/O
  • Brushes
    • Make and manage textured brushes from inside fuzzpaint
    • Save brushes to file
      • To document or to global repo? - resolved: both, with UUIDs cryptographic hashes! That way, files can be freely shared, and brushes can be easily re-used.
    • Tesselation engine capable of mixed brushes
    • Stamped brushes
    • Efficient erasers
  • Layers
    • Simple UI to manage layer creation, order, modes, etc.
    • Blending compute shaders
      • take advantage of associativity and commutativity of blend modes to reduce number of distinct dispatches?
      • fall forward on EXT_blend_operation_advanced or EXT_fragment_shader_interlock?
    • Passthrough, grouped-blend layers
    • Color fill layers
    • Text layers
    • FX + other self-populating layers (clone, gradients) come later
  • UI
    • Initial layout
    • A simple ✨robust and rebindable✨ hotkey system, with support for pen and pad buttons (although, pen+pad events are not yet wired up)
    • Application settings menu
    • Infinite Undo/Redo
    • Pan, Zoom, Scroll, Rotate
    • Mirror
    • Fit, 100% modes
  • Editor
    • Color, Object Pickers
    • Select strokes
      • Select parts of strokes
    • Transform existing layers and strokes
    • Cut, Copy, Paste strokes (within program only)

About

Graphics accelerated vector paint program for compositing nerds

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Languages