diff --git a/NSIS/astro.bmp b/NSIS/astro.bmp new file mode 100644 index 00000000..4c10400e Binary files /dev/null and b/NSIS/astro.bmp differ diff --git a/NSIS/sd.ico b/NSIS/sd.ico new file mode 100644 index 00000000..0f8915e4 Binary files /dev/null and b/NSIS/sd.ico differ diff --git a/NSIS/sdui.nsi b/NSIS/sdui.nsi new file mode 100644 index 00000000..e1bae0e3 --- /dev/null +++ b/NSIS/sdui.nsi @@ -0,0 +1,169 @@ +; Script generated by the HM NIS Edit Script Wizard. + +; HM NIS Edit Wizard helper defines +!define PRODUCT_NAME "Stable Diffusion UI" +!define PRODUCT_VERSION "Installer 2.35" +!define PRODUCT_PUBLISHER "cmdr2 and contributors" +!define PRODUCT_WEB_SITE "https://stable-diffusion-ui.github.io" +!define PRODUCT_DIR_REGKEY "Software\Microsoft\Cmdr2\App Paths\installer.exe" + +; MUI 1.67 compatible ------ +!include "MUI.nsh" +!include "LogicLib.nsh" +!include "nsDialogs.nsh" + +Var Dialog +Var Label +Var Text +Var V14 +Var V15 + +; This function returns the number of spaces in a string. +; The string is passed on the stack (using Push $STRING) +; The result is also returned on the stack and can be consumed with Pop $var +; https://nsis.sourceforge.io/Check_for_spaces_in_a_directory_path +Function CheckForSpaces + Exch $R0 + Push $R1 + Push $R2 + Push $R3 + StrCpy $R1 -1 + StrCpy $R3 $R0 + StrCpy $R0 0 + loop: + StrCpy $R2 $R3 1 $R1 + IntOp $R1 $R1 - 1 + StrCmp $R2 "" done + StrCmp $R2 " " 0 loop + IntOp $R0 $R0 + 1 + Goto loop + done: + Pop $R3 + Pop $R2 + Pop $R1 + Exch $R0 +FunctionEnd + +Function DirectoryLeave + ; check whether the installation directory path is longer than 40 characters. + ;---------------------------------------------------------------------------- + StrLen $0 "$INSTDIR" + ${If} $0 > 40 + MessageBox MB_OK|MB_ICONEXCLAMATION "Installation path name too long. The installation path must not have more than 40 characters." + abort + ${EndIf} + + ; Check for spaces in the installation directory path. + ; ---------------------------------------------------- + + ; $R0 = CheckForSpaces( $INSTDIR ) + Push $INSTDIR # Input string (install path). + Call CheckForSpaces + Pop $R0 # The function returns the number of spaces found in the input string. + + ; Check if any spaces exist in $INSTDIR. + ${If} $R0 != 0 + ; Plural if more than 1 space in $INSTDIR. + ; If $R0 == 1: $R1 = ""; else: $R1 = "s" + StrCmp $R0 1 0 +3 + StrCpy $R1 "" + Goto +2 + StrCpy $R1 "s" + + ; Show message box then take the user back to the Directory page. + MessageBox MB_OK|MB_ICONEXCLAMATION "Error: The Installaton directory \ + has $R0 space character$R1.$\nPlease choose an installation directory without space characters." + Abort + ${EndIf} + +FunctionEnd + +Function nsDialogsPage + !insertmacro MUI_HEADER_TEXT "Default Stable diffusion model" "Select the default model to be installed" + nsDialogs::Create 1018 + Pop $Dialog + + ${If} $Dialog == error + Abort + ${EndIf} + + ${NSD_CreateLabel} 0 0 100% 48u "Which Stable Diffusion Modell do you want to use?$\r$\n$\r$\nThere are two models of Stable Diffusion.$\r$\n- Version 1.4 is using less memory.$\r$\n- Version 1.5 is bigger, but has slightly better results." + Pop $Label + + ${NSD_CreateFirstRadioButton} 0 49u 100% 12u "Use SD v1.4 as default" + Pop $V14 + + ${NSD_CreateAdditionalRadioButton} 0 62u 100% 12u "Use SD v1.5 as default" + Pop $V15 + + nsDialogs::Show +FunctionEnd + + +; MUI Settings +!define MUI_ABORTWARNING +!define MUI_ICON "sd.ico" + +!define MUI_WELCOMEFINISHPAGE_BITMAP "astro.bmp" + +; Welcome page +!insertmacro MUI_PAGE_WELCOME +; License page +!insertmacro MUI_PAGE_LICENSE "..\LICENSE" +!insertmacro MUI_PAGE_LICENSE "..\CreativeML Open RAIL-M License" +; Directory page +!define MUI_PAGE_CUSTOMFUNCTION_LEAVE "DirectoryLeave" +!insertmacro MUI_PAGE_DIRECTORY + +;; TODO: Requires support from "Start Stable Diffusion UI.cmd" and "server.py" +;; which needs to be developed first +; -------- +; Page custom nsDialogsPage +; -------- + +; Instfiles page +!insertmacro MUI_PAGE_INSTFILES +; Finish page +!define MUI_FINISHPAGE_RUN "$INSTDIR\Start Stable Diffusion UI.cmd" +!insertmacro MUI_PAGE_FINISH + +; Language files +!insertmacro MUI_LANGUAGE "English" + +; MUI end ------ + +Name "${PRODUCT_NAME} ${PRODUCT_VERSION}" +OutFile "Install Stable Diffusion UI.exe" +InstallDir "C:\Stable-Diffusion-UI\" +InstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" "" +ShowInstDetails show + +Section "MainSection" SEC01 + SetOutPath "$INSTDIR" + File "..\CreativeML Open RAIL-M License" + File "..\How to install and run.txt" + File "..\LICENSE" + File "..\Start Stable Diffusion UI.cmd" + SetOutPath "$INSTDIR\scripts" + File "..\scripts\bootstrap.bat" + File "..\scripts\install_status.txt" + File "..\scripts\on_env_start.bat" + CreateDirectory "$INSTDIR\profile" + CreateDirectory "$SMPROGRAMS\Stable Diffusion UI" + CreateShortCut "$SMPROGRAMS\Stable Diffusion UI\Start Stable Diffusion UI.lnk" "$INSTDIR\Start Stable Diffusion UI.cmd" +SectionEnd + +; Our installer only needs 25 KB, but once it has run, we need 25 GB +; So we need to overwrite the automatically detected space requirements. +; https://nsis.sourceforge.io/Docs/Chapter4.html#4.9.13.7 +; The example in section 4.9.13.7 seems to be wrong: the number +; needs to be provided in Kilobytes. +Function .onInit + # Set required size of section 'SEC01' to 25 Gigabytes + SectionSetSize ${SEC01} 26214400 +FunctionEnd + + +Section -Post + WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "" "$INSTDIR\installer.exe" +SectionEnd \ No newline at end of file