Releases: SimonHeggie/FOSS-Artist-workflow-Guide
foss-art-install_v0.0.3
Krita FOSS Installer — v0.0.3
✅ Structural Overhaul
- Renamed
krita_install/→krita/
→ clearer structure, consistent withardour/ - Moved
archives_k/underkrita/
→ resolves path bugs, ensures app-scoped cache - Unified version tracking to root
versionfile
→ replaces.version_k
✂️ Removed
k-addon_segmentation.sh
→ deprecated in favor of modern Vision Tools
🧠 Added
k-addon_vision_tools.sh
→ full install of Krita Vision Tools v2.0.0 (segmentation + selection)required.sh
→ intelligent system dependency checker with multi-distro supportk-comfyui_shortcut.sh
→ auto-generates.desktoplauncher for ComfyUI
⚙️ Improvements
- Centralised path config via
paths.confandpaths_k.conf - Modular addon scripts with shared logging, cache handling, and install validation
- AppImage validation and repair logic rewritten
- All
.desktopentries patched dynamically for clean KDE/GNOME support
📦 Addons
🧩 Krita Vision Tools
- Installed via
k-addon_vision_tools.sh - Source: Acly/krita-ai-tools
- Versioned as:
VISIONTOOLS=v2.0.0 - Archive path:
krita/archives_k/vision_tools.zip - Extracted to:
~/.Applications/Krita/squashfs-root/usr/share/krita/pykrita - Skips re-download if archive and version match
- Uses
curl --http1.1to avoid GitHub HTTP/2 bugs
🎨 AI Diffusion Addon
- Installed via
k-addon_ai_diffusion.sh - ACLY-style image generation toolkit
- Versioned as:
AIDIFFUSION=v1.36.1 - Archive path:
krita/archives_k/ai_diffusion.zip - Extracted to:
~/.Applications/Krita/squashfs-root/usr/share/krita/pykrita
🌐 ComfyUI Web App Launcher
- Installed via
k-comfyui_shortcut.sh - Generates
.desktopfile with WM_CLASS override for clean taskbar icon - Works best on KDE + Brave Browser
- Installs to:
~/.local/share/applications/ComfyUI.desktop - Also patches:
~/.Applications/ComfyUI/server/settings.json - Falls back to system default browser if Brave is not available
Installation:
NOTE! ACLY made a big change that requires reinstall. If you were using the previous script version, then do a full install of all desired components
Simply run the following from which ever location you'd like to backup your install archive, otherwise this will run automatically from your downloads folder:
Bootstrap Script (krita.sh)
#!/usr/bin/env bash
# ─── Define Installer Version ────────────────────────────────────────
FOSS_INSTALL_VERSION="v0.0.3"
# ─── Work in ~/Downloads if invoked from $HOME ───────────────────────
if [ "$PWD" = "$HOME" ]; then
cd "$HOME/Downloads/foss-art-install/" || exit 1
fi
# ─── Main Logic in Subshell (inherits PATH) ──────────────────────────
(
set -euo pipefail
IFS=$'\n\t'
BOOT_DIR="$(pwd)"
INSTALL_DIR="$BOOT_DIR/krita"
INSTALL_SCRIPT="$INSTALL_DIR/install_krita.sh"
UNINSTALL_SCRIPT="$INSTALL_DIR/uninstall_krita.sh"
VERSION_FILE="$BOOT_DIR/version"
ARCHIVE_TEMP="foss-art-install.zip"
PYKRITA_DIR="$HOME/.Applications/Krita/squashfs-root/usr/share/krita/pykrita"
COMFY_DESKTOP_FILE="$HOME/.local/share/applications/ComfyUI.desktop"
GITHUB_LATEST_URL="https://github.com/SimonHeggie/FOSS-Artist-workflow-Guide/releases/latest/download/foss-art-install.zip"
# ─── Dependency Check via required.sh ────────────────────────────────
chmod +x "$BOOT_DIR/required.sh"
"$BOOT_DIR/required.sh" || {
echo "[ERROR] Missing system requirements. Aborting." >&2
exit 1
}
# ─── Check Version ───────────────────────────────────────────────────
CURRENT_VERSION="none"
if [ -f "$VERSION_FILE" ]; then
CURRENT_VERSION=$(awk -F= '/^FOSS_INSTALL=/{print $2}' "$VERSION_FILE" || echo "none")
fi
if [ "$CURRENT_VERSION" != "$FOSS_INSTALL_VERSION" ] && [ "$CURRENT_VERSION" != "none" ]; then
echo "[INFO] Updating bootstrap to latest version from GitHub..."
curl -fL "$GITHUB_LATEST_URL" -o "$ARCHIVE_TEMP"
unzip -o "$ARCHIVE_TEMP" >/dev/null 2>&1
rm -f "$ARCHIVE_TEMP"
if [ ! -f "$BOOT_DIR/krita/krita.sh" ]; then
echo "[ERROR] Downloaded archive does not contain krita.sh" >&2
exit 1
fi
chmod +x "$BOOT_DIR/krita/krita.sh"
echo "[INFO] Replacing self with updated krita.sh..."
echo "FOSS_INSTALL=$FOSS_INSTALL_VERSION" > "$VERSION_FILE"
exec "$BOOT_DIR/krita/krita.sh"
fi
# ─── Ensure Installer is Present ─────────────────────────────────────
echo "[BOOT] Checking krita folder..."
if [ -d "$INSTALL_DIR" ]; then
echo "[INFO] Found existing ./krita — skipping download."
else
echo "[INFO] krita/ not found. Downloading latest installer..."
curl -fL "$GITHUB_LATEST_URL" -o "$ARCHIVE_TEMP"
echo "[INFO] Extracting installer..."
unzip -o "$ARCHIVE_TEMP" >/dev/null
rm -f "$ARCHIVE_TEMP"
[ -d "$INSTALL_DIR" ] || { echo "[ERROR] Expected folder 'krita/' not found after extraction." >&2; exit 1; }
fi
if [ ! -f "$INSTALL_SCRIPT" ]; then
echo "[ERROR] Missing install_krita.sh inside krita/ — aborting." >&2
ls -l "$INSTALL_DIR"
exit 1
fi
# ─── Menu: First-Time Install ───────────────────────────────────────
if [ "$CURRENT_VERSION" = "none" ]; then
echo "[INFO] Krita not installed."
echo "[I] Install Krita + Vision Tools"
echo "[AI] Install Krita + AI Diffusion"
echo "[AIC] Install Krita + AI + ComfyUI shortcut"
echo "[Q] Quit"
printf "Select an option: "
read -r option
case "$option" in
[Ii]) bash "$INSTALL_SCRIPT" ;;
[Aa][Ii]) bash "$INSTALL_SCRIPT" --with-ai ;;
[Aa][Ii][Cc]) bash "$INSTALL_SCRIPT" --with-ai --with-comfy ;;
[Qq]) echo "Goodbye!" && exit 0 ;;
*) echo "Invalid input." && exit 1 ;;
esac
sed -i "/^FOSS_INSTALL=/d" "$VERSION_FILE" 2>/dev/null || true
echo "FOSS_INSTALL=$FOSS_INSTALL_VERSION" >> "$VERSION_FILE"
exit 0
fi
# ─── Installed Menu ──────────────────────────────────────────────────
echo "[INFO] Krita install detected."
echo "[INFO] Installed versions:"
grep -E "^(FOSS_INSTALL|KRITA|AIDIFFUSION|VISIONTOOLS)=" "$VERSION_FILE" || true
AI_STATUS="OK"; COMFY_STATUS="OK"; VISION_STATUS="OK"
if ! find "$PYKRITA_DIR" -type f -iname "diffusion.py" 2>/dev/null | grep -q .; then AI_STATUS="MISSING"; fi
[ -f "$COMFY_DESKTOP_FILE" ] || COMFY_STATUS="MISSING"
grep -q "^VISIONTOOLS=" "$VERSION_FILE" 2>/dev/null || VISION_STATUS="MISSING"
echo
echo "[STATUS] Krita: OK Vision Tools: $VISION_STATUS AI Diffusion: $AI_STATUS ComfyUI Shortcut: $COMFY_STATUS"
echo
echo "[I] Install latest with Vision Tools (overwrite, update version)"
echo "[AI] Add AI Diffusion only"
echo "[AIC] Add AI Diffusion + ComfyUI shortcut"
echo "[D] Download archives only"
echo "[R] Repair (re-extract AppImage + reinstall addons)"
echo "[U] Uninstall"
echo "[Q] Quit"
printf "Select an option: "
read -r option
case "$option" in
[Aa][Ii][Cc]) bash "$INSTALL_SCRIPT" --with-ai --with-comfy ;;
[Aa][Ii]) bash "$INSTALL_SCRIPT" --with-ai ;;
[Ii]) bash "$INSTALL_SCRIPT" ;;
[Dd]) bash "$INSTALL_SCRIPT" --download-only ;;
[Rr]) bash "$INSTALL_SCRIPT" --repair ;;
[Uu]) bash "$UNINSTALL_SCRIPT" --complete ;;
[Qq]) echo "Goodbye!" && exit 0 ;;
*) echo "Invalid input." && exit 1 ;;
esac
sed -i "/^FOSS_INSTALL=/d" "$VERSION_FILE" 2>/dev/null || true
echo "FOSS_INSTALL=$FOSS_INSTALL_VERSION" >> "$VERSION_FILE"
) # ← End of subshell
🖥️ Installer Interface (krita.sh)
When Krita is not installed:
[I] Install Krita + Vision Tools
[AI] Install Krita + AI Diffusion
[AIC] Install Krita + AI + ComfyUI shortcut
[Q] Quit
When Krita is already installed:
[INFO] Installed versions:
FOSS_INSTALL=...
KRITA=...
AIDIFFUSION=...
VISIONTOOLS=...
[STATUS] Krita: OK Vision Tools: OK/MISSING AI Diffusion: OK/MISSING ComfyUI Shortcut: OK/MISSING
[I] Install latest with Vision Tools (overwrite)
[AI] Add AI Diffusion only
[AIC] Add AI Diffusion + ComfyUI shortcut
[D] Download archives only
[R] Repair install (re-extract AppImage + addons)
[U] Uninstall
[Q] Quit
🧠 Version Tracking (version file)
Stored at:
foss-art-install/version
Sample contents:
FOSS_INSTALL=v0.0.3
KRITA=5.2.11
AIDIFFUSION=v1.36.1
VISIONTOOLS=v2.0.0
Used to:
- Skip unnecessary downloads
- Trigger repair logic
- Determine what’s installed and synced
🧪 Linux Compatibility Matrix
✅ Fully Supported
| Distro | Desktop | Status | Notes |
|---|---|---|---|
| Nobara 42 | KDE | ✅ Tested | Native target. Full support. |
| Fedora KDE | KDE | ✅ Expected | Same base as Nobara. |
| KDE Neon | KDE | ✅ Expected | Plasma-optimized. |
| Kubuntu | KDE | ✅ Expected | Clean Ubuntu-based setup. |
| Debian KDE | KDE | ✅ Expected | Ensure sudo/curl are present. |
| Manjaro KDE | KDE | ✅ Expected | Now compatible via required.sh. |
| Arch KDE | KDE | ✅ Expected | Supports fallback to su -c. |
| EndeavourOS KDE | KDE | ✅ Expected | Arch-based, compatible. |
| openSUSE KDE | KDE | ✅ Expected | Tested with zypper install logic. |
⚠️ Partial Support
| Distro | Desktop | Status | Issues ...
foss-artist-install_v0.0.2
FOSS Artist Workflow Installer — Release v0.0.2
A focused installer for FOSS software.
INCLUDED:
Krita - FEATURING:
AI addons, and ComfyUI integration on Linux (tested on Nobara 42).
🔧 Summary
This release introduces support for installing AI-Diffusion, Segmentation Tools, and a ComfyUI launcher shortcut from the command line, with new modular install modes and proper version tracking. It resolves previous install path issues and adds backup/fallback logic for browser launching via Brave.
Bootstrap Script (krita.sh)
#!/usr/bin/env bash
# ─── Where to store install files (if run from $HOME) ────────────────
if [ "$PWD" = "$HOME" ]; then
cd "$HOME/Downloads" || exit 1
fi
bash -c '
set -euo pipefail
IFS=$'\''\n\t'\''
BOOT_DIR="$(pwd)"
INSTALL_DIR="$BOOT_DIR/krita_install"
INSTALL_SCRIPT="$INSTALL_DIR/install.sh"
UNINSTALL_SCRIPT="$INSTALL_DIR/uninstall.sh"
VERSION_FILE="$HOME/.Applications/Krita/version"
GITHUB_RELEASE_URL="https://github.com/SimonHeggie/FOSS-Artist-workflow-Guide/releases/download/v0.0.2/foss-artist-install.tar.gz"
ARCHIVE_TEMP="foss-artist-install.tar.gz"
# ─── Step 1: Ensure krita_install folder exists ─────────────────────
echo "[BOOT] Checking krita_install folder..."
if [ -d "$INSTALL_DIR" ]; then
echo "[INFO] Found existing ./krita_install — skipping download."
else
echo "[INFO] krita_install/ not found. Downloading v0.0.2 release..."
curl -L "$GITHUB_RELEASE_URL" -o "$ARCHIVE_TEMP"
echo "[INFO] Extracting installer..."
tar -xf "$ARCHIVE_TEMP" || {
echo "[ERROR] Failed to extract archive $ARCHIVE_TEMP" >&2
exit 1
}
rm -f "$ARCHIVE_TEMP"
if [ ! -d "$INSTALL_DIR" ]; then
echo "[ERROR] Expected folder '\''krita_install/'\'' not found after extraction." >&2
exit 1
fi
fi
# ─── Step 2: Validate install.sh exists ──────────────────────────────
if [ ! -f "$INSTALL_SCRIPT" ]; then
echo "[ERROR] Missing install.sh inside krita_install/ — aborting." >&2
ls -l "$INSTALL_DIR"
exit 1
fi
# ─── Step 3: Present menu ────────────────────────────────────────────
if [ ! -f "$VERSION_FILE" ]; then
echo "[INFO] Krita not installed."
echo "[I] Install Krita only"
echo "[AI] Install Krita + AI Diffusion"
echo "[AIC] Install Krita + AI + ComfyUI shortcut"
echo "[Q] Quit"
printf "Select an option: "
read -r option
case "$option" in
[Ii]) bash "$INSTALL_SCRIPT" --with-default ;;
[Aa][Ii]) bash "$INSTALL_SCRIPT" --with-ai ;;
[Aa][Ii][Cc]) bash "$INSTALL_SCRIPT" --with-ai --with-comfy ;;
[Qq]) echo "Goodbye!" && exit 0 ;;
*) echo "Invalid input." && exit 1 ;;
esac
else
echo "[INFO] Krita install detected."
echo "[INFO] Installed versions:"
grep -E '^(FOSS_INSTALL|KRITA|AIDIFFUSION|SEGMENTATIONTOOLS)=' "$VERSION_FILE"
echo ""
echo "[I] Install latest (overwrite, update version)"
echo "[AI] Add AI Diffusion"
echo "[AIC] Add AI Diffusion + ComfyUI shortcut"
echo "[D] Download archives only"
echo "[R] Repair (re-extract AppImage + reinstall addons)"
echo "[U] Uninstall (with ComfyUI backup)"
echo "[C] Complete uninstall (no backup)"
echo "[Q] Quit"
printf "Select an option: "
read -r option
case "$option" in
[Aa][Ii]) bash "$INSTALL_SCRIPT" --with-ai ;;
[Aa][Ii][Cc]) bash "$INSTALL_SCRIPT" --with-ai --with-comfy ;;
[Ii]) bash "$INSTALL_SCRIPT" --with-default ;;
[Dd]) bash "$INSTALL_SCRIPT" --download-only ;;
[Rr]) bash "$INSTALL_SCRIPT" --repair ;;
[Uu]) bash "$UNINSTALL_SCRIPT" --backup ;;
[Cc]) bash "$UNINSTALL_SCRIPT" --complete ;;
[Qq]) echo "Goodbye!" && exit 0 ;;
*) echo "Invalid input." && exit 1 ;;
esac
fi
'✅ Changelog — What's New in v0.0.2
ComfyUI Launcher
- Adds
run.shand.desktopshortcut for running a separate instance of the same ComfyUI server as ACLY's. - Launches ComfyUI server, preferring brave. Will fallback to your default web browser.
- WM_class used to give this brave applet it's own icon. Taskbar icon consistency
- Logs activity to
comfyui_log.txt
AI Addons
- Further prevented redundant downloads via version tag check
Krita Installer
- Ensures AppImage and archives are stored for later repair.
- Tracks version snapshot in extraction archive
versionfile and in the install conf file.
🛠️ Instructions — How to Use the Menu
Run:
bash krita.shYou’ll see one of these menus:
If Krita is NOT installed:
**** NEW INSTALL OPTIONS ****
[I] Install Krita only
[AI] Install Krita + AI Diffusion
[AIC] Install Krita + AI + ComfyUI shortcut
[Q] Quit
If Krita IS installed:
[I] Install latest (overwrite, update version)
[AI] Add AI Diffusion
[AIC] Add AI Diffusion + ComfyUI shortcut
[D] Download archives only
[R] Repair (re-extract AppImage + reinstall addons)
[U] Uninstall (with ComfyUI backup)
[C] Complete uninstall (no backup)
[Q] Quit
Choose based on your needs — all actions log to ~/.Applications/Krita/install.log.
✅ Test check-list for this release:
- Krita AppImage install + version check
- AI Diffusion addon install and path verification
- Segmentation Tools install and reuse logic
- Repair mode
- ComfyUI shortcut launches with correct icon/taskbar class
- Launch fallback if Brave is missing
- Download command.
- Uninstall command.
- Complete Uninstall
If you end up testing these, report any issues.
🔮 Future Roadmap
- See here for some of the apps that will be added: https://github.com/SimonHeggie/FOSS-Artist-workflow-Guide/wiki/1-%E2%80%90-LINUX-Install-Scripts
foss-artist-install_v0.0.1
This is the very first version of the foss artist install trunk.
Right now this is just for KRITA, but other apps will follow this new system.
The goal is to contain every useful art software in one place to allow specially curated VFX suite for Fedora based Linux users.
First we're starting with Krita and added some features that photoshop users will find handy from ACLY.
Tested on Nobara 42
Install (Boostrap):
#!/usr/bin/env bash
# Where to store install files (Not the install directory)
cd "$HOME/Downloads"
bash -c '
set -euo pipefail
IFS=$'\''\n\t'\''
BOOT_DIR="$(pwd)"
INSTALL_DIR="$BOOT_DIR/krita_install"
INSTALL_SCRIPT="$INSTALL_DIR/install.sh"
UNINSTALL_SCRIPT="$INSTALL_DIR/uninstall.sh"
VERSION_FILE="$INSTALL_DIR/version"
# ─── Pin to specific v0.0.1 release ─────────────────────────────
GITHUB_ARCHIVE_NAME="foss-artist-install_v0.0.1.tar.gz"
GITHUB_LATEST_URL="https://github.com/SimonHeggie/FOSS-Artist-workflow-Guide/releases/download/v0.0.1/$GITHUB_ARCHIVE_NAME"
ARCHIVE_TEMP="$GITHUB_ARCHIVE_NAME"
# Step 1: Prefer local krita_install/
if [ -d "$INSTALL_DIR" ]; then
echo "[INFO] Found existing ./krita_install — skipping download."
else
echo "[INFO] krita_install/ not found. Downloading version v0.0.1..."
curl -L "$GITHUB_LATEST_URL" -o "$ARCHIVE_TEMP"
echo "[INFO] Extracting installer..."
tar -xf "$ARCHIVE_TEMP" || {
echo "[ERROR] Failed to extract archive $ARCHIVE_TEMP" >&2
exit 1
}
rm -f "$ARCHIVE_TEMP"
if [ ! -d "$INSTALL_DIR" ]; then
echo "[ERROR] Expected folder '\''krita_install/'\'' not found after extraction." >&2
exit 1
fi
fi
# Step 2: Validate presence of install script
if [ ! -f "$INSTALL_SCRIPT" ]; then
echo "[ERROR] Missing install.sh inside krita_install/ — aborting." >&2
ls -l "$INSTALL_DIR"
exit 1
fi
# Step 3: Show install state + menu
if [ ! -f "$VERSION_FILE" ]; then
echo "[INFO] Krita not installed yet."
echo "[I] Install"
echo "[Q] Quit"
printf "Select an option: "
read -r option
case "$option" in
[Ii]) bash "$INSTALL_SCRIPT" ;;
[Qq]) echo "Goodbye!" && exit 0 ;;
*) echo "Invalid input." && exit 1 ;;
esac
else
echo "[INFO] Krita install detected."
if grep -qE '\''^(FOSS_INSTALL|KRITA)='\'' "$VERSION_FILE"; then
echo "[INFO] Installed versions:"
grep -E '\''^(FOSS_INSTALL|KRITA)='\'' "$VERSION_FILE"
fi
echo "[Enter] Update"
echo "[Del] Uninstall"
echo "[Q] Quit"
printf "Select an option: "
IFS= read -rsn1 key
printf "\n"
case "$key" in
"") bash "$INSTALL_SCRIPT" ;;
$'\''\x7f'\'') bash "$UNINSTALL_SCRIPT" ;; # DEL key
[Qq]) echo "Goodbye!" && exit 0 ;;
*) echo "Invalid key." && exit 1 ;;
esac
fi
'