No description
  • Shell 98.7%
  • Makefile 1.3%
Find a file
nhpro 61c397a04d
All checks were successful
ci / lint (push) Successful in 27s
ci / apl (push) Successful in 55s
ci / wine (push) Successful in 13m15s
ci / release (push) Has been skipped
CI/CD Forgejo Actions : lint, builds en cache et release au tag
- .forgejo/workflows/ci.yml : shellcheck ; Wine et AffinityPluginLoader
  restaurés depuis le cache Forgejo (clé = hachage de leur définition,
  recompilés sinon) ; sur un tag v*, AppImage + .sha256 publiés dans la
  release, notes tirées du tag annoté.
- apl/build.sh : build direct (Ubuntu 24.04, root) reprenant le Dockerfile de
  l'amont ; build-in-container.sh l'exécute dans ubuntu:24.04.
- packaging/build-tools.sh : TOOLS_DIRECT=1 pour extraire cabextract sans
  conteneur (job de CI).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 19:16:56 +02:00
.forgejo/workflows CI/CD Forgejo Actions : lint, builds en cache et release au tag 2026-10-02 19:16:56 +02:00
apl CI/CD Forgejo Actions : lint, builds en cache et release au tag 2026-10-02 19:16:56 +02:00
docs Laffinity : Affinity by Canva (v3) sous Wine, en AppImage 2026-10-02 16:34:22 +02:00
packaging CI/CD Forgejo Actions : lint, builds en cache et release au tag 2026-10-02 19:16:56 +02:00
src DPI automatique et fenêtre d'installation avec vraie progression 2026-10-02 18:51:31 +02:00
wine Réduit l'AppImage de 165 à 104 Mo 2026-10-02 18:34:39 +02:00
.gitignore Réduit l'AppImage de 165 à 104 Mo 2026-10-02 18:34:39 +02:00
.shellcheckrc Laffinity : Affinity by Canva (v3) sous Wine, en AppImage 2026-10-02 16:34:22 +02:00
LICENSE Laffinity : Affinity by Canva (v3) sous Wine, en AppImage 2026-10-02 16:34:22 +02:00
Makefile Laffinity : Affinity by Canva (v3) sous Wine, en AppImage 2026-10-02 16:34:22 +02:00
README.md CI/CD Forgejo Actions : lint, builds en cache et release au tag 2026-10-02 19:16:56 +02:00

Laffinity

Lance Affinity by Canva (v3) sur Linux depuis une seule AppImage, sans rien installer sur la distro. Affinity est installé dans un préfixe Wine dont tu choisis l'emplacement.

Projet non affilié à Canva. Affinity est une marque de Canva. Rien de Microsoft ni de Canva n'est redistribué : tout est téléchargé depuis les sources officielles sur la machine de l'utilisateur.

Ce qui fonctionne

  • Installation complète guidée au premier lancement : choix du dossier, puis une seule fenêtre de progression (pourcentages réels pour le téléchargement et le déploiement d'Affinity, bouton Annuler ; l'installation reprend où elle s'était arrêtée).
  • Échelle de l'interface détectée automatiquement d'après le bureau, réappliquée à chaque lancement.
  • Interface réactive, glisser-déposer, ouverture de fichiers depuis le gestionnaire de fichiers.
  • Connexion au compte Canva (en collant l'URL de retour, voir plus bas).
  • Entrée de menu avec la vraie icône d'Affinity, associations .af, .afdesign, .afphoto, .afpub, .aftemplate.
  • Mise à jour d'Affinity depuis l'installeur officiel.

Testé sur Aurora (Fedora Kinoite 44), KDE Plasma sous Wayland, GPU Intel Arc (Mesa).

Prérequis

Indispensable

  • Linux x86_64, glibc 2.35 ou plus (Ubuntu 22.04, Debian 12, Fedora 36 et plus récents).
  • FUSE 3 (fusermount3) ; à défaut : ./Laffinity-*.AppImage --appimage-extract-and-run.
  • Un pilote GPU avec Vulkan (Mesa pour AMD/Intel, pilote propriétaire NVIDIA).
  • Les bibliothèques 64 bits d'un bureau standard (non embarquées) : X11/XWayland, libxkbcommon, freetype, fontconfig, gnutls (HTTPS, connexion Canva), libvulkan, libGL/libEGL, dbus. Aucune bibliothèque 32 bits.
  • Outils de base : bash, curl, tar, xz, GNU grep (avec -P), awk, sed, find, pgrep, timeout.
  • Environ 1 Go à télécharger et 5 Go de disque, sur un système de fichiers Linux (pas FAT/exFAT/NTFS).

Optionnel

  • kdialog ou zenity pour les fenêtres de dialogue (sinon : terminal).
  • xprop pour terminer Affinity quand il reste bloqué après fermeture (sinon : laffinity kill).
  • xdg-desktop-portal pour les sélecteurs de fichiers natifs.

Utilisation

chmod +x Laffinity-*.AppImage
./Laffinity-*.AppImage            # 1er lancement : choix du dossier puis installation (15–30 min)
./Laffinity-*.AppImage help       # toutes les commandes
Commande Effet
run [fichiers…] Lance Affinity (commande par défaut) ; installe au premier lancement
setup --prefix DIR Prépare un préfixe à un endroit précis, sans boîte de dialogue
install [--force] Met à jour (ou réinstalle) Affinity depuis l'installeur officiel
install --interactive Repli : installeur officiel avec son interface
prefix [DIR] Affiche ou change le préfixe utilisé
dpi [auto|VALEUR] Échelle de l'interface : auto (défaut) ou 96 = 100 %, 144 = 150 %, 192 = 200 % ; sans argument : état
desktop [--remove] Ajoute ou retire l'entrée de menu et les associations de fichiers
winecfg, regedit, winetricks …, wine … Outils Wine sur le préfixe
kill Termine tous les processus Wine du préfixe
status Résumé de l'installation
Quoi Où
Configuration ~/.config/laffinity/config.env
Téléchargements et journaux ~/.cache/laffinity/
État d'installation <préfixe>/.laffinity/state.env
Icônes du menu ~/.local/share/icons/laffinity/

Options de config.env :

  • PREFIX=… : chemin du préfixe ;
  • DPI=auto (défaut) ou DPI=144 : échelle de l'interface. En auto, le DPI vient de GDK_SCALE / QT_SCALE_FACTOR, sinon de Xft.dpi (ce que KDE et GNOME annoncent aux applications XWayland), sinon de GNOME ;
  • D3D12=vkd3d-proton : vkd3d-proton au lieu du D3D12 de Wine (fige l'interface sur Intel Arc / Mesa) ;
  • D3D9=dxvk : d3d9 de DXVK au lieu de celui de Wine.

Variables : LAFFINITY_PREFIX, LAFF_UI=kdialog|zenity|tty, WINEDEBUG.

Connexion Canva

La boîte de connexion ouvre le navigateur. Une fois connecté, copier l'URL de la page de redirection et la coller dans le champ ajouté par WineFix : le lien affinity:// ne fonctionne pas sous Wine.

Fonctionnement

Composant Rôle Source
Wine 11.12 patché (wine/) Compilé dans un conteneur Ubuntu 22.04, WoW64 pur. Patches d'ElementalWarrior (dxcore, OpenCL), d2d1, sélecteurs XDG Portal, ancrage des panneaux ryzendew/Affinity-Wine-Builder, affinity-infinity — voir wine/patches/SOURCE.md
AffinityPluginLoader + WineFix (apl/) Compilé à un commit figé de la branche dev : connexion Canva, ouverture de fichiers en argument, sauvegarde des préférences… noahc3/AffinityPluginLoader (MIT / GPLv2)
winetricks + cabextract Installent .NET 4.8, VC++ 2022 et les polices depuis les installeurs Microsoft winetricks 20260125, cabextract d'Ubuntu 22.04
Wrapper Bash (src/) Préfixe, installation, lancement, menu, chien de garde de fermeture ce dépôt
vkd3d-proton 3.0.1, DXVK 3.1.1 Embarqués, désactivés par défaut —

Affinity est installé sans son interface : le MSI est extrait de l'amorceur officiel et déployé avec msiexec /a (un msiexec /i échoue sous Wine sur ce paquet).

Construire

Prérequis : podman (ou docker), curl, git, make.

make wine       # Wine patché (30–60 min la première fois)      -> wine/out/
make apl        # AffinityPluginLoader + WineFix                 -> apl/out/
make appimage   # winetricks, cabextract, AppImage               -> packaging/out/
make lint       # shellcheck (installé localement)

CI/CD (Forgejo Actions)

.forgejo/workflows/ci.yml, sur un runner étiqueté docker :

  • push sur main : shellcheck, puis Wine et AffinityPluginLoader restaurés depuis le cache Forgejo (recompilés seulement si wine/ ou apl/ changent ; Wine : 10 min à 1 h) ;
  • tag v* : idem, puis l'AppImage Laffinity-<tag>-x86_64.AppImage et son .sha256 sont publiés dans la release du tag, avec le message du tag annoté comme notes.
git tag -a v0.3.0 -m "Notes de version…" && git push origin main --follow-tags

Développement sans AppImage :

mkdir -p /tmp/laff-wine && tar -C /tmp/laff-wine --strip-components=1 -xf wine/out/wine-*.tar.xz
LAFF_WINE_ROOT=/tmp/laff-wine LAFF_TOOLS_DIR=packaging/out/tools LAFF_APL_DIR=apl/out src/laffinity status
src/          wrapper : laffinity (point d'entrée) et lib/*.sh
wine/         build de Wine : build.env (versions figées), patches/, build.sh, build-in-container.sh
apl/          build d'AffinityPluginLoader + WineFix (commit figé, Ubuntu 24.04)
.forgejo/     workflow de CI/CD
packaging/    AppRun, outils embarqués, assemblage de l'AppImage
docs/         notes de diagnostic

Limites connues

  • Aide et panneaux web (WebView2) : ne s'ouvrent pas sous Wine.
  • Panneaux flottants : peuvent encore poser problème ; WINE_X11_WM_MOVE=1 rétablit le déplacement de fenêtre d'origine.
  • Fermeture : Affinity reste parfois en mémoire après la fermeture de sa dernière fenêtre. Laffinity termine alors sa session Wine au bout d'environ 20 s, une fois tout enregistré. Cause identifiée (verrou de libnetwork.dll à la sortie) : voir docs/blocage-fermeture.md.

Dépannage

  • Journaux : ~/.cache/laffinity/logs/ (prefix-*.log, msiexec.log, affinity.log).
  • Fenêtre figée : vérifier qu'aucun D3D12=vkd3d-proton n'est actif dans config.env.
  • Interface trop petite ou trop grande : laffinity dpi affiche le DPI détecté ; laffinity dpi 144 le force, laffinity dpi auto revient à la détection.
  • Repartir de zéro : supprimer le dossier du préfixe et ~/.config/laffinity/config.env (le cache ~/.cache/laffinity/ accélère la réinstallation).

Licence

GPL-2.0 (voir LICENSE). Les composants embarqués gardent leur licence ; elles sont regroupées dans licenses/ à l'intérieur de l'AppImage.