Stable Diffusion / AI image generation on Framework Desktop in Linux

I’m kind of at a loss, and I’m usually pretty good with scouring the internet until I find enough bits and pieces to get what I’m trying to do working. Does anyone have a guide or tutorial for getting for getting a modern web-based AI image generator running on the Framework Desktop as of January 2026?

Here’s a quick review of some of the things I’ve tried:

https://medium.com/@jmdevita/z-image-turbo-on-amd-ryzen-ai-max-395-local-ai-image-generation-with-vulkan-framework-desktop-b577b798b6ca - This is the closest I’ve gotten. The sd.cpp CLI tool will actually generate an image via Vulkan, but the front-ends that work with sd.cpp seem to largely be for Windows. The one that I can get installed and working in Linux, sd.cpp-webui, gives me a bunch of Gradio errors from a clean install that are unrelated to image generation.

GitHub - kyuz0/amd-strix-halo-image-video-toolboxes - The toolboxes work fine, and both Qwen Image Studio and ComfyUI load, but both hang when you actually try to generate something and neither produce any error messages at the terminal.

I’ve also tried following the ROCm installation guides for both 6.4 and 7 on clean installs (following the outline in this thread: Anybody tried running image generation (e.g. Stable Diffusion XL, 3.5 or similar) on Linux? - #3 by _alX ) and while both have appeared to work, when I actually try to use a clean ComfyUI install from source using the ROCm backend, once generation starts it will end in a segmentation fault with no further output.

Rather than continuing to debug any of these attempts, does anyone have a clean install guide that they know is working as of today? I prefer ComfyUI but I’ll take any front-end that actually works at this point just to make sure I’m not totally crazy and that there’s some hope of finding success eventually. I’m running Fedora 43, but if there’s something that works well on any distro, I’m happy to take it as a starting point and pretty comfortable containerizing application stacks myself.

From my phone, so there might be errors… can help more tomorrow.

The newest kernel in Fedora has a firmware bug. I have read about adding grub parameters (which did not work for me), and reverting to the previous linux-firmware package.

This is al new for me, so getting back to the previous firmware did work in the end after lots of trying and searching online.

The easiest way is to revert to a kernel which is older than the bug. If that is still in the list. Otherwise you have to install an old firmware.

I saw something about this and assumed since it was reported there was a fix in kernel 6.18-rc1 that it made it into the 6.18 series (I’m at work right now but I believe I’m running 6.18.5-200.fc43). If there’s a know working kernel version I’m happy to try downgrading or patching a fix tonight and see if that helps.

may be FYI linux-firmware-amdgpu 20251125 breaks rocm on AI Max 395/8060S - #2 by roosmaa

I did not test with the new 20260110

If this is the probleme it has nothing to do with kernel and crache on all…

what report dnf info amd-gpu-firmware.noarch ?

I was running 20251125. Upgrading to 20260110 did not fix it, unfortunately. Neither did downgrading to 20251111 as suggested in that post.

what report dmesg after crach?

look new “bug” … :crossed_fingers:

(Maybe this is not new information for people over here, but for me it was. So let me document this for myself, and maybe help others :slight_smile: )

Newest kernel gave me errors too. You have to go back to a kernel from october if I remember correctly. Or only go back to an old firmware?

I am running kernel 6.17.8-300.fc43, but I doubt if this matters if the firmware is ok.

$ sudo cat /sys/kernel/debug/dri/128/amdgpu_firmware_info | grep "MES f"
MES feature version: 1, firmware version: 0x00000080

If this is 0x00000083 then you get crashes.

My AMD firmware is:
$ dnf info amd-gpu-firmware.noarch => Version : 20251111

To revert:

  • (install koji)
  • Get the firmware (in empty dir): koji download-build linux-firmware-20251111-1.fc43
  • Downgrade: sudo dnf downgrade *.rpm (I don’t remember if being more specific would work too)
  • sudo dracut -f
  • reboot

Now the firmware should be downgraded.

I was able to get ComfyUI working correctly last night!

Since I had tried several things, I’m not sure which specific change from where I was yesterday was the issue. Let me at at least share what my final system configuration looked like in case someone else stumbles on this thread they can at least get a known working point:

  • Kernel: 6.18.5-200.fc43.x86_64
  • Python: 3.13.11
  • Firmware: linux-firmware-20251111-1.fc43, from Koji
  • ComfyUI: from master branch, but same timeframe as 0.9.2 release
  • Torch: 2.11.0a0+rocm7.11.0a20260106

Exactly what I thought, it is the firmware not the kernel.

it is now more complicated… look there is a change in linux driver that break “old” rocm…

for me look like this config work (on llama.cpp :wink: ):

  • fedora 43 (silverbue + fc43 container)
  • kernel 6.18.5
  • linux-firmware 20260110
  • therock-dist-linux-gfx1151-7.11.0a20260116.tar.gz

so only firmware linux-firmware-20251125 have e bug I think…
but there is a other probleme with kernel-driver vs rocm. on fedora ressent kernel break fedora rocm (6.4.4) look we need nightly therock build…
=> fedora 43 need some path on rocm-6.4.4 to work with resent kernel (not sure which one…)

I’m running Ubuntu with rocm 7.1.1, so I’m not sure how relevant this will be to you, but I also run ComfyUI through docker, so that part might make the setup of ComfyUI itself a bit easier.

It’s a little jumbled, but here is the exact setup that I did on a fresh install of Ubuntu 24.04:

sudo apt update
sudo apt upgrade
sudo apt install openssh-server
sudo apt update
sudo apt install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
sudo tee /etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
Components: stable
Signed-By: /etc/apt/keyrings/docker.asc
EOF

sudo apt update
sudo usermod -a -G render,video $LOGNAME
wget https://repo.radeon.com/amdgpu-install/7.1.1/ubuntu/noble/amdgpu-install_7.1.1.70101-1_all.deb
sudo apt install ./amdgpu-install_7.1.1.70101-1_all.deb
sudo apt update
sudo apt install python3-setuptools python3-wheel
sudo apt install rocm
amdgpu-install --usecase=dkms
sudo modprobe amdgpu
sudo reboot
sudo apt update
sudo apt install gpg
sudo mkdir --parents --mode=0755 /etc/apt/keyrings
wget https://repo.radeon.com/rocm/rocm.gpg.key -O - | gpg --dearmor | sudo tee /etc/apt/keyrings/rocm.gpg > /dev/null
echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/rocm.gpg] https://repo.radeon.com/amd-container-toolkit/apt/ noble main" | sudo tee /etc/apt/sources.list.d/amd-container-toolkit.list
sudo apt update
sudo apt install amd-container-toolkit
sudo amd-ctk runtime configure
sudo systemctl restart docker

I then have a modified version of GitHub - Kaouthia/ComfyUI-Docker: Dockerfile and Docker Compose setup for ComfyUI - Works on Linux or Windows with NVIDIA GPUs to make it work with AMD:

Dockerfile:

# Use rocm pytorch image. It's a bit heavy, but it saves you from a lot of config issues later on
FROM rocm/pytorch:rocm7.1.1_ubuntu24.04_py3.12_pytorch_release_2.9.1

# Copy and enable the startup script
COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh

# Probably don't need this
RUN apt-get update && apt-get install rocm

# make ~/.local/bin available on the PATH so scripts like tqdm, torchrun, etc. are found
ENV PATH=/home/appuser/.local/bin:$PATH

# Set the working directory
WORKDIR /app

# Clone the ComfyUI repository (replace URL with the official repo)
RUN git clone https://github.com/comfyanonymous/ComfyUI.git

# Change directory to the ComfyUI folder
WORKDIR /app/ComfyUI

# Install ComfyUI dependencies
RUN pip install --no-cache-dir -r requirements.txt

# (Optional) Clean up pip cache to reduce image size
RUN pip cache purge

# Expose the port that ComfyUI will use (change if needed)
EXPOSE 8188

# Run entrypoint first, then start ComfyUI
ENTRYPOINT ["/entrypoint.sh"]
CMD ["python","/app/ComfyUI/main.py","--listen","0.0.0.0"]

docker-compose.yml

services:
  comfyk:
    build:
      dockerfile: Dockerfile
    image: comfyui:latest
    container_name: comfyui
    ports:
      - "8188:8188"
    volumes:
      - ../comfyui/models:/app/ComfyUI/models
      - ../comfyui/output:/app/ComfyUI/output
      - ../comfyui/settings:/app/ComfyUI/user/default:rw
      - ../comfyui/flows:/app/ComfyUI/user/default/workflows:rw

    group_add:
      - video
      - render
    runtime: amd
    deploy:
      resources:
        reservations:
          devices:
            - driver: amd
              count: all
              capabilities: [gpu]

    stdin_open: true
    tty: true
    command: ["python","/app/ComfyUI/main.py","--listen","0.0.0.0","--highvram"]

entrypoint.sh - is pretty much unchanged from ComfyUI-Docker/entrypoint.sh at main · Kaouthia/ComfyUI-Docker · GitHub I just removed a few plugins I didn’t want.

#!/usr/bin/env bash

# ComfyUI Docker Startup File v1.0.2 by John Aldred
# http://www.johnaldred.com
# http://github.com/kaouthia

set -e

# --- Force ComfyUI-Manager config (uv off, no file logging, safe DB) ---
# Make sure user dirs exist and are writable (handles Windows bind mounts)
mkdir -p /app/ComfyUI/user /app/ComfyUI/user/default
chown -R "$(id -u)":"$(id -g)" /app/ComfyUI/user || true
chmod -R u+rwX /app/ComfyUI/user || true

CFG_DIR="/app/ComfyUI/user/default/ComfyUI-Manager"
CFG_FILE="$CFG_DIR/config.ini"
DB_DIR="$CFG_DIR"
DB_PATH="${DB_DIR}/manager.db"
SQLITE_URL="sqlite:////${DB_PATH}"

mkdir -p "$CFG_DIR"

if [ ! -f "$CFG_FILE" ]; then
  echo "↳ Creating ComfyUI-Manager config.ini (uv OFF, no file logging, DB cache)"
  cat > "$CFG_FILE" <<EOF
[default]
use_uv = False
file_logging = False
db_mode = cache
database_url = ${SQLITE_URL}
EOF
else
  echo "↳ Updating ComfyUI-Manager config.ini (uv OFF, no file logging, DB cache)"
  # use_uv = False
  grep -q '^use_uv' "$CFG_FILE" \
    && sed -i 's/^use_uv.*/use_uv = False/' "$CFG_FILE" \
    || printf '\nuse_uv = False\n' >> "$CFG_FILE"

  # file_logging = False (and drop any existing log_path line)
  grep -q '^file_logging' "$CFG_FILE" \
    && sed -i 's/^file_logging.*/file_logging = False/' "$CFG_FILE" \
    || printf '\nfile_logging = False\n' >> "$CFG_FILE"
  sed -i '/^log_path[[:space:]=]/d' "$CFG_FILE" || true

  # db_mode = cache (prevents file DB usage)
  grep -q '^db_mode' "$CFG_FILE" \
    && sed -i 's/^db_mode.*/db_mode = cache/' "$CFG_FILE" \
    || printf '\ndb_mode = cache\n' >> "$CFG_FILE"

  # Provide a safe DB URL anyway (future-proof if Manager flips off cache)
  grep -q '^database_url' "$CFG_FILE" \
    && sed -i "s|^database_url.*|database_url = ${SQLITE_URL}|" "$CFG_FILE" \
    || printf "database_url = ${SQLITE_URL}\n" >> "$CFG_FILE"
fi


# --- Prepare custom nodes ---
CN_DIR=/app/ComfyUI/custom_nodes
INIT_MARKER="$CN_DIR/.custom_nodes_initialized"

declare -A REPOS=(
  ["ComfyUI-Manager"]="https://github.com/ltdrdata/ComfyUI-Manager.git"
  ["ComfyUI_essentials"]="https://github.com/cubiq/ComfyUI_essentials.git"
  ["ComfyUI-KJNodes"]="https://github.com/kijai/ComfyUI-KJNodes.git"
  ["ComfyUI_UltimateSDUpscale"]="https://github.com/ssitu/ComfyUI_UltimateSDUpscale.git"
)

if [ ! -f "$INIT_MARKER" ]; then
  echo "↳ First run: initializing custom_nodes…"
  mkdir -p "$CN_DIR"
  for name in "${!REPOS[@]}"; do
    url="${REPOS[$name]}"
    target="$CN_DIR/$name"
    if [ -d "$target" ]; then
      echo "  ↳ $name already exists, skipping clone"
    else
      echo "  ↳ Cloning $name"
      git clone --depth 1 "$url" "$target"
    fi
  done

  echo "↳ Installing/upgrading dependencies…"
  for dir in "$CN_DIR"/*/; do
    req="$dir/requirements.txt"
    if [ -f "$req" ]; then
      echo "  ↳ pip install --upgrade -r $req"
      python -m pip install --no-cache-dir --upgrade -r "$req"
    fi
  done

  # Create marker file
  touch "$INIT_MARKER"
else
  echo "↳ Custom nodes already initialized, skipping clone and dependency installation."
fi

echo "↳ Launching ComfyUI"
exec "$@"

Hope that’s in some part useful

Very interested in this thread, since I am having similar problems using the kyuz0 strix halo image toolbox you already mentioned. Just in case you read over it, kyuz0 posted instructions on how to solve the problem. I haven’t tried it out myself, cause I now I’ll break something trying to change my kernel manually, but maybe it helps you.

From said repo:

:white_check_mark: Strix Halo Stability Fix (2025-11-22)

  • TL;DR: upgrade your host kernel to 6.18-rc6, rebuild/refresh this toolbox to get stable image/video workflows without HIP errors.

  • AMD merged the gfx1151 kernel + ROCm patches that stop HIP driver crashes on Strix Halo: GFX1151 ships with 1.5× VGPR capacity versus the rest of GFX11 and now the compiler/runtime know it.

  • Use kernel 6.18-rc6 (Fedora OEM repo) which already includes linux/d15deaf plus the ROCm fix from ROCm PR #1807.

  • Pair that kernel with TheRock nightly build 2025-11-22 (already inside the latest container published by this repo) and the HIP crash cannot be reproduced after multi-day stress tests.

:high_voltage: Torch + AOTriton Wheels

  • Shipping the latest PyTorch ROCm wheels from TheRock, built with AOTriton enabled for Strix Halo (gfx1151).

  • AOTriton = Ahead-Of-Time compiled Triton attention kernels. They’re prebuilt inside the wheel, so there’s no runtime JIT, no extra triton package, and no first-run compilation delay.

//EDIT: Turns out, since I last tried to use the toolbox one or two weeks ago the stable Fedora release got updated . I am on: 6.18.5-200.fc43.x86_64 now. And after updating the toolbox image generation is back in action for me!