mirror of
https://github.com/ParisNeo/lollms.git
synced 2024-12-18 20:27:58 +00:00
enhanced structure
This commit is contained in:
parent
62df82e8e3
commit
cca2846c43
@ -1,26 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Check if miniconda3/bin/conda exists
|
||||
if [ -e "$HOME/miniconda3/bin/conda" ]; then
|
||||
echo "Conda is installed!"
|
||||
else
|
||||
echo "Conda is not installed. Please install it first."
|
||||
echo Installing conda
|
||||
curl -LO https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
|
||||
./Miniconda3-latest-Linux-x86_64.sh -b
|
||||
rm ./Miniconda3-latest-Linux-x86_64.sh
|
||||
echo Done
|
||||
fi
|
||||
PATH="$HOME/miniconda3/bin:$PATH"
|
||||
export PATH
|
||||
echo "Initializing conda"
|
||||
conda init --all
|
||||
export PATH
|
||||
echo "Installing motion_ctrl"
|
||||
conda create -n motion_ctrl python=3.9 -y
|
||||
echo "Activating motion_ctrl environment"
|
||||
source activate motion_ctrl
|
||||
git clone https://github.com/ParisNeo/MotionCtrl.git
|
||||
cd MotionCtrl
|
||||
pip install -r requirements.txt
|
||||
echo "Done"
|
@ -1,190 +0,0 @@
|
||||
# Title LollmsMotionCtrl
|
||||
# Licence: MIT
|
||||
# Author : Paris Neo
|
||||
# Adapted from the work of mix1009's sdwebuiapi
|
||||
# check it out : https://github.com/mix1009/sdwebuiapi/tree/main
|
||||
# Here is a copy of the LICENCE https://github.com/mix1009/sdwebuiapi/blob/main/LICENSE
|
||||
# All rights are reserved
|
||||
|
||||
from pathlib import Path
|
||||
import sys
|
||||
from lollms.app import LollmsApplication
|
||||
from lollms.paths import LollmsPaths
|
||||
from lollms.config import TypedConfig, ConfigTemplate, BaseConfig
|
||||
from lollms.utilities import get_conda_path, show_yes_no_dialog
|
||||
import time
|
||||
import io
|
||||
import sys
|
||||
import requests
|
||||
import os
|
||||
import base64
|
||||
import subprocess
|
||||
import time
|
||||
import json
|
||||
import platform
|
||||
from dataclasses import dataclass
|
||||
from PIL import Image, PngImagePlugin
|
||||
from enum import Enum
|
||||
from typing import List, Dict, Any
|
||||
|
||||
from ascii_colors import ASCIIColors, trace_exception
|
||||
from lollms.paths import LollmsPaths
|
||||
from lollms.utilities import git_pull
|
||||
from lollms.utilities import url2host_port
|
||||
|
||||
import subprocess
|
||||
import shutil
|
||||
|
||||
|
||||
|
||||
|
||||
def verify_motion_ctrl(lollms_paths:LollmsPaths):
|
||||
# Clone repository
|
||||
root_dir = lollms_paths.personal_path
|
||||
shared_folder = root_dir/"shared"
|
||||
motion_ctrl_folder = shared_folder / "auto_motion_ctrl"
|
||||
return motion_ctrl_folder.exists()
|
||||
|
||||
def install_motion_ctrl(lollms_app:LollmsApplication):
|
||||
if platform.system() == 'Windows':
|
||||
root_path = "/mnt/"+"".join(str(Path(__file__).parent).replace("\\","/").split(":"))
|
||||
if not os.path.exists('C:\\Windows\\System32\\wsl.exe'):
|
||||
if not show_yes_no_dialog("No WSL is detected on your system. Do you want me to install it for you? vLLM won't be abble to work without wsl."):
|
||||
return False
|
||||
subprocess.run(['wsl', '--install', 'Ubuntu'])
|
||||
subprocess.run(['wsl', 'bash', '-c', 'mkdir ~/motion_ctrl'])
|
||||
subprocess.run(['wsl', 'bash', '-c', 'cp {} ~/motion_ctrl'.format( root_path + '/install_motion_ctrl.sh')])
|
||||
subprocess.run(['wsl', 'bash', '-c', 'cp {} ~/motion_ctrl'.format( root_path + '/run_motion_ctrl.sh')])
|
||||
subprocess.run(['wsl', 'bash', '~/motion_ctrl/install_motion_ctrl.sh'])
|
||||
else:
|
||||
root_path = str(Path(__file__).parent)
|
||||
vllm_installer_path = root_path/'install_motion_ctrl.sh'
|
||||
vllm_run_path = root_path/'run_motion_ctrl.sh'
|
||||
vllm_path = Path.home()/"motion_ctrl"
|
||||
subprocess.run([f'mkdir {vllm_path}'])
|
||||
subprocess.run([f'cp {vllm_installer_path} {vllm_path}'])
|
||||
subprocess.run([f'cp {vllm_run_path} {vllm_path}'])
|
||||
subprocess.run(['bash', f'{vllm_path}/install_motion_ctrl.sh'])
|
||||
root_dir = lollms_app.lollms_paths.personal_path
|
||||
shared_folder = root_dir/"shared"
|
||||
vllm_folder = shared_folder / "motion_ctrl"
|
||||
vllm_folder.mkdir(exist_ok=True, parents=True)
|
||||
return True
|
||||
|
||||
|
||||
def get_motion_ctrl(lollms_paths:LollmsPaths):
|
||||
root_dir = lollms_paths.personal_path
|
||||
shared_folder = root_dir/"shared"
|
||||
motion_ctrl_folder = shared_folder / "auto_motion_ctrl"
|
||||
motion_ctrl_script_path = motion_ctrl_folder / "lollms_motion_ctrl.py"
|
||||
git_pull(motion_ctrl_folder)
|
||||
|
||||
if motion_ctrl_script_path.exists():
|
||||
ASCIIColors.success("lollms_motion_ctrl found.")
|
||||
ASCIIColors.success("Loading source file...",end="")
|
||||
# use importlib to load the module from the file path
|
||||
from lollms.services.motion_ctrl.lollms_motion_ctrl import LollmsMotionCtrl
|
||||
ASCIIColors.success("ok")
|
||||
return LollmsMotionCtrl
|
||||
|
||||
|
||||
class Service:
|
||||
has_controlnet = False
|
||||
def __init__(
|
||||
self,
|
||||
app:LollmsApplication,
|
||||
base_url=None,
|
||||
share=False,
|
||||
wait_for_service=True,
|
||||
max_retries=5
|
||||
):
|
||||
if base_url=="" or base_url=="http://127.0.0.1:7861":
|
||||
base_url = None
|
||||
# Get the current directory
|
||||
lollms_paths = app.lollms_paths
|
||||
self.app = app
|
||||
root_dir = lollms_paths.personal_path
|
||||
|
||||
# Store the path to the script
|
||||
if base_url is None:
|
||||
self.base_url = "http://127.0.0.1:7860"
|
||||
if not verify_motion_ctrl(lollms_paths):
|
||||
install_motion_ctrl(app.lollms_paths)
|
||||
else:
|
||||
self.base_url = base_url
|
||||
|
||||
self.auto_motion_ctrl_url = self.base_url+"/sdapi/v1"
|
||||
shared_folder = root_dir/"shared"
|
||||
self.motion_ctrl_folder = shared_folder / "motion_ctrl"
|
||||
self.output_dir = root_dir / "outputs/motion_ctrl"
|
||||
self.output_dir.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
|
||||
ASCIIColors.red(" ")
|
||||
ASCIIColors.red("_ _ _ _ _ _ _ ")
|
||||
ASCIIColors.red("| | | | | | | (_) | | | |")
|
||||
ASCIIColors.red("| | ___ | | |_ __ ___ ___ _ __ ___ ___ | |_ _ ___ _ __ ___| |_ _ __| |")
|
||||
ASCIIColors.red("| |/ _ \| | | '_ ` _ \/ __| | '_ ` _ \ / _ \| __| |/ _ \| '_ \ / __| __| '__| |")
|
||||
ASCIIColors.red("| | (_) | | | | | | | \__ \ | | | | | | (_) | |_| | (_) | | | || (__| |_| | | |")
|
||||
ASCIIColors.red("|_|\___/|_|_|_| |_| |_|___/ |_| |_| |_|\___/ \__|_|\___/|_| |_| \___|\__|_| |_|")
|
||||
ASCIIColors.red(" ______ ______ ")
|
||||
ASCIIColors.red(" |______| |______| ")
|
||||
|
||||
ASCIIColors.red(" Forked from TencentARC's MotionCtrl api")
|
||||
ASCIIColors.red(" Integration in lollms by ParisNeo")
|
||||
motion_ctrl_folder = shared_folder / "auto_motion_ctrl"
|
||||
env_name = "MotionCtrl"
|
||||
|
||||
if not self.wait_for_service(1,False):
|
||||
ASCIIColors.info("Loading lollms_motion_ctrl")
|
||||
os.environ['motion_ctrl_WEBUI_RESTARTING'] = '1' # To forbid sd webui from showing on the browser automatically
|
||||
|
||||
# Get the current operating system
|
||||
os_name = platform.system()
|
||||
conda_path = get_conda_path()
|
||||
import conda.cli
|
||||
env_name = "MotionCtrl"
|
||||
# Replace 'your_env_name' with the name of the environment you created
|
||||
activate_env_command = f"conda activate {env_name} && "
|
||||
pip_install_command = ""
|
||||
_, host, port = url2host_port(base_url)
|
||||
# run motion_ctrl
|
||||
if platform.system() == 'Windows':
|
||||
#subprocess.Popen(['wsl', 'ls', '$HOME'])
|
||||
subprocess.Popen(['wsl', 'bash', '$HOME/run_motion_ctrl.sh', host, str(port)])
|
||||
else:
|
||||
subprocess.Popen(['bash', f'{Path.home()}/run_motion_ctrl.sh', host, str(port)])
|
||||
|
||||
|
||||
|
||||
# Wait until the service is available at http://127.0.0.1:7860/
|
||||
if wait_for_service:
|
||||
self.wait_for_service(max_retries=max_retries)
|
||||
else:
|
||||
ASCIIColors.warning("We are not waiting for the MotionCtrl service to be up.\nThis means that you may need to wait a bit before you can use it.")
|
||||
|
||||
self.session = requests.Session()
|
||||
|
||||
def wait_for_service(self, max_retries = 50, show_warning=True):
|
||||
url = f"{self.base_url}"
|
||||
# Adjust this value as needed
|
||||
retries = 0
|
||||
|
||||
while retries < max_retries or max_retries<0:
|
||||
try:
|
||||
response = requests.get(url)
|
||||
if response.status_code == 200:
|
||||
print("Service is available.")
|
||||
if self.app is not None:
|
||||
self.app.success("Motion ctrl is now available.")
|
||||
return True
|
||||
except requests.exceptions.RequestException:
|
||||
pass
|
||||
|
||||
retries += 1
|
||||
time.sleep(1)
|
||||
if show_warning:
|
||||
print("Service did not become available within the given time.")
|
||||
if self.app is not None:
|
||||
self.app.error("SD Service did not become available within the given time.")
|
||||
return False
|
@ -1,14 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
PATH="$HOME/miniconda3/bin:$PATH"
|
||||
export PATH
|
||||
echo "Initializing conda"
|
||||
$HOME/miniconda3/bin/conda init --all
|
||||
echo "Initializing vllm with:"
|
||||
echo "host :$1"
|
||||
echo "port :$2"
|
||||
cd MotionCtrl
|
||||
source activate motion_ctrl && python -m app --share
|
||||
|
||||
# Wait for all background processes to finish
|
||||
wait
|
Loading…
Reference in New Issue
Block a user