2023-05-06 17:16:05 +02:00
|
|
|
{ pkgs, lib, stdenv, fetchFromGitHub, fetchzip, darktable, rawtherapee, ffmpeg, libheif, exiftool, imagemagick, makeWrapper, testers }:
|
2022-11-02 19:41:07 +01:00
|
|
|
|
|
|
|
let
|
2023-10-11 21:16:42 +02:00
|
|
|
version = "231011-63f708417";
|
2022-11-02 19:41:07 +01:00
|
|
|
pname = "photoprism";
|
|
|
|
|
|
|
|
src = fetchFromGitHub {
|
|
|
|
owner = pname;
|
|
|
|
repo = pname;
|
|
|
|
rev = version;
|
2023-10-11 21:16:42 +02:00
|
|
|
hash = "sha256-g/j+L++vb+wiE23d/lm6lga0MeaPrCotEojD9Sajkmg=";
|
2022-11-02 19:41:07 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
libtensorflow = pkgs.callPackage ./libtensorflow.nix { };
|
|
|
|
backend = pkgs.callPackage ./backend.nix { inherit libtensorflow src version; };
|
|
|
|
frontend = pkgs.callPackage ./frontend.nix { inherit src version; };
|
|
|
|
|
2023-10-11 21:16:42 +02:00
|
|
|
fetchModel = { name, hash }:
|
2022-11-02 19:41:07 +01:00
|
|
|
fetchzip {
|
2023-10-11 21:16:42 +02:00
|
|
|
inherit hash;
|
2022-11-02 19:41:07 +01:00
|
|
|
url = "https://dl.photoprism.org/tensorflow/${name}.zip";
|
|
|
|
stripRoot = false;
|
|
|
|
};
|
|
|
|
|
|
|
|
facenet = fetchModel {
|
|
|
|
name = "facenet";
|
2023-10-11 21:16:42 +02:00
|
|
|
hash = "sha256-aS5kkNhxOLSLTH/ipxg7NAa1w9X8iiG78jmloR1hpRo=";
|
2022-11-02 19:41:07 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
nasnet = fetchModel {
|
|
|
|
name = "nasnet";
|
2023-10-11 21:16:42 +02:00
|
|
|
hash = "sha256-bF25jPmZLyeSWy/CGXZE/VE2UupEG2q9Jmr0+1rUYWE=";
|
2022-11-02 19:41:07 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
nsfw = fetchModel {
|
|
|
|
name = "nsfw";
|
2023-10-11 21:16:42 +02:00
|
|
|
hash = "sha256-zy/HcmgaHOY7FfJUY6I/yjjsMPHR2Ote9ppwqemBlfg=";
|
2022-11-02 19:41:07 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
assets_path = "$out/share/${pname}";
|
|
|
|
in
|
|
|
|
stdenv.mkDerivation {
|
|
|
|
inherit pname version;
|
|
|
|
|
2022-12-08 23:26:13 +01:00
|
|
|
nativeBuildInputs = [
|
2022-11-02 19:41:07 +01:00
|
|
|
makeWrapper
|
|
|
|
];
|
|
|
|
|
|
|
|
dontUnpack = true;
|
|
|
|
dontBuild = true;
|
|
|
|
|
|
|
|
installPhase = ''
|
|
|
|
runHook preInstall
|
|
|
|
|
|
|
|
mkdir -p $out/bin ${assets_path}
|
|
|
|
|
|
|
|
# install backend
|
|
|
|
ln -s ${backend}/bin/photoprism $out/bin/photoprism
|
|
|
|
wrapProgram $out/bin/photoprism \
|
|
|
|
--set PHOTOPRISM_ASSETS_PATH ${assets_path} \
|
|
|
|
--set PHOTOPRISM_DARKTABLE_BIN ${darktable}/bin/darktable-cli \
|
|
|
|
--set PHOTOPRISM_RAWTHERAPEE_BIN ${rawtherapee}/bin/rawtherapee-cli \
|
|
|
|
--set PHOTOPRISM_HEIFCONVERT_BIN ${libheif}/bin/heif-convert \
|
|
|
|
--set PHOTOPRISM_FFMPEG_BIN ${ffmpeg}/bin/ffmpeg \
|
2023-05-06 17:16:05 +02:00
|
|
|
--set PHOTOPRISM_EXIFTOOL_BIN ${exiftool}/bin/exiftool \
|
|
|
|
--set PHOTOPRISM_IMAGEMAGICK_BIN ${imagemagick}/bin/convert
|
2022-11-02 19:41:07 +01:00
|
|
|
|
|
|
|
# install frontend
|
|
|
|
ln -s ${frontend}/assets/* ${assets_path}
|
|
|
|
# install tensorflow models
|
|
|
|
ln -s ${nasnet}/nasnet ${assets_path}
|
|
|
|
ln -s ${nsfw}/nsfw ${assets_path}
|
|
|
|
ln -s ${facenet}/facenet ${assets_path}
|
|
|
|
|
|
|
|
runHook postInstall
|
|
|
|
'';
|
|
|
|
|
2022-11-19 13:17:22 +01:00
|
|
|
passthru.tests.version = testers.testVersion { package = pkgs.photoprism; };
|
2022-11-02 19:41:07 +01:00
|
|
|
|
|
|
|
meta = with lib; {
|
|
|
|
homepage = "https://photoprism.app";
|
|
|
|
description = "Personal Photo Management powered by Go and Google TensorFlow";
|
|
|
|
inherit (libtensorflow.meta) platforms;
|
|
|
|
license = licenses.agpl3Only;
|
|
|
|
maintainers = with maintainers; [ benesim ];
|
|
|
|
};
|
|
|
|
}
|