From 70fd1f1831c44077a17693cb60ee9d2c7f9e022d Mon Sep 17 00:00:00 2001 From: Max Date: Mon, 20 Feb 2023 22:04:48 +0100 Subject: [PATCH] invokeai: use callPackage --- projects/invokeai/default.nix | 82 +++++++---------------------------- projects/invokeai/package.nix | 74 +++++++++++++++++++++++++++++++ 2 files changed, 90 insertions(+), 66 deletions(-) create mode 100644 projects/invokeai/package.nix diff --git a/projects/invokeai/default.nix b/projects/invokeai/default.nix index ff5f2f3..3e2ae9c 100644 --- a/projects/invokeai/default.nix +++ b/projects/invokeai/default.nix @@ -4,75 +4,25 @@ perSystem = { config, pkgs, ... }: let inherit (config.dependencySets) aipython3-amd aipython3-nvidia; - getVersion = lib.flip lib.pipe [ - (src: builtins.readFile "${src}/setup.py") - (builtins.match ".+VERSION = '([^']+)'.+") - builtins.head - ]; - - mkInvokeAIVariant = { aipython3, wsl ? false }: aipython3.buildPythonPackage rec { - pname = "InvokeAI"; - version = getVersion src; - src = inputs.invokeai-src; - propagatedBuildInputs = with aipython3; [ - numpy - albumentations - opencv4 - pudb - imageio - imageio-ffmpeg - pytorch-lightning - protobuf - omegaconf - test-tube - ((pkgs.streamlit.overrideAttrs (old: { - nativeBuildInputs = old.nativeBuildInputs ++ [ pythonRelaxDepsHook ]; - pythonRelaxDeps = [ "protobuf" ]; - })).override { protobuf3 = protobuf; }) - einops - taming-transformers-rom1504 - torch-fidelity - torchmetrics - transformers - kornia - k-diffusion - picklescan - diffusers - pypatchmatch - realesrgan - pillow - send2trash - flask - flask-socketio - flask-cors - dependency-injector - gfpgan - eventlet - clipseg - getpass-asterisk - ]; - nativeBuildInputs = [ aipython3.pythonRelaxDepsHook ]; - pythonRemoveDeps = [ "clip" "pyreadline3" "flaskwebgui" ]; - pythonRelaxDeps = [ "protobuf" ]; - postFixup = '' - ${lib.optionalString wsl "makeWrapperArgs+=( --set LD_LIBRARY_PATH '/usr/lib/wsl/lib' )"} - chmod +x $out/bin/* - wrapPythonPrograms - ''; - doCheck = false; - meta = { - description = "Fancy Web UI for Stable Diffusion"; - homepage = "https://invoke-ai.github.io/InvokeAI/"; - mainProgram = "invoke.py"; - }; - }; + src = inputs.invokeai-src; + mkInvokeAIVariant = args: pkgs.callPackage ./package.nix ({ inherit src; } // args); in { packages = { - invokeai-amd = mkInvokeAIVariant { aipython3 = aipython3-amd; }; - invokeai-nvidia = mkInvokeAIVariant { aipython3 = aipython3-nvidia; }; - invokeai-amd-wsl = mkInvokeAIVariant { aipython3 = aipython3-amd; wsl = true; }; - invokeai-nvidia-wsl = mkInvokeAIVariant { aipython3 = aipython3-nvidia; wsl = true;}; + invokeai-amd = mkInvokeAIVariant { + aipython3 = aipython3-amd; + }; + invokeai-nvidia = mkInvokeAIVariant { + aipython3 = aipython3-nvidia; + }; + invokeai-amd-wsl = mkInvokeAIVariant { + aipython3 = aipython3-amd; + wsl = true; + }; + invokeai-nvidia-wsl = mkInvokeAIVariant { + aipython3 = aipython3-nvidia; + wsl = true; + }; }; }; } diff --git a/projects/invokeai/package.nix b/projects/invokeai/package.nix new file mode 100644 index 0000000..f045229 --- /dev/null +++ b/projects/invokeai/package.nix @@ -0,0 +1,74 @@ +{ aipython3 +# dependencies +, streamlit +# misc +, lib +, src +# configuration +, wsl ? false +}: + +let + getVersion = lib.flip lib.pipe [ + (src: builtins.readFile "${src}/setup.py") + (builtins.match ".+VERSION = '([^']+)'.+") + builtins.head + ]; +in + +aipython3.buildPythonPackage { + pname = "InvokeAI"; + version = getVersion src; + inherit src; + propagatedBuildInputs = with aipython3; [ + numpy + albumentations + opencv4 + pudb + imageio + imageio-ffmpeg + pytorch-lightning + protobuf + omegaconf + test-tube + ((streamlit.overrideAttrs (old: { + nativeBuildInputs = old.nativeBuildInputs ++ [ pythonRelaxDepsHook ]; + pythonRelaxDeps = [ "protobuf" ]; + })).override { protobuf3 = protobuf; }) + einops + taming-transformers-rom1504 + torch-fidelity + torchmetrics + transformers + kornia + k-diffusion + picklescan + diffusers + pypatchmatch + realesrgan + pillow + send2trash + flask + flask-socketio + flask-cors + dependency-injector + gfpgan + eventlet + clipseg + getpass-asterisk + ]; + nativeBuildInputs = [ aipython3.pythonRelaxDepsHook ]; + pythonRemoveDeps = [ "clip" "pyreadline3" "flaskwebgui" ]; + pythonRelaxDeps = [ "protobuf" ]; + postFixup = '' + ${lib.optionalString wsl "makeWrapperArgs+=( --set LD_LIBRARY_PATH '/usr/lib/wsl/lib' )"} + chmod +x $out/bin/* + wrapPythonPrograms + ''; + doCheck = false; + meta = { + description = "Fancy Web UI for Stable Diffusion"; + homepage = "https://invoke-ai.github.io/InvokeAI/"; + mainProgram = "invoke.py"; + }; +}