mirror of
https://github.com/invoke-ai/InvokeAI
synced 2024-08-30 20:32:17 +00:00
Merge branch 'main' into bugfix/merge-fixes
This commit is contained in:
commit
5145df21d9
@ -1,18 +1,20 @@
|
||||
# use this file as a whitelist
|
||||
*
|
||||
!assets/caution.png
|
||||
!backend
|
||||
!frontend/dist
|
||||
!invokeai
|
||||
!ldm
|
||||
!pyproject.toml
|
||||
!README.md
|
||||
!scripts
|
||||
|
||||
# Guard against pulling in any models that might exist in the directory tree
|
||||
**.pt*
|
||||
**/*.pt*
|
||||
**/*.ckpt
|
||||
|
||||
# unignore configs, but only ignore the custom models.yaml, in case it exists
|
||||
!configs
|
||||
configs/models.yaml
|
||||
configs/models.yaml.orig
|
||||
# whitelist frontend, but ignore node_modules
|
||||
invokeai/frontend/node_modules
|
||||
|
||||
# ignore python cache
|
||||
**/__pycache__
|
||||
**/*.py[cod]
|
||||
**/*.egg-info
|
||||
|
2
.github/CODEOWNERS
vendored
2
.github/CODEOWNERS
vendored
@ -4,4 +4,4 @@ scripts/legacy_api.py @CapableWeb
|
||||
tests/legacy_tests.sh @CapableWeb
|
||||
installer/ @ebr
|
||||
.github/workflows/ @mauwii
|
||||
docker_build/ @mauwii
|
||||
docker/ @mauwii
|
||||
|
88
.github/workflows/build-cloud-img.yml
vendored
88
.github/workflows/build-cloud-img.yml
vendored
@ -1,88 +0,0 @@
|
||||
name: Build and push cloud image
|
||||
on:
|
||||
workflow_dispatch:
|
||||
# push:
|
||||
# branches:
|
||||
# - main
|
||||
# tags:
|
||||
# - v*
|
||||
# # we will NOT push the image on pull requests, only test buildability.
|
||||
# pull_request:
|
||||
# branches:
|
||||
# - main
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
packages: write
|
||||
|
||||
env:
|
||||
REGISTRY: ghcr.io
|
||||
IMAGE_NAME: ${{ github.repository }}
|
||||
|
||||
jobs:
|
||||
docker:
|
||||
if: github.event.pull_request.draft == false
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
arch:
|
||||
- x86_64
|
||||
# requires resolving a patchmatch issue
|
||||
# - aarch64
|
||||
runs-on: ubuntu-latest
|
||||
name: ${{ matrix.arch }}
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v2
|
||||
if: matrix.arch == 'aarch64'
|
||||
|
||||
- name: Docker meta
|
||||
id: meta
|
||||
uses: docker/metadata-action@v4
|
||||
with:
|
||||
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
|
||||
# see https://github.com/docker/metadata-action
|
||||
# will push the following tags:
|
||||
# :edge
|
||||
# :main (+ any other branches enabled in the workflow)
|
||||
# :<tag>
|
||||
# :1.2.3 (for semver tags)
|
||||
# :1.2 (for semver tags)
|
||||
# :<sha>
|
||||
tags: |
|
||||
type=edge,branch=main
|
||||
type=ref,event=branch
|
||||
type=ref,event=tag
|
||||
type=semver,pattern={{version}}
|
||||
type=semver,pattern={{major}}.{{minor}}
|
||||
type=sha
|
||||
# suffix image tags with architecture
|
||||
flavor: |
|
||||
latest=auto
|
||||
suffix=-${{ matrix.arch }},latest=true
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v2
|
||||
|
||||
# do not login to container registry on PRs
|
||||
- if: github.event_name != 'pull_request'
|
||||
name: Docker login
|
||||
uses: docker/login-action@v2
|
||||
with:
|
||||
registry: ghcr.io
|
||||
username: ${{ github.actor }}
|
||||
password: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Build and push cloud image
|
||||
uses: docker/build-push-action@v3
|
||||
with:
|
||||
context: .
|
||||
file: docker-build/Dockerfile.cloud
|
||||
platforms: Linux/${{ matrix.arch }}
|
||||
# do not push the image on PRs
|
||||
push: false
|
||||
tags: ${{ steps.meta.outputs.tags }}
|
||||
labels: ${{ steps.meta.outputs.labels }}
|
29
.github/workflows/build-container.yml
vendored
29
.github/workflows/build-container.yml
vendored
@ -15,14 +15,19 @@ jobs:
|
||||
flavor:
|
||||
- amd
|
||||
- cuda
|
||||
- cpu
|
||||
include:
|
||||
- flavor: amd
|
||||
pip-extra-index-url: 'https://download.pytorch.org/whl/rocm5.2'
|
||||
dockerfile: docker-build/Dockerfile
|
||||
dockerfile: docker/Dockerfile
|
||||
platforms: linux/amd64,linux/arm64
|
||||
- flavor: cuda
|
||||
pip-extra-index-url: ''
|
||||
dockerfile: docker-build/Dockerfile
|
||||
dockerfile: docker/Dockerfile
|
||||
platforms: linux/amd64,linux/arm64
|
||||
- flavor: cpu
|
||||
pip-extra-index-url: 'https://download.pytorch.org/whl/cpu'
|
||||
dockerfile: docker/Dockerfile
|
||||
platforms: linux/amd64,linux/arm64
|
||||
runs-on: ubuntu-latest
|
||||
name: ${{ matrix.flavor }}
|
||||
@ -34,7 +39,8 @@ jobs:
|
||||
id: meta
|
||||
uses: docker/metadata-action@v4
|
||||
with:
|
||||
images: ghcr.io/${{ github.repository }}-${{ matrix.flavor }}
|
||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
images: ghcr.io/${{ github.repository }}
|
||||
tags: |
|
||||
type=ref,event=branch
|
||||
type=ref,event=tag
|
||||
@ -43,7 +49,8 @@ jobs:
|
||||
type=semver,pattern={{major}}
|
||||
type=sha
|
||||
flavor: |
|
||||
latest=true
|
||||
latest=${{ matrix.flavor == 'cuda' && github.ref == 'refs/heads/main' }}
|
||||
suffix=${{ matrix.flavor }},onlatest=false
|
||||
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v2
|
||||
@ -69,5 +76,15 @@ jobs:
|
||||
tags: ${{ steps.meta.outputs.tags }}
|
||||
labels: ${{ steps.meta.outputs.labels }}
|
||||
build-args: PIP_EXTRA_INDEX_URL=${{ matrix.pip-extra-index-url }}
|
||||
# cache-from: type=gha
|
||||
# cache-to: type=gha,mode=max
|
||||
cache-from: type=gha
|
||||
cache-to: type=gha,mode=max
|
||||
|
||||
- name: Output image, digest and metadata to summary
|
||||
run: |
|
||||
{
|
||||
echo imageid: "${{ steps.docker_build.outputs.imageid }}"
|
||||
echo digest: "${{ steps.docker_build.outputs.digest }}"
|
||||
echo labels: "${{ steps.meta.outputs.labels }}"
|
||||
echo tags: "${{ steps.meta.outputs.tags }}"
|
||||
echo version: "${{ steps.meta.outputs.version }}"
|
||||
} >> "$GITHUB_STEP_SUMMARY"
|
||||
|
@ -1,86 +0,0 @@
|
||||
#######################
|
||||
#### Builder stage ####
|
||||
|
||||
FROM library/ubuntu:22.04 AS builder
|
||||
|
||||
ARG DEBIAN_FRONTEND=noninteractive
|
||||
RUN rm -f /etc/apt/apt.conf.d/docker-clean; echo 'Binary::apt::APT::Keep-Downloaded-Packages "true";' > /etc/apt/apt.conf.d/keep-cache
|
||||
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
|
||||
--mount=type=cache,target=/var/lib/apt,sharing=locked \
|
||||
apt update && apt-get install -y \
|
||||
git \
|
||||
libglib2.0-0 \
|
||||
libgl1-mesa-glx \
|
||||
python3-venv \
|
||||
python3-pip \
|
||||
build-essential \
|
||||
python3-opencv \
|
||||
libopencv-dev
|
||||
|
||||
# This is needed for patchmatch support
|
||||
RUN cd /usr/lib/x86_64-linux-gnu/pkgconfig/ &&\
|
||||
ln -sf opencv4.pc opencv.pc
|
||||
|
||||
ARG WORKDIR=/invokeai
|
||||
WORKDIR ${WORKDIR}
|
||||
|
||||
ENV VIRTUAL_ENV=${WORKDIR}/.venv
|
||||
ENV PATH="$VIRTUAL_ENV/bin:$PATH"
|
||||
|
||||
RUN --mount=type=cache,target=/root/.cache/pip \
|
||||
python3 -m venv ${VIRTUAL_ENV} &&\
|
||||
pip install --extra-index-url https://download.pytorch.org/whl/cu116 \
|
||||
torch==1.12.0+cu116 \
|
||||
torchvision==0.13.0+cu116 &&\
|
||||
pip install -e git+https://github.com/invoke-ai/PyPatchMatch@0.1.3#egg=pypatchmatch
|
||||
|
||||
COPY . .
|
||||
RUN --mount=type=cache,target=/root/.cache/pip \
|
||||
cp environments-and-requirements/requirements-lin-cuda.txt requirements.txt && \
|
||||
pip install -r requirements.txt &&\
|
||||
pip install -e .
|
||||
|
||||
|
||||
#######################
|
||||
#### Runtime stage ####
|
||||
|
||||
FROM library/ubuntu:22.04 as runtime
|
||||
|
||||
ARG DEBIAN_FRONTEND=noninteractive
|
||||
ENV PYTHONUNBUFFERED=1
|
||||
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
|
||||
--mount=type=cache,target=/var/lib/apt,sharing=locked \
|
||||
apt update && apt install -y --no-install-recommends \
|
||||
git \
|
||||
curl \
|
||||
ncdu \
|
||||
iotop \
|
||||
bzip2 \
|
||||
libglib2.0-0 \
|
||||
libgl1-mesa-glx \
|
||||
python3-venv \
|
||||
python3-pip \
|
||||
build-essential \
|
||||
python3-opencv \
|
||||
libopencv-dev &&\
|
||||
apt-get clean && apt-get autoclean
|
||||
|
||||
ARG WORKDIR=/invokeai
|
||||
WORKDIR ${WORKDIR}
|
||||
|
||||
ENV INVOKEAI_ROOT=/mnt/invokeai
|
||||
ENV VIRTUAL_ENV=${WORKDIR}/.venv
|
||||
ENV PATH="$VIRTUAL_ENV/bin:$PATH"
|
||||
|
||||
COPY --from=builder ${WORKDIR} ${WORKDIR}
|
||||
COPY --from=builder /usr/lib/x86_64-linux-gnu/pkgconfig /usr/lib/x86_64-linux-gnu/pkgconfig
|
||||
|
||||
# build patchmatch
|
||||
RUN python -c "from patchmatch import patch_match"
|
||||
|
||||
## workaround for non-existent initfile when runtime directory is mounted; see #1613
|
||||
RUN touch /root/.invokeai
|
||||
|
||||
ENTRYPOINT ["bash"]
|
||||
|
||||
CMD ["-c", "python3 scripts/invoke.py --web --host 0.0.0.0"]
|
@ -1,44 +0,0 @@
|
||||
# Directory in the container where the INVOKEAI_ROOT (runtime dir) will be mounted
|
||||
INVOKEAI_ROOT=/mnt/invokeai
|
||||
# Host directory to contain the runtime dir. Will be mounted at INVOKEAI_ROOT path in the container
|
||||
HOST_MOUNT_PATH=${HOME}/invokeai
|
||||
|
||||
IMAGE=local/invokeai:latest
|
||||
|
||||
USER=$(shell id -u)
|
||||
GROUP=$(shell id -g)
|
||||
|
||||
# All downloaded models, config, etc will end up in ${HOST_MOUNT_PATH} on the host.
|
||||
# This is consistent with the expected non-Docker behaviour.
|
||||
# Contents can be moved to a persistent storage and used to prime the cache on another host.
|
||||
|
||||
build:
|
||||
DOCKER_BUILDKIT=1 docker build -t local/invokeai:latest -f Dockerfile.cloud ..
|
||||
|
||||
configure:
|
||||
docker run --rm -it --runtime=nvidia --gpus=all \
|
||||
-v ${HOST_MOUNT_PATH}:${INVOKEAI_ROOT} \
|
||||
-e INVOKEAI_ROOT=${INVOKEAI_ROOT} \
|
||||
${IMAGE} -c "python scripts/configure_invokeai.py"
|
||||
|
||||
# Run the container with the runtime dir mounted and the web server exposed on port 9090
|
||||
web:
|
||||
docker run --rm -it --runtime=nvidia --gpus=all \
|
||||
-v ${HOST_MOUNT_PATH}:${INVOKEAI_ROOT} \
|
||||
-e INVOKEAI_ROOT=${INVOKEAI_ROOT} \
|
||||
-p 9090:9090 \
|
||||
${IMAGE} -c "python scripts/invoke.py --web --host 0.0.0.0"
|
||||
|
||||
# Run the cli with the runtime dir mounted
|
||||
cli:
|
||||
docker run --rm -it --runtime=nvidia --gpus=all \
|
||||
-v ${HOST_MOUNT_PATH}:${INVOKEAI_ROOT} \
|
||||
-e INVOKEAI_ROOT=${INVOKEAI_ROOT} \
|
||||
${IMAGE} -c "python scripts/invoke.py"
|
||||
|
||||
# Run the container with the runtime dir mounted and open a bash shell
|
||||
shell:
|
||||
docker run --rm -it --runtime=nvidia --gpus=all \
|
||||
-v ${HOST_MOUNT_PATH}:${INVOKEAI_ROOT} ${IMAGE} --
|
||||
|
||||
.PHONY: build configure web cli shell
|
@ -1,10 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Variables shared by build.sh and run.sh
|
||||
REPOSITORY_NAME=${REPOSITORY_NAME:-$(basename "$(git rev-parse --show-toplevel)")}
|
||||
VOLUMENAME=${VOLUMENAME:-${REPOSITORY_NAME,,}_data}
|
||||
ARCH=${ARCH:-$(uname -m)}
|
||||
PLATFORM=${PLATFORM:-Linux/${ARCH}}
|
||||
CONTAINER_FLAVOR=${CONTAINER_FLAVOR:-cuda}
|
||||
INVOKEAI_BRANCH=$(git branch --show)
|
||||
INVOKEAI_TAG=${REPOSITORY_NAME,,}-${CONTAINER_FLAVOR}:${INVOKEAI_TAG:-${INVOKEAI_BRANCH##*/}}
|
@ -1,8 +1,12 @@
|
||||
# syntax=docker/dockerfile:1
|
||||
FROM python:3.9-slim AS python-base
|
||||
|
||||
# use bash
|
||||
SHELL [ "/bin/bash", "-c" ]
|
||||
# Maintained by Matthias Wild <mauwii@outlook.de>
|
||||
|
||||
ARG PYTHON_VERSION=3.9
|
||||
##################
|
||||
### base image ###
|
||||
##################
|
||||
FROM python:${PYTHON_VERSION}-slim AS python-base
|
||||
|
||||
# Install necesarry packages
|
||||
RUN \
|
||||
@ -17,12 +21,39 @@ RUN \
|
||||
&& apt-get clean \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
ARG APPDIR=/usr/src/app
|
||||
ENV APPDIR ${APPDIR}
|
||||
# set working directory and path
|
||||
ARG APPDIR=/usr/src
|
||||
ARG APPNAME=InvokeAI
|
||||
WORKDIR ${APPDIR}
|
||||
ENV PATH=${APPDIR}/${APPNAME}/bin:$PATH
|
||||
|
||||
FROM python-base AS builder
|
||||
######################
|
||||
### build frontend ###
|
||||
######################
|
||||
FROM node:lts as frontend-builder
|
||||
|
||||
# Copy Sources
|
||||
ARG APPDIR=/usr/src
|
||||
WORKDIR ${APPDIR}
|
||||
COPY --link . .
|
||||
|
||||
# install dependencies and build frontend
|
||||
WORKDIR ${APPDIR}/invokeai/frontend
|
||||
RUN \
|
||||
--mount=type=cache,target=/usr/local/share/.cache/yarn/v6 \
|
||||
yarn install \
|
||||
--prefer-offline \
|
||||
--frozen-lockfile \
|
||||
--non-interactive \
|
||||
--production=false \
|
||||
&& yarn build
|
||||
|
||||
###################################
|
||||
### install python dependencies ###
|
||||
###################################
|
||||
FROM python-base AS pyproject-builder
|
||||
|
||||
# Install dependencies
|
||||
RUN \
|
||||
--mount=type=cache,target=/var/cache/apt,sharing=locked \
|
||||
--mount=type=cache,target=/var/lib/apt,sharing=locked \
|
||||
@ -34,25 +65,28 @@ RUN \
|
||||
&& apt-get clean \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# create virtual environment
|
||||
RUN python3 -m venv "${APPNAME}" \
|
||||
--upgrade-deps
|
||||
|
||||
# copy sources
|
||||
COPY --link . .
|
||||
COPY --from=frontend-builder ${APPDIR} .
|
||||
|
||||
# install pyproject.toml
|
||||
ARG PIP_EXTRA_INDEX_URL
|
||||
ENV PIP_EXTRA_INDEX_URL ${PIP_EXTRA_INDEX_URL}
|
||||
RUN --mount=type=cache,target=/root/.cache/pip,sharing=locked \
|
||||
"${APPDIR}/${APPNAME}/bin/pip" install \
|
||||
--use-pep517 \
|
||||
.
|
||||
|
||||
# install requirements
|
||||
RUN python3 -m venv invokeai \
|
||||
&& ${APPDIR}/invokeai/bin/pip \
|
||||
install \
|
||||
--no-cache-dir \
|
||||
--use-pep517 \
|
||||
.
|
||||
|
||||
#####################
|
||||
### runtime image ###
|
||||
#####################
|
||||
FROM python-base AS runtime
|
||||
|
||||
# setup environment
|
||||
COPY --link . .
|
||||
COPY --from=builder ${APPDIR}/invokeai ${APPDIR}/invokeai
|
||||
ENV PATH=${APPDIR}/invokeai/bin:$PATH
|
||||
COPY --from=pyproject-builder ${APPDIR}/${APPNAME} ${APPDIR}/${APPNAME}
|
||||
ENV INVOKEAI_ROOT=/data
|
||||
ENV INVOKE_MODEL_RECONFIGURE="--yes --default_only"
|
||||
|
||||
@ -73,6 +107,6 @@ RUN \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# set Entrypoint and default CMD
|
||||
ENTRYPOINT [ "invoke" ]
|
||||
ENTRYPOINT [ "invokeai" ]
|
||||
CMD [ "--web", "--host=0.0.0.0" ]
|
||||
VOLUME [ "/data" ]
|
@ -2,30 +2,31 @@
|
||||
set -e
|
||||
|
||||
# How to use: https://invoke-ai.github.io/InvokeAI/installation/INSTALL_DOCKER/#setup
|
||||
#
|
||||
# Some possible pip extra-index urls (cuda 11.7 is available without extra url):
|
||||
#
|
||||
# CUDA 11.6: https://download.pytorch.org/whl/cu116
|
||||
# ROCm 5.2: https://download.pytorch.org/whl/rocm5.2
|
||||
# CPU: https://download.pytorch.org/whl/cpu
|
||||
#
|
||||
# as found on https://pytorch.org/get-started/locally/
|
||||
|
||||
cd "$(dirname "$0")" || exit 1
|
||||
SCRIPTDIR=$(dirname "$0")
|
||||
cd "$SCRIPTDIR" || exit 1
|
||||
|
||||
source ./env.sh
|
||||
|
||||
DOCKERFILE=${INVOKE_DOCKERFILE:-"./Dockerfile"}
|
||||
DOCKERFILE=${INVOKE_DOCKERFILE:-Dockerfile}
|
||||
|
||||
# print the settings
|
||||
echo -e "You are using these values:\n"
|
||||
echo -e "Dockerfile:\t ${DOCKERFILE}"
|
||||
echo -e "extra-index-url: ${PIP_EXTRA_INDEX_URL:-none}"
|
||||
echo -e "Volumename:\t ${VOLUMENAME}"
|
||||
echo -e "arch:\t\t ${ARCH}"
|
||||
echo -e "Platform:\t ${PLATFORM}"
|
||||
echo -e "Invokeai_tag:\t ${INVOKEAI_TAG}\n"
|
||||
echo -e "Dockerfile: \t${DOCKERFILE}"
|
||||
echo -e "index-url: \t${PIP_EXTRA_INDEX_URL:-none}"
|
||||
echo -e "Volumename: \t${VOLUMENAME}"
|
||||
echo -e "Platform: \t${PLATFORM}"
|
||||
echo -e "Registry: \t${CONTAINER_REGISTRY}"
|
||||
echo -e "Repository: \t${CONTAINER_REPOSITORY}"
|
||||
echo -e "Container Tag: \t${CONTAINER_TAG}"
|
||||
echo -e "Container Image: ${CONTAINER_IMAGE}\n"
|
||||
|
||||
# Create docker volume
|
||||
if [[ -n "$(docker volume ls -f name="${VOLUMENAME}" -q)" ]]; then
|
||||
echo -e "Volume already exists\n"
|
||||
else
|
||||
@ -36,7 +37,7 @@ fi
|
||||
# Build Container
|
||||
docker build \
|
||||
--platform="${PLATFORM}" \
|
||||
--tag="${INVOKEAI_TAG}" \
|
||||
${PIP_EXTRA_INDEX_URL:+--build-arg=PIP_EXTRA_INDEX_URL="${PIP_EXTRA_INDEX_URL}"} \
|
||||
--tag="${CONTAINER_IMAGE}" \
|
||||
${PIP_EXTRA_INDEX_URL:+--build-arg="PIP_EXTRA_INDEX_URL=${PIP_EXTRA_INDEX_URL}"} \
|
||||
--file="${DOCKERFILE}" \
|
||||
..
|
35
docker/env.sh
Normal file
35
docker/env.sh
Normal file
@ -0,0 +1,35 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
if [[ -z "$PIP_EXTRA_INDEX_URL" ]]; then
|
||||
# Decide which container flavor to build if not specified
|
||||
if [[ -z "$CONTAINER_FLAVOR" ]]; then
|
||||
# Check for CUDA and ROCm
|
||||
CUDA_AVAILABLE=$(python -c "import torch;print(torch.cuda.is_available())")
|
||||
ROCM_AVAILABLE=$(python -c "import torch;print(torch.version.hip is not None)")
|
||||
if [[ "$(uname -s)" != "Darwin" && "${CUDA_AVAILABLE}" == "True" ]]; then
|
||||
CONTAINER_FLAVOR=cuda
|
||||
elif [[ "$(uname -s)" != "Darwin" && "${ROCM_AVAILABLE}" == "True" ]]; then
|
||||
CONTAINER_FLAVOR="rocm"
|
||||
else
|
||||
CONTAINER_FLAVOR="cpu"
|
||||
fi
|
||||
fi
|
||||
# Set PIP_EXTRA_INDEX_URL based on container flavor
|
||||
if [[ "$CONTAINER_FLAVOR" == "rocm" ]]; then
|
||||
PIP_EXTRA_INDEX_URL="${PIP_EXTRA_INDEX_URL-"https://download.pytorch.org/whl/rocm"}"
|
||||
elif CONTAINER_FLAVOR=cpu; then
|
||||
PIP_EXTRA_INDEX_URL="${PIP_EXTRA_INDEX_URL-"https://download.pytorch.org/whl/cpu"}"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Variables shared by build.sh and run.sh
|
||||
REPOSITORY_NAME="${REPOSITORY_NAME-$(basename "$(git rev-parse --show-toplevel)")}"
|
||||
VOLUMENAME="${VOLUMENAME-"${REPOSITORY_NAME,,}_data"}"
|
||||
ARCH="${ARCH-$(uname -m)}"
|
||||
PLATFORM="${PLATFORM-Linux/${ARCH}}"
|
||||
INVOKEAI_BRANCH="${INVOKEAI_BRANCH-$(git branch --show)}"
|
||||
CONTAINER_REGISTRY="${CONTAINER_REGISTRY-"ghcr.io"}"
|
||||
CONTAINER_REPOSITORY="${CONTAINER_REPOSITORY-"$(whoami)/${REPOSITORY_NAME}"}"
|
||||
CONTAINER_TAG="${CONTAINER_TAG-"${INVOKEAI_BRANCH##*/}-${CONTAINER_FLAVOR}"}"
|
||||
CONTAINER_IMAGE="${CONTAINER_REGISTRY}/${CONTAINER_REPOSITORY}:${CONTAINER_TAG}"
|
||||
CONTAINER_IMAGE="${CONTAINER_IMAGE,,}"
|
@ -4,27 +4,28 @@ set -e
|
||||
# How to use: https://invoke-ai.github.io/InvokeAI/installation/INSTALL_DOCKER/#run-the-container
|
||||
# IMPORTANT: You need to have a token on huggingface.co to be able to download the checkpoints!!!
|
||||
|
||||
cd "$(dirname "$0")" || exit 1
|
||||
SCRIPTDIR=$(dirname "$0")
|
||||
cd "$SCRIPTDIR" || exit 1
|
||||
|
||||
source ./env.sh
|
||||
|
||||
echo -e "You are using these values:\n"
|
||||
echo -e "Volumename:\t${VOLUMENAME}"
|
||||
echo -e "Invokeai_tag:\t${INVOKEAI_TAG}"
|
||||
echo -e "Invokeai_tag:\t${CONTAINER_IMAGE}"
|
||||
echo -e "local Models:\t${MODELSPATH:-unset}\n"
|
||||
|
||||
docker run \
|
||||
--interactive \
|
||||
--tty \
|
||||
--rm \
|
||||
--platform="$PLATFORM" \
|
||||
--platform="${PLATFORM}" \
|
||||
--name="${REPOSITORY_NAME,,}" \
|
||||
--hostname="${REPOSITORY_NAME,,}" \
|
||||
--mount=source="$VOLUMENAME",target=/data \
|
||||
--mount=source="${VOLUMENAME}",target=/data \
|
||||
${MODELSPATH:+-u "$(id -u):$(id -g)"} \
|
||||
${MODELSPATH:+--mount=type=bind,source=${MODELSPATH},target=/data/models} \
|
||||
${HUGGING_FACE_HUB_TOKEN:+--env=HUGGING_FACE_HUB_TOKEN=${HUGGING_FACE_HUB_TOKEN}} \
|
||||
${MODELSPATH:+--mount="type=bind,source=${MODELSPATH},target=/data/models"} \
|
||||
${HUGGING_FACE_HUB_TOKEN:+--env="HUGGING_FACE_HUB_TOKEN=${HUGGING_FACE_HUB_TOKEN}"} \
|
||||
--publish=9090:9090 \
|
||||
--cap-add=sys_nice \
|
||||
${GPU_FLAGS:+--gpus=${GPU_FLAGS}} \
|
||||
"$INVOKEAI_TAG" ${1:+$@}
|
||||
${GPU_FLAGS:+--gpus="${GPU_FLAGS}"} \
|
||||
"${CONTAINER_IMAGE}" ${1:+$@}
|
@ -14,22 +14,15 @@ title: Installing Manually
|
||||
|
||||
## Introduction
|
||||
|
||||
You have two choices for manual installation. The [first one](#pip-Install) uses
|
||||
basic Python virtual environment (`venv`) command and `pip` package manager. The
|
||||
[second one](#Conda-method) uses Anaconda3 package manager (`conda`). Both
|
||||
methods require you to enter commands on the terminal, also known as the
|
||||
"console".
|
||||
|
||||
Note that the `conda` installation method is currently deprecated and will not
|
||||
be supported at some point in the future.
|
||||
!!! tip As of InvokeAI v2.3.0 installation using the `conda` package manager
|
||||
is no longer being supported. It will likely still work, but we are not testing
|
||||
this installation method.
|
||||
|
||||
On Windows systems, you are encouraged to install and use the
|
||||
[PowerShell](https://learn.microsoft.com/en-us/powershell/scripting/install/installing-powershell-on-windows?view=powershell-7.3),
|
||||
which provides compatibility with Linux and Mac shells and nice features such as
|
||||
command-line completion.
|
||||
|
||||
## pip Install
|
||||
|
||||
To install InvokeAI with virtual environments and the PIP package manager,
|
||||
please follow these steps:
|
||||
|
||||
@ -50,44 +43,64 @@ please follow these steps:
|
||||
This will create InvokeAI folder where you will follow the rest of the
|
||||
steps.
|
||||
|
||||
3. From within the InvokeAI top-level directory, create and activate a virtual
|
||||
environment named `.venv` and prompt displaying `InvokeAI`:
|
||||
|
||||
```bash
|
||||
python -m venv .venv \
|
||||
--prompt InvokeAI \
|
||||
--upgrade-deps
|
||||
source .venv/bin/activate
|
||||
```
|
||||
|
||||
4. Make sure that pip is installed in your virtual environment an up to date:
|
||||
|
||||
```bash
|
||||
python -m ensurepip \
|
||||
--upgrade
|
||||
python -m pip install \
|
||||
--upgrade pip
|
||||
```
|
||||
|
||||
5. Install Package
|
||||
|
||||
```bash
|
||||
pip install --use-pep517 .
|
||||
```
|
||||
|
||||
6. Set up the runtime directory
|
||||
|
||||
In this step you will initialize a runtime directory that will contain the
|
||||
models, model config files, directory for textual inversion embeddings, and
|
||||
your outputs. This keeps the runtime directory separate from the source code
|
||||
and aids in updating.
|
||||
|
||||
You may pick any location for this directory using the `--root_dir` option
|
||||
(abbreviated --root). If you don't pass this option, it will default to
|
||||
`~/invokeai`.
|
||||
3. Create a directory of to contain your InvokeAI installation (known as the "runtime"
|
||||
or "root" directory). This is where your models, configs, and outputs will live
|
||||
by default. Please keep in mind the disk space requirements - you will need at
|
||||
least 18GB (as of this writing) for the models and the virtual environment.
|
||||
From now on we will refer to this directory as `INVOKEAI_ROOT`. This keeps the
|
||||
runtime directory separate from the source code and aids in updating.
|
||||
|
||||
```bash
|
||||
invokeai-configure --root_dir ~/Programs/invokeai
|
||||
export INVOKEAI_ROOT="~/invokeai"
|
||||
mkdir ${INVOKEAI_ROOT}
|
||||
```
|
||||
|
||||
4. From within the InvokeAI top-level directory, create and activate a virtual
|
||||
environment named `.venv` and prompt displaying `InvokeAI`:
|
||||
|
||||
```bash
|
||||
python -m venv ${INVOKEAI_ROOT}/.venv \
|
||||
--prompt invokeai \
|
||||
--upgrade-deps \
|
||||
--copies
|
||||
source ${INVOKEAI_ROOT}/.venv/bin/activate
|
||||
```
|
||||
|
||||
!!! warning
|
||||
|
||||
You **may** create your virtual environment anywhere on the filesystem.
|
||||
But IF you choose a location that is *not* inside the `$INVOKEAI_ROOT` directory,
|
||||
then you must set the `INVOKEAI_ROOT` environment variable in your shell environment,
|
||||
for example, by editing `~/.bashrc` or `~/.zshrc` files, or setting the Windows environment
|
||||
variable. Refer to your operating system / shell documentation for the correct way of doing so.
|
||||
|
||||
5. Make sure that pip is installed in your virtual environment an up to date:
|
||||
|
||||
```bash
|
||||
python -m pip install --upgrade pip
|
||||
```
|
||||
|
||||
6. Install Package
|
||||
|
||||
```bash
|
||||
pip install --use-pep517 .
|
||||
```
|
||||
|
||||
Deactivate and reactivate your runtime directory so that the invokeai-specific commands
|
||||
become available in the environment
|
||||
|
||||
```
|
||||
deactivate && source ${INVOKEAI_ROOT}/.venv/bin/activate
|
||||
```
|
||||
|
||||
7. Set up the runtime directory
|
||||
|
||||
In this step you will initialize your runtime directory with the downloaded
|
||||
models, model config files, directory for textual inversion embeddings, and
|
||||
your outputs.
|
||||
|
||||
```bash
|
||||
invokeai-configure --root ${INVOKEAI_ROOT}
|
||||
```
|
||||
|
||||
The script `invokeai-configure` will interactively guide you through the
|
||||
@ -101,11 +114,6 @@ please follow these steps:
|
||||
If you get an error message about a module not being installed, check that
|
||||
the `invokeai` environment is active and if not, repeat step 5.
|
||||
|
||||
Note that `invokeai-configure` and `invokeai` should be installed under your
|
||||
virtual environment directory and the system should find them on the PATH.
|
||||
If this isn't working on your system, you can call the scripts directory
|
||||
using `python scripts/configure_invokeai.py` and `python scripts/invoke.py`.
|
||||
|
||||
!!! tip
|
||||
|
||||
If you have already downloaded the weights file(s) for another Stable
|
||||
@ -127,19 +135,19 @@ please follow these steps:
|
||||
=== "CLI"
|
||||
|
||||
```bash
|
||||
invoke.py --root ~/Programs/invokeai
|
||||
invokeai --root ~/invokeai
|
||||
```
|
||||
|
||||
=== "local Webserver"
|
||||
|
||||
```bash
|
||||
invoke.py --web --root ~/Programs/invokeai
|
||||
invokeai --web --root ~/invokeai
|
||||
```
|
||||
|
||||
=== "Public Webserver"
|
||||
|
||||
```bash
|
||||
invoke.py --web --host 0.0.0.0 --root ~/Programs/invokeai
|
||||
invokeai --web --host 0.0.0.0 --root ~/invokeai
|
||||
```
|
||||
|
||||
If you choose the run the web interface, point your browser at
|
||||
@ -147,7 +155,8 @@ please follow these steps:
|
||||
|
||||
!!! tip
|
||||
|
||||
You can permanently set the location of the runtime directory by setting the environment variable INVOKEAI_ROOT to the path of the directory.
|
||||
You can permanently set the location of the runtime directory by setting the environment variable `INVOKEAI_ROOT` to the path of the directory. As mentioned previously, this is
|
||||
**required** if your virtual environment is located outside of your runtime directory.
|
||||
|
||||
8. Render away!
|
||||
|
||||
@ -163,38 +172,6 @@ please follow these steps:
|
||||
then launch `invokeai` command. If you forget to activate the virtual
|
||||
environment you will most likeley receive a `command not found` error.
|
||||
|
||||
!!! tip
|
||||
|
||||
Do not move the source code repository after installation. The virtual environment directory has absolute paths in it that get confused if the directory is moved.
|
||||
|
||||
## Creating an "install" version of InvokeAI
|
||||
|
||||
If you wish you can install InvokeAI and all its dependencies in the runtime
|
||||
directory. This allows you to delete the source code repository and eliminates
|
||||
the need to provide `--root_dir` at startup time. Note that this method only
|
||||
works with the PIP method.
|
||||
|
||||
1. Follow the instructions for the PIP install, but in step #2 put the virtual
|
||||
environment into the runtime directory. For example, assuming the runtime
|
||||
directory lives in `~/Programs/invokeai`, you'd run:
|
||||
|
||||
```bash
|
||||
python -m venv ~/Programs/invokeai
|
||||
```
|
||||
|
||||
2. Now follow steps 3 to 5 in the PIP recipe, ending with the `pip install`
|
||||
step.
|
||||
|
||||
3. Run one additional step while you are in the source code repository directory
|
||||
|
||||
```
|
||||
pip install --use-pep517 . # note the dot in the end!!!
|
||||
```
|
||||
|
||||
4. That's all! Now, whenever you activate the virtual environment, `invokeai`
|
||||
will know where to look for the runtime directory without needing a
|
||||
`--root_dir` argument. In addition, you can now move or delete the source
|
||||
code repository entirely.
|
||||
|
||||
(Don't move the runtime directory!)
|
||||
!!! warning
|
||||
|
||||
Do not move the runtime directory after installation. The virtual environment has absolute paths in it that get confused if the directory is moved.
|
||||
|
@ -1 +0,0 @@
|
||||
010_INSTALL_AUTOMATED.md
|
@ -1,374 +0,0 @@
|
||||
---
|
||||
title: Manual Installation
|
||||
---
|
||||
|
||||
<figure markdown>
|
||||
# :fontawesome-brands-linux: Linux | :fontawesome-brands-apple: macOS | :fontawesome-brands-windows: Windows
|
||||
</figure>
|
||||
|
||||
!!! warning "This is for advanced Users"
|
||||
|
||||
who are already experienced with using conda or pip
|
||||
|
||||
## Introduction
|
||||
|
||||
You have two choices for manual installation, the [first one](#Conda_method)
|
||||
based on the Anaconda3 package manager (`conda`), and
|
||||
[a second one](#PIP_method) which uses basic Python virtual environment (`venv`)
|
||||
commands and the PIP package manager. Both methods require you to enter commands
|
||||
on the terminal, also known as the "console".
|
||||
|
||||
On Windows systems you are encouraged to install and use the
|
||||
[Powershell](https://learn.microsoft.com/en-us/powershell/scripting/install/installing-powershell-on-windows?view=powershell-7.3),
|
||||
which provides compatibility with Linux and Mac shells and nice features such as
|
||||
command-line completion.
|
||||
|
||||
### Conda method
|
||||
|
||||
1. Check that your system meets the
|
||||
[hardware requirements](index.md#Hardware_Requirements) and has the
|
||||
appropriate GPU drivers installed. In particular, if you are a Linux user
|
||||
with an AMD GPU installed, you may need to install the
|
||||
[ROCm driver](https://rocmdocs.amd.com/en/latest/Installation_Guide/Installation-Guide.html).
|
||||
|
||||
InvokeAI does not yet support Windows machines with AMD GPUs due to the lack
|
||||
of ROCm driver support on this platform.
|
||||
|
||||
To confirm that the appropriate drivers are installed, run `nvidia-smi` on
|
||||
NVIDIA/CUDA systems, and `rocm-smi` on AMD systems. These should return
|
||||
information about the installed video card.
|
||||
|
||||
Macintosh users with MPS acceleration, or anybody with a CPU-only system,
|
||||
can skip this step.
|
||||
|
||||
2. You will need to install Anaconda3 and Git if they are not already
|
||||
available. Use your operating system's preferred package manager, or
|
||||
download the installers manually. You can find them here:
|
||||
|
||||
- [Anaconda3](https://www.anaconda.com/)
|
||||
- [git](https://git-scm.com/downloads)
|
||||
|
||||
3. Clone the [InvokeAI](https://github.com/invoke-ai/InvokeAI) source code from
|
||||
GitHub:
|
||||
|
||||
```bash
|
||||
git clone https://github.com/invoke-ai/InvokeAI.git
|
||||
```
|
||||
|
||||
This will create InvokeAI folder where you will follow the rest of the
|
||||
steps.
|
||||
|
||||
4. Enter the newly-created InvokeAI folder:
|
||||
|
||||
```bash
|
||||
cd InvokeAI
|
||||
```
|
||||
|
||||
From this step forward make sure that you are working in the InvokeAI
|
||||
directory!
|
||||
|
||||
5. Select the appropriate environment file:
|
||||
|
||||
We have created a series of environment files suited for different operating
|
||||
systems and GPU hardware. They are located in the
|
||||
`environments-and-requirements` directory:
|
||||
|
||||
<figure markdown>
|
||||
|
||||
| filename | OS |
|
||||
| :----------------------: | :----------------------------: |
|
||||
| environment-lin-amd.yml | Linux with an AMD (ROCm) GPU |
|
||||
| environment-lin-cuda.yml | Linux with an NVIDIA CUDA GPU |
|
||||
| environment-mac.yml | Macintosh |
|
||||
| environment-win-cuda.yml | Windows with an NVIDA CUDA GPU |
|
||||
|
||||
</figure>
|
||||
|
||||
Choose the appropriate environment file for your system and link or copy it
|
||||
to `environment.yml` in InvokeAI's top-level directory. To do so, run
|
||||
following command from the repository-root:
|
||||
|
||||
!!! Example ""
|
||||
|
||||
=== "Macintosh and Linux"
|
||||
|
||||
!!! todo "Replace `xxx` and `yyy` with the appropriate OS and GPU codes as seen in the table above"
|
||||
|
||||
```bash
|
||||
ln -sf environments-and-requirements/environment-xxx-yyy.yml environment.yml
|
||||
```
|
||||
|
||||
When this is done, confirm that a file `environment.yml` has been linked in
|
||||
the InvokeAI root directory and that it points to the correct file in the
|
||||
`environments-and-requirements`.
|
||||
|
||||
```bash
|
||||
ls -la
|
||||
```
|
||||
|
||||
=== "Windows"
|
||||
|
||||
!!! todo " Since it requires admin privileges to create links, we will use the copy command to create your `environment.yml`"
|
||||
|
||||
```cmd
|
||||
copy environments-and-requirements\environment-win-cuda.yml environment.yml
|
||||
```
|
||||
|
||||
Afterwards verify that the file `environment.yml` has been created, either via the
|
||||
explorer or by using the command `dir` from the terminal
|
||||
|
||||
```cmd
|
||||
dir
|
||||
```
|
||||
|
||||
!!! warning "Do not try to run conda on directly on the subdirectory environments file. This won't work. Instead, copy or link it to the top-level directory as shown."
|
||||
|
||||
6. Create the conda environment:
|
||||
|
||||
```bash
|
||||
conda env update
|
||||
```
|
||||
|
||||
This will create a new environment named `invokeai` and install all InvokeAI
|
||||
dependencies into it. If something goes wrong you should take a look at
|
||||
[troubleshooting](#troubleshooting).
|
||||
|
||||
7. Activate the `invokeai` environment:
|
||||
|
||||
In order to use the newly created environment you will first need to
|
||||
activate it
|
||||
|
||||
```bash
|
||||
conda activate invokeai
|
||||
```
|
||||
|
||||
Your command-line prompt should change to indicate that `invokeai` is active
|
||||
by prepending `(invokeai)`.
|
||||
|
||||
8. Pre-Load the model weights files:
|
||||
|
||||
!!! tip
|
||||
|
||||
If you have already downloaded the weights file(s) for another Stable
|
||||
Diffusion distribution, you may skip this step (by selecting "skip" when
|
||||
prompted) and configure InvokeAI to use the previously-downloaded files. The
|
||||
process for this is described in [here](050_INSTALLING_MODELS.md).
|
||||
|
||||
```bash
|
||||
python scripts/configure_invokeai.py
|
||||
```
|
||||
|
||||
The script `configure_invokeai.py` will interactively guide you through the
|
||||
process of downloading and installing the weights files needed for InvokeAI.
|
||||
Note that the main Stable Diffusion weights file is protected by a license
|
||||
agreement that you have to agree to. The script will list the steps you need
|
||||
to take to create an account on the site that hosts the weights files,
|
||||
accept the agreement, and provide an access token that allows InvokeAI to
|
||||
legally download and install the weights files.
|
||||
|
||||
If you get an error message about a module not being installed, check that
|
||||
the `invokeai` environment is active and if not, repeat step 5.
|
||||
|
||||
9. Run the command-line- or the web- interface:
|
||||
|
||||
!!! example ""
|
||||
|
||||
!!! warning "Make sure that the conda environment is activated, which should create `(invokeai)` in front of your prompt!"
|
||||
|
||||
=== "CLI"
|
||||
|
||||
```bash
|
||||
python scripts/invoke.py
|
||||
```
|
||||
|
||||
=== "local Webserver"
|
||||
|
||||
```bash
|
||||
python scripts/invoke.py --web
|
||||
```
|
||||
|
||||
=== "Public Webserver"
|
||||
|
||||
```bash
|
||||
python scripts/invoke.py --web --host 0.0.0.0
|
||||
```
|
||||
|
||||
If you choose the run the web interface, point your browser at
|
||||
http://localhost:9090 in order to load the GUI.
|
||||
|
||||
10. Render away!
|
||||
|
||||
Browse the [features](../features/CLI.md) section to learn about all the things you
|
||||
can do with InvokeAI.
|
||||
|
||||
Note that some GPUs are slow to warm up. In particular, when using an AMD
|
||||
card with the ROCm driver, you may have to wait for over a minute the first
|
||||
time you try to generate an image. Fortunately, after the warm up period
|
||||
rendering will be fast.
|
||||
|
||||
11. Subsequently, to relaunch the script, be sure to run "conda activate
|
||||
invokeai", enter the `InvokeAI` directory, and then launch the invoke
|
||||
script. If you forget to activate the 'invokeai' environment, the script
|
||||
will fail with multiple `ModuleNotFound` errors.
|
||||
|
||||
## Updating to newer versions of the script
|
||||
|
||||
This distribution is changing rapidly. If you used the `git clone` method
|
||||
(step 5) to download the InvokeAI directory, then to update to the latest and
|
||||
greatest version, launch the Anaconda window, enter `InvokeAI` and type:
|
||||
|
||||
```bash
|
||||
git pull
|
||||
conda env update
|
||||
python scripts/configure_invokeai.py --no-interactive #optional
|
||||
```
|
||||
|
||||
This will bring your local copy into sync with the remote one. The last step may
|
||||
be needed to take advantage of new features or released models. The
|
||||
`--no-interactive` flag will prevent the script from prompting you to download
|
||||
the big Stable Diffusion weights files.
|
||||
|
||||
## pip Install
|
||||
|
||||
To install InvokeAI with only the PIP package manager, please follow these
|
||||
steps:
|
||||
|
||||
1. Make sure you are using Python 3.9 or higher. The rest of the install
|
||||
procedure depends on this:
|
||||
|
||||
```bash
|
||||
python -V
|
||||
```
|
||||
|
||||
2. Install the `virtualenv` tool if you don't have it already:
|
||||
|
||||
```bash
|
||||
pip install virtualenv
|
||||
```
|
||||
|
||||
3. From within the InvokeAI top-level directory, create and activate a virtual
|
||||
environment named `invokeai`:
|
||||
|
||||
```bash
|
||||
virtualenv invokeai
|
||||
source invokeai/bin/activate
|
||||
```
|
||||
|
||||
4. Run PIP
|
||||
|
||||
```bash
|
||||
pip --python invokeai install --use-pep517 .
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
Here are some common issues and their suggested solutions.
|
||||
|
||||
### Conda
|
||||
|
||||
#### Conda fails before completing `conda update`
|
||||
|
||||
The usual source of these errors is a package incompatibility. While we have
|
||||
tried to minimize these, over time packages get updated and sometimes introduce
|
||||
incompatibilities.
|
||||
|
||||
We suggest that you search
|
||||
[Issues](https://github.com/invoke-ai/InvokeAI/issues) or the "bugs-and-support"
|
||||
channel of the [InvokeAI Discord](https://discord.gg/ZmtBAhwWhy).
|
||||
|
||||
You may also try to install the broken packages manually using PIP. To do this,
|
||||
activate the `invokeai` environment, and run `pip install` with the name and
|
||||
version of the package that is causing the incompatibility. For example:
|
||||
|
||||
```bash
|
||||
pip install test-tube==0.7.5
|
||||
```
|
||||
|
||||
You can keep doing this until all requirements are satisfied and the `invoke.py`
|
||||
script runs without errors. Please report to
|
||||
[Issues](https://github.com/invoke-ai/InvokeAI/issues) what you were able to do
|
||||
to work around the problem so that others can benefit from your investigation.
|
||||
|
||||
### Create Conda Environment fails on MacOS
|
||||
|
||||
If conda create environment fails with lmdb error, this is most likely caused by Clang.
|
||||
Run brew config to see which Clang is installed on your Mac. If Clang isn't installed, that's causing the error.
|
||||
Start by installing additional XCode command line tools, followed by brew install llvm.
|
||||
|
||||
```bash
|
||||
xcode-select --install
|
||||
brew install llvm
|
||||
```
|
||||
|
||||
If brew config has Clang installed, update to the latest llvm and try creating the environment again.
|
||||
|
||||
#### `configure_invokeai.py` or `invoke.py` crashes at an early stage
|
||||
|
||||
This is usually due to an incomplete or corrupted Conda install. Make sure you
|
||||
have linked to the correct environment file and run `conda update` again.
|
||||
|
||||
If the problem persists, a more extreme measure is to clear Conda's caches and
|
||||
remove the `invokeai` environment:
|
||||
|
||||
```bash
|
||||
conda deactivate
|
||||
conda env remove -n invokeai
|
||||
conda clean -a
|
||||
conda update
|
||||
```
|
||||
|
||||
This removes all cached library files, including ones that may have been
|
||||
corrupted somehow. (This is not supposed to happen, but does anyway).
|
||||
|
||||
#### `invoke.py` crashes at a later stage
|
||||
|
||||
If the CLI or web site had been working ok, but something unexpected happens
|
||||
later on during the session, you've encountered a code bug that is probably
|
||||
unrelated to an install issue. Please search
|
||||
[Issues](https://github.com/invoke-ai/InvokeAI/issues), file a bug report, or
|
||||
ask for help on [Discord](https://discord.gg/ZmtBAhwWhy)
|
||||
|
||||
#### My renders are running very slowly
|
||||
|
||||
You may have installed the wrong torch (machine learning) package, and the
|
||||
system is running on CPU rather than the GPU. To check, look at the log messages
|
||||
that appear when `invoke.py` is first starting up. One of the earlier lines
|
||||
should say `Using device type cuda`. On AMD systems, it will also say "cuda",
|
||||
and on Macintoshes, it should say "mps". If instead the message says it is
|
||||
running on "cpu", then you may need to install the correct torch library.
|
||||
|
||||
You may be able to fix this by installing a different torch library. Here are
|
||||
the magic incantations for Conda and PIP.
|
||||
|
||||
!!! todo "For CUDA systems"
|
||||
|
||||
- conda
|
||||
|
||||
```bash
|
||||
conda install pytorch torchvision torchaudio pytorch-cuda=11.6 -c pytorch -c nvidia
|
||||
```
|
||||
|
||||
- pip
|
||||
|
||||
```bash
|
||||
pip3 install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu116
|
||||
```
|
||||
|
||||
!!! todo "For AMD systems"
|
||||
|
||||
- conda
|
||||
|
||||
```bash
|
||||
conda activate invokeai
|
||||
pip3 install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/rocm5.2/
|
||||
```
|
||||
|
||||
- pip
|
||||
|
||||
```bash
|
||||
pip3 install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/rocm5.2/
|
||||
```
|
||||
|
||||
More information and troubleshooting tips can be found at https://pytorch.org.
|
@ -19,7 +19,7 @@ echo Building installer for version $VERSION
|
||||
echo "Be certain that you're in the 'installer' directory before continuing."
|
||||
read -p "Press any key to continue, or CTRL-C to exit..."
|
||||
|
||||
read -e -p "Commit and tag this repo with ${VERSION} and 'latest'? [n]: " input
|
||||
read -e -p "Commit and tag this repo with ${VERSION} and 'v2.3-latest'? [n]: " input
|
||||
RESPONSE=${input:='n'}
|
||||
if [ "$RESPONSE" == 'y' ]; then
|
||||
git commit -a
|
||||
@ -28,7 +28,7 @@ if [ "$RESPONSE" == 'y' ]; then
|
||||
echo "Existing/invalid tag"
|
||||
exit -1
|
||||
fi
|
||||
git push origin :refs/tags/latest
|
||||
git push origin :refs/tags/v2.3-latest
|
||||
git tag -fa latest
|
||||
fi
|
||||
|
||||
|
25
installer/install.sh.in
Normal file → Executable file
25
installer/install.sh.in
Normal file → Executable file
@ -3,5 +3,28 @@
|
||||
# make sure we are not already in a venv
|
||||
# (don't need to check status)
|
||||
deactivate >/dev/null 2>&1
|
||||
scriptdir=$(dirname "$0")
|
||||
cd $scriptdir
|
||||
|
||||
exec python3 $(dirname $0)/main.py ${@}
|
||||
function version { echo "$@" | awk -F. '{ printf("%d%03d%03d%03d\n", $1,$2,$3,$4); }'; }
|
||||
|
||||
MINIMUM_PYTHON_VERSION=3.9.0
|
||||
PYTHON=""
|
||||
for candidate in python3.10 python3.9 python3 python python3.11 ; do
|
||||
if ppath=`which $candidate`; then
|
||||
python_version=$($ppath -V | awk '{ print $2 }')
|
||||
if [ $(version $python_version) -ge $(version "$MINIMUM_PYTHON_VERSION") ]; then
|
||||
PYTHON=$ppath
|
||||
break
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
if [ -z "$PYTHON" ]; then
|
||||
echo "A suitable Python interpreter could not be found"
|
||||
echo "Please install Python 3.9 or higher before running this script. See instructions at $INSTRUCTIONS for help."
|
||||
read -p "Press any key to exit"
|
||||
exit -1
|
||||
fi
|
||||
|
||||
exec $PYTHON ./main.py ${@}
|
||||
|
@ -38,7 +38,8 @@ class Installer:
|
||||
self.reqs = INSTALLER_REQS
|
||||
self.preflight()
|
||||
if os.getenv("VIRTUAL_ENV") is not None:
|
||||
raise NotImplementedError("A virtual environment is already activated. Please 'deactivate' before installation.")
|
||||
print("A virtual environment is already activated. Please 'deactivate' before installation.")
|
||||
sys.exit(-1)
|
||||
self.bootstrap()
|
||||
|
||||
def preflight(self) -> None:
|
||||
@ -129,7 +130,14 @@ class Installer:
|
||||
else:
|
||||
venv_dir = self.dest / ".venv"
|
||||
|
||||
venv.create(venv_dir, with_pip=True)
|
||||
# Prefer to copy python executables
|
||||
# so that updates to system python don't break InvokeAI
|
||||
try:
|
||||
venv.create(venv_dir, with_pip=True)
|
||||
# If installing over an existing environment previously created with symlinks,
|
||||
# the executables will fail to copy. Keep symlinks in that case
|
||||
except shutil.SameFileError:
|
||||
venv.create(venv_dir, with_pip=True, symlinks=True)
|
||||
|
||||
# upgrade pip in Python 3.9 environments
|
||||
if int(platform.python_version_tuple()[1]) == 9:
|
||||
@ -276,7 +284,7 @@ class InvokeAiInstance:
|
||||
if FF_USE_LOCAL_WHEEL:
|
||||
# if no wheel, try to do a source install before giving up
|
||||
try:
|
||||
src = str(next(Path.cwd().glob("InvokeAI-*.whl")))
|
||||
src = str(next(Path(__file__).parent.glob("InvokeAI-*.whl")))
|
||||
except StopIteration:
|
||||
try:
|
||||
src = Path(__file__).parents[1].expanduser().resolve()
|
||||
@ -348,7 +356,10 @@ class InvokeAiInstance:
|
||||
|
||||
ext = "bat" if OS == "Windows" else "sh"
|
||||
|
||||
for script in ["invoke", "update"]:
|
||||
#scripts = ['invoke', 'update']
|
||||
scripts = ['invoke']
|
||||
|
||||
for script in scripts:
|
||||
src = Path(__file__).parent / "templates" / f"{script}.{ext}.in"
|
||||
dest = self.runtime / f"{script}.{ext}"
|
||||
shutil.copy(src, dest)
|
||||
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
4
invokeai/frontend/dist/index.html
vendored
4
invokeai/frontend/dist/index.html
vendored
@ -7,7 +7,7 @@
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>InvokeAI - A Stable Diffusion Toolkit</title>
|
||||
<link rel="shortcut icon" type="icon" href="./assets/favicon.0d253ced.ico" />
|
||||
<script type="module" crossorigin src="./assets/index.92e1e2e8.js"></script>
|
||||
<script type="module" crossorigin src="./assets/index.dd4ad8a1.js"></script>
|
||||
<link rel="stylesheet" href="./assets/index.8badc8b4.css">
|
||||
<script type="module">try{import.meta.url;import("_").catch(()=>1);}catch(e){}window.__vite_is_modern_browser=true;</script>
|
||||
<script type="module">!function(){if(window.__vite_is_modern_browser)return;console.warn("vite: loading legacy build because dynamic import or import.meta.url is unsupported, syntax error above should be ignored");var e=document.getElementById("vite-legacy-polyfill"),n=document.createElement("script");n.src=e.src,n.onload=function(){System.import(document.getElementById('vite-legacy-entry').getAttribute('data-src'))},document.body.appendChild(n)}();</script>
|
||||
@ -18,6 +18,6 @@
|
||||
|
||||
<script nomodule>!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",(function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()}),!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script>
|
||||
<script nomodule crossorigin id="vite-legacy-polyfill" src="./assets/polyfills-legacy-dde3a68a.js"></script>
|
||||
<script nomodule crossorigin id="vite-legacy-entry" data-src="./assets/index-legacy-eaf1c1d4.js">System.import(document.getElementById('vite-legacy-entry').getAttribute('data-src'))</script>
|
||||
<script nomodule crossorigin id="vite-legacy-entry" data-src="./assets/index-legacy-8219c08f.js">System.import(document.getElementById('vite-legacy-entry').getAttribute('data-src'))</script>
|
||||
</body>
|
||||
</html>
|
||||
|
@ -21,6 +21,7 @@
|
||||
"langSpanish": "Spanish",
|
||||
"langJapanese": "Japanese",
|
||||
"langDutch": "Dutch",
|
||||
"langUkranian": "Ukranian",
|
||||
"text2img": "Text To Image",
|
||||
"img2img": "Image To Image",
|
||||
"unifiedCanvas": "Unified Canvas",
|
||||
|
@ -21,6 +21,7 @@
|
||||
"langSpanish": "Spanish",
|
||||
"langJapanese": "Japanese",
|
||||
"langDutch": "Dutch",
|
||||
"langUkranian": "Ukranian",
|
||||
"text2img": "Text To Image",
|
||||
"img2img": "Image To Image",
|
||||
"unifiedCanvas": "Unified Canvas",
|
||||
|
63
invokeai/frontend/dist/locales/common/fr.json
vendored
63
invokeai/frontend/dist/locales/common/fr.json
vendored
@ -1 +1,62 @@
|
||||
{}
|
||||
{
|
||||
"hotkeysLabel": "Raccourcis clavier",
|
||||
"themeLabel": "Thème",
|
||||
"languagePickerLabel": "Sélecteur de langue",
|
||||
"reportBugLabel": "Signaler un bug",
|
||||
"githubLabel": "Github",
|
||||
"discordLabel": "Discord",
|
||||
"settingsLabel": "Paramètres",
|
||||
"darkTheme": "Sombre",
|
||||
"lightTheme": "Clair",
|
||||
"greenTheme": "Vert",
|
||||
"langEnglish": "Anglais",
|
||||
"langRussian": "Russe",
|
||||
"langItalian": "Italien",
|
||||
"langBrPortuguese": "Portugais (Brésilien)",
|
||||
"langGerman": "Allemand",
|
||||
"langPortuguese": "Portugais",
|
||||
"langFrench": "Français",
|
||||
"langPolish": "Polonais",
|
||||
"langSimplifiedChinese": "Chinois simplifié",
|
||||
"langSpanish": "Espagnol",
|
||||
"langJapanese": "Japonais",
|
||||
"langDutch": "Néerlandais",
|
||||
"text2img": "Texte en image",
|
||||
"img2img": "Image en image",
|
||||
"unifiedCanvas": "Canvas unifié",
|
||||
"nodes": "Nœuds",
|
||||
"nodesDesc": "Un système basé sur les nœuds pour la génération d'images est actuellement en développement. Restez à l'écoute pour des mises à jour à ce sujet.",
|
||||
"postProcessing": "Post-traitement",
|
||||
"postProcessDesc1": "Invoke AI offre une grande variété de fonctionnalités de post-traitement. Le redimensionnement d'images et la restauration de visages sont déjà disponibles dans la WebUI. Vous pouvez y accéder à partir du menu Options avancées des onglets Texte en image et Image en image. Vous pouvez également traiter les images directement en utilisant les boutons d'action d'image ci-dessus l'affichage d'image actuel ou dans le visualiseur.",
|
||||
"postProcessDesc2": "Une interface utilisateur dédiée sera bientôt disponible pour faciliter les workflows de post-traitement plus avancés.",
|
||||
"postProcessDesc3": "L'interface en ligne de commande d'Invoke AI offre diverses autres fonctionnalités, notamment Embiggen.",
|
||||
"training": "Formation",
|
||||
"trainingDesc1": "Un workflow dédié pour former vos propres embeddings et checkpoints en utilisant Textual Inversion et Dreambooth depuis l'interface web.",
|
||||
"trainingDesc2": "InvokeAI prend déjà en charge la formation d'embeddings personnalisés en utilisant Textual Inversion en utilisant le script principal.",
|
||||
"upload": "Télécharger",
|
||||
"close": "Fermer",
|
||||
"load": "Charger",
|
||||
"back": "Retour",
|
||||
"statusConnected": "Connecté",
|
||||
"statusDisconnected": "Déconnecté",
|
||||
"statusError": "Erreur",
|
||||
"statusPreparing": "Préparation",
|
||||
"statusProcessingCanceled": "Traitement Annulé",
|
||||
"statusProcessingComplete": "Traitement Terminé",
|
||||
"statusGenerating": "Génération",
|
||||
"statusGeneratingTextToImage": "Génération Texte vers Image",
|
||||
"statusGeneratingImageToImage": "Génération Image vers Image",
|
||||
"statusGeneratingInpainting": "Génération de Réparation",
|
||||
"statusGeneratingOutpainting": "Génération de Completion",
|
||||
"statusGenerationComplete": "Génération Terminée",
|
||||
"statusIterationComplete": "Itération Terminée",
|
||||
"statusSavingImage": "Sauvegarde de l'Image",
|
||||
"statusRestoringFaces": "Restauration des Visages",
|
||||
"statusRestoringFacesGFPGAN": "Restauration des Visages (GFPGAN)",
|
||||
"statusRestoringFacesCodeFormer": "Restauration des Visages (CodeFormer)",
|
||||
"statusUpscaling": "Mise à Échelle",
|
||||
"statusUpscalingESRGAN": "Mise à Échelle (ESRGAN)",
|
||||
"statusLoadingModel": "Chargement du Modèle",
|
||||
"statusModelChanged": "Modèle Changé"
|
||||
|
||||
}
|
||||
|
@ -19,6 +19,8 @@
|
||||
"langPolish": "Polacco",
|
||||
"langSimplifiedChinese": "Cinese semplificato",
|
||||
"langSpanish": "Spagnolo",
|
||||
"langJapanese": "Giapponese",
|
||||
"langDutch": "Olandese",
|
||||
"text2img": "Testo a Immagine",
|
||||
"img2img": "Immagine a Immagine",
|
||||
"unifiedCanvas": "Tela unificata",
|
||||
@ -34,6 +36,7 @@
|
||||
"upload": "Caricamento",
|
||||
"close": "Chiudi",
|
||||
"load": "Carica",
|
||||
"back": "Indietro",
|
||||
"statusConnected": "Collegato",
|
||||
"statusDisconnected": "Disconnesso",
|
||||
"statusError": "Errore",
|
||||
|
53
invokeai/frontend/dist/locales/common/ua.json
vendored
Normal file
53
invokeai/frontend/dist/locales/common/ua.json
vendored
Normal file
@ -0,0 +1,53 @@
|
||||
{
|
||||
"hotkeysLabel": "Гарячi клавіші",
|
||||
"themeLabel": "Тема",
|
||||
"languagePickerLabel": "Мова",
|
||||
"reportBugLabel": "Повідомити про помилку",
|
||||
"githubLabel": "Github",
|
||||
"discordLabel": "Discord",
|
||||
"settingsLabel": "Налаштування",
|
||||
"darkTheme": "Темна",
|
||||
"lightTheme": "Світла",
|
||||
"greenTheme": "Зелена",
|
||||
"langEnglish": "Англійська",
|
||||
"langRussian": "Російська",
|
||||
"langItalian": "Iталійська",
|
||||
"langPortuguese": "Португальська",
|
||||
"langFrench": "Французька",
|
||||
"text2img": "Зображення із тексту (text2img)",
|
||||
"img2img": "Зображення із зображення (img2img)",
|
||||
"unifiedCanvas": "Універсальне полотно",
|
||||
"nodes": "Вузли",
|
||||
"nodesDesc": "Система генерації зображень на основі нодів (вузлів) вже розробляється. Слідкуйте за новинами про цю чудову функцію.",
|
||||
"postProcessing": "Постобробка",
|
||||
"postProcessDesc1": "Invoke AI пропонує широкий спектр функцій постобробки. Збільшення зображення (upscale) та відновлення облич вже доступні в інтерфейсі. Отримайте доступ до них з меню 'Додаткові параметри' на вкладках 'Зображення із тексту' та 'Зображення із зображення'. Обробляйте зображення безпосередньо, використовуючи кнопки дій із зображеннями над поточним зображенням або в режимі перегляду.",
|
||||
"postProcessDesc2": "Найближчим часом буде випущено спеціальний інтерфейс для більш сучасних процесів постобробки.",
|
||||
"postProcessDesc3": "Інтерфейс командного рядка Invoke AI пропонує різні інші функції, включаючи збільшення Embiggen",
|
||||
"training": "Навчання",
|
||||
"trainingDesc1": "Спеціальний інтерфейс для навчання власних моделей з використанням Textual Inversion та Dreambooth",
|
||||
"trainingDesc2": "InvokeAI вже підтримує навчання моделей за допомогою TI, через інтерфейс командного рядка.",
|
||||
"upload": "Завантажити",
|
||||
"close": "Закрити",
|
||||
"load": "Завантажити",
|
||||
"statusConnected": "Підключено",
|
||||
"statusDisconnected": "Відключено",
|
||||
"statusError": "Помилка",
|
||||
"statusPreparing": "Підготування",
|
||||
"statusProcessingCanceled": "Обробка перервана",
|
||||
"statusProcessingComplete": "Обробка завершена",
|
||||
"statusGenerating": "Генерація",
|
||||
"statusGeneratingTextToImage": "Генерація зображення із тексту",
|
||||
"statusGeneratingImageToImage": "Генерація зображення із зображення",
|
||||
"statusGeneratingInpainting": "Домальовка всередині",
|
||||
"statusGeneratingOutpainting": "Домальовка зовні",
|
||||
"statusGenerationComplete": "Генерація завершена",
|
||||
"statusIterationComplete": "Iтерація завершена",
|
||||
"statusSavingImage": "Збереження зображення",
|
||||
"statusRestoringFaces": "Відновлення облич",
|
||||
"statusRestoringFacesGFPGAN": "Відновлення облич (GFPGAN)",
|
||||
"statusRestoringFacesCodeFormer": "Відновлення облич (CodeFormer)",
|
||||
"statusUpscaling": "Збільшення",
|
||||
"statusUpscalingESRGAN": "Збільшення (ESRGAN)",
|
||||
"statusLoadingModel": "Завантаження моделі",
|
||||
"statusModelChanged": "Модель змінено"
|
||||
}
|
17
invokeai/frontend/dist/locales/gallery/fr.json
vendored
17
invokeai/frontend/dist/locales/gallery/fr.json
vendored
@ -1 +1,16 @@
|
||||
{}
|
||||
{
|
||||
"generations": "Générations",
|
||||
"showGenerations": "Afficher les générations",
|
||||
"uploads": "Téléchargements",
|
||||
"showUploads": "Afficher les téléchargements",
|
||||
"galleryImageSize": "Taille de l'image",
|
||||
"galleryImageResetSize": "Réinitialiser la taille",
|
||||
"gallerySettings": "Paramètres de la galerie",
|
||||
"maintainAspectRatio": "Maintenir le rapport d'aspect",
|
||||
"autoSwitchNewImages": "Basculer automatiquement vers de nouvelles images",
|
||||
"singleColumnLayout": "Mise en page en colonne unique",
|
||||
"pinGallery": "Épingler la galerie",
|
||||
"allImagesLoaded": "Toutes les images chargées",
|
||||
"loadMore": "Charger plus",
|
||||
"noImagesInGallery": "Aucune image dans la galerie"
|
||||
}
|
||||
|
16
invokeai/frontend/dist/locales/gallery/ua.json
vendored
Normal file
16
invokeai/frontend/dist/locales/gallery/ua.json
vendored
Normal file
@ -0,0 +1,16 @@
|
||||
{
|
||||
"generations": "Генерації",
|
||||
"showGenerations": "Показувати генерації",
|
||||
"uploads": "Завантаження",
|
||||
"showUploads": "Показувати завантаження",
|
||||
"galleryImageSize": "Розмір зображень",
|
||||
"galleryImageResetSize": "Аатоматичний розмір",
|
||||
"gallerySettings": "Налаштування галереї",
|
||||
"maintainAspectRatio": "Зберігати пропорції",
|
||||
"autoSwitchNewImages": "Автоматично вибирати нові",
|
||||
"singleColumnLayout": "Одна колонка",
|
||||
"pinGallery": "Закріпити галерею",
|
||||
"allImagesLoaded": "Всі зображення завантажені",
|
||||
"loadMore": "Завантажити більше",
|
||||
"noImagesInGallery": "Зображень немає"
|
||||
}
|
208
invokeai/frontend/dist/locales/hotkeys/fr.json
vendored
208
invokeai/frontend/dist/locales/hotkeys/fr.json
vendored
@ -1 +1,207 @@
|
||||
{}
|
||||
{
|
||||
"keyboardShortcuts": "Raccourcis clavier",
|
||||
"appHotkeys": "Raccourcis de l'application",
|
||||
"GeneralHotkeys": "Raccourcis généraux",
|
||||
"galleryHotkeys": "Raccourcis de la galerie",
|
||||
"unifiedCanvasHotkeys": "Raccourcis du Canvas unifié",
|
||||
"invoke": {
|
||||
"title": "Invoquer",
|
||||
"desc": "Générer une image"
|
||||
},
|
||||
"cancel": {
|
||||
"title": "Annuler",
|
||||
"desc": "Annuler la génération d'image"
|
||||
},
|
||||
"focusPrompt": {
|
||||
"title": "Prompt de Focus",
|
||||
"desc": "Mettre en focus la zone de saisie de la commande"
|
||||
},
|
||||
"toggleOptions": {
|
||||
"title": "Basculer Options",
|
||||
"desc": "Ouvrir et fermer le panneau d'options"
|
||||
},
|
||||
"pinOptions": {
|
||||
"title": "Epingler Options",
|
||||
"desc": "Epingler le panneau d'options"
|
||||
},
|
||||
"toggleViewer": {
|
||||
"title": "Basculer Visionneuse",
|
||||
"desc": "Ouvrir et fermer la visionneuse d'image"
|
||||
},
|
||||
"toggleGallery": {
|
||||
"title": "Basculer Galerie",
|
||||
"desc": "Ouvrir et fermer le tiroir de galerie"
|
||||
},
|
||||
"maximizeWorkSpace": {
|
||||
"title": "Maximiser Espace de travail",
|
||||
"desc": "Fermer les panneaux et maximiser la zone de travail"
|
||||
},
|
||||
"changeTabs": {
|
||||
"title": "Changer d'onglets",
|
||||
"desc": "Passer à un autre espace de travail"
|
||||
},
|
||||
"consoleToggle": {
|
||||
"title": "Bascule de la console",
|
||||
"desc": "Ouvrir et fermer la console"
|
||||
},
|
||||
"setPrompt": {
|
||||
"title": "Définir le prompt",
|
||||
"desc": "Utiliser le prompt de l'image actuelle"
|
||||
},
|
||||
"setSeed": {
|
||||
"title": "Définir la graine",
|
||||
"desc": "Utiliser la graine de l'image actuelle"
|
||||
},
|
||||
"setParameters": {
|
||||
"title": "Définir les paramètres",
|
||||
"desc": "Utiliser tous les paramètres de l'image actuelle"
|
||||
},
|
||||
"restoreFaces": {
|
||||
"title": "Restaurer les faces",
|
||||
"desc": "Restaurer l'image actuelle"
|
||||
},
|
||||
"upscale": {
|
||||
"title": "Agrandir",
|
||||
"desc": "Agrandir l'image actuelle"
|
||||
},
|
||||
"showInfo": {
|
||||
"title": "Afficher les informations",
|
||||
"desc": "Afficher les informations de métadonnées de l'image actuelle"
|
||||
},
|
||||
"sendToImageToImage": {
|
||||
"title": "Envoyer à l'image à l'image",
|
||||
"desc": "Envoyer l'image actuelle à l'image à l'image"
|
||||
},
|
||||
"deleteImage": {
|
||||
"title": "Supprimer l'image",
|
||||
"desc": "Supprimer l'image actuelle"
|
||||
},
|
||||
"closePanels": {
|
||||
"title": "Fermer les panneaux",
|
||||
"desc": "Fermer les panneaux ouverts"
|
||||
},
|
||||
"previousImage": {
|
||||
"title": "Image précédente",
|
||||
"desc": "Afficher l'image précédente dans la galerie"
|
||||
},
|
||||
"nextImage": {
|
||||
"title": "Image suivante",
|
||||
"desc": "Afficher l'image suivante dans la galerie"
|
||||
},
|
||||
"toggleGalleryPin": {
|
||||
"title": "Activer/désactiver l'épinglage de la galerie",
|
||||
"desc": "Épingle ou dépingle la galerie à l'interface utilisateur"
|
||||
},
|
||||
"increaseGalleryThumbSize": {
|
||||
"title": "Augmenter la taille des miniatures de la galerie",
|
||||
"desc": "Augmente la taille des miniatures de la galerie"
|
||||
},
|
||||
"decreaseGalleryThumbSize": {
|
||||
"title": "Diminuer la taille des miniatures de la galerie",
|
||||
"desc": "Diminue la taille des miniatures de la galerie"
|
||||
},
|
||||
"selectBrush": {
|
||||
"title": "Sélectionner un pinceau",
|
||||
"desc": "Sélectionne le pinceau de la toile"
|
||||
},
|
||||
"selectEraser": {
|
||||
"title": "Sélectionner un gomme",
|
||||
"desc": "Sélectionne la gomme de la toile"
|
||||
},
|
||||
"decreaseBrushSize": {
|
||||
"title": "Diminuer la taille du pinceau",
|
||||
"desc": "Diminue la taille du pinceau/gomme de la toile"
|
||||
},
|
||||
"increaseBrushSize": {
|
||||
"title": "Augmenter la taille du pinceau",
|
||||
"desc": "Augmente la taille du pinceau/gomme de la toile"
|
||||
},
|
||||
"decreaseBrushOpacity": {
|
||||
"title": "Diminuer l'opacité du pinceau",
|
||||
"desc": "Diminue l'opacité du pinceau de la toile"
|
||||
},
|
||||
"increaseBrushOpacity": {
|
||||
"title": "Augmenter l'opacité du pinceau",
|
||||
"desc": "Augmente l'opacité du pinceau de la toile"
|
||||
},
|
||||
"moveTool": {
|
||||
"title": "Outil de déplacement",
|
||||
"desc": "Permet la navigation sur la toile"
|
||||
},
|
||||
"fillBoundingBox": {
|
||||
"title": "Remplir la boîte englobante",
|
||||
"desc": "Remplit la boîte englobante avec la couleur du pinceau"
|
||||
},
|
||||
"eraseBoundingBox": {
|
||||
"title": "Effacer la boîte englobante",
|
||||
"desc": "Efface la zone de la boîte englobante"
|
||||
},
|
||||
"colorPicker": {
|
||||
"title": "Sélectionnez le sélecteur de couleur",
|
||||
"desc": "Sélectionne le sélecteur de couleur de la toile"
|
||||
},
|
||||
"toggleSnap": {
|
||||
"title": "Basculer Snap",
|
||||
"desc": "Basculer Snap à la grille"
|
||||
},
|
||||
"quickToggleMove": {
|
||||
"title": "Basculer rapidement déplacer",
|
||||
"desc": "Basculer temporairement le mode Déplacer"
|
||||
},
|
||||
"toggleLayer": {
|
||||
"title": "Basculer la couche",
|
||||
"desc": "Basculer la sélection de la couche masque/base"
|
||||
},
|
||||
"clearMask": {
|
||||
"title": "Effacer le masque",
|
||||
"desc": "Effacer entièrement le masque"
|
||||
},
|
||||
"hideMask": {
|
||||
"title": "Masquer le masque",
|
||||
"desc": "Masquer et démasquer le masque"
|
||||
},
|
||||
"showHideBoundingBox": {
|
||||
"title": "Afficher/Masquer la boîte englobante",
|
||||
"desc": "Basculer la visibilité de la boîte englobante"
|
||||
},
|
||||
"mergeVisible": {
|
||||
"title": "Fusionner visible",
|
||||
"desc": "Fusionner toutes les couches visibles de la toile"
|
||||
},
|
||||
"saveToGallery": {
|
||||
"title": "Enregistrer dans la galerie",
|
||||
"desc": "Enregistrer la toile actuelle dans la galerie"
|
||||
},
|
||||
"copyToClipboard": {
|
||||
"title": "Copier dans le presse-papiers",
|
||||
"desc": "Copier la toile actuelle dans le presse-papiers"
|
||||
},
|
||||
"downloadImage": {
|
||||
"title": "Télécharger l'image",
|
||||
"desc": "Télécharger la toile actuelle"
|
||||
},
|
||||
"undoStroke": {
|
||||
"title": "Annuler le trait",
|
||||
"desc": "Annuler un coup de pinceau"
|
||||
},
|
||||
"redoStroke": {
|
||||
"title": "Rétablir le trait",
|
||||
"desc": "Rétablir un coup de pinceau"
|
||||
},
|
||||
"resetView": {
|
||||
"title": "Réinitialiser la vue",
|
||||
"desc": "Réinitialiser la vue de la toile"
|
||||
},
|
||||
"previousStagingImage": {
|
||||
"title": "Image de mise en scène précédente",
|
||||
"desc": "Image précédente de la zone de mise en scène"
|
||||
},
|
||||
"nextStagingImage": {
|
||||
"title": "Image de mise en scène suivante",
|
||||
"desc": "Image suivante de la zone de mise en scène"
|
||||
},
|
||||
"acceptStagingImage": {
|
||||
"title": "Accepter l'image de mise en scène",
|
||||
"desc": "Accepter l'image actuelle de la zone de mise en scène"
|
||||
}
|
||||
}
|
||||
|
207
invokeai/frontend/dist/locales/hotkeys/ua.json
vendored
Normal file
207
invokeai/frontend/dist/locales/hotkeys/ua.json
vendored
Normal file
@ -0,0 +1,207 @@
|
||||
{
|
||||
"keyboardShortcuts": "Клавіатурні скорочення",
|
||||
"appHotkeys": "Гарячі клавіші програми",
|
||||
"generalHotkeys": "Загальні гарячі клавіші",
|
||||
"galleryHotkeys": "Гарячі клавіші галереї",
|
||||
"unifiedCanvasHotkeys": "Гарячі клавіші універсального полотна",
|
||||
"invoke": {
|
||||
"title": "Invoke",
|
||||
"desc": "Згенерувати зображення"
|
||||
},
|
||||
"cancel": {
|
||||
"title": "Скасувати",
|
||||
"desc": "Скасувати генерацію зображення"
|
||||
},
|
||||
"focusPrompt": {
|
||||
"title": "Переключитися на введення запиту",
|
||||
"desc": "Перемикання на область введення запиту"
|
||||
},
|
||||
"toggleOptions": {
|
||||
"title": "Показати/приховати параметри",
|
||||
"desc": "Відкривати і закривати панель параметрів"
|
||||
},
|
||||
"pinOptions": {
|
||||
"title": "Закріпити параметри",
|
||||
"desc": "Закріпити панель параметрів"
|
||||
},
|
||||
"toggleViewer": {
|
||||
"title": "Показати перегляд",
|
||||
"desc": "Відкривати і закривати переглядач зображень"
|
||||
},
|
||||
"toggleGallery": {
|
||||
"title": "Показати галерею",
|
||||
"desc": "Відкривати і закривати скриньку галереї"
|
||||
},
|
||||
"maximizeWorkSpace": {
|
||||
"title": "Максимізувати робочий простір",
|
||||
"desc": "Приховати панелі і максимізувати робочу область"
|
||||
},
|
||||
"changeTabs": {
|
||||
"title": "Переключити вкладку",
|
||||
"desc": "Переключитися на іншу робочу область"
|
||||
},
|
||||
"consoleToggle": {
|
||||
"title": "Показати консоль",
|
||||
"desc": "Відкривати і закривати консоль"
|
||||
},
|
||||
"setPrompt": {
|
||||
"title": "Використовувати запит",
|
||||
"desc": "Використати запит із поточного зображення"
|
||||
},
|
||||
"setSeed": {
|
||||
"title": "Використовувати сід",
|
||||
"desc": "Використовувати сід поточного зображення"
|
||||
},
|
||||
"setParameters": {
|
||||
"title": "Використовувати всі параметри",
|
||||
"desc": "Використовувати всі параметри поточного зображення"
|
||||
},
|
||||
"restoreFaces": {
|
||||
"title": "Відновити обличчя",
|
||||
"desc": "Відновити обличчя на поточному зображенні"
|
||||
},
|
||||
"upscale": {
|
||||
"title": "Збільшення",
|
||||
"desc": "Збільшити поточне зображення"
|
||||
},
|
||||
"showInfo": {
|
||||
"title": "Показати метадані",
|
||||
"desc": "Показати метадані з поточного зображення"
|
||||
},
|
||||
"sendToImageToImage": {
|
||||
"title": "Відправити в img2img",
|
||||
"desc": "Надіслати поточне зображення в Image To Image"
|
||||
},
|
||||
"deleteImage": {
|
||||
"title": "Видалити зображення",
|
||||
"desc": "Видалити поточне зображення"
|
||||
},
|
||||
"closePanels": {
|
||||
"title": "Закрити панелі",
|
||||
"desc": "Закриває відкриті панелі"
|
||||
},
|
||||
"previousImage": {
|
||||
"title": "Попереднє зображення",
|
||||
"desc": "Відображати попереднє зображення в галереї"
|
||||
},
|
||||
"nextImage": {
|
||||
"title": "Наступне зображення",
|
||||
"desc": "Відображення наступного зображення в галереї"
|
||||
},
|
||||
"toggleGalleryPin": {
|
||||
"title": "Закріпити галерею",
|
||||
"desc": "Закріплює і відкріплює галерею"
|
||||
},
|
||||
"increaseGalleryThumbSize": {
|
||||
"title": "Збільшити розмір мініатюр галереї",
|
||||
"desc": "Збільшує розмір мініатюр галереї"
|
||||
},
|
||||
"reduceGalleryThumbSize": {
|
||||
"title": "Зменшує розмір мініатюр галереї",
|
||||
"desc": "Зменшує розмір мініатюр галереї"
|
||||
},
|
||||
"selectBrush": {
|
||||
"title": "Вибрати пензель",
|
||||
"desc": "Вибирає пензель для полотна"
|
||||
},
|
||||
"selectEraser": {
|
||||
"title": "Вибрати ластик",
|
||||
"desc": "Вибирає ластик для полотна"
|
||||
},
|
||||
"reduceBrushSize": {
|
||||
"title": "Зменшити розмір пензля",
|
||||
"desc": "Зменшує розмір пензля/ластика полотна"
|
||||
},
|
||||
"increaseBrushSize": {
|
||||
"title": "Збільшити розмір пензля",
|
||||
"desc": "Збільшує розмір пензля/ластика полотна"
|
||||
},
|
||||
"reduceBrushOpacity": {
|
||||
"title": "Зменшити непрозорість пензля",
|
||||
"desc": "Зменшує непрозорість пензля полотна"
|
||||
},
|
||||
"increaseBrushOpacity": {
|
||||
"title": "Збільшити непрозорість пензля",
|
||||
"desc": "Збільшує непрозорість пензля полотна"
|
||||
},
|
||||
"moveTool": {
|
||||
"title": "Інструмент переміщення",
|
||||
"desc": "Дозволяє переміщатися по полотну"
|
||||
},
|
||||
"fillBoundingBox": {
|
||||
"title": "Заповнити обмежувальну рамку",
|
||||
"desc": "Заповнює обмежувальну рамку кольором пензля"
|
||||
},
|
||||
"eraseBoundingBox": {
|
||||
"title": "Стерти обмежувальну рамку",
|
||||
"desc": "Стирає область обмежувальної рамки"
|
||||
},
|
||||
"colorPicker": {
|
||||
"title": "Вибрати колір",
|
||||
"desc": "Вибирає засіб вибору кольору полотна"
|
||||
},
|
||||
"toggleSnap": {
|
||||
"title": "Увімкнути прив'язку",
|
||||
"desc": "Вмикає/вимикає прив'язку до сітки"
|
||||
},
|
||||
"quickToggleMove": {
|
||||
"title": "Швидке перемикання переміщення",
|
||||
"desc": "Тимчасово перемикає режим переміщення"
|
||||
},
|
||||
"toggleLayer": {
|
||||
"title": "Переключити шар",
|
||||
"desc": "Перемикання маски/базового шару"
|
||||
},
|
||||
"clearMask": {
|
||||
"title": "Очистити маску",
|
||||
"desc": "Очистити всю маску"
|
||||
},
|
||||
"hideMask": {
|
||||
"title": "Приховати маску",
|
||||
"desc": "Приховує/показує маску"
|
||||
},
|
||||
"showHideBoundingBox": {
|
||||
"title": "Показати/приховати обмежувальну рамку",
|
||||
"desc": "Переключити видимість обмежувальної рамки"
|
||||
},
|
||||
"mergeVisible": {
|
||||
"title": "Об'єднати видимі",
|
||||
"desc": "Об'єднати всі видимі шари полотна"
|
||||
},
|
||||
"saveToGallery": {
|
||||
"title": "Зберегти в галерею",
|
||||
"desc": "Зберегти поточне полотно в галерею"
|
||||
},
|
||||
"copyToClipboard": {
|
||||
"title": "Копіювати в буфер обміну",
|
||||
"desc": "Копіювати поточне полотно в буфер обміну"
|
||||
},
|
||||
"downloadImage": {
|
||||
"title": "Завантажити зображення",
|
||||
"desc": "Завантажити вміст полотна"
|
||||
},
|
||||
"undoStroke": {
|
||||
"title": "Скасувати пензель",
|
||||
"desc": "Скасувати мазок пензля"
|
||||
},
|
||||
"redoStroke": {
|
||||
"title": "Повторити мазок пензля",
|
||||
"desc": "Повторити мазок пензля"
|
||||
},
|
||||
"resetView": {
|
||||
"title": "Вид за замовчуванням",
|
||||
"desc": "Скинути вид полотна"
|
||||
},
|
||||
"previousStagingImage": {
|
||||
"title": "Попереднє зображення",
|
||||
"desc": "Попереднє зображення"
|
||||
},
|
||||
"nextStagingImage": {
|
||||
"title": "Наступне зображення",
|
||||
"desc": "Наступне зображення"
|
||||
},
|
||||
"acceptStagingImage": {
|
||||
"title": "Прийняти зображення",
|
||||
"desc": "Прийняти поточне зображення"
|
||||
}
|
||||
}
|
68
invokeai/frontend/dist/locales/modelmanager/fr.json
vendored
Normal file
68
invokeai/frontend/dist/locales/modelmanager/fr.json
vendored
Normal file
@ -0,0 +1,68 @@
|
||||
{
|
||||
"modelManager": "Gestionnaire de modèle",
|
||||
"model": "Modèle",
|
||||
"allModels": "Tous les modèles",
|
||||
"checkpointModels": "Points de contrôle",
|
||||
"diffusersModels": "Diffuseurs",
|
||||
"safetensorModels": "SafeTensors",
|
||||
"modelAdded": "Modèle ajouté",
|
||||
"modelUpdated": "Modèle mis à jour",
|
||||
"modelEntryDeleted": "Entrée de modèle supprimée",
|
||||
"cannotUseSpaces": "Ne peut pas utiliser d'espaces",
|
||||
"addNew": "Ajouter un nouveau",
|
||||
"addNewModel": "Ajouter un nouveau modèle",
|
||||
"addCheckpointModel": "Ajouter un modèle de point de contrôle / SafeTensor",
|
||||
"addDiffuserModel": "Ajouter des diffuseurs",
|
||||
"addManually": "Ajouter manuellement",
|
||||
"manual": "Manuel",
|
||||
"name": "Nom",
|
||||
"nameValidationMsg": "Entrez un nom pour votre modèle",
|
||||
"description": "Description",
|
||||
"descriptionValidationMsg": "Ajoutez une description pour votre modèle",
|
||||
"config": "Config",
|
||||
"configValidationMsg": "Chemin vers le fichier de configuration de votre modèle.",
|
||||
"modelLocation": "Emplacement du modèle",
|
||||
"modelLocationValidationMsg": "Chemin vers où votre modèle est situé localement.",
|
||||
"repo_id": "ID de dépôt",
|
||||
"repoIDValidationMsg": "Dépôt en ligne de votre modèle",
|
||||
"vaeLocation": "Emplacement VAE",
|
||||
"vaeLocationValidationMsg": "Chemin vers où votre VAE est situé.",
|
||||
"vaeRepoID": "ID de dépôt VAE",
|
||||
"vaeRepoIDValidationMsg": "Dépôt en ligne de votre VAE",
|
||||
"width": "Largeur",
|
||||
"widthValidationMsg": "Largeur par défaut de votre modèle.",
|
||||
"height": "Hauteur",
|
||||
"heightValidationMsg": "Hauteur par défaut de votre modèle.",
|
||||
"addModel": "Ajouter un modèle",
|
||||
"updateModel": "Mettre à jour le modèle",
|
||||
"availableModels": "Modèles disponibles",
|
||||
"search": "Rechercher",
|
||||
"load": "Charger",
|
||||
"active": "actif",
|
||||
"notLoaded": "non chargé",
|
||||
"cached": "en cache",
|
||||
"checkpointFolder": "Dossier de point de contrôle",
|
||||
"clearCheckpointFolder": "Effacer le dossier de point de contrôle",
|
||||
"findModels": "Trouver des modèles",
|
||||
"scanAgain": "Scanner à nouveau",
|
||||
"modelsFound": "Modèles trouvés",
|
||||
"selectFolder": "Sélectionner un dossier",
|
||||
"selected": "Sélectionné",
|
||||
"selectAll": "Tout sélectionner",
|
||||
"deselectAll": "Tout désélectionner",
|
||||
"showExisting": "Afficher existant",
|
||||
"addSelected": "Ajouter sélectionné",
|
||||
"modelExists": "Modèle existant",
|
||||
"selectAndAdd": "Sélectionner et ajouter les modèles listés ci-dessous",
|
||||
"noModelsFound": "Aucun modèle trouvé",
|
||||
"delete": "Supprimer",
|
||||
"deleteModel": "Supprimer le modèle",
|
||||
"deleteConfig": "Supprimer la configuration",
|
||||
"deleteMsg1": "Êtes-vous sûr de vouloir supprimer cette entrée de modèle dans InvokeAI?",
|
||||
"deleteMsg2": "Cela n'effacera pas le fichier de point de contrôle du modèle de votre disque. Vous pouvez les réajouter si vous le souhaitez.",
|
||||
"formMessageDiffusersModelLocation": "Emplacement du modèle de diffuseurs",
|
||||
"formMessageDiffusersModelLocationDesc": "Veuillez en entrer au moins un.",
|
||||
"formMessageDiffusersVAELocation": "Emplacement VAE",
|
||||
"formMessageDiffusersVAELocationDesc": "Si non fourni, InvokeAI recherchera le fichier VAE à l'emplacement du modèle donné ci-dessus."
|
||||
|
||||
}
|
@ -1,24 +1,34 @@
|
||||
{
|
||||
"modelManager": "Gestione Modelli",
|
||||
"model": "Modello",
|
||||
"allModels": "Tutti i Modelli",
|
||||
"checkpointModels": "Checkpoint",
|
||||
"diffusersModels": "Diffusori",
|
||||
"safetensorModels": "SafeTensor",
|
||||
"modelAdded": "Modello Aggiunto",
|
||||
"modelUpdated": "Modello Aggiornato",
|
||||
"modelEntryDeleted": "Modello Rimosso",
|
||||
"cannotUseSpaces": "Impossibile utilizzare gli spazi",
|
||||
"addNew": "Aggiungi nuovo",
|
||||
"addNewModel": "Aggiungi nuovo Modello",
|
||||
"addCheckpointModel": "Aggiungi modello Checkpoint / Safetensor",
|
||||
"addDiffuserModel": "Aggiungi Diffusori",
|
||||
"addManually": "Aggiungi manualmente",
|
||||
"manual": "Manuale",
|
||||
"name": "Nome",
|
||||
"nameValidationMsg": "Inserisci un nome per il modello",
|
||||
"description": "Descrizione",
|
||||
"descriptionValidationMsg": "Aggiungi una descrizione per il modello",
|
||||
"config": "Config",
|
||||
"config": "Configurazione",
|
||||
"configValidationMsg": "Percorso del file di configurazione del modello.",
|
||||
"modelLocation": "Posizione del modello",
|
||||
"modelLocationValidationMsg": "Percorso dove si trova il modello.",
|
||||
"repo_id": "Repo ID",
|
||||
"repoIDValidationMsg": "Repository online del modello",
|
||||
"vaeLocation": "Posizione file VAE",
|
||||
"vaeLocationValidationMsg": "Percorso dove si trova il file VAE.",
|
||||
"vaeRepoID": "VAE Repo ID",
|
||||
"vaeRepoIDValidationMsg": "Repository online del file VAE",
|
||||
"width": "Larghezza",
|
||||
"widthValidationMsg": "Larghezza predefinita del modello.",
|
||||
"height": "Altezza",
|
||||
@ -49,5 +59,9 @@
|
||||
"deleteModel": "Elimina modello",
|
||||
"deleteConfig": "Elimina configurazione",
|
||||
"deleteMsg1": "Sei sicuro di voler eliminare questo modello da InvokeAI?",
|
||||
"deleteMsg2": "Questo non eliminerà il file Checkpoint del modello dal tuo disco. Puoi aggiungerlo nuovamente se lo desideri."
|
||||
"deleteMsg2": "Questo non eliminerà il file Checkpoint del modello dal tuo disco. Puoi aggiungerlo nuovamente se lo desideri.",
|
||||
"formMessageDiffusersModelLocation": "Ubicazione modelli diffusori",
|
||||
"formMessageDiffusersModelLocationDesc": "Inseriscine almeno uno.",
|
||||
"formMessageDiffusersVAELocation": "Ubicazione file VAE",
|
||||
"formMessageDiffusersVAELocationDesc": "Se non fornito, InvokeAI cercherà il file VAE all'interno dell'ubicazione del modello sopra indicata."
|
||||
}
|
||||
|
53
invokeai/frontend/dist/locales/modelmanager/ua.json
vendored
Normal file
53
invokeai/frontend/dist/locales/modelmanager/ua.json
vendored
Normal file
@ -0,0 +1,53 @@
|
||||
{
|
||||
"modelManager": "Менеджер моделей",
|
||||
"model": "Модель",
|
||||
"modelAdded": "Модель додана",
|
||||
"modelUpdated": "Модель оновлена",
|
||||
"modelEntryDeleted": "Запис про модель видалено",
|
||||
"cannotUseSpaces": "Не можна використовувати пробіли",
|
||||
"addNew": "Додати нову",
|
||||
"addNewModel": "Додати нову модель",
|
||||
"addManually": "Додати вручну",
|
||||
"manual": "Ручне",
|
||||
"name": "Назва",
|
||||
"nameValidationMsg": "Введіть назву моделі",
|
||||
"description": "Опис",
|
||||
"descriptionValidationMsg": "Введіть опис моделі",
|
||||
"config": "Файл конфігурації",
|
||||
"configValidationMsg": "Шлях до файлу конфігурації",
|
||||
"modelLocation": "Розташування моделі",
|
||||
"modelLocationValidationMsg": "Шлях до файлу з моделлю",
|
||||
"vaeLocation": "Розтышування VAE",
|
||||
"vaeLocationValidationMsg": "Шлях до VAE",
|
||||
"width": "Ширина",
|
||||
"widthValidationMsg": "Початкова ширина зображень",
|
||||
"height": "Висота",
|
||||
"heightValidationMsg": "Початкова висота зображень",
|
||||
"addModel": "Додати модель",
|
||||
"updateModel": "Оновити модель",
|
||||
"availableModels": "Доступні моделі",
|
||||
"search": "Шукати",
|
||||
"load": "Завантажити",
|
||||
"active": "активна",
|
||||
"notLoaded": "не завантажена",
|
||||
"cached": "кешована",
|
||||
"checkpointFolder": "Папка з моделями",
|
||||
"clearCheckpointFolder": "Очистити папку з моделями",
|
||||
"findModels": "Знайти моделі",
|
||||
"scanAgain": "Сканувати знову",
|
||||
"modelsFound": "Знайдені моделі",
|
||||
"selectFolder": "Обрати папку",
|
||||
"selected": "Обрані",
|
||||
"selectAll": "Обрати всі",
|
||||
"deselectAll": "Зняти выділення",
|
||||
"showExisting": "Показувати додані",
|
||||
"addSelected": "Додати обрані",
|
||||
"modelExists": "Модель вже додана",
|
||||
"selectAndAdd": "Оберіть і додайте моделі із списку",
|
||||
"noModelsFound": "Моделі не знайдені",
|
||||
"delete": "Видалити",
|
||||
"deleteModel": "Видалити модель",
|
||||
"deleteConfig": "Видалити конфігурацію",
|
||||
"deleteMsg1": "Ви точно хочете видалити модель із InvokeAI?",
|
||||
"deleteMsg2": "Це не призведе до видалення файлу моделі з диску. Позніше ви можете додати його знову."
|
||||
}
|
@ -46,6 +46,7 @@
|
||||
"sendTo": "Send to",
|
||||
"sendToImg2Img": "Send to Image to Image",
|
||||
"sendToUnifiedCanvas": "Send To Unified Canvas",
|
||||
"copyImage": "Copy Image",
|
||||
"copyImageToLink": "Copy Image To Link",
|
||||
"downloadImage": "Download Image",
|
||||
"openInViewer": "Open In Viewer",
|
||||
|
63
invokeai/frontend/dist/locales/options/fr.json
vendored
63
invokeai/frontend/dist/locales/options/fr.json
vendored
@ -1 +1,62 @@
|
||||
{}
|
||||
{
|
||||
"images": "Images",
|
||||
"steps": "Etapes",
|
||||
"cfgScale": "CFG Echelle",
|
||||
"width": "Largeur",
|
||||
"height": "Hauteur",
|
||||
"sampler": "Echantillonneur",
|
||||
"seed": "Graine",
|
||||
"randomizeSeed": "Graine Aléatoire",
|
||||
"shuffle": "Mélanger",
|
||||
"noiseThreshold": "Seuil de Bruit",
|
||||
"perlinNoise": "Bruit de Perlin",
|
||||
"variations": "Variations",
|
||||
"variationAmount": "Montant de Variation",
|
||||
"seedWeights": "Poids des Graines",
|
||||
"faceRestoration": "Restauration de Visage",
|
||||
"restoreFaces": "Restaurer les Visages",
|
||||
"type": "Type",
|
||||
"strength": "Force",
|
||||
"upscaling": "Agrandissement",
|
||||
"upscale": "Agrandir",
|
||||
"upscaleImage": "Image en Agrandissement",
|
||||
"scale": "Echelle",
|
||||
"otherOptions": "Autres Options",
|
||||
"seamlessTiling": "Carreau Sans Joint",
|
||||
"hiresOptim": "Optimisation Haute Résolution",
|
||||
"imageFit": "Ajuster Image Initiale à la Taille de Sortie",
|
||||
"codeformerFidelity": "Fidélité",
|
||||
"seamSize": "Taille des Joints",
|
||||
"seamBlur": "Flou des Joints",
|
||||
"seamStrength": "Force des Joints",
|
||||
"seamSteps": "Etapes des Joints",
|
||||
"scaleBeforeProcessing": "Echelle Avant Traitement",
|
||||
"scaledWidth": "Larg. Échelle",
|
||||
"scaledHeight": "Haut. Échelle",
|
||||
"infillMethod": "Méthode de Remplissage",
|
||||
"tileSize": "Taille des Tuiles",
|
||||
"boundingBoxHeader": "Boîte Englobante",
|
||||
"seamCorrectionHeader": "Correction des Joints",
|
||||
"infillScalingHeader": "Remplissage et Mise à l'Échelle",
|
||||
"img2imgStrength": "Force de l'Image à l'Image",
|
||||
"toggleLoopback": "Activer/Désactiver la Boucle",
|
||||
"invoke": "Invoker",
|
||||
"cancel": "Annuler",
|
||||
"promptPlaceholder": "Tapez le prompt ici. [tokens négatifs], (poids positif)++, (poids négatif)--, swap et blend sont disponibles (voir les docs)",
|
||||
"sendTo": "Envoyer à",
|
||||
"sendToImg2Img": "Envoyer à Image à Image",
|
||||
"sendToUnifiedCanvas": "Envoyer au Canvas Unifié",
|
||||
"copyImage": "Copier Image",
|
||||
"copyImageToLink": "Copier l'Image en Lien",
|
||||
"downloadImage": "Télécharger Image",
|
||||
"openInViewer": "Ouvrir dans le visualiseur",
|
||||
"closeViewer": "Fermer le visualiseur",
|
||||
"usePrompt": "Utiliser la suggestion",
|
||||
"useSeed": "Utiliser la graine",
|
||||
"useAll": "Tout utiliser",
|
||||
"useInitImg": "Utiliser l'image initiale",
|
||||
"info": "Info",
|
||||
"deleteImage": "Supprimer l'image",
|
||||
"initialImage": "Image initiale",
|
||||
"showOptionsPanel": "Afficher le panneau d'options"
|
||||
}
|
||||
|
@ -40,7 +40,7 @@
|
||||
"infillScalingHeader": "Riempimento e ridimensionamento",
|
||||
"img2imgStrength": "Forza da Immagine a Immagine",
|
||||
"toggleLoopback": "Attiva/disattiva elaborazione ricorsiva",
|
||||
"invoke": "Invoca",
|
||||
"invoke": "Invoke",
|
||||
"cancel": "Annulla",
|
||||
"promptPlaceholder": "Digita qui il prompt usando termini in lingua inglese. [token negativi], (aumenta il peso)++, (diminuisci il peso)--, scambia e fondi sono disponibili (consulta la documentazione)",
|
||||
"sendTo": "Invia a",
|
||||
|
62
invokeai/frontend/dist/locales/options/ua.json
vendored
Normal file
62
invokeai/frontend/dist/locales/options/ua.json
vendored
Normal file
@ -0,0 +1,62 @@
|
||||
{
|
||||
"images": "Зображення",
|
||||
"steps": "Кроки",
|
||||
"cfgScale": "Рівень CFG",
|
||||
"width": "Ширина",
|
||||
"height": "Висота",
|
||||
"sampler": "Семплер",
|
||||
"seed": "Сід",
|
||||
"randomizeSeed": "Випадковий сид",
|
||||
"shuffle": "Оновити",
|
||||
"noiseThreshold": "Поріг шуму",
|
||||
"perlinNoise": "Шум Перліна",
|
||||
"variations": "Варіації",
|
||||
"variationAmount": "Кількість варіацій",
|
||||
"seedWeights": "Вага сіду",
|
||||
"faceRestoration": "Відновлення облич",
|
||||
"restoreFaces": "Відновити обличчя",
|
||||
"type": "Тип",
|
||||
"strength": "Сила",
|
||||
"upscaling": "Збільшення",
|
||||
"upscale": "Збільшити",
|
||||
"upscaleImage": "Збільшити зображення",
|
||||
"scale": "Масштаб",
|
||||
"otherOptions": "інші параметри",
|
||||
"seamlessTiling": "Безшовний узор",
|
||||
"hiresOptim": "Висока роздільна здатність",
|
||||
"imageFit": "Вмістити зображення",
|
||||
"codeformerFidelity": "Точність",
|
||||
"seamSize": "Размір шву",
|
||||
"seamBlur": "Розмиття шву",
|
||||
"seamStrength": "Сила шву",
|
||||
"seamSteps": "Кроки шву",
|
||||
"inpaintReplace": "Inpaint-заміна",
|
||||
"scaleBeforeProcessing": "Масштабувати",
|
||||
"scaledWidth": "Масштаб Ш",
|
||||
"scaledHeight": "Масштаб В",
|
||||
"infillMethod": "Засіб заповнення",
|
||||
"tileSize": "Розмір області",
|
||||
"boundingBoxHeader": "Обмежуюча рамка",
|
||||
"seamCorrectionHeader": "Налаштування шву",
|
||||
"infillScalingHeader": "Заповнення і масштабування",
|
||||
"img2imgStrength": "Сила обробки img2img",
|
||||
"toggleLoopback": "Зациклити обробку",
|
||||
"invoke": "Викликати",
|
||||
"cancel": "Скасувати",
|
||||
"promptPlaceholder": "Введіть запит тут (англійською). [видалені токени], (більш вагомі)++, (менш вагомі)--, swap и blend також доступні (дивіться Github)",
|
||||
"sendTo": "Надіслати",
|
||||
"sendToImg2Img": "Надіслати у img2img",
|
||||
"sendToUnifiedCanvas": "Надіслати на полотно",
|
||||
"copyImageToLink": "Скопіювати посилання",
|
||||
"downloadImage": "Завантажити",
|
||||
"openInViewer": "Відкрити у переглядачі",
|
||||
"closeViewer": "Закрити переглядач",
|
||||
"usePrompt": "Використати запит",
|
||||
"useSeed": "Використати сід",
|
||||
"useAll": "Використати все",
|
||||
"useInitImg": "Використати як початкове",
|
||||
"info": "Метадані",
|
||||
"deleteImage": "Видалити зображення",
|
||||
"initialImage": "Початкове зображення",
|
||||
"showOptionsPanel": "Показати панель налаштувань"
|
||||
}
|
14
invokeai/frontend/dist/locales/settings/fr.json
vendored
14
invokeai/frontend/dist/locales/settings/fr.json
vendored
@ -1 +1,13 @@
|
||||
{}
|
||||
{
|
||||
"models": "Modèles",
|
||||
"displayInProgress": "Afficher les images en cours",
|
||||
"saveSteps": "Enregistrer les images tous les n étapes",
|
||||
"confirmOnDelete": "Confirmer la suppression",
|
||||
"displayHelpIcons": "Afficher les icônes d'aide",
|
||||
"useCanvasBeta": "Utiliser la mise en page bêta de Canvas",
|
||||
"enableImageDebugging": "Activer le débogage d'image",
|
||||
"resetWebUI": "Réinitialiser l'interface Web",
|
||||
"resetWebUIDesc1": "Réinitialiser l'interface Web ne réinitialise que le cache local du navigateur de vos images et de vos paramètres enregistrés. Cela n'efface pas les images du disque.",
|
||||
"resetWebUIDesc2": "Si les images ne s'affichent pas dans la galerie ou si quelque chose d'autre ne fonctionne pas, veuillez essayer de réinitialiser avant de soumettre une demande sur GitHub.",
|
||||
"resetComplete": "L'interface Web a été réinitialisée. Rafraîchissez la page pour recharger."
|
||||
}
|
||||
|
13
invokeai/frontend/dist/locales/settings/ua.json
vendored
Normal file
13
invokeai/frontend/dist/locales/settings/ua.json
vendored
Normal file
@ -0,0 +1,13 @@
|
||||
{
|
||||
"models": "Моделі",
|
||||
"displayInProgress": "Показувати процес генерації",
|
||||
"saveSteps": "Зберігати кожні n кроків",
|
||||
"confirmOnDelete": "Підтверджувати видалення",
|
||||
"displayHelpIcons": "Показувати значки підказок",
|
||||
"useCanvasBeta": "Показувати інструменты зліва (Beta UI)",
|
||||
"enableImageDebugging": "Увімкнути налагодження",
|
||||
"resetWebUI": "Повернути початкові",
|
||||
"resetWebUIDesc1": "Скидання настройок веб-інтерфейсу видаляє лише локальний кеш браузера з вашими зображеннями та налаштуваннями. Це не призводить до видалення зображень з диску.",
|
||||
"resetWebUIDesc2": "Якщо зображення не відображаються в галереї або не працює ще щось, спробуйте скинути налаштування, перш ніж повідомляти про проблему на GitHub.",
|
||||
"resetComplete": "Інтерфейс скинуто. Оновіть цю сторінку."
|
||||
}
|
33
invokeai/frontend/dist/locales/toast/fr.json
vendored
33
invokeai/frontend/dist/locales/toast/fr.json
vendored
@ -1 +1,32 @@
|
||||
{}
|
||||
{
|
||||
"tempFoldersEmptied": "Dossiers temporaires vidés",
|
||||
"uploadFailed": "Téléchargement échoué",
|
||||
"uploadFailedMultipleImagesDesc": "Plusieurs images collées, peut uniquement télécharger une image à la fois",
|
||||
"uploadFailedUnableToLoadDesc": "Impossible de charger le fichier",
|
||||
"downloadImageStarted": "Téléchargement de l'image démarré",
|
||||
"imageCopied": "Image copiée",
|
||||
"imageLinkCopied": "Lien d'image copié",
|
||||
"imageNotLoaded": "Aucune image chargée",
|
||||
"imageNotLoadedDesc": "Aucune image trouvée pour envoyer à module d'image",
|
||||
"imageSavedToGallery": "Image enregistrée dans la galerie",
|
||||
"canvasMerged": "Canvas fusionné",
|
||||
"sentToImageToImage": "Envoyé à Image à Image",
|
||||
"sentToUnifiedCanvas": "Envoyé à Canvas unifié",
|
||||
"parametersSet": "Paramètres définis",
|
||||
"parametersNotSet": "Paramètres non définis",
|
||||
"parametersNotSetDesc": "Aucune métadonnée trouvée pour cette image.",
|
||||
"parametersFailed": "Problème de chargement des paramètres",
|
||||
"parametersFailedDesc": "Impossible de charger l'image d'initiation.",
|
||||
"seedSet": "Graine définie",
|
||||
"seedNotSet": "Graine non définie",
|
||||
"seedNotSetDesc": "Impossible de trouver la graine pour cette image.",
|
||||
"promptSet": "Invite définie",
|
||||
"promptNotSet": "Invite non définie",
|
||||
"promptNotSetDesc": "Impossible de trouver l'invite pour cette image.",
|
||||
"upscalingFailed": "Échec de la mise à l'échelle",
|
||||
"faceRestoreFailed": "Échec de la restauration du visage",
|
||||
"metadataLoadFailed": "Échec du chargement des métadonnées",
|
||||
"initialImageSet": "Image initiale définie",
|
||||
"initialImageNotSet": "Image initiale non définie",
|
||||
"initialImageNotSetDesc": "Impossible de charger l'image initiale"
|
||||
}
|
||||
|
32
invokeai/frontend/dist/locales/toast/ua.json
vendored
Normal file
32
invokeai/frontend/dist/locales/toast/ua.json
vendored
Normal file
@ -0,0 +1,32 @@
|
||||
{
|
||||
"tempFoldersEmptied": "Тимчасова папка очищена",
|
||||
"uploadFailed": "Не вдалося завантажити",
|
||||
"uploadFailedMultipleImagesDesc": "Можна вставити лише одне зображення (ви спробували вставити декілька)",
|
||||
"uploadFailedUnableToLoadDesc": "Неможливо завантажити файл",
|
||||
"downloadImageStarted": "Завантаження зображення почалося",
|
||||
"imageCopied": "Зображення скопійоване",
|
||||
"imageLinkCopied": "Посилання на зображення скопійовано",
|
||||
"imageNotLoaded": "Зображення не завантажено",
|
||||
"imageNotLoadedDesc": "Не знайдено зображення для надсилання до img2img",
|
||||
"imageSavedToGallery": "Зображення збережено в галерею",
|
||||
"canvasMerged": "Полотно об'єднане",
|
||||
"sentToImageToImage": "Надіслати до img2img",
|
||||
"sentToUnifiedCanvas": "Надіслати на полотно",
|
||||
"parametersSet": "Параметри задані",
|
||||
"parametersNotSet": "Параметри не задані",
|
||||
"parametersNotSetDesc": "Не знайдені метадані цього зображення",
|
||||
"parametersFailed": "Проблема із завантаженням параметрів",
|
||||
"parametersFailedDesc": "Неможливо завантажити початкове зображення",
|
||||
"seedSet": "Сід заданий",
|
||||
"seedNotSet": "Сід не заданий",
|
||||
"seedNotSetDesc": "Не вдалося знайти сід для зображення",
|
||||
"promptSet": "Запит заданий",
|
||||
"promptNotSet": "Запит не заданий",
|
||||
"promptNotSetDesc": "Не вдалося знайти запит для зображення",
|
||||
"upscalingFailed": "Збільшення не вдалося",
|
||||
"faceRestoreFailed": "Відновлення облич не вдалося",
|
||||
"metadataLoadFailed": "Не вдалося завантажити метадані",
|
||||
"initialImageSet": "Початкове зображення задане",
|
||||
"initialImageNotSet": "Початкове зображення не задане",
|
||||
"initialImageNotSetDesc": "Не вдалося завантажити початкове зображення"
|
||||
}
|
15
invokeai/frontend/dist/locales/tooltip/fr.json
vendored
Normal file
15
invokeai/frontend/dist/locales/tooltip/fr.json
vendored
Normal file
@ -0,0 +1,15 @@
|
||||
{
|
||||
"feature": {
|
||||
"prompt": "Ceci est le champ prompt. Le prompt inclut des objets de génération et des termes stylistiques. Vous pouvez également ajouter un poids (importance du jeton) dans le prompt, mais les commandes CLI et les paramètres ne fonctionneront pas.",
|
||||
"gallery": "La galerie affiche les générations à partir du dossier de sortie à mesure qu'elles sont créées. Les paramètres sont stockés dans des fichiers et accessibles via le menu contextuel.",
|
||||
"other": "Ces options activent des modes de traitement alternatifs pour Invoke. 'Tuilage seamless' créera des motifs répétitifs dans la sortie. 'Haute résolution' est la génération en deux étapes avec img2img: utilisez ce paramètre lorsque vous souhaitez une image plus grande et plus cohérente sans artefacts. Cela prendra plus de temps que d'habitude txt2img.",
|
||||
"seed": "La valeur de grain affecte le bruit initial à partir duquel l'image est formée. Vous pouvez utiliser les graines déjà existantes provenant d'images précédentes. 'Seuil de bruit' est utilisé pour atténuer les artefacts à des valeurs CFG élevées (essayez la plage de 0 à 10), et Perlin pour ajouter du bruit Perlin pendant la génération: les deux servent à ajouter de la variété à vos sorties.",
|
||||
"variations": "Essayez une variation avec une valeur comprise entre 0,1 et 1,0 pour changer le résultat pour une graine donnée. Des variations intéressantes de la graine sont entre 0,1 et 0,3.",
|
||||
"upscale": "Utilisez ESRGAN pour agrandir l'image immédiatement après la génération.",
|
||||
"faceCorrection": "Correction de visage avec GFPGAN ou Codeformer: l'algorithme détecte les visages dans l'image et corrige tout défaut. La valeur élevée changera plus l'image, ce qui donnera des visages plus attirants. Codeformer avec une fidélité plus élevée préserve l'image originale au prix d'une correction de visage plus forte.",
|
||||
"imageToImage": "Image to Image charge n'importe quelle image en tant qu'initiale, qui est ensuite utilisée pour générer une nouvelle avec le prompt. Plus la valeur est élevée, plus l'image de résultat changera. Des valeurs de 0,0 à 1,0 sont possibles, la plage recommandée est de 0,25 à 0,75",
|
||||
"boundingBox": "La boîte englobante est la même que les paramètres Largeur et Hauteur pour Texte à Image ou Image à Image. Seulement la zone dans la boîte sera traitée.",
|
||||
"seamCorrection": "Contrôle la gestion des coutures visibles qui se produisent entre les images générées sur la toile.",
|
||||
"infillAndScaling": "Gérer les méthodes de remplissage (utilisées sur les zones masquées ou effacées de la toile) et le redimensionnement (utile pour les petites tailles de boîte englobante)."
|
||||
}
|
||||
}
|
15
invokeai/frontend/dist/locales/tooltip/ua.json
vendored
Normal file
15
invokeai/frontend/dist/locales/tooltip/ua.json
vendored
Normal file
@ -0,0 +1,15 @@
|
||||
{
|
||||
"feature": {
|
||||
"prompt": "Це поле для тексту запиту, включаючи об'єкти генерації та стилістичні терміни. У запит можна включити і коефіцієнти ваги (значущості токена), але консольні команди та параметри не працюватимуть.",
|
||||
"gallery": "Тут відображаються генерації з папки outputs у міру їх появи.",
|
||||
"other": "Ці опції включають альтернативні режими обробки для Invoke. 'Безшовний узор' створить на виході узори, що повторюються. 'Висока роздільна здатність' - це генерація у два етапи за допомогою img2img: використовуйте це налаштування, коли хочете отримати цільне зображення більшого розміру без артефактів.",
|
||||
"seed": "Значення сіду впливає на початковий шум, з якого сформується зображення. Можна використовувати вже наявний сід із попередніх зображень. 'Поріг шуму' використовується для пом'якшення артефактів при високих значеннях CFG (спробуйте в діапазоні 0-10), а 'Перлін' - для додавання шуму Перліна в процесі генерації: обидва параметри служать для більшої варіативності результатів.",
|
||||
"variations": "Спробуйте варіацію зі значенням від 0.1 до 1.0, щоб змінити результат для заданого сиду. Цікаві варіації сиду знаходяться між 0.1 і 0.3.",
|
||||
"upscale": "Використовуйте ESRGAN, щоб збільшити зображення відразу після генерації.",
|
||||
"faceCorrection": "Корекція облич за допомогою GFPGAN або Codeformer: алгоритм визначає обличчя у готовому зображенні та виправляє будь-які дефекти. Високі значення сили змінюють зображення сильніше, в результаті обличчя будуть виглядати привабливіше. У Codeformer більш висока точність збереже вихідне зображення на шкоду корекції обличчя.",
|
||||
"imageToImage": "'Зображення до зображення' завантажує будь-яке зображення, яке потім використовується для генерації разом із запитом. Чим більше значення, тим сильніше зміниться зображення в результаті. Можливі значення від 0 до 1, рекомендується діапазон 0.25-0.75",
|
||||
"boundingBox": "'Обмежуюча рамка' аналогічна налаштуванням 'Ширина' і 'Висота' для 'Зображення з тексту' або 'Зображення до зображення'. Буде оброблена тільки область у рамці.",
|
||||
"seamCorrection": "Керування обробкою видимих швів, що виникають між зображеннями на полотні.",
|
||||
"infillAndScaling": "Керування методами заповнення (використовується для масок або стертих частин полотна) та масштабування (корисно для малих розмірів обмежуючої рамки)."
|
||||
}
|
||||
}
|
@ -1 +1,59 @@
|
||||
{}
|
||||
{
|
||||
"layer": "Couche",
|
||||
"base": "Base",
|
||||
"mask": "Masque",
|
||||
"maskingOptions": "Options de masquage",
|
||||
"enableMask": "Activer le masque",
|
||||
"preserveMaskedArea": "Préserver la zone masquée",
|
||||
"clearMask": "Effacer le masque",
|
||||
"brush": "Pinceau",
|
||||
"eraser": "Gomme",
|
||||
"fillBoundingBox": "Remplir la boîte englobante",
|
||||
"eraseBoundingBox": "Effacer la boîte englobante",
|
||||
"colorPicker": "Sélecteur de couleur",
|
||||
"brushOptions": "Options de pinceau",
|
||||
"brushSize": "Taille",
|
||||
"move": "Déplacer",
|
||||
"resetView": "Réinitialiser la vue",
|
||||
"mergeVisible": "Fusionner les visibles",
|
||||
"saveToGallery": "Enregistrer dans la galerie",
|
||||
"copyToClipboard": "Copier dans le presse-papiers",
|
||||
"downloadAsImage": "Télécharger en tant qu'image",
|
||||
"undo": "Annuler",
|
||||
"redo": "Refaire",
|
||||
"clearCanvas": "Effacer le canvas",
|
||||
"canvasSettings": "Paramètres du canvas",
|
||||
"showIntermediates": "Afficher les intermédiaires",
|
||||
"showGrid": "Afficher la grille",
|
||||
"snapToGrid": "Aligner sur la grille",
|
||||
"darkenOutsideSelection": "Assombrir à l'extérieur de la sélection",
|
||||
"autoSaveToGallery": "Enregistrement automatique dans la galerie",
|
||||
"saveBoxRegionOnly": "Enregistrer uniquement la région de la boîte",
|
||||
"limitStrokesToBox": "Limiter les traits à la boîte",
|
||||
"showCanvasDebugInfo": "Afficher les informations de débogage du canvas",
|
||||
"clearCanvasHistory": "Effacer l'historique du canvas",
|
||||
"clearHistory": "Effacer l'historique",
|
||||
"clearCanvasHistoryMessage": "Effacer l'historique du canvas laisse votre canvas actuel intact, mais efface de manière irréversible l'historique annuler et refaire.",
|
||||
"clearCanvasHistoryConfirm": "Êtes-vous sûr de vouloir effacer l'historique du canvas?",
|
||||
"emptyTempImageFolder": "Vider le dossier d'images temporaires",
|
||||
"emptyFolder": "Vider le dossier",
|
||||
"emptyTempImagesFolderMessage": "Vider le dossier d'images temporaires réinitialise également complètement le canvas unifié. Cela inclut tout l'historique annuler/refaire, les images dans la zone de mise en attente et la couche de base du canvas.",
|
||||
"emptyTempImagesFolderConfirm": "Êtes-vous sûr de vouloir vider le dossier temporaire?",
|
||||
"activeLayer": "Calque actif",
|
||||
"canvasScale": "Échelle du canevas",
|
||||
"boundingBox": "Boîte englobante",
|
||||
"scaledBoundingBox": "Boîte englobante mise à l'échelle",
|
||||
"boundingBoxPosition": "Position de la boîte englobante",
|
||||
"canvasDimensions": "Dimensions du canevas",
|
||||
"canvasPosition": "Position du canevas",
|
||||
"cursorPosition": "Position du curseur",
|
||||
"previous": "Précédent",
|
||||
"next": "Suivant",
|
||||
"accept": "Accepter",
|
||||
"showHide": "Afficher/Masquer",
|
||||
"discardAll": "Tout abandonner",
|
||||
"betaClear": "Effacer",
|
||||
"betaDarkenOutside": "Assombrir à l'extérieur",
|
||||
"betaLimitToBox": "Limiter à la boîte",
|
||||
"betaPreserveMasked": "Conserver masqué"
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
{
|
||||
"layer": "Layer",
|
||||
"layer": "Livello",
|
||||
"base": "Base",
|
||||
"mask": "Maschera",
|
||||
"maskingOptions": "Opzioni di mascheramento",
|
||||
|
59
invokeai/frontend/dist/locales/unifiedcanvas/ua.json
vendored
Normal file
59
invokeai/frontend/dist/locales/unifiedcanvas/ua.json
vendored
Normal file
@ -0,0 +1,59 @@
|
||||
{
|
||||
"layer": "Шар",
|
||||
"base": "Базовий",
|
||||
"mask": "Маска",
|
||||
"maskingOptions": "Параметри маски",
|
||||
"enableMask": "Увiмкнути маску",
|
||||
"preserveMaskedArea": "Зберiгати замасковану область",
|
||||
"clearMask": "Очистити маску",
|
||||
"brush": "Пензель",
|
||||
"eraser": "Гумка",
|
||||
"fillBoundingBox": "Заповнити обмежуючу рамку",
|
||||
"eraseBoundingBox": "Стерти обмежуючу рамку",
|
||||
"colorPicker": "Пiпетка",
|
||||
"brushOptions": "Параметри пензля",
|
||||
"brushSize": "Розмiр",
|
||||
"move": "Перемiстити",
|
||||
"resetView": "Скинути вигляд",
|
||||
"mergeVisible": "Об'єднати видимi",
|
||||
"saveToGallery": "Зберегти до галереї",
|
||||
"copyToClipboard": "Копiювати до буферу обмiну",
|
||||
"downloadAsImage": "Завантажити як зображення",
|
||||
"undo": "Вiдмiнити",
|
||||
"redo": "Повторити",
|
||||
"clearCanvas": "Очистити полотно",
|
||||
"canvasSettings": "Налаштування полотна",
|
||||
"showIntermediates": "Показувати процес",
|
||||
"showGrid": "Показувати сiтку",
|
||||
"snapToGrid": "Прив'язати до сітки",
|
||||
"darkenOutsideSelection": "Затемнити полотно зовні",
|
||||
"autoSaveToGallery": "Автозбереження до галереї",
|
||||
"saveBoxRegionOnly": "Зберiгати тiльки видiлення",
|
||||
"limitStrokesToBox": "Обмежити штрихи виділенням",
|
||||
"showCanvasDebugInfo": "Показати налаштування полотна",
|
||||
"clearCanvasHistory": "Очистити iсторiю полотна",
|
||||
"clearHistory": "Очистити iсторiю",
|
||||
"clearCanvasHistoryMessage": "Очищення історії полотна залишає поточне полотно незайманим, але видаляє історію скасування та повтору",
|
||||
"clearCanvasHistoryConfirm": "Ви впевнені, що хочете очистити історію полотна?",
|
||||
"emptyTempImageFolder": "Очистити тимчасову папку",
|
||||
"emptyFolder": "Очистити папку",
|
||||
"emptyTempImagesFolderMessage": "Очищення папки тимчасових зображень також повністю скидає полотно, включаючи всю історію скасування/повтору, зображення та базовий шар полотна, що розміщуються.",
|
||||
"emptyTempImagesFolderConfirm": "Ви впевнені, що хочете очистити тимчасову папку?",
|
||||
"activeLayer": "Активний шар",
|
||||
"canvasScale": "Масштаб полотна",
|
||||
"boundingBox": "Обмежуюча рамка",
|
||||
"scaledBoundingBox": "Масштабування рамки",
|
||||
"boundingBoxPosition": "Позиція обмежуючої рамки",
|
||||
"canvasDimensions": "Разміри полотна",
|
||||
"canvasPosition": "Розташування полотна",
|
||||
"cursorPosition": "Розташування курсора",
|
||||
"previous": "Попереднє",
|
||||
"next": "Наступне",
|
||||
"принять": "Приняти",
|
||||
"showHide": "Показати/Сховати",
|
||||
"discardAll": "Відмінити все",
|
||||
"betaClear": "Очистити",
|
||||
"betaDarkenOutside": "Затемнити зовні",
|
||||
"betaLimitToBox": "Обмежити виділенням",
|
||||
"betaPreserveMasked": "Зберiгати замасковану область"
|
||||
}
|
@ -21,6 +21,7 @@
|
||||
"langSpanish": "Spanish",
|
||||
"langJapanese": "Japanese",
|
||||
"langDutch": "Dutch",
|
||||
"langUkranian": "Ukranian",
|
||||
"text2img": "Text To Image",
|
||||
"img2img": "Image To Image",
|
||||
"unifiedCanvas": "Unified Canvas",
|
||||
|
@ -21,6 +21,7 @@
|
||||
"langSpanish": "Spanish",
|
||||
"langJapanese": "Japanese",
|
||||
"langDutch": "Dutch",
|
||||
"langUkranian": "Ukranian",
|
||||
"text2img": "Text To Image",
|
||||
"img2img": "Image To Image",
|
||||
"unifiedCanvas": "Unified Canvas",
|
||||
|
@ -1 +1,62 @@
|
||||
{}
|
||||
{
|
||||
"hotkeysLabel": "Raccourcis clavier",
|
||||
"themeLabel": "Thème",
|
||||
"languagePickerLabel": "Sélecteur de langue",
|
||||
"reportBugLabel": "Signaler un bug",
|
||||
"githubLabel": "Github",
|
||||
"discordLabel": "Discord",
|
||||
"settingsLabel": "Paramètres",
|
||||
"darkTheme": "Sombre",
|
||||
"lightTheme": "Clair",
|
||||
"greenTheme": "Vert",
|
||||
"langEnglish": "Anglais",
|
||||
"langRussian": "Russe",
|
||||
"langItalian": "Italien",
|
||||
"langBrPortuguese": "Portugais (Brésilien)",
|
||||
"langGerman": "Allemand",
|
||||
"langPortuguese": "Portugais",
|
||||
"langFrench": "Français",
|
||||
"langPolish": "Polonais",
|
||||
"langSimplifiedChinese": "Chinois simplifié",
|
||||
"langSpanish": "Espagnol",
|
||||
"langJapanese": "Japonais",
|
||||
"langDutch": "Néerlandais",
|
||||
"text2img": "Texte en image",
|
||||
"img2img": "Image en image",
|
||||
"unifiedCanvas": "Canvas unifié",
|
||||
"nodes": "Nœuds",
|
||||
"nodesDesc": "Un système basé sur les nœuds pour la génération d'images est actuellement en développement. Restez à l'écoute pour des mises à jour à ce sujet.",
|
||||
"postProcessing": "Post-traitement",
|
||||
"postProcessDesc1": "Invoke AI offre une grande variété de fonctionnalités de post-traitement. Le redimensionnement d'images et la restauration de visages sont déjà disponibles dans la WebUI. Vous pouvez y accéder à partir du menu Options avancées des onglets Texte en image et Image en image. Vous pouvez également traiter les images directement en utilisant les boutons d'action d'image ci-dessus l'affichage d'image actuel ou dans le visualiseur.",
|
||||
"postProcessDesc2": "Une interface utilisateur dédiée sera bientôt disponible pour faciliter les workflows de post-traitement plus avancés.",
|
||||
"postProcessDesc3": "L'interface en ligne de commande d'Invoke AI offre diverses autres fonctionnalités, notamment Embiggen.",
|
||||
"training": "Formation",
|
||||
"trainingDesc1": "Un workflow dédié pour former vos propres embeddings et checkpoints en utilisant Textual Inversion et Dreambooth depuis l'interface web.",
|
||||
"trainingDesc2": "InvokeAI prend déjà en charge la formation d'embeddings personnalisés en utilisant Textual Inversion en utilisant le script principal.",
|
||||
"upload": "Télécharger",
|
||||
"close": "Fermer",
|
||||
"load": "Charger",
|
||||
"back": "Retour",
|
||||
"statusConnected": "Connecté",
|
||||
"statusDisconnected": "Déconnecté",
|
||||
"statusError": "Erreur",
|
||||
"statusPreparing": "Préparation",
|
||||
"statusProcessingCanceled": "Traitement Annulé",
|
||||
"statusProcessingComplete": "Traitement Terminé",
|
||||
"statusGenerating": "Génération",
|
||||
"statusGeneratingTextToImage": "Génération Texte vers Image",
|
||||
"statusGeneratingImageToImage": "Génération Image vers Image",
|
||||
"statusGeneratingInpainting": "Génération de Réparation",
|
||||
"statusGeneratingOutpainting": "Génération de Completion",
|
||||
"statusGenerationComplete": "Génération Terminée",
|
||||
"statusIterationComplete": "Itération Terminée",
|
||||
"statusSavingImage": "Sauvegarde de l'Image",
|
||||
"statusRestoringFaces": "Restauration des Visages",
|
||||
"statusRestoringFacesGFPGAN": "Restauration des Visages (GFPGAN)",
|
||||
"statusRestoringFacesCodeFormer": "Restauration des Visages (CodeFormer)",
|
||||
"statusUpscaling": "Mise à Échelle",
|
||||
"statusUpscalingESRGAN": "Mise à Échelle (ESRGAN)",
|
||||
"statusLoadingModel": "Chargement du Modèle",
|
||||
"statusModelChanged": "Modèle Changé"
|
||||
|
||||
}
|
||||
|
@ -19,6 +19,8 @@
|
||||
"langPolish": "Polacco",
|
||||
"langSimplifiedChinese": "Cinese semplificato",
|
||||
"langSpanish": "Spagnolo",
|
||||
"langJapanese": "Giapponese",
|
||||
"langDutch": "Olandese",
|
||||
"text2img": "Testo a Immagine",
|
||||
"img2img": "Immagine a Immagine",
|
||||
"unifiedCanvas": "Tela unificata",
|
||||
@ -34,6 +36,7 @@
|
||||
"upload": "Caricamento",
|
||||
"close": "Chiudi",
|
||||
"load": "Carica",
|
||||
"back": "Indietro",
|
||||
"statusConnected": "Collegato",
|
||||
"statusDisconnected": "Disconnesso",
|
||||
"statusError": "Errore",
|
||||
|
53
invokeai/frontend/public/locales/common/ua.json
Normal file
53
invokeai/frontend/public/locales/common/ua.json
Normal file
@ -0,0 +1,53 @@
|
||||
{
|
||||
"hotkeysLabel": "Гарячi клавіші",
|
||||
"themeLabel": "Тема",
|
||||
"languagePickerLabel": "Мова",
|
||||
"reportBugLabel": "Повідомити про помилку",
|
||||
"githubLabel": "Github",
|
||||
"discordLabel": "Discord",
|
||||
"settingsLabel": "Налаштування",
|
||||
"darkTheme": "Темна",
|
||||
"lightTheme": "Світла",
|
||||
"greenTheme": "Зелена",
|
||||
"langEnglish": "Англійська",
|
||||
"langRussian": "Російська",
|
||||
"langItalian": "Iталійська",
|
||||
"langPortuguese": "Португальська",
|
||||
"langFrench": "Французька",
|
||||
"text2img": "Зображення із тексту (text2img)",
|
||||
"img2img": "Зображення із зображення (img2img)",
|
||||
"unifiedCanvas": "Універсальне полотно",
|
||||
"nodes": "Вузли",
|
||||
"nodesDesc": "Система генерації зображень на основі нодів (вузлів) вже розробляється. Слідкуйте за новинами про цю чудову функцію.",
|
||||
"postProcessing": "Постобробка",
|
||||
"postProcessDesc1": "Invoke AI пропонує широкий спектр функцій постобробки. Збільшення зображення (upscale) та відновлення облич вже доступні в інтерфейсі. Отримайте доступ до них з меню 'Додаткові параметри' на вкладках 'Зображення із тексту' та 'Зображення із зображення'. Обробляйте зображення безпосередньо, використовуючи кнопки дій із зображеннями над поточним зображенням або в режимі перегляду.",
|
||||
"postProcessDesc2": "Найближчим часом буде випущено спеціальний інтерфейс для більш сучасних процесів постобробки.",
|
||||
"postProcessDesc3": "Інтерфейс командного рядка Invoke AI пропонує різні інші функції, включаючи збільшення Embiggen",
|
||||
"training": "Навчання",
|
||||
"trainingDesc1": "Спеціальний інтерфейс для навчання власних моделей з використанням Textual Inversion та Dreambooth",
|
||||
"trainingDesc2": "InvokeAI вже підтримує навчання моделей за допомогою TI, через інтерфейс командного рядка.",
|
||||
"upload": "Завантажити",
|
||||
"close": "Закрити",
|
||||
"load": "Завантажити",
|
||||
"statusConnected": "Підключено",
|
||||
"statusDisconnected": "Відключено",
|
||||
"statusError": "Помилка",
|
||||
"statusPreparing": "Підготування",
|
||||
"statusProcessingCanceled": "Обробка перервана",
|
||||
"statusProcessingComplete": "Обробка завершена",
|
||||
"statusGenerating": "Генерація",
|
||||
"statusGeneratingTextToImage": "Генерація зображення із тексту",
|
||||
"statusGeneratingImageToImage": "Генерація зображення із зображення",
|
||||
"statusGeneratingInpainting": "Домальовка всередині",
|
||||
"statusGeneratingOutpainting": "Домальовка зовні",
|
||||
"statusGenerationComplete": "Генерація завершена",
|
||||
"statusIterationComplete": "Iтерація завершена",
|
||||
"statusSavingImage": "Збереження зображення",
|
||||
"statusRestoringFaces": "Відновлення облич",
|
||||
"statusRestoringFacesGFPGAN": "Відновлення облич (GFPGAN)",
|
||||
"statusRestoringFacesCodeFormer": "Відновлення облич (CodeFormer)",
|
||||
"statusUpscaling": "Збільшення",
|
||||
"statusUpscalingESRGAN": "Збільшення (ESRGAN)",
|
||||
"statusLoadingModel": "Завантаження моделі",
|
||||
"statusModelChanged": "Модель змінено"
|
||||
}
|
@ -1 +1,16 @@
|
||||
{}
|
||||
{
|
||||
"generations": "Générations",
|
||||
"showGenerations": "Afficher les générations",
|
||||
"uploads": "Téléchargements",
|
||||
"showUploads": "Afficher les téléchargements",
|
||||
"galleryImageSize": "Taille de l'image",
|
||||
"galleryImageResetSize": "Réinitialiser la taille",
|
||||
"gallerySettings": "Paramètres de la galerie",
|
||||
"maintainAspectRatio": "Maintenir le rapport d'aspect",
|
||||
"autoSwitchNewImages": "Basculer automatiquement vers de nouvelles images",
|
||||
"singleColumnLayout": "Mise en page en colonne unique",
|
||||
"pinGallery": "Épingler la galerie",
|
||||
"allImagesLoaded": "Toutes les images chargées",
|
||||
"loadMore": "Charger plus",
|
||||
"noImagesInGallery": "Aucune image dans la galerie"
|
||||
}
|
||||
|
16
invokeai/frontend/public/locales/gallery/ua.json
Normal file
16
invokeai/frontend/public/locales/gallery/ua.json
Normal file
@ -0,0 +1,16 @@
|
||||
{
|
||||
"generations": "Генерації",
|
||||
"showGenerations": "Показувати генерації",
|
||||
"uploads": "Завантаження",
|
||||
"showUploads": "Показувати завантаження",
|
||||
"galleryImageSize": "Розмір зображень",
|
||||
"galleryImageResetSize": "Аатоматичний розмір",
|
||||
"gallerySettings": "Налаштування галереї",
|
||||
"maintainAspectRatio": "Зберігати пропорції",
|
||||
"autoSwitchNewImages": "Автоматично вибирати нові",
|
||||
"singleColumnLayout": "Одна колонка",
|
||||
"pinGallery": "Закріпити галерею",
|
||||
"allImagesLoaded": "Всі зображення завантажені",
|
||||
"loadMore": "Завантажити більше",
|
||||
"noImagesInGallery": "Зображень немає"
|
||||
}
|
@ -1 +1,207 @@
|
||||
{}
|
||||
{
|
||||
"keyboardShortcuts": "Raccourcis clavier",
|
||||
"appHotkeys": "Raccourcis de l'application",
|
||||
"GeneralHotkeys": "Raccourcis généraux",
|
||||
"galleryHotkeys": "Raccourcis de la galerie",
|
||||
"unifiedCanvasHotkeys": "Raccourcis du Canvas unifié",
|
||||
"invoke": {
|
||||
"title": "Invoquer",
|
||||
"desc": "Générer une image"
|
||||
},
|
||||
"cancel": {
|
||||
"title": "Annuler",
|
||||
"desc": "Annuler la génération d'image"
|
||||
},
|
||||
"focusPrompt": {
|
||||
"title": "Prompt de Focus",
|
||||
"desc": "Mettre en focus la zone de saisie de la commande"
|
||||
},
|
||||
"toggleOptions": {
|
||||
"title": "Basculer Options",
|
||||
"desc": "Ouvrir et fermer le panneau d'options"
|
||||
},
|
||||
"pinOptions": {
|
||||
"title": "Epingler Options",
|
||||
"desc": "Epingler le panneau d'options"
|
||||
},
|
||||
"toggleViewer": {
|
||||
"title": "Basculer Visionneuse",
|
||||
"desc": "Ouvrir et fermer la visionneuse d'image"
|
||||
},
|
||||
"toggleGallery": {
|
||||
"title": "Basculer Galerie",
|
||||
"desc": "Ouvrir et fermer le tiroir de galerie"
|
||||
},
|
||||
"maximizeWorkSpace": {
|
||||
"title": "Maximiser Espace de travail",
|
||||
"desc": "Fermer les panneaux et maximiser la zone de travail"
|
||||
},
|
||||
"changeTabs": {
|
||||
"title": "Changer d'onglets",
|
||||
"desc": "Passer à un autre espace de travail"
|
||||
},
|
||||
"consoleToggle": {
|
||||
"title": "Bascule de la console",
|
||||
"desc": "Ouvrir et fermer la console"
|
||||
},
|
||||
"setPrompt": {
|
||||
"title": "Définir le prompt",
|
||||
"desc": "Utiliser le prompt de l'image actuelle"
|
||||
},
|
||||
"setSeed": {
|
||||
"title": "Définir la graine",
|
||||
"desc": "Utiliser la graine de l'image actuelle"
|
||||
},
|
||||
"setParameters": {
|
||||
"title": "Définir les paramètres",
|
||||
"desc": "Utiliser tous les paramètres de l'image actuelle"
|
||||
},
|
||||
"restoreFaces": {
|
||||
"title": "Restaurer les faces",
|
||||
"desc": "Restaurer l'image actuelle"
|
||||
},
|
||||
"upscale": {
|
||||
"title": "Agrandir",
|
||||
"desc": "Agrandir l'image actuelle"
|
||||
},
|
||||
"showInfo": {
|
||||
"title": "Afficher les informations",
|
||||
"desc": "Afficher les informations de métadonnées de l'image actuelle"
|
||||
},
|
||||
"sendToImageToImage": {
|
||||
"title": "Envoyer à l'image à l'image",
|
||||
"desc": "Envoyer l'image actuelle à l'image à l'image"
|
||||
},
|
||||
"deleteImage": {
|
||||
"title": "Supprimer l'image",
|
||||
"desc": "Supprimer l'image actuelle"
|
||||
},
|
||||
"closePanels": {
|
||||
"title": "Fermer les panneaux",
|
||||
"desc": "Fermer les panneaux ouverts"
|
||||
},
|
||||
"previousImage": {
|
||||
"title": "Image précédente",
|
||||
"desc": "Afficher l'image précédente dans la galerie"
|
||||
},
|
||||
"nextImage": {
|
||||
"title": "Image suivante",
|
||||
"desc": "Afficher l'image suivante dans la galerie"
|
||||
},
|
||||
"toggleGalleryPin": {
|
||||
"title": "Activer/désactiver l'épinglage de la galerie",
|
||||
"desc": "Épingle ou dépingle la galerie à l'interface utilisateur"
|
||||
},
|
||||
"increaseGalleryThumbSize": {
|
||||
"title": "Augmenter la taille des miniatures de la galerie",
|
||||
"desc": "Augmente la taille des miniatures de la galerie"
|
||||
},
|
||||
"decreaseGalleryThumbSize": {
|
||||
"title": "Diminuer la taille des miniatures de la galerie",
|
||||
"desc": "Diminue la taille des miniatures de la galerie"
|
||||
},
|
||||
"selectBrush": {
|
||||
"title": "Sélectionner un pinceau",
|
||||
"desc": "Sélectionne le pinceau de la toile"
|
||||
},
|
||||
"selectEraser": {
|
||||
"title": "Sélectionner un gomme",
|
||||
"desc": "Sélectionne la gomme de la toile"
|
||||
},
|
||||
"decreaseBrushSize": {
|
||||
"title": "Diminuer la taille du pinceau",
|
||||
"desc": "Diminue la taille du pinceau/gomme de la toile"
|
||||
},
|
||||
"increaseBrushSize": {
|
||||
"title": "Augmenter la taille du pinceau",
|
||||
"desc": "Augmente la taille du pinceau/gomme de la toile"
|
||||
},
|
||||
"decreaseBrushOpacity": {
|
||||
"title": "Diminuer l'opacité du pinceau",
|
||||
"desc": "Diminue l'opacité du pinceau de la toile"
|
||||
},
|
||||
"increaseBrushOpacity": {
|
||||
"title": "Augmenter l'opacité du pinceau",
|
||||
"desc": "Augmente l'opacité du pinceau de la toile"
|
||||
},
|
||||
"moveTool": {
|
||||
"title": "Outil de déplacement",
|
||||
"desc": "Permet la navigation sur la toile"
|
||||
},
|
||||
"fillBoundingBox": {
|
||||
"title": "Remplir la boîte englobante",
|
||||
"desc": "Remplit la boîte englobante avec la couleur du pinceau"
|
||||
},
|
||||
"eraseBoundingBox": {
|
||||
"title": "Effacer la boîte englobante",
|
||||
"desc": "Efface la zone de la boîte englobante"
|
||||
},
|
||||
"colorPicker": {
|
||||
"title": "Sélectionnez le sélecteur de couleur",
|
||||
"desc": "Sélectionne le sélecteur de couleur de la toile"
|
||||
},
|
||||
"toggleSnap": {
|
||||
"title": "Basculer Snap",
|
||||
"desc": "Basculer Snap à la grille"
|
||||
},
|
||||
"quickToggleMove": {
|
||||
"title": "Basculer rapidement déplacer",
|
||||
"desc": "Basculer temporairement le mode Déplacer"
|
||||
},
|
||||
"toggleLayer": {
|
||||
"title": "Basculer la couche",
|
||||
"desc": "Basculer la sélection de la couche masque/base"
|
||||
},
|
||||
"clearMask": {
|
||||
"title": "Effacer le masque",
|
||||
"desc": "Effacer entièrement le masque"
|
||||
},
|
||||
"hideMask": {
|
||||
"title": "Masquer le masque",
|
||||
"desc": "Masquer et démasquer le masque"
|
||||
},
|
||||
"showHideBoundingBox": {
|
||||
"title": "Afficher/Masquer la boîte englobante",
|
||||
"desc": "Basculer la visibilité de la boîte englobante"
|
||||
},
|
||||
"mergeVisible": {
|
||||
"title": "Fusionner visible",
|
||||
"desc": "Fusionner toutes les couches visibles de la toile"
|
||||
},
|
||||
"saveToGallery": {
|
||||
"title": "Enregistrer dans la galerie",
|
||||
"desc": "Enregistrer la toile actuelle dans la galerie"
|
||||
},
|
||||
"copyToClipboard": {
|
||||
"title": "Copier dans le presse-papiers",
|
||||
"desc": "Copier la toile actuelle dans le presse-papiers"
|
||||
},
|
||||
"downloadImage": {
|
||||
"title": "Télécharger l'image",
|
||||
"desc": "Télécharger la toile actuelle"
|
||||
},
|
||||
"undoStroke": {
|
||||
"title": "Annuler le trait",
|
||||
"desc": "Annuler un coup de pinceau"
|
||||
},
|
||||
"redoStroke": {
|
||||
"title": "Rétablir le trait",
|
||||
"desc": "Rétablir un coup de pinceau"
|
||||
},
|
||||
"resetView": {
|
||||
"title": "Réinitialiser la vue",
|
||||
"desc": "Réinitialiser la vue de la toile"
|
||||
},
|
||||
"previousStagingImage": {
|
||||
"title": "Image de mise en scène précédente",
|
||||
"desc": "Image précédente de la zone de mise en scène"
|
||||
},
|
||||
"nextStagingImage": {
|
||||
"title": "Image de mise en scène suivante",
|
||||
"desc": "Image suivante de la zone de mise en scène"
|
||||
},
|
||||
"acceptStagingImage": {
|
||||
"title": "Accepter l'image de mise en scène",
|
||||
"desc": "Accepter l'image actuelle de la zone de mise en scène"
|
||||
}
|
||||
}
|
||||
|
207
invokeai/frontend/public/locales/hotkeys/ua.json
Normal file
207
invokeai/frontend/public/locales/hotkeys/ua.json
Normal file
@ -0,0 +1,207 @@
|
||||
{
|
||||
"keyboardShortcuts": "Клавіатурні скорочення",
|
||||
"appHotkeys": "Гарячі клавіші програми",
|
||||
"generalHotkeys": "Загальні гарячі клавіші",
|
||||
"galleryHotkeys": "Гарячі клавіші галереї",
|
||||
"unifiedCanvasHotkeys": "Гарячі клавіші універсального полотна",
|
||||
"invoke": {
|
||||
"title": "Invoke",
|
||||
"desc": "Згенерувати зображення"
|
||||
},
|
||||
"cancel": {
|
||||
"title": "Скасувати",
|
||||
"desc": "Скасувати генерацію зображення"
|
||||
},
|
||||
"focusPrompt": {
|
||||
"title": "Переключитися на введення запиту",
|
||||
"desc": "Перемикання на область введення запиту"
|
||||
},
|
||||
"toggleOptions": {
|
||||
"title": "Показати/приховати параметри",
|
||||
"desc": "Відкривати і закривати панель параметрів"
|
||||
},
|
||||
"pinOptions": {
|
||||
"title": "Закріпити параметри",
|
||||
"desc": "Закріпити панель параметрів"
|
||||
},
|
||||
"toggleViewer": {
|
||||
"title": "Показати перегляд",
|
||||
"desc": "Відкривати і закривати переглядач зображень"
|
||||
},
|
||||
"toggleGallery": {
|
||||
"title": "Показати галерею",
|
||||
"desc": "Відкривати і закривати скриньку галереї"
|
||||
},
|
||||
"maximizeWorkSpace": {
|
||||
"title": "Максимізувати робочий простір",
|
||||
"desc": "Приховати панелі і максимізувати робочу область"
|
||||
},
|
||||
"changeTabs": {
|
||||
"title": "Переключити вкладку",
|
||||
"desc": "Переключитися на іншу робочу область"
|
||||
},
|
||||
"consoleToggle": {
|
||||
"title": "Показати консоль",
|
||||
"desc": "Відкривати і закривати консоль"
|
||||
},
|
||||
"setPrompt": {
|
||||
"title": "Використовувати запит",
|
||||
"desc": "Використати запит із поточного зображення"
|
||||
},
|
||||
"setSeed": {
|
||||
"title": "Використовувати сід",
|
||||
"desc": "Використовувати сід поточного зображення"
|
||||
},
|
||||
"setParameters": {
|
||||
"title": "Використовувати всі параметри",
|
||||
"desc": "Використовувати всі параметри поточного зображення"
|
||||
},
|
||||
"restoreFaces": {
|
||||
"title": "Відновити обличчя",
|
||||
"desc": "Відновити обличчя на поточному зображенні"
|
||||
},
|
||||
"upscale": {
|
||||
"title": "Збільшення",
|
||||
"desc": "Збільшити поточне зображення"
|
||||
},
|
||||
"showInfo": {
|
||||
"title": "Показати метадані",
|
||||
"desc": "Показати метадані з поточного зображення"
|
||||
},
|
||||
"sendToImageToImage": {
|
||||
"title": "Відправити в img2img",
|
||||
"desc": "Надіслати поточне зображення в Image To Image"
|
||||
},
|
||||
"deleteImage": {
|
||||
"title": "Видалити зображення",
|
||||
"desc": "Видалити поточне зображення"
|
||||
},
|
||||
"closePanels": {
|
||||
"title": "Закрити панелі",
|
||||
"desc": "Закриває відкриті панелі"
|
||||
},
|
||||
"previousImage": {
|
||||
"title": "Попереднє зображення",
|
||||
"desc": "Відображати попереднє зображення в галереї"
|
||||
},
|
||||
"nextImage": {
|
||||
"title": "Наступне зображення",
|
||||
"desc": "Відображення наступного зображення в галереї"
|
||||
},
|
||||
"toggleGalleryPin": {
|
||||
"title": "Закріпити галерею",
|
||||
"desc": "Закріплює і відкріплює галерею"
|
||||
},
|
||||
"increaseGalleryThumbSize": {
|
||||
"title": "Збільшити розмір мініатюр галереї",
|
||||
"desc": "Збільшує розмір мініатюр галереї"
|
||||
},
|
||||
"reduceGalleryThumbSize": {
|
||||
"title": "Зменшує розмір мініатюр галереї",
|
||||
"desc": "Зменшує розмір мініатюр галереї"
|
||||
},
|
||||
"selectBrush": {
|
||||
"title": "Вибрати пензель",
|
||||
"desc": "Вибирає пензель для полотна"
|
||||
},
|
||||
"selectEraser": {
|
||||
"title": "Вибрати ластик",
|
||||
"desc": "Вибирає ластик для полотна"
|
||||
},
|
||||
"reduceBrushSize": {
|
||||
"title": "Зменшити розмір пензля",
|
||||
"desc": "Зменшує розмір пензля/ластика полотна"
|
||||
},
|
||||
"increaseBrushSize": {
|
||||
"title": "Збільшити розмір пензля",
|
||||
"desc": "Збільшує розмір пензля/ластика полотна"
|
||||
},
|
||||
"reduceBrushOpacity": {
|
||||
"title": "Зменшити непрозорість пензля",
|
||||
"desc": "Зменшує непрозорість пензля полотна"
|
||||
},
|
||||
"increaseBrushOpacity": {
|
||||
"title": "Збільшити непрозорість пензля",
|
||||
"desc": "Збільшує непрозорість пензля полотна"
|
||||
},
|
||||
"moveTool": {
|
||||
"title": "Інструмент переміщення",
|
||||
"desc": "Дозволяє переміщатися по полотну"
|
||||
},
|
||||
"fillBoundingBox": {
|
||||
"title": "Заповнити обмежувальну рамку",
|
||||
"desc": "Заповнює обмежувальну рамку кольором пензля"
|
||||
},
|
||||
"eraseBoundingBox": {
|
||||
"title": "Стерти обмежувальну рамку",
|
||||
"desc": "Стирає область обмежувальної рамки"
|
||||
},
|
||||
"colorPicker": {
|
||||
"title": "Вибрати колір",
|
||||
"desc": "Вибирає засіб вибору кольору полотна"
|
||||
},
|
||||
"toggleSnap": {
|
||||
"title": "Увімкнути прив'язку",
|
||||
"desc": "Вмикає/вимикає прив'язку до сітки"
|
||||
},
|
||||
"quickToggleMove": {
|
||||
"title": "Швидке перемикання переміщення",
|
||||
"desc": "Тимчасово перемикає режим переміщення"
|
||||
},
|
||||
"toggleLayer": {
|
||||
"title": "Переключити шар",
|
||||
"desc": "Перемикання маски/базового шару"
|
||||
},
|
||||
"clearMask": {
|
||||
"title": "Очистити маску",
|
||||
"desc": "Очистити всю маску"
|
||||
},
|
||||
"hideMask": {
|
||||
"title": "Приховати маску",
|
||||
"desc": "Приховує/показує маску"
|
||||
},
|
||||
"showHideBoundingBox": {
|
||||
"title": "Показати/приховати обмежувальну рамку",
|
||||
"desc": "Переключити видимість обмежувальної рамки"
|
||||
},
|
||||
"mergeVisible": {
|
||||
"title": "Об'єднати видимі",
|
||||
"desc": "Об'єднати всі видимі шари полотна"
|
||||
},
|
||||
"saveToGallery": {
|
||||
"title": "Зберегти в галерею",
|
||||
"desc": "Зберегти поточне полотно в галерею"
|
||||
},
|
||||
"copyToClipboard": {
|
||||
"title": "Копіювати в буфер обміну",
|
||||
"desc": "Копіювати поточне полотно в буфер обміну"
|
||||
},
|
||||
"downloadImage": {
|
||||
"title": "Завантажити зображення",
|
||||
"desc": "Завантажити вміст полотна"
|
||||
},
|
||||
"undoStroke": {
|
||||
"title": "Скасувати пензель",
|
||||
"desc": "Скасувати мазок пензля"
|
||||
},
|
||||
"redoStroke": {
|
||||
"title": "Повторити мазок пензля",
|
||||
"desc": "Повторити мазок пензля"
|
||||
},
|
||||
"resetView": {
|
||||
"title": "Вид за замовчуванням",
|
||||
"desc": "Скинути вид полотна"
|
||||
},
|
||||
"previousStagingImage": {
|
||||
"title": "Попереднє зображення",
|
||||
"desc": "Попереднє зображення"
|
||||
},
|
||||
"nextStagingImage": {
|
||||
"title": "Наступне зображення",
|
||||
"desc": "Наступне зображення"
|
||||
},
|
||||
"acceptStagingImage": {
|
||||
"title": "Прийняти зображення",
|
||||
"desc": "Прийняти поточне зображення"
|
||||
}
|
||||
}
|
68
invokeai/frontend/public/locales/modelmanager/fr.json
Normal file
68
invokeai/frontend/public/locales/modelmanager/fr.json
Normal file
@ -0,0 +1,68 @@
|
||||
{
|
||||
"modelManager": "Gestionnaire de modèle",
|
||||
"model": "Modèle",
|
||||
"allModels": "Tous les modèles",
|
||||
"checkpointModels": "Points de contrôle",
|
||||
"diffusersModels": "Diffuseurs",
|
||||
"safetensorModels": "SafeTensors",
|
||||
"modelAdded": "Modèle ajouté",
|
||||
"modelUpdated": "Modèle mis à jour",
|
||||
"modelEntryDeleted": "Entrée de modèle supprimée",
|
||||
"cannotUseSpaces": "Ne peut pas utiliser d'espaces",
|
||||
"addNew": "Ajouter un nouveau",
|
||||
"addNewModel": "Ajouter un nouveau modèle",
|
||||
"addCheckpointModel": "Ajouter un modèle de point de contrôle / SafeTensor",
|
||||
"addDiffuserModel": "Ajouter des diffuseurs",
|
||||
"addManually": "Ajouter manuellement",
|
||||
"manual": "Manuel",
|
||||
"name": "Nom",
|
||||
"nameValidationMsg": "Entrez un nom pour votre modèle",
|
||||
"description": "Description",
|
||||
"descriptionValidationMsg": "Ajoutez une description pour votre modèle",
|
||||
"config": "Config",
|
||||
"configValidationMsg": "Chemin vers le fichier de configuration de votre modèle.",
|
||||
"modelLocation": "Emplacement du modèle",
|
||||
"modelLocationValidationMsg": "Chemin vers où votre modèle est situé localement.",
|
||||
"repo_id": "ID de dépôt",
|
||||
"repoIDValidationMsg": "Dépôt en ligne de votre modèle",
|
||||
"vaeLocation": "Emplacement VAE",
|
||||
"vaeLocationValidationMsg": "Chemin vers où votre VAE est situé.",
|
||||
"vaeRepoID": "ID de dépôt VAE",
|
||||
"vaeRepoIDValidationMsg": "Dépôt en ligne de votre VAE",
|
||||
"width": "Largeur",
|
||||
"widthValidationMsg": "Largeur par défaut de votre modèle.",
|
||||
"height": "Hauteur",
|
||||
"heightValidationMsg": "Hauteur par défaut de votre modèle.",
|
||||
"addModel": "Ajouter un modèle",
|
||||
"updateModel": "Mettre à jour le modèle",
|
||||
"availableModels": "Modèles disponibles",
|
||||
"search": "Rechercher",
|
||||
"load": "Charger",
|
||||
"active": "actif",
|
||||
"notLoaded": "non chargé",
|
||||
"cached": "en cache",
|
||||
"checkpointFolder": "Dossier de point de contrôle",
|
||||
"clearCheckpointFolder": "Effacer le dossier de point de contrôle",
|
||||
"findModels": "Trouver des modèles",
|
||||
"scanAgain": "Scanner à nouveau",
|
||||
"modelsFound": "Modèles trouvés",
|
||||
"selectFolder": "Sélectionner un dossier",
|
||||
"selected": "Sélectionné",
|
||||
"selectAll": "Tout sélectionner",
|
||||
"deselectAll": "Tout désélectionner",
|
||||
"showExisting": "Afficher existant",
|
||||
"addSelected": "Ajouter sélectionné",
|
||||
"modelExists": "Modèle existant",
|
||||
"selectAndAdd": "Sélectionner et ajouter les modèles listés ci-dessous",
|
||||
"noModelsFound": "Aucun modèle trouvé",
|
||||
"delete": "Supprimer",
|
||||
"deleteModel": "Supprimer le modèle",
|
||||
"deleteConfig": "Supprimer la configuration",
|
||||
"deleteMsg1": "Êtes-vous sûr de vouloir supprimer cette entrée de modèle dans InvokeAI?",
|
||||
"deleteMsg2": "Cela n'effacera pas le fichier de point de contrôle du modèle de votre disque. Vous pouvez les réajouter si vous le souhaitez.",
|
||||
"formMessageDiffusersModelLocation": "Emplacement du modèle de diffuseurs",
|
||||
"formMessageDiffusersModelLocationDesc": "Veuillez en entrer au moins un.",
|
||||
"formMessageDiffusersVAELocation": "Emplacement VAE",
|
||||
"formMessageDiffusersVAELocationDesc": "Si non fourni, InvokeAI recherchera le fichier VAE à l'emplacement du modèle donné ci-dessus."
|
||||
|
||||
}
|
@ -1,24 +1,34 @@
|
||||
{
|
||||
"modelManager": "Gestione Modelli",
|
||||
"model": "Modello",
|
||||
"allModels": "Tutti i Modelli",
|
||||
"checkpointModels": "Checkpoint",
|
||||
"diffusersModels": "Diffusori",
|
||||
"safetensorModels": "SafeTensor",
|
||||
"modelAdded": "Modello Aggiunto",
|
||||
"modelUpdated": "Modello Aggiornato",
|
||||
"modelEntryDeleted": "Modello Rimosso",
|
||||
"cannotUseSpaces": "Impossibile utilizzare gli spazi",
|
||||
"addNew": "Aggiungi nuovo",
|
||||
"addNewModel": "Aggiungi nuovo Modello",
|
||||
"addCheckpointModel": "Aggiungi modello Checkpoint / Safetensor",
|
||||
"addDiffuserModel": "Aggiungi Diffusori",
|
||||
"addManually": "Aggiungi manualmente",
|
||||
"manual": "Manuale",
|
||||
"name": "Nome",
|
||||
"nameValidationMsg": "Inserisci un nome per il modello",
|
||||
"description": "Descrizione",
|
||||
"descriptionValidationMsg": "Aggiungi una descrizione per il modello",
|
||||
"config": "Config",
|
||||
"config": "Configurazione",
|
||||
"configValidationMsg": "Percorso del file di configurazione del modello.",
|
||||
"modelLocation": "Posizione del modello",
|
||||
"modelLocationValidationMsg": "Percorso dove si trova il modello.",
|
||||
"repo_id": "Repo ID",
|
||||
"repoIDValidationMsg": "Repository online del modello",
|
||||
"vaeLocation": "Posizione file VAE",
|
||||
"vaeLocationValidationMsg": "Percorso dove si trova il file VAE.",
|
||||
"vaeRepoID": "VAE Repo ID",
|
||||
"vaeRepoIDValidationMsg": "Repository online del file VAE",
|
||||
"width": "Larghezza",
|
||||
"widthValidationMsg": "Larghezza predefinita del modello.",
|
||||
"height": "Altezza",
|
||||
@ -49,5 +59,9 @@
|
||||
"deleteModel": "Elimina modello",
|
||||
"deleteConfig": "Elimina configurazione",
|
||||
"deleteMsg1": "Sei sicuro di voler eliminare questo modello da InvokeAI?",
|
||||
"deleteMsg2": "Questo non eliminerà il file Checkpoint del modello dal tuo disco. Puoi aggiungerlo nuovamente se lo desideri."
|
||||
"deleteMsg2": "Questo non eliminerà il file Checkpoint del modello dal tuo disco. Puoi aggiungerlo nuovamente se lo desideri.",
|
||||
"formMessageDiffusersModelLocation": "Ubicazione modelli diffusori",
|
||||
"formMessageDiffusersModelLocationDesc": "Inseriscine almeno uno.",
|
||||
"formMessageDiffusersVAELocation": "Ubicazione file VAE",
|
||||
"formMessageDiffusersVAELocationDesc": "Se non fornito, InvokeAI cercherà il file VAE all'interno dell'ubicazione del modello sopra indicata."
|
||||
}
|
||||
|
53
invokeai/frontend/public/locales/modelmanager/ua.json
Normal file
53
invokeai/frontend/public/locales/modelmanager/ua.json
Normal file
@ -0,0 +1,53 @@
|
||||
{
|
||||
"modelManager": "Менеджер моделей",
|
||||
"model": "Модель",
|
||||
"modelAdded": "Модель додана",
|
||||
"modelUpdated": "Модель оновлена",
|
||||
"modelEntryDeleted": "Запис про модель видалено",
|
||||
"cannotUseSpaces": "Не можна використовувати пробіли",
|
||||
"addNew": "Додати нову",
|
||||
"addNewModel": "Додати нову модель",
|
||||
"addManually": "Додати вручну",
|
||||
"manual": "Ручне",
|
||||
"name": "Назва",
|
||||
"nameValidationMsg": "Введіть назву моделі",
|
||||
"description": "Опис",
|
||||
"descriptionValidationMsg": "Введіть опис моделі",
|
||||
"config": "Файл конфігурації",
|
||||
"configValidationMsg": "Шлях до файлу конфігурації",
|
||||
"modelLocation": "Розташування моделі",
|
||||
"modelLocationValidationMsg": "Шлях до файлу з моделлю",
|
||||
"vaeLocation": "Розтышування VAE",
|
||||
"vaeLocationValidationMsg": "Шлях до VAE",
|
||||
"width": "Ширина",
|
||||
"widthValidationMsg": "Початкова ширина зображень",
|
||||
"height": "Висота",
|
||||
"heightValidationMsg": "Початкова висота зображень",
|
||||
"addModel": "Додати модель",
|
||||
"updateModel": "Оновити модель",
|
||||
"availableModels": "Доступні моделі",
|
||||
"search": "Шукати",
|
||||
"load": "Завантажити",
|
||||
"active": "активна",
|
||||
"notLoaded": "не завантажена",
|
||||
"cached": "кешована",
|
||||
"checkpointFolder": "Папка з моделями",
|
||||
"clearCheckpointFolder": "Очистити папку з моделями",
|
||||
"findModels": "Знайти моделі",
|
||||
"scanAgain": "Сканувати знову",
|
||||
"modelsFound": "Знайдені моделі",
|
||||
"selectFolder": "Обрати папку",
|
||||
"selected": "Обрані",
|
||||
"selectAll": "Обрати всі",
|
||||
"deselectAll": "Зняти выділення",
|
||||
"showExisting": "Показувати додані",
|
||||
"addSelected": "Додати обрані",
|
||||
"modelExists": "Модель вже додана",
|
||||
"selectAndAdd": "Оберіть і додайте моделі із списку",
|
||||
"noModelsFound": "Моделі не знайдені",
|
||||
"delete": "Видалити",
|
||||
"deleteModel": "Видалити модель",
|
||||
"deleteConfig": "Видалити конфігурацію",
|
||||
"deleteMsg1": "Ви точно хочете видалити модель із InvokeAI?",
|
||||
"deleteMsg2": "Це не призведе до видалення файлу моделі з диску. Позніше ви можете додати його знову."
|
||||
}
|
@ -46,6 +46,7 @@
|
||||
"sendTo": "Send to",
|
||||
"sendToImg2Img": "Send to Image to Image",
|
||||
"sendToUnifiedCanvas": "Send To Unified Canvas",
|
||||
"copyImage": "Copy Image",
|
||||
"copyImageToLink": "Copy Image To Link",
|
||||
"downloadImage": "Download Image",
|
||||
"openInViewer": "Open In Viewer",
|
||||
|
@ -1 +1,62 @@
|
||||
{}
|
||||
{
|
||||
"images": "Images",
|
||||
"steps": "Etapes",
|
||||
"cfgScale": "CFG Echelle",
|
||||
"width": "Largeur",
|
||||
"height": "Hauteur",
|
||||
"sampler": "Echantillonneur",
|
||||
"seed": "Graine",
|
||||
"randomizeSeed": "Graine Aléatoire",
|
||||
"shuffle": "Mélanger",
|
||||
"noiseThreshold": "Seuil de Bruit",
|
||||
"perlinNoise": "Bruit de Perlin",
|
||||
"variations": "Variations",
|
||||
"variationAmount": "Montant de Variation",
|
||||
"seedWeights": "Poids des Graines",
|
||||
"faceRestoration": "Restauration de Visage",
|
||||
"restoreFaces": "Restaurer les Visages",
|
||||
"type": "Type",
|
||||
"strength": "Force",
|
||||
"upscaling": "Agrandissement",
|
||||
"upscale": "Agrandir",
|
||||
"upscaleImage": "Image en Agrandissement",
|
||||
"scale": "Echelle",
|
||||
"otherOptions": "Autres Options",
|
||||
"seamlessTiling": "Carreau Sans Joint",
|
||||
"hiresOptim": "Optimisation Haute Résolution",
|
||||
"imageFit": "Ajuster Image Initiale à la Taille de Sortie",
|
||||
"codeformerFidelity": "Fidélité",
|
||||
"seamSize": "Taille des Joints",
|
||||
"seamBlur": "Flou des Joints",
|
||||
"seamStrength": "Force des Joints",
|
||||
"seamSteps": "Etapes des Joints",
|
||||
"scaleBeforeProcessing": "Echelle Avant Traitement",
|
||||
"scaledWidth": "Larg. Échelle",
|
||||
"scaledHeight": "Haut. Échelle",
|
||||
"infillMethod": "Méthode de Remplissage",
|
||||
"tileSize": "Taille des Tuiles",
|
||||
"boundingBoxHeader": "Boîte Englobante",
|
||||
"seamCorrectionHeader": "Correction des Joints",
|
||||
"infillScalingHeader": "Remplissage et Mise à l'Échelle",
|
||||
"img2imgStrength": "Force de l'Image à l'Image",
|
||||
"toggleLoopback": "Activer/Désactiver la Boucle",
|
||||
"invoke": "Invoker",
|
||||
"cancel": "Annuler",
|
||||
"promptPlaceholder": "Tapez le prompt ici. [tokens négatifs], (poids positif)++, (poids négatif)--, swap et blend sont disponibles (voir les docs)",
|
||||
"sendTo": "Envoyer à",
|
||||
"sendToImg2Img": "Envoyer à Image à Image",
|
||||
"sendToUnifiedCanvas": "Envoyer au Canvas Unifié",
|
||||
"copyImage": "Copier Image",
|
||||
"copyImageToLink": "Copier l'Image en Lien",
|
||||
"downloadImage": "Télécharger Image",
|
||||
"openInViewer": "Ouvrir dans le visualiseur",
|
||||
"closeViewer": "Fermer le visualiseur",
|
||||
"usePrompt": "Utiliser la suggestion",
|
||||
"useSeed": "Utiliser la graine",
|
||||
"useAll": "Tout utiliser",
|
||||
"useInitImg": "Utiliser l'image initiale",
|
||||
"info": "Info",
|
||||
"deleteImage": "Supprimer l'image",
|
||||
"initialImage": "Image initiale",
|
||||
"showOptionsPanel": "Afficher le panneau d'options"
|
||||
}
|
||||
|
@ -40,7 +40,7 @@
|
||||
"infillScalingHeader": "Riempimento e ridimensionamento",
|
||||
"img2imgStrength": "Forza da Immagine a Immagine",
|
||||
"toggleLoopback": "Attiva/disattiva elaborazione ricorsiva",
|
||||
"invoke": "Invoca",
|
||||
"invoke": "Invoke",
|
||||
"cancel": "Annulla",
|
||||
"promptPlaceholder": "Digita qui il prompt usando termini in lingua inglese. [token negativi], (aumenta il peso)++, (diminuisci il peso)--, scambia e fondi sono disponibili (consulta la documentazione)",
|
||||
"sendTo": "Invia a",
|
||||
|
62
invokeai/frontend/public/locales/options/ua.json
Normal file
62
invokeai/frontend/public/locales/options/ua.json
Normal file
@ -0,0 +1,62 @@
|
||||
{
|
||||
"images": "Зображення",
|
||||
"steps": "Кроки",
|
||||
"cfgScale": "Рівень CFG",
|
||||
"width": "Ширина",
|
||||
"height": "Висота",
|
||||
"sampler": "Семплер",
|
||||
"seed": "Сід",
|
||||
"randomizeSeed": "Випадковий сид",
|
||||
"shuffle": "Оновити",
|
||||
"noiseThreshold": "Поріг шуму",
|
||||
"perlinNoise": "Шум Перліна",
|
||||
"variations": "Варіації",
|
||||
"variationAmount": "Кількість варіацій",
|
||||
"seedWeights": "Вага сіду",
|
||||
"faceRestoration": "Відновлення облич",
|
||||
"restoreFaces": "Відновити обличчя",
|
||||
"type": "Тип",
|
||||
"strength": "Сила",
|
||||
"upscaling": "Збільшення",
|
||||
"upscale": "Збільшити",
|
||||
"upscaleImage": "Збільшити зображення",
|
||||
"scale": "Масштаб",
|
||||
"otherOptions": "інші параметри",
|
||||
"seamlessTiling": "Безшовний узор",
|
||||
"hiresOptim": "Висока роздільна здатність",
|
||||
"imageFit": "Вмістити зображення",
|
||||
"codeformerFidelity": "Точність",
|
||||
"seamSize": "Размір шву",
|
||||
"seamBlur": "Розмиття шву",
|
||||
"seamStrength": "Сила шву",
|
||||
"seamSteps": "Кроки шву",
|
||||
"inpaintReplace": "Inpaint-заміна",
|
||||
"scaleBeforeProcessing": "Масштабувати",
|
||||
"scaledWidth": "Масштаб Ш",
|
||||
"scaledHeight": "Масштаб В",
|
||||
"infillMethod": "Засіб заповнення",
|
||||
"tileSize": "Розмір області",
|
||||
"boundingBoxHeader": "Обмежуюча рамка",
|
||||
"seamCorrectionHeader": "Налаштування шву",
|
||||
"infillScalingHeader": "Заповнення і масштабування",
|
||||
"img2imgStrength": "Сила обробки img2img",
|
||||
"toggleLoopback": "Зациклити обробку",
|
||||
"invoke": "Викликати",
|
||||
"cancel": "Скасувати",
|
||||
"promptPlaceholder": "Введіть запит тут (англійською). [видалені токени], (більш вагомі)++, (менш вагомі)--, swap и blend також доступні (дивіться Github)",
|
||||
"sendTo": "Надіслати",
|
||||
"sendToImg2Img": "Надіслати у img2img",
|
||||
"sendToUnifiedCanvas": "Надіслати на полотно",
|
||||
"copyImageToLink": "Скопіювати посилання",
|
||||
"downloadImage": "Завантажити",
|
||||
"openInViewer": "Відкрити у переглядачі",
|
||||
"closeViewer": "Закрити переглядач",
|
||||
"usePrompt": "Використати запит",
|
||||
"useSeed": "Використати сід",
|
||||
"useAll": "Використати все",
|
||||
"useInitImg": "Використати як початкове",
|
||||
"info": "Метадані",
|
||||
"deleteImage": "Видалити зображення",
|
||||
"initialImage": "Початкове зображення",
|
||||
"showOptionsPanel": "Показати панель налаштувань"
|
||||
}
|
@ -1 +1,13 @@
|
||||
{}
|
||||
{
|
||||
"models": "Modèles",
|
||||
"displayInProgress": "Afficher les images en cours",
|
||||
"saveSteps": "Enregistrer les images tous les n étapes",
|
||||
"confirmOnDelete": "Confirmer la suppression",
|
||||
"displayHelpIcons": "Afficher les icônes d'aide",
|
||||
"useCanvasBeta": "Utiliser la mise en page bêta de Canvas",
|
||||
"enableImageDebugging": "Activer le débogage d'image",
|
||||
"resetWebUI": "Réinitialiser l'interface Web",
|
||||
"resetWebUIDesc1": "Réinitialiser l'interface Web ne réinitialise que le cache local du navigateur de vos images et de vos paramètres enregistrés. Cela n'efface pas les images du disque.",
|
||||
"resetWebUIDesc2": "Si les images ne s'affichent pas dans la galerie ou si quelque chose d'autre ne fonctionne pas, veuillez essayer de réinitialiser avant de soumettre une demande sur GitHub.",
|
||||
"resetComplete": "L'interface Web a été réinitialisée. Rafraîchissez la page pour recharger."
|
||||
}
|
||||
|
13
invokeai/frontend/public/locales/settings/ua.json
Normal file
13
invokeai/frontend/public/locales/settings/ua.json
Normal file
@ -0,0 +1,13 @@
|
||||
{
|
||||
"models": "Моделі",
|
||||
"displayInProgress": "Показувати процес генерації",
|
||||
"saveSteps": "Зберігати кожні n кроків",
|
||||
"confirmOnDelete": "Підтверджувати видалення",
|
||||
"displayHelpIcons": "Показувати значки підказок",
|
||||
"useCanvasBeta": "Показувати інструменты зліва (Beta UI)",
|
||||
"enableImageDebugging": "Увімкнути налагодження",
|
||||
"resetWebUI": "Повернути початкові",
|
||||
"resetWebUIDesc1": "Скидання настройок веб-інтерфейсу видаляє лише локальний кеш браузера з вашими зображеннями та налаштуваннями. Це не призводить до видалення зображень з диску.",
|
||||
"resetWebUIDesc2": "Якщо зображення не відображаються в галереї або не працює ще щось, спробуйте скинути налаштування, перш ніж повідомляти про проблему на GitHub.",
|
||||
"resetComplete": "Інтерфейс скинуто. Оновіть цю сторінку."
|
||||
}
|
@ -1 +1,32 @@
|
||||
{}
|
||||
{
|
||||
"tempFoldersEmptied": "Dossiers temporaires vidés",
|
||||
"uploadFailed": "Téléchargement échoué",
|
||||
"uploadFailedMultipleImagesDesc": "Plusieurs images collées, peut uniquement télécharger une image à la fois",
|
||||
"uploadFailedUnableToLoadDesc": "Impossible de charger le fichier",
|
||||
"downloadImageStarted": "Téléchargement de l'image démarré",
|
||||
"imageCopied": "Image copiée",
|
||||
"imageLinkCopied": "Lien d'image copié",
|
||||
"imageNotLoaded": "Aucune image chargée",
|
||||
"imageNotLoadedDesc": "Aucune image trouvée pour envoyer à module d'image",
|
||||
"imageSavedToGallery": "Image enregistrée dans la galerie",
|
||||
"canvasMerged": "Canvas fusionné",
|
||||
"sentToImageToImage": "Envoyé à Image à Image",
|
||||
"sentToUnifiedCanvas": "Envoyé à Canvas unifié",
|
||||
"parametersSet": "Paramètres définis",
|
||||
"parametersNotSet": "Paramètres non définis",
|
||||
"parametersNotSetDesc": "Aucune métadonnée trouvée pour cette image.",
|
||||
"parametersFailed": "Problème de chargement des paramètres",
|
||||
"parametersFailedDesc": "Impossible de charger l'image d'initiation.",
|
||||
"seedSet": "Graine définie",
|
||||
"seedNotSet": "Graine non définie",
|
||||
"seedNotSetDesc": "Impossible de trouver la graine pour cette image.",
|
||||
"promptSet": "Invite définie",
|
||||
"promptNotSet": "Invite non définie",
|
||||
"promptNotSetDesc": "Impossible de trouver l'invite pour cette image.",
|
||||
"upscalingFailed": "Échec de la mise à l'échelle",
|
||||
"faceRestoreFailed": "Échec de la restauration du visage",
|
||||
"metadataLoadFailed": "Échec du chargement des métadonnées",
|
||||
"initialImageSet": "Image initiale définie",
|
||||
"initialImageNotSet": "Image initiale non définie",
|
||||
"initialImageNotSetDesc": "Impossible de charger l'image initiale"
|
||||
}
|
||||
|
32
invokeai/frontend/public/locales/toast/ua.json
Normal file
32
invokeai/frontend/public/locales/toast/ua.json
Normal file
@ -0,0 +1,32 @@
|
||||
{
|
||||
"tempFoldersEmptied": "Тимчасова папка очищена",
|
||||
"uploadFailed": "Не вдалося завантажити",
|
||||
"uploadFailedMultipleImagesDesc": "Можна вставити лише одне зображення (ви спробували вставити декілька)",
|
||||
"uploadFailedUnableToLoadDesc": "Неможливо завантажити файл",
|
||||
"downloadImageStarted": "Завантаження зображення почалося",
|
||||
"imageCopied": "Зображення скопійоване",
|
||||
"imageLinkCopied": "Посилання на зображення скопійовано",
|
||||
"imageNotLoaded": "Зображення не завантажено",
|
||||
"imageNotLoadedDesc": "Не знайдено зображення для надсилання до img2img",
|
||||
"imageSavedToGallery": "Зображення збережено в галерею",
|
||||
"canvasMerged": "Полотно об'єднане",
|
||||
"sentToImageToImage": "Надіслати до img2img",
|
||||
"sentToUnifiedCanvas": "Надіслати на полотно",
|
||||
"parametersSet": "Параметри задані",
|
||||
"parametersNotSet": "Параметри не задані",
|
||||
"parametersNotSetDesc": "Не знайдені метадані цього зображення",
|
||||
"parametersFailed": "Проблема із завантаженням параметрів",
|
||||
"parametersFailedDesc": "Неможливо завантажити початкове зображення",
|
||||
"seedSet": "Сід заданий",
|
||||
"seedNotSet": "Сід не заданий",
|
||||
"seedNotSetDesc": "Не вдалося знайти сід для зображення",
|
||||
"promptSet": "Запит заданий",
|
||||
"promptNotSet": "Запит не заданий",
|
||||
"promptNotSetDesc": "Не вдалося знайти запит для зображення",
|
||||
"upscalingFailed": "Збільшення не вдалося",
|
||||
"faceRestoreFailed": "Відновлення облич не вдалося",
|
||||
"metadataLoadFailed": "Не вдалося завантажити метадані",
|
||||
"initialImageSet": "Початкове зображення задане",
|
||||
"initialImageNotSet": "Початкове зображення не задане",
|
||||
"initialImageNotSetDesc": "Не вдалося завантажити початкове зображення"
|
||||
}
|
15
invokeai/frontend/public/locales/tooltip/fr.json
Normal file
15
invokeai/frontend/public/locales/tooltip/fr.json
Normal file
@ -0,0 +1,15 @@
|
||||
{
|
||||
"feature": {
|
||||
"prompt": "Ceci est le champ prompt. Le prompt inclut des objets de génération et des termes stylistiques. Vous pouvez également ajouter un poids (importance du jeton) dans le prompt, mais les commandes CLI et les paramètres ne fonctionneront pas.",
|
||||
"gallery": "La galerie affiche les générations à partir du dossier de sortie à mesure qu'elles sont créées. Les paramètres sont stockés dans des fichiers et accessibles via le menu contextuel.",
|
||||
"other": "Ces options activent des modes de traitement alternatifs pour Invoke. 'Tuilage seamless' créera des motifs répétitifs dans la sortie. 'Haute résolution' est la génération en deux étapes avec img2img: utilisez ce paramètre lorsque vous souhaitez une image plus grande et plus cohérente sans artefacts. Cela prendra plus de temps que d'habitude txt2img.",
|
||||
"seed": "La valeur de grain affecte le bruit initial à partir duquel l'image est formée. Vous pouvez utiliser les graines déjà existantes provenant d'images précédentes. 'Seuil de bruit' est utilisé pour atténuer les artefacts à des valeurs CFG élevées (essayez la plage de 0 à 10), et Perlin pour ajouter du bruit Perlin pendant la génération: les deux servent à ajouter de la variété à vos sorties.",
|
||||
"variations": "Essayez une variation avec une valeur comprise entre 0,1 et 1,0 pour changer le résultat pour une graine donnée. Des variations intéressantes de la graine sont entre 0,1 et 0,3.",
|
||||
"upscale": "Utilisez ESRGAN pour agrandir l'image immédiatement après la génération.",
|
||||
"faceCorrection": "Correction de visage avec GFPGAN ou Codeformer: l'algorithme détecte les visages dans l'image et corrige tout défaut. La valeur élevée changera plus l'image, ce qui donnera des visages plus attirants. Codeformer avec une fidélité plus élevée préserve l'image originale au prix d'une correction de visage plus forte.",
|
||||
"imageToImage": "Image to Image charge n'importe quelle image en tant qu'initiale, qui est ensuite utilisée pour générer une nouvelle avec le prompt. Plus la valeur est élevée, plus l'image de résultat changera. Des valeurs de 0,0 à 1,0 sont possibles, la plage recommandée est de 0,25 à 0,75",
|
||||
"boundingBox": "La boîte englobante est la même que les paramètres Largeur et Hauteur pour Texte à Image ou Image à Image. Seulement la zone dans la boîte sera traitée.",
|
||||
"seamCorrection": "Contrôle la gestion des coutures visibles qui se produisent entre les images générées sur la toile.",
|
||||
"infillAndScaling": "Gérer les méthodes de remplissage (utilisées sur les zones masquées ou effacées de la toile) et le redimensionnement (utile pour les petites tailles de boîte englobante)."
|
||||
}
|
||||
}
|
15
invokeai/frontend/public/locales/tooltip/ua.json
Normal file
15
invokeai/frontend/public/locales/tooltip/ua.json
Normal file
@ -0,0 +1,15 @@
|
||||
{
|
||||
"feature": {
|
||||
"prompt": "Це поле для тексту запиту, включаючи об'єкти генерації та стилістичні терміни. У запит можна включити і коефіцієнти ваги (значущості токена), але консольні команди та параметри не працюватимуть.",
|
||||
"gallery": "Тут відображаються генерації з папки outputs у міру їх появи.",
|
||||
"other": "Ці опції включають альтернативні режими обробки для Invoke. 'Безшовний узор' створить на виході узори, що повторюються. 'Висока роздільна здатність' - це генерація у два етапи за допомогою img2img: використовуйте це налаштування, коли хочете отримати цільне зображення більшого розміру без артефактів.",
|
||||
"seed": "Значення сіду впливає на початковий шум, з якого сформується зображення. Можна використовувати вже наявний сід із попередніх зображень. 'Поріг шуму' використовується для пом'якшення артефактів при високих значеннях CFG (спробуйте в діапазоні 0-10), а 'Перлін' - для додавання шуму Перліна в процесі генерації: обидва параметри служать для більшої варіативності результатів.",
|
||||
"variations": "Спробуйте варіацію зі значенням від 0.1 до 1.0, щоб змінити результат для заданого сиду. Цікаві варіації сиду знаходяться між 0.1 і 0.3.",
|
||||
"upscale": "Використовуйте ESRGAN, щоб збільшити зображення відразу після генерації.",
|
||||
"faceCorrection": "Корекція облич за допомогою GFPGAN або Codeformer: алгоритм визначає обличчя у готовому зображенні та виправляє будь-які дефекти. Високі значення сили змінюють зображення сильніше, в результаті обличчя будуть виглядати привабливіше. У Codeformer більш висока точність збереже вихідне зображення на шкоду корекції обличчя.",
|
||||
"imageToImage": "'Зображення до зображення' завантажує будь-яке зображення, яке потім використовується для генерації разом із запитом. Чим більше значення, тим сильніше зміниться зображення в результаті. Можливі значення від 0 до 1, рекомендується діапазон 0.25-0.75",
|
||||
"boundingBox": "'Обмежуюча рамка' аналогічна налаштуванням 'Ширина' і 'Висота' для 'Зображення з тексту' або 'Зображення до зображення'. Буде оброблена тільки область у рамці.",
|
||||
"seamCorrection": "Керування обробкою видимих швів, що виникають між зображеннями на полотні.",
|
||||
"infillAndScaling": "Керування методами заповнення (використовується для масок або стертих частин полотна) та масштабування (корисно для малих розмірів обмежуючої рамки)."
|
||||
}
|
||||
}
|
@ -1 +1,59 @@
|
||||
{}
|
||||
{
|
||||
"layer": "Couche",
|
||||
"base": "Base",
|
||||
"mask": "Masque",
|
||||
"maskingOptions": "Options de masquage",
|
||||
"enableMask": "Activer le masque",
|
||||
"preserveMaskedArea": "Préserver la zone masquée",
|
||||
"clearMask": "Effacer le masque",
|
||||
"brush": "Pinceau",
|
||||
"eraser": "Gomme",
|
||||
"fillBoundingBox": "Remplir la boîte englobante",
|
||||
"eraseBoundingBox": "Effacer la boîte englobante",
|
||||
"colorPicker": "Sélecteur de couleur",
|
||||
"brushOptions": "Options de pinceau",
|
||||
"brushSize": "Taille",
|
||||
"move": "Déplacer",
|
||||
"resetView": "Réinitialiser la vue",
|
||||
"mergeVisible": "Fusionner les visibles",
|
||||
"saveToGallery": "Enregistrer dans la galerie",
|
||||
"copyToClipboard": "Copier dans le presse-papiers",
|
||||
"downloadAsImage": "Télécharger en tant qu'image",
|
||||
"undo": "Annuler",
|
||||
"redo": "Refaire",
|
||||
"clearCanvas": "Effacer le canvas",
|
||||
"canvasSettings": "Paramètres du canvas",
|
||||
"showIntermediates": "Afficher les intermédiaires",
|
||||
"showGrid": "Afficher la grille",
|
||||
"snapToGrid": "Aligner sur la grille",
|
||||
"darkenOutsideSelection": "Assombrir à l'extérieur de la sélection",
|
||||
"autoSaveToGallery": "Enregistrement automatique dans la galerie",
|
||||
"saveBoxRegionOnly": "Enregistrer uniquement la région de la boîte",
|
||||
"limitStrokesToBox": "Limiter les traits à la boîte",
|
||||
"showCanvasDebugInfo": "Afficher les informations de débogage du canvas",
|
||||
"clearCanvasHistory": "Effacer l'historique du canvas",
|
||||
"clearHistory": "Effacer l'historique",
|
||||
"clearCanvasHistoryMessage": "Effacer l'historique du canvas laisse votre canvas actuel intact, mais efface de manière irréversible l'historique annuler et refaire.",
|
||||
"clearCanvasHistoryConfirm": "Êtes-vous sûr de vouloir effacer l'historique du canvas?",
|
||||
"emptyTempImageFolder": "Vider le dossier d'images temporaires",
|
||||
"emptyFolder": "Vider le dossier",
|
||||
"emptyTempImagesFolderMessage": "Vider le dossier d'images temporaires réinitialise également complètement le canvas unifié. Cela inclut tout l'historique annuler/refaire, les images dans la zone de mise en attente et la couche de base du canvas.",
|
||||
"emptyTempImagesFolderConfirm": "Êtes-vous sûr de vouloir vider le dossier temporaire?",
|
||||
"activeLayer": "Calque actif",
|
||||
"canvasScale": "Échelle du canevas",
|
||||
"boundingBox": "Boîte englobante",
|
||||
"scaledBoundingBox": "Boîte englobante mise à l'échelle",
|
||||
"boundingBoxPosition": "Position de la boîte englobante",
|
||||
"canvasDimensions": "Dimensions du canevas",
|
||||
"canvasPosition": "Position du canevas",
|
||||
"cursorPosition": "Position du curseur",
|
||||
"previous": "Précédent",
|
||||
"next": "Suivant",
|
||||
"accept": "Accepter",
|
||||
"showHide": "Afficher/Masquer",
|
||||
"discardAll": "Tout abandonner",
|
||||
"betaClear": "Effacer",
|
||||
"betaDarkenOutside": "Assombrir à l'extérieur",
|
||||
"betaLimitToBox": "Limiter à la boîte",
|
||||
"betaPreserveMasked": "Conserver masqué"
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
{
|
||||
"layer": "Layer",
|
||||
"layer": "Livello",
|
||||
"base": "Base",
|
||||
"mask": "Maschera",
|
||||
"maskingOptions": "Opzioni di mascheramento",
|
||||
|
59
invokeai/frontend/public/locales/unifiedcanvas/ua.json
Normal file
59
invokeai/frontend/public/locales/unifiedcanvas/ua.json
Normal file
@ -0,0 +1,59 @@
|
||||
{
|
||||
"layer": "Шар",
|
||||
"base": "Базовий",
|
||||
"mask": "Маска",
|
||||
"maskingOptions": "Параметри маски",
|
||||
"enableMask": "Увiмкнути маску",
|
||||
"preserveMaskedArea": "Зберiгати замасковану область",
|
||||
"clearMask": "Очистити маску",
|
||||
"brush": "Пензель",
|
||||
"eraser": "Гумка",
|
||||
"fillBoundingBox": "Заповнити обмежуючу рамку",
|
||||
"eraseBoundingBox": "Стерти обмежуючу рамку",
|
||||
"colorPicker": "Пiпетка",
|
||||
"brushOptions": "Параметри пензля",
|
||||
"brushSize": "Розмiр",
|
||||
"move": "Перемiстити",
|
||||
"resetView": "Скинути вигляд",
|
||||
"mergeVisible": "Об'єднати видимi",
|
||||
"saveToGallery": "Зберегти до галереї",
|
||||
"copyToClipboard": "Копiювати до буферу обмiну",
|
||||
"downloadAsImage": "Завантажити як зображення",
|
||||
"undo": "Вiдмiнити",
|
||||
"redo": "Повторити",
|
||||
"clearCanvas": "Очистити полотно",
|
||||
"canvasSettings": "Налаштування полотна",
|
||||
"showIntermediates": "Показувати процес",
|
||||
"showGrid": "Показувати сiтку",
|
||||
"snapToGrid": "Прив'язати до сітки",
|
||||
"darkenOutsideSelection": "Затемнити полотно зовні",
|
||||
"autoSaveToGallery": "Автозбереження до галереї",
|
||||
"saveBoxRegionOnly": "Зберiгати тiльки видiлення",
|
||||
"limitStrokesToBox": "Обмежити штрихи виділенням",
|
||||
"showCanvasDebugInfo": "Показати налаштування полотна",
|
||||
"clearCanvasHistory": "Очистити iсторiю полотна",
|
||||
"clearHistory": "Очистити iсторiю",
|
||||
"clearCanvasHistoryMessage": "Очищення історії полотна залишає поточне полотно незайманим, але видаляє історію скасування та повтору",
|
||||
"clearCanvasHistoryConfirm": "Ви впевнені, що хочете очистити історію полотна?",
|
||||
"emptyTempImageFolder": "Очистити тимчасову папку",
|
||||
"emptyFolder": "Очистити папку",
|
||||
"emptyTempImagesFolderMessage": "Очищення папки тимчасових зображень також повністю скидає полотно, включаючи всю історію скасування/повтору, зображення та базовий шар полотна, що розміщуються.",
|
||||
"emptyTempImagesFolderConfirm": "Ви впевнені, що хочете очистити тимчасову папку?",
|
||||
"activeLayer": "Активний шар",
|
||||
"canvasScale": "Масштаб полотна",
|
||||
"boundingBox": "Обмежуюча рамка",
|
||||
"scaledBoundingBox": "Масштабування рамки",
|
||||
"boundingBoxPosition": "Позиція обмежуючої рамки",
|
||||
"canvasDimensions": "Разміри полотна",
|
||||
"canvasPosition": "Розташування полотна",
|
||||
"cursorPosition": "Розташування курсора",
|
||||
"previous": "Попереднє",
|
||||
"next": "Наступне",
|
||||
"принять": "Приняти",
|
||||
"showHide": "Показати/Сховати",
|
||||
"discardAll": "Відмінити все",
|
||||
"betaClear": "Очистити",
|
||||
"betaDarkenOutside": "Затемнити зовні",
|
||||
"betaLimitToBox": "Обмежити виділенням",
|
||||
"betaPreserveMasked": "Зберiгати замасковану область"
|
||||
}
|
@ -121,6 +121,22 @@ const CurrentImageButtons = () => {
|
||||
dispatch(setActiveTab('img2img'));
|
||||
};
|
||||
|
||||
const handleCopyImage = async () => {
|
||||
if (!currentImage) return;
|
||||
|
||||
const blob = await fetch(currentImage.url).then((res) => res.blob());
|
||||
const data = [new ClipboardItem({ [blob.type]: blob })];
|
||||
|
||||
await navigator.clipboard.write(data);
|
||||
|
||||
toast({
|
||||
title: t('toast:imageCopied'),
|
||||
status: 'success',
|
||||
duration: 2500,
|
||||
isClosable: true,
|
||||
});
|
||||
};
|
||||
|
||||
const handleCopyImageLink = () => {
|
||||
navigator.clipboard
|
||||
.writeText(
|
||||
@ -391,6 +407,14 @@ const CurrentImageButtons = () => {
|
||||
>
|
||||
{t('options:sendToUnifiedCanvas')}
|
||||
</IAIButton>
|
||||
|
||||
<IAIButton
|
||||
size={'sm'}
|
||||
onClick={handleCopyImage}
|
||||
leftIcon={<FaCopy />}
|
||||
>
|
||||
{t('options:copyImage')}
|
||||
</IAIButton>
|
||||
<IAIButton
|
||||
size={'sm'}
|
||||
onClick={handleCopyImageLink}
|
||||
|
@ -22,6 +22,8 @@ export default function LanguagePicker() {
|
||||
es: t('common:langSpanish'),
|
||||
ja: t('common:langJapanese'),
|
||||
nl: t('common:langDutch'),
|
||||
fr: t('common:langFrench'),
|
||||
ua: t('common:langUkranian'),
|
||||
};
|
||||
|
||||
const renderLanguagePicker = () => {
|
||||
|
@ -847,7 +847,7 @@ class Generate:
|
||||
# the model cache does the loading and offloading
|
||||
cache = self.model_manager
|
||||
if not cache.valid_model(model_name):
|
||||
raise KeyError('** "{model_name}" is not a known model name. Cannot change.')
|
||||
raise KeyError(f'** "{model_name}" is not a known model name. Cannot change.')
|
||||
|
||||
cache.print_vram_usage()
|
||||
|
||||
|
@ -50,7 +50,7 @@ def main():
|
||||
Globals.internet_available = args.internet_available and check_internet()
|
||||
Globals.disable_xformers = not args.xformers
|
||||
Globals.ckpt_convert = args.ckpt_convert
|
||||
|
||||
|
||||
print(f'>> Internet connectivity is {Globals.internet_available}')
|
||||
|
||||
if not args.conf:
|
||||
@ -1111,9 +1111,13 @@ def write_commands(opt, file_path:str, outfilepath:str):
|
||||
def report_model_error(opt:Namespace, e:Exception):
|
||||
print(f'** An error occurred while attempting to initialize the model: "{str(e)}"')
|
||||
print('** This can be caused by a missing or corrupted models file, and can sometimes be fixed by (re)installing the models.')
|
||||
response = input('Do you want to run invokeai-configure script to select and/or reinstall models? [y] ')
|
||||
if response.startswith(('n','N')):
|
||||
return
|
||||
yes_to_all = os.environ.get('INVOKE_MODEL_RECONFIGURE')
|
||||
if yes_to_all:
|
||||
print('** Reconfiguration is being forced by environment variable INVOKE_MODEL_RECONFIGURE')
|
||||
else:
|
||||
response = input('Do you want to run invokeai-configure script to select and/or reinstall models? [y] ')
|
||||
if response.startswith(('n', 'N')):
|
||||
return
|
||||
|
||||
print('invokeai-configure is launching....\n')
|
||||
|
||||
@ -1121,13 +1125,13 @@ def report_model_error(opt:Namespace, e:Exception):
|
||||
# only the arguments accepted by the configuration script are parsed
|
||||
root_dir = ["--root", opt.root_dir] if opt.root_dir is not None else []
|
||||
config = ["--config", opt.conf] if opt.conf is not None else []
|
||||
yes_to_all = os.environ.get('INVOKE_MODEL_RECONFIGURE')
|
||||
previous_args = sys.argv
|
||||
sys.argv = [ 'invokeai-configure' ]
|
||||
sys.argv.extend(root_dir)
|
||||
sys.argv.extend(config)
|
||||
if yes_to_all is not None:
|
||||
sys.argv.append(yes_to_all)
|
||||
for arg in yes_to_all.split():
|
||||
sys.argv.append(arg)
|
||||
|
||||
from ldm.invoke.config import configure_invokeai
|
||||
configure_invokeai.main()
|
||||
|
@ -1 +1 @@
|
||||
__version__='2.3.0-rc2'
|
||||
__version__='2.3.0-rc3'
|
||||
|
@ -528,8 +528,8 @@ def update_config_file(successfully_downloaded: dict, opt: dict):
|
||||
# this check is ignored if opt.config_file is specified - user is assumed to know what they
|
||||
# are doing if they are passing a custom config file from elsewhere.
|
||||
if config_file is Default_config_file and not config_file.parent.exists():
|
||||
configs_src = Path(__file__).parent / "configs"
|
||||
configs_dest = Path(Globals.root) / "configs"
|
||||
configs_src = Dataset_path.parent
|
||||
configs_dest = Default_config_file.parent
|
||||
shutil.copytree(configs_src, configs_dest, dirs_exist_ok=True)
|
||||
|
||||
yaml = new_config_file_contents(successfully_downloaded, config_file)
|
||||
|
@ -5,6 +5,7 @@ used to merge 2-3 models together and create a new InvokeAI-registered diffusion
|
||||
Copyright (c) 2023 Lincoln Stein and the InvokeAI Development Team
|
||||
"""
|
||||
import argparse
|
||||
import curses
|
||||
import os
|
||||
import sys
|
||||
import traceback
|
||||
@ -28,7 +29,6 @@ from ldm.invoke.model_manager import ModelManager
|
||||
|
||||
DEST_MERGED_MODEL_DIR = "merged_models"
|
||||
|
||||
|
||||
def merge_diffusion_models(
|
||||
model_ids_or_paths: List[Union[str, Path]],
|
||||
alpha: float = 0.5,
|
||||
@ -193,6 +193,8 @@ class mergeModelsForm(npyscreen.FormMultiPageAction):
|
||||
|
||||
def __init__(self, parentApp, name):
|
||||
self.parentApp = parentApp
|
||||
self.ALLOW_RESIZE=True
|
||||
self.FIX_MINIMUM_SIZE_WHEN_CREATED=False
|
||||
super().__init__(parentApp, name)
|
||||
|
||||
@property
|
||||
@ -203,29 +205,94 @@ class mergeModelsForm(npyscreen.FormMultiPageAction):
|
||||
self.parentApp.setNextForm(None)
|
||||
|
||||
def create(self):
|
||||
window_height,window_width=curses.initscr().getmaxyx()
|
||||
|
||||
self.model_names = self.get_model_names()
|
||||
|
||||
max_width = max([len(x) for x in self.model_names])
|
||||
max_width += 6
|
||||
horizontal_layout = max_width*3 < window_width
|
||||
|
||||
self.add_widget_intelligent(
|
||||
npyscreen.FixedText, name="Select up to three models to merge", value=""
|
||||
npyscreen.FixedText,
|
||||
color='CONTROL',
|
||||
value=f"Select two models to merge and optionally a third.",
|
||||
editable=False,
|
||||
)
|
||||
self.models = self.add_widget_intelligent(
|
||||
npyscreen.TitleMultiSelect,
|
||||
name="Select two to three models to merge:",
|
||||
self.add_widget_intelligent(
|
||||
npyscreen.FixedText,
|
||||
color='CONTROL',
|
||||
value=f"Use up and down arrows to move, <space> to select an item, <tab> and <shift-tab> to move from one field to the next.",
|
||||
editable=False,
|
||||
)
|
||||
self.add_widget_intelligent(
|
||||
npyscreen.FixedText,
|
||||
value='MODEL 1',
|
||||
color='GOOD',
|
||||
editable=False,
|
||||
rely=4 if horizontal_layout else None,
|
||||
)
|
||||
self.model1 = self.add_widget_intelligent(
|
||||
npyscreen.SelectOne,
|
||||
values=self.model_names,
|
||||
value=None,
|
||||
max_height=len(self.model_names) + 1,
|
||||
value=0,
|
||||
max_height=len(self.model_names),
|
||||
max_width=max_width,
|
||||
scroll_exit=True,
|
||||
rely=5,
|
||||
)
|
||||
self.add_widget_intelligent(
|
||||
npyscreen.FixedText,
|
||||
value='MODEL 2',
|
||||
color='GOOD',
|
||||
editable=False,
|
||||
relx=max_width+3 if horizontal_layout else None,
|
||||
rely=4 if horizontal_layout else None,
|
||||
)
|
||||
self.model2 = self.add_widget_intelligent(
|
||||
npyscreen.SelectOne,
|
||||
name='(2)',
|
||||
values=self.model_names,
|
||||
value=1,
|
||||
max_height=len(self.model_names),
|
||||
max_width=max_width,
|
||||
relx=max_width+3 if horizontal_layout else None,
|
||||
rely=5 if horizontal_layout else None,
|
||||
scroll_exit=True,
|
||||
)
|
||||
self.models.when_value_edited = self.models_changed
|
||||
self.add_widget_intelligent(
|
||||
npyscreen.FixedText,
|
||||
value='MODEL 3',
|
||||
color='GOOD',
|
||||
editable=False,
|
||||
relx=max_width*2+3 if horizontal_layout else None,
|
||||
rely=4 if horizontal_layout else None,
|
||||
)
|
||||
models_plus_none = self.model_names.copy()
|
||||
models_plus_none.insert(0,'None')
|
||||
self.model3 = self.add_widget_intelligent(
|
||||
npyscreen.SelectOne,
|
||||
name='(3)',
|
||||
values=models_plus_none,
|
||||
value=0,
|
||||
max_height=len(self.model_names)+1,
|
||||
max_width=max_width,
|
||||
scroll_exit=True,
|
||||
relx=max_width*2+3 if horizontal_layout else None,
|
||||
rely=5 if horizontal_layout else None,
|
||||
)
|
||||
for m in [self.model1,self.model2,self.model3]:
|
||||
m.when_value_edited = self.models_changed
|
||||
self.merged_model_name = self.add_widget_intelligent(
|
||||
npyscreen.TitleText,
|
||||
name="Name for merged model:",
|
||||
labelColor='CONTROL',
|
||||
value="",
|
||||
scroll_exit=True,
|
||||
)
|
||||
self.force = self.add_widget_intelligent(
|
||||
npyscreen.Checkbox,
|
||||
name="Force merge of incompatible models",
|
||||
labelColor='CONTROL',
|
||||
value=False,
|
||||
scroll_exit=True,
|
||||
)
|
||||
@ -234,6 +301,7 @@ class mergeModelsForm(npyscreen.FormMultiPageAction):
|
||||
name="Merge Method:",
|
||||
values=self.interpolations,
|
||||
value=0,
|
||||
labelColor='CONTROL',
|
||||
max_height=len(self.interpolations) + 1,
|
||||
scroll_exit=True,
|
||||
)
|
||||
@ -244,47 +312,53 @@ class mergeModelsForm(npyscreen.FormMultiPageAction):
|
||||
step=0.05,
|
||||
lowest=0,
|
||||
value=0.5,
|
||||
labelColor='CONTROL',
|
||||
scroll_exit=True,
|
||||
)
|
||||
self.models.editing = True
|
||||
self.model1.editing = True
|
||||
|
||||
def models_changed(self):
|
||||
model_names = self.models.values
|
||||
selected_models = self.models.value
|
||||
if len(selected_models) > 3:
|
||||
npyscreen.notify_confirm(
|
||||
"Too many models selected for merging. Select two to three."
|
||||
)
|
||||
return
|
||||
elif len(selected_models) > 2:
|
||||
self.merge_method.values = ["add_difference"]
|
||||
self.merge_method.value = 0
|
||||
models = self.model1.values
|
||||
selected_model1 = self.model1.value[0]
|
||||
selected_model2 = self.model2.value[0]
|
||||
selected_model3 = self.model3.value[0]
|
||||
merged_model_name = f'{models[selected_model1]}+{models[selected_model2]}'
|
||||
self.merged_model_name.value = merged_model_name
|
||||
|
||||
if selected_model3 > 0:
|
||||
self.merge_method.values=['add_difference'],
|
||||
self.merged_model_name.value += f'+{models[selected_model3]}'
|
||||
else:
|
||||
self.merge_method.values = self.interpolations
|
||||
self.merged_model_name.value = "+".join(
|
||||
[model_names[x] for x in selected_models]
|
||||
)
|
||||
self.merge_method.values=self.interpolations
|
||||
self.merge_method.value=0
|
||||
|
||||
def on_ok(self):
|
||||
if self.validate_field_values() and self.check_for_overwrite():
|
||||
self.parentApp.setNextForm(None)
|
||||
self.editing = False
|
||||
self.parentApp.merge_arguments = self.marshall_arguments()
|
||||
npyscreen.notify("Starting the merge...")
|
||||
npyscreen.notify('Starting the merge...')
|
||||
else:
|
||||
self.editing = True
|
||||
|
||||
def on_cancel(self):
|
||||
sys.exit(0)
|
||||
|
||||
def marshall_arguments(self) -> dict:
|
||||
models = [self.models.values[x] for x in self.models.value]
|
||||
def marshall_arguments(self)->dict:
|
||||
model_names = self.model_names
|
||||
models = [
|
||||
model_names[self.model1.value[0]],
|
||||
model_names[self.model2.value[0]],
|
||||
]
|
||||
if self.model3.value[0] > 0:
|
||||
models.append(model_names[self.model3.value[0]-1])
|
||||
|
||||
args = dict(
|
||||
models=models,
|
||||
alpha=self.alpha.value,
|
||||
interp=self.interpolations[self.merge_method.value[0]],
|
||||
force=self.force.value,
|
||||
merged_model_name=self.merged_model_name.value,
|
||||
alpha = self.alpha.value,
|
||||
interp = self.interpolations[self.merge_method.value[0]],
|
||||
force = self.force.value,
|
||||
merged_model_name = self.merged_model_name.value,
|
||||
)
|
||||
return args
|
||||
|
||||
@ -297,15 +371,18 @@ class mergeModelsForm(npyscreen.FormMultiPageAction):
|
||||
f"The chosen merged model destination, {model_out}, is already in use. Overwrite?"
|
||||
)
|
||||
|
||||
def validate_field_values(self) -> bool:
|
||||
def validate_field_values(self)->bool:
|
||||
bad_fields = []
|
||||
selected_models = self.models.value
|
||||
if len(selected_models) < 2 or len(selected_models) > 3:
|
||||
bad_fields.append("Please select two or three models to merge.")
|
||||
model_names = self.model_names
|
||||
selected_models = set((model_names[self.model1.value[0]],model_names[self.model2.value[0]]))
|
||||
if self.model3.value[0] > 0:
|
||||
selected_models.add(model_names[self.model3.value[0]-1])
|
||||
if len(selected_models) < 2:
|
||||
bad_fields.append(f'Please select two or three DIFFERENT models to compare. You selected {selected_models}')
|
||||
if len(bad_fields) > 0:
|
||||
message = "The following problems were detected and must be corrected:"
|
||||
message = 'The following problems were detected and must be corrected:'
|
||||
for problem in bad_fields:
|
||||
message += f"\n* {problem}"
|
||||
message += f'\n* {problem}'
|
||||
npyscreen.notify_confirm(message)
|
||||
return False
|
||||
else:
|
||||
@ -330,10 +407,9 @@ class Mergeapp(npyscreen.NPSAppManaged):
|
||||
) # precision doesn't really matter here
|
||||
|
||||
def onStart(self):
|
||||
npyscreen.setTheme(npyscreen.Themes.DefaultTheme)
|
||||
npyscreen.setTheme(npyscreen.Themes.ElegantTheme)
|
||||
self.main = self.addForm("MAIN", mergeModelsForm, name="Merge Models Settings")
|
||||
|
||||
|
||||
def run_gui(args: Namespace):
|
||||
mergeapp = Mergeapp()
|
||||
mergeapp.run()
|
||||
@ -346,8 +422,8 @@ def run_gui(args: Namespace):
|
||||
def run_cli(args: Namespace):
|
||||
assert args.alpha >= 0 and args.alpha <= 1.0, "alpha must be between 0 and 1"
|
||||
assert (
|
||||
len(args.models) >= 1 and len(args.models) <= 3
|
||||
), "provide 2 or 3 models to merge"
|
||||
args.models and len(args.models) >= 1 and len(args.models) <= 3
|
||||
), "Please provide the --models argument to list 2 to 3 models to merge. Use --help for full usage."
|
||||
|
||||
if not args.merged_model_name:
|
||||
args.merged_model_name = "+".join(args.models)
|
||||
@ -361,6 +437,7 @@ def run_cli(args: Namespace):
|
||||
), f'A model named "{args.merged_model_name}" already exists. Use --clobber to overwrite.'
|
||||
|
||||
merge_diffusion_models_and_commit(**vars(args))
|
||||
print(f'>> Models merged into new model: "{args.merged_model_name}".')
|
||||
|
||||
|
||||
def main():
|
||||
@ -373,18 +450,5 @@ def main():
|
||||
] = cache_dir # because not clear the merge pipeline is honoring cache_dir
|
||||
args.cache_dir = cache_dir
|
||||
|
||||
try:
|
||||
if args.front_end:
|
||||
run_gui(args)
|
||||
else:
|
||||
run_cli(args)
|
||||
print(f">> Conversion successful. New model is named {args.merged_model_name}")
|
||||
except Exception as e:
|
||||
print(">> An error occurred:")
|
||||
traceback.print_exc()
|
||||
sys.exit(-1)
|
||||
except KeyboardInterrupt:
|
||||
sys.exit(-1)
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
|
Loading…
Reference in New Issue
Block a user