mirror of
https://github.com/invoke-ai/InvokeAI
synced 2024-08-30 20:32:17 +00:00
d2dc1ed26f
This commit makes InvokeAI 3.0 to be installable via PyPi.org and the installer script. Main changes. 1. Move static web pages into `invokeai/frontend/web` and modify the API to look for them there. This allows pip to copy the files into the distribution directory so that user no longer has to be in repo root to launch. 2. Update invoke.sh and invoke.bat to launch the new web application properly. This also changes the wording for launching the CLI from "generate images" to "explore the InvokeAI node system," since I would not recommend using the CLI to generate images routinely. 3. Fix a bug in the checkpoint converter script that was identified during testing. 4. Better error reporting when checkpoint converter fails. 5. Rebuild front end.
129 lines
4.1 KiB
Python
129 lines
4.1 KiB
Python
'''
|
|
Minimalist updater script. Prompts user for the tag or branch to update to and runs
|
|
pip install <path_to_git_source>.
|
|
'''
|
|
import os
|
|
import platform
|
|
import pkg_resources
|
|
import psutil
|
|
import requests
|
|
from rich import box, print
|
|
from rich.console import Console, group
|
|
from rich.panel import Panel
|
|
from rich.prompt import Prompt
|
|
from rich.style import Style
|
|
|
|
from invokeai.version import __version__
|
|
|
|
INVOKE_AI_SRC="https://github.com/invoke-ai/InvokeAI/archive"
|
|
INVOKE_AI_TAG="https://github.com/invoke-ai/InvokeAI/archive/refs/tags"
|
|
INVOKE_AI_BRANCH="https://github.com/invoke-ai/InvokeAI/archive/refs/heads"
|
|
INVOKE_AI_REL="https://api.github.com/repos/invoke-ai/InvokeAI/releases"
|
|
|
|
OS = platform.uname().system
|
|
ARCH = platform.uname().machine
|
|
|
|
if OS == "Windows":
|
|
# Windows terminals look better without a background colour
|
|
console = Console(style=Style(color="grey74"))
|
|
else:
|
|
console = Console(style=Style(color="grey74", bgcolor="grey19"))
|
|
|
|
def get_versions()->dict:
|
|
return requests.get(url=INVOKE_AI_REL).json()
|
|
|
|
def invokeai_is_running()->bool:
|
|
for p in psutil.process_iter():
|
|
try:
|
|
cmdline = p.cmdline()
|
|
matches = [x for x in cmdline if x.endswith(('invokeai','invokeai.exe'))]
|
|
if matches:
|
|
print(f':exclamation: [bold red]An InvokeAI instance appears to be running as process {p.pid}[/red bold]')
|
|
return True
|
|
except (psutil.AccessDenied,psutil.NoSuchProcess):
|
|
continue
|
|
return False
|
|
|
|
def welcome(versions: dict):
|
|
|
|
@group()
|
|
def text():
|
|
yield f'InvokeAI Version: [bold yellow]{__version__}'
|
|
yield ''
|
|
yield 'This script will update InvokeAI to the latest release, or to a development version of your choice.'
|
|
yield ''
|
|
yield '[bold yellow]Options:'
|
|
yield f'''[1] Update to the latest official release ([italic]{versions[0]['tag_name']}[/italic])
|
|
[2] Update to the bleeding-edge development version ([italic]main[/italic])
|
|
[3] Manually enter the [bold]tag name[/bold] for the version you wish to update to
|
|
[4] Manually enter the [bold]branch name[/bold] for the version you wish to update to'''
|
|
|
|
console.rule()
|
|
print(
|
|
Panel(
|
|
title="[bold wheat1]InvokeAI Updater",
|
|
renderable=text(),
|
|
box=box.DOUBLE,
|
|
expand=True,
|
|
padding=(1, 2),
|
|
style=Style(bgcolor="grey23", color="orange1"),
|
|
subtitle=f"[bold grey39]{OS}-{ARCH}",
|
|
)
|
|
)
|
|
console.line()
|
|
|
|
def get_extras():
|
|
extras = ''
|
|
try:
|
|
dist = pkg_resources.get_distribution('xformers')
|
|
extras = '[xformers]'
|
|
except pkg_resources.DistributionNotFound:
|
|
pass
|
|
return extras
|
|
|
|
def main():
|
|
versions = get_versions()
|
|
if invokeai_is_running():
|
|
print(f':exclamation: [bold red]Please terminate all running instances of InvokeAI before updating.[/red bold]')
|
|
input('Press any key to continue...')
|
|
return
|
|
|
|
welcome(versions)
|
|
|
|
tag = None
|
|
branch = None
|
|
release = None
|
|
choice = Prompt.ask('Choice:',choices=['1','2','3','4'],default='1')
|
|
|
|
if choice=='1':
|
|
release = versions[0]['tag_name']
|
|
elif choice=='2':
|
|
release = 'main'
|
|
elif choice=='3':
|
|
tag = Prompt.ask('Enter an InvokeAI tag name')
|
|
elif choice=='4':
|
|
branch = Prompt.ask('Enter an InvokeAI branch name')
|
|
|
|
extras = get_extras()
|
|
|
|
print(f':crossed_fingers: Upgrading to [yellow]{tag if tag else release}[/yellow]')
|
|
if release:
|
|
cmd = f"pip install 'invokeai{extras} @ {INVOKE_AI_SRC}/{release}.zip' --use-pep517 --upgrade"
|
|
elif tag:
|
|
cmd = f"pip install 'invokeai{extras} @ {INVOKE_AI_TAG}/{tag}.zip' --use-pep517 --upgrade"
|
|
else:
|
|
cmd = f"pip install 'invokeai{extras} @ {INVOKE_AI_BRANCH}/{branch}.zip' --use-pep517 --upgrade"
|
|
print('')
|
|
print('')
|
|
if os.system(cmd)==0:
|
|
print(f':heavy_check_mark: Upgrade successful')
|
|
else:
|
|
print(f':exclamation: [bold red]Upgrade failed[/red bold]')
|
|
|
|
if __name__ == "__main__":
|
|
try:
|
|
main()
|
|
except KeyboardInterrupt:
|
|
pass
|
|
|