; Script generated by the HM NIS Edit Script Wizard. Target x86-unicode Unicode True !AddPluginDir /x86-unicode "." ; 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 Var InstDirLen Var LongPathsEnabled Var AccountType ;--------------------------------------------------------------------------------------------------------- ; 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 ;--------------------------------------------------------------------------------------------------------- ; The function DirectoryLeave is called after the user chose the installation directory. ; If it calls "abort", the user is sent back to choose a different directory. Function DirectoryLeave ; check whether the installation directory path is longer than 30 characters. ; If yes, we suggest to the user to enable long filename support ;---------------------------------------------------------------------------- StrLen $InstDirLen "$INSTDIR" ; Check whether the registry key that allows for >260 characters in a path name is set ReadRegStr $LongPathsEnabled HKLM "SYSTEM\CurrentControlSet\Control\FileSystem" "LongPathsEnabled" ${If} $InstDirLen > 30 ${AndIf} $LongPathsEnabled == "0" ; Check whether we're in the Admin group UserInfo::GetAccountType Pop $AccountType ${If} $AccountType == "Admin" ${AndIf} ${Cmd} `MessageBox MB_YESNO|MB_ICONQUESTION 'The path name is too long. $\n$\nYou can either enable long file name support in Windows,$\nor you can go back and choose a different path.$\n$\nFor details see: shorturl.at/auBD1$\n$\nEnable long path name support in Windows?' IDYES` ; Enable long path names WriteRegDWORD HKLM "SYSTEM\CurrentControlSet\Control\FileSystem" "LongPathsEnabled" 1 ${Else} MessageBox MB_OK|MB_ICONEXCLAMATION "Installation path name too long. The installation path must not have more than 30 characters." abort ${EndIf} ${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 ;--------------------------------------------------------------------------------------------------------- ; This function is currently not being used. To be used in the future for the v1.4 vs v1.5 chooser 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 (3.97 GB)" Pop $V14 ${NSD_CreateAdditionalRadioButton} 0 62u 100% 12u "Use SD v1.5 as default (4.7 GB)" Pop $V15 nsDialogs::Show FunctionEnd ;--------------------------------------------------------------------------------------------------------- ; MUI Settings ;--------------------------------------------------------------------------------------------------------- !define MUI_ABORTWARNING !define MUI_ICON "sd.ico" !define MUI_WELCOMEFINISHPAGE_BITMAP "astro.bmp" ; Welcome page !define MUI_WELCOMEPAGE_TEXT "This installer will guide you through the installation of Stable Diffusion UI.$\n$\n\ Click Next to continue." !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 ;--------------------------------------------------------------------------------------------------------- ; List of files to be installed 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 ; Check system meory size. We need at least 8GB ; ---------------------------------------------------- ; allocate a few bytes of memory System::Alloc 64 Pop $1 ; Retrieve HW info from the Windows Kernel System::Call "*$1(i64)" System::Call "Kernel32::GlobalMemoryStatusEx(i r1)" ; unpack the data into $R2 - $R10 System::Call "*$1(i.r2, i.r3, l.r4, l.r5, l.r6, l.r7, l.r8, l.r9, l.r10)" # free up the memory System::Free $1 ; Result mapping: ; "Structure size: $2 bytes" ; "Memory load: $3%" ; "Total physical memory: $4 bytes" ; "Free physical memory: $5 bytes" ; "Total page file: $6 bytes" ; "Free page file: $7 bytes" ; "Total virtual: $8 bytes" ; "Free virtual: $9 bytes" ; Mem size in MB System::Int64Op $4 / 1048576 Pop $4 ${If} $4 < "8000" MessageBox MB_OK|MB_ICONEXCLAMATION "Warning!$\n$\nYour system has less than 8GB of memory (RAM).$\n$\n\ You can still try to install Stable Diffusion UI,$\nbut it might have problems to start, or run$\nvery slowly." ${EndIf} FunctionEnd ;Section -Post ; WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "" "$INSTDIR\installer.exe" ;SectionEnd