diff --git a/flake.lock b/flake.lock index 8dfae9e..1a8477c 100644 --- a/flake.lock +++ b/flake.lock @@ -3,16 +3,16 @@ "invokeai-repo": { "flake": false, "locked": { - "lastModified": 1677475057, - "narHash": "sha256-REtyVcyRgspn1yYvB4vIHdOrPRZRNSSraepHik9MfgE=", + "lastModified": 1684768600, + "narHash": "sha256-ISkMOEybTyfoEKY5LLToXim1ZeT+A2ljhwLpj0Hfq8I=", "owner": "invoke-ai", "repo": "InvokeAI", - "rev": "650f4bb58ceca458bff1410f35cd6d6caad399c6", + "rev": "f3b2e02921927d9317255b1c3811f47bd40a2bf9", "type": "github" }, "original": { "owner": "invoke-ai", - "ref": "v2.3.1.post2", + "ref": "v2.3.5.post2", "repo": "InvokeAI", "type": "github" } diff --git a/flake.nix b/flake.nix index 6cde521..74a23c1 100644 --- a/flake.nix +++ b/flake.nix @@ -11,7 +11,7 @@ flake = false; }; invokeai-repo = { - url = "github:invoke-ai/InvokeAI?ref=v2.3.1.post2"; + url = "github:invoke-ai/InvokeAI?ref=v2.3.5.post2"; flake = false; }; webui-repo = { @@ -51,6 +51,7 @@ realesrgan pillow safetensors + fastapi ] ++ nixlib.optional (nvidia) [ xformers ] #probably won't fully work ++ nixlib.optional (!webui) [ @@ -71,6 +72,11 @@ clipseg getpass-asterisk picklescan + peft + packaging + python-multipart + fastapi-socketio + fastapi-events ] ++ nixlib.optional webui [ pip @@ -83,7 +89,6 @@ yapf gdown lpips - fastapi lark analytics-python ffmpy @@ -118,6 +123,35 @@ }; }); }; + overlay_invoke = nixpkgs: pythonPackages: + let + ifNotMinVersion = pkg: ver: overlay: if ( + nixlib.versionOlder pkg.version ver + ) then pkg.overrideAttrs overlay else pkg; + in { + huggingface-hub = ifNotMinVersion pythonPackages.huggingface-hub + "0.13.2" ( + old: rec { + version = "0.14.1"; + src = nixpkgs.fetchFromGitHub { + owner = "huggingface"; + repo = "huggingface_hub"; + rev = "refs/tags/v${version}"; + hash = "sha256-+BtXi+O+Ef4p4b+8FJCrZFsxX22ZYOPXylexFtsldnA="; + }; + propagatedBuildInputs = old.propagatedBuildInputs ++ [pythonPackages.fsspec]; + }); + transformers = ifNotMinVersion pythonPackages.transformers + "4.26" ( + old: rec { + version = "4.28.1"; + src = nixpkgs.fetchFromGitHub { + inherit (old.src) owner repo; + rev = "refs/tags/v${version}"; + hash = "sha256-FmiuWfoFZjZf1/GbE6PmSkeshWWh+6nDj2u2PMSeDk0="; + }; + }); + }; overlay_pynixify = self: let rm = d: d.overrideAttrs (old: { @@ -162,6 +196,9 @@ "xformers" "pyre-extensions" # "triton" TODO: nixpkgs is missing required llvm parts - mlir. https://github.com/NixOS/nixpkgs/pull/163878 + "peft" + "fastapi-events" + "fastapi-socketio" ]; in { @@ -243,6 +280,7 @@ optional amd (overlay_amd prev python-super) // optional nvidia (overlay_nvidia prev python-super) // optional webui (overlay_webui prev python-super) // + optional (!webui) (overlay_invoke prev python-super) // (overlay_pynixify python-self); }; }) @@ -256,14 +294,29 @@ nixpkgsNvidia = (nixpkgs_ { nvidia = true; }); invokeaiF = nixpkgs: nixpkgs.python3.pkgs.buildPythonApplication { pname = "invokeai"; - version = "2.3.1"; + version = "2.3.5"; src = invokeai-repo; format = "pyproject"; meta.mainProgram = "invokeai"; propagatedBuildInputs = requirementsFor { pkgs = nixpkgs; nvidia = nixpkgs.nvidia; }; nativeBuildInputs = [ nixpkgs.pkgs.pythonRelaxDepsHook ]; - pythonRelaxDeps = [ "torch" "pytorch-lightning" "flask-socketio" "flask" "dnspython" ]; + pythonRelaxDeps = [ "torch" "pytorch-lightning" "flask-socketio" "flask" "dnspython" "fastapi" ]; pythonRemoveDeps = [ "opencv-python" "flaskwebgui" "pyreadline3" ]; + postPatch = '' + # Add subprocess to the imports + substituteInPlace ./ldm/invoke/config/invokeai_configure.py --replace \ + 'import shutil' \ +' +import shutil +import subprocess +' + # shutil.copytree will inherit the permissions of files in the /nix/store + # which are read only, so we subprocess.call cp instead and tell it not to + # preserve the mode + substituteInPlace ./ldm/invoke/config/invokeai_configure.py --replace \ + "shutil.copytree(configs_src, configs_dest, dirs_exist_ok=True)" \ + "subprocess.call(f'cp -r --no-preserve=mode {configs_src}/* {configs_dest}', shell=True)" + ''; }; webuiF = nixpkgs: let diff --git a/packages/compel/default.nix b/packages/compel/default.nix index 65a63fb..cd2b880 100644 --- a/packages/compel/default.nix +++ b/packages/compel/default.nix @@ -6,14 +6,11 @@ buildPythonPackage rec { pname = "compel"; - version = "0.1.7"; + version = "1.1.5"; - src = fetchFromGitHub { + src = fetchPypi { inherit pname version; - owner = "damian0815"; - repo = pname; - rev = "085d657356714fbc972f12273ec7803242d602a0"; - sha256 = "sha256-v6tkyOH0cBQWPPmi9AY9nvYwaT8QxNpJneB/YWSdlYc="; + sha256 = "932a4448553983db33f4893516239ed5001b384cc211e32841e80b1f94dcd0f6"; }; propagatedBuildInputs = [ pyparsing torch transformers diffusers ]; diff --git a/packages/diffusers/default.nix b/packages/diffusers/default.nix index 5994ebd..5edf7d9 100644 --- a/packages/diffusers/default.nix +++ b/packages/diffusers/default.nix @@ -7,11 +7,11 @@ buildPythonPackage rec { pname = "diffusers"; - version = "0.13.1"; + version = "0.16.1"; src = fetchPypi { inherit pname version; - sha256 = "0k4f9zya92jv4msdm66jaab29avxd6ba9c7aqc2mp7sdycg7mdi9"; + sha256 = "4cd7400382c86d85e08425550de1b1a81d4ed03623fbd4bcd8377864d9c46efe"; }; propagatedBuildInputs = diff --git a/packages/fastapi-events/default.nix b/packages/fastapi-events/default.nix new file mode 100644 index 0000000..49ec4c8 --- /dev/null +++ b/packages/fastapi-events/default.nix @@ -0,0 +1,25 @@ +{ lib +, buildPythonPackage +, fetchPypi +, pythonOlder +, starlette +}: + +buildPythonPackage rec { + pname = "fastapi-events"; + version = "0.6.0"; + + disabled = pythonOlder "3.7"; + + src = fetchPypi { + inherit pname version; + sha256 = "2380cdc3e30dc898d6b721d623c575c6f5b05ee35a3ee05adf0b90b12b9ed1f9"; + }; + + propagatedBuildInputs = [ + starlette + ]; + + # TODO FIXME + doCheck = false; +} diff --git a/packages/fastapi-socketio/default.nix b/packages/fastapi-socketio/default.nix new file mode 100644 index 0000000..a5c23f3 --- /dev/null +++ b/packages/fastapi-socketio/default.nix @@ -0,0 +1,24 @@ +{ lib +, buildPythonPackage +, fetchPypi +, fastapi +, python-socketio +}: + +buildPythonPackage rec { + pname = "fastapi-socketio"; + version = "0.0.9"; + + src = fetchPypi { + inherit pname version; + sha256 = "8c73aa94fe1bf1c9964ff89233a6ba52eeeec3ac8b9de0024d9d82b11e46bde5"; + }; + + propagatedBuildInputs = [ + fastapi + python-socketio + ]; + + # TODO FIXME + doCheck = false; +} diff --git a/packages/peft/default.nix b/packages/peft/default.nix new file mode 100644 index 0000000..021c498 --- /dev/null +++ b/packages/peft/default.nix @@ -0,0 +1,30 @@ +{ buildPythonPackage, fetchPypi, lib +, numpy +, packaging +, psutil +, pyyaml +, torch +, transformers +, accelerate +}: +buildPythonPackage rec { + pname = "peft"; + version = "0.3.0"; + + src = fetchPypi { + inherit pname version; + sha256 = "bbdeee4de3653ee43cb6bbe7505816e6e9b4cf8275471be1707d9c253dfe8e0b"; + }; + + propagatedBuildInputs = [ + numpy + packaging + psutil + pyyaml + torch + transformers + accelerate + ]; + format = "pyproject"; + doCheck = false; +} diff --git a/packages/safetensors/default.nix b/packages/safetensors/default.nix index 7653830..306e23f 100644 --- a/packages/safetensors/default.nix +++ b/packages/safetensors/default.nix @@ -6,11 +6,11 @@ buildPythonPackage rec { pname = "safetensors"; - version = "0.2.8"; + version = "0.3.1"; src = fetchPypi { inherit pname version; - sha256 = "sha256-JyCyCmo4x5ncp5vXbK7qwvffWFqdT31Z+n4o7/nMsn8="; + sha256 = "571da56ff8d0bec8ae54923b621cda98d36dcef10feb36fd492c4d0c2cd0e869"; }; pythonRemoveDeps = [ "setuptools-rust" ]; @@ -24,7 +24,7 @@ buildPythonPackage rec { cargoDeps = rustPlatform.fetchCargoTarball { inherit src sourceRoot; name = sourceRoot; - hash = "sha256-ylpf82NXlpo4+u5HZVYeJI8I6VBFAukzC7Er6BZk1Ik="; + hash = "sha256-IsePAiBsA/YjO1rhae49+4q67WdN5ieBMmjpzxRxxNE="; patches = [ ./cargo-lock.patch ]; };