À propos du projet

Darkly est une application de peinture open-source positionnée comme une alternative à Photoshop, dont le public principal est constitué de peintres. Elle s'exécute dans le navigateur via WebAssembly et WebGPU, fonctionne hors ligne sans connexion, et est également publiée comme une crate Rust autonome pouvant être intégrée dans d'autres outils graphiques. Capacités principales décrites dans le README : - Moteur de pinceaux basé sur des nœuds avec des pinceaux tels que rond, stylo encre, fusain, estompe, aquarelle, liquéfier, clone, flou et calligraphie ; entrées de pression, inclinaison, espacement, distance et angle ; un stabilisateur Laplacien. - Calques raster et groupes, masques de calque, 16 modes de fusion, calques flottants, objets intelligents, et un ensemble de calques de filtres (luminosité/contraste, HSL, niveaux, courbes, inverser, désaturer, aberration chromatique). - Outils de sélection : rectangle, ellipse, lasso, polygone et baguette magique, avec modes remplacer/ajouter/soustraire/intersection, plus opérations de plume, anticrénelage, agrandir, réduire, bordure et lisser. - Outils de transformation incluant transformations génériques et en perspective, recadrage sur sélection, redimensionnement de la toile, rééchelle d'image, gestion des DPI, retournement de la toile et rotation à 90 degrés. - Gestion des documents : nouveau document, ouvrir une image, enregistrer/ouvrir natif .darkly, export PNG/JPEG/WebP, opérations de presse-papiers, sauvegarde automatique avec récupération après crash, enregistrement de processus. - Fonctionnalités d'interface : palette de commandes, menu d'application, panneaux ancrables et en mosaïque, panneaux pouvant être détachés dans des fenêtres OS séparées, système de thèmes, système de raccourcis avec aide consultable, préréglages de raccourcis Krita/Photoshop/GIMP, PWA installable. Caractéristiques distinctives : - Veils : calques non destructifs de type shader qui voilent la toile, incluant des effets tels que aberration chromatique, gel, grain, flou d'objectif, peinture, pixellisation, verre pluvieux et VHS. Le README les présente comme des aides contre la fixation prématurée sur les détails, le syndrome de la page blanche et la fatigue artistique. - Voids : calques qui intègrent des sources externes, comme un générateur de bruit ou un flux de partage d'écran depuis une autre application, utiles pour la référence et les flux de travail hybrides. Les Voids prennent en charge les masques et les modes de fusion, et une extension Blender dédiée existe. Architecture et utilisation : - Le cœur est une crate Rust indépendante de la plateforme nommée darkly, contenant le modèle de document, le moteur de pinceaux, le compositeur GPU et le système d'annulation, fonctionnant partout où wgpu fonctionne (Vulkan, Metal, DX12, ou WebGPU dans le navigateur). - L'application livrée est un frontend Svelte sur cette crate via un pont WebAssembly. - La compilation nécessite Rust stable, Node.js 22 ou plus récent, make, et wasm-opt de binaryen. Un navigateur avec support WebGPU est requis (Chrome 113+, Edge 113+, ou Firefox Nightly avec un drapeau). Sous Linux, Chromium peut nécessiter l'activation de Vulkan et des drapeaux WebGPU non sécurisés. - Les développeurs peuvent ajouter la crate avec cargo add darkly et consulter son README et sa documentation API pour un exemple exécutable. Le projet est en version bêta, avec une feuille de route publique des fonctionnalités implémentées et planifiées. Les contributions sont bienvenues ; le README indique que la programmation assistée par IA est autorisée mais que le codage par vibes négligent est interdit, que chaque PR nécessite une justification écrite par un humain, et que les fonctionnalités d'IA générative dans Darkly ont peu de chances d'être acceptées à moins qu'elles ne fonctionnent entièrement hors ligne sans API tierces et préservent le contrôle de l'artiste. Le README crédite également GIMP, Krita et Graphite comme influences, et note que certains shaders de veils et de voids sont des ports ou des adaptations d'œuvres Shadertoy.