Compare commits
56 Commits
7.3.0-test
...
main
Author | SHA1 | Date |
---|---|---|
Jeff Carr | f28b4946f8 | |
Jeff Carr | 4c6c6da1b1 | |
Jeff Carr | fd09ef320f | |
Jeff Carr | ee7aa1292b | |
Jeff Carr | baa65fffb0 | |
Jeff Carr | b9945775e7 | |
Jeff Carr | 3b6caca1a7 | |
Jeff Carr | 7a7a121212 | |
Jeff Carr | 23eb6c5a75 | |
Jeff Carr | da4e13ae70 | |
Jeff Carr | bc653726e0 | |
Jeff Carr | ec75c732b4 | |
Jeff Carr | ce1b9970dc | |
Jeff Carr | 823ef65c52 | |
Jeff Carr | a51d16ae60 | |
Jeff Carr | 0a21c307f7 | |
Jeff Carr | d64e20a836 | |
Jeff Carr | 90c36902db | |
Jeff Carr | 4400093481 | |
Jeff Carr | e30d96cbaa | |
Jeff Carr | 380c3a0d0a | |
Jeff Carr | 4d218e80d9 | |
Jeff Carr | 36cdc5adc3 | |
Jeff Carr | 7300fae964 | |
Jeff Carr | fc61b5b9b5 | |
Jeff Carr | 391c8f7f77 | |
Jeff Carr | 01e2213159 | |
Jeff Carr | 5c498c346d | |
Jeff Carr | ef178cee04 | |
Jeff Carr | d58bf6e257 | |
Jeff Carr | 915d067755 | |
Jeff Carr | 4b112575e5 | |
Jeff Carr | 282ceb54e8 | |
Jeff Carr | 8fd849f799 | |
Jeff Carr | 9ff84380ff | |
Jeff Carr | ce715647b0 | |
Jeff Carr | c19f88d8cc | |
Jeff Carr | 4b39fbf83f | |
Jeff Carr | 1c8af4a82f | |
Jeff Carr | 38de98c5cd | |
Jeff Carr | cb7b3c2579 | |
Jeff Carr | eeb48a1b85 | |
Jeff Carr | 3c75279ca5 | |
Jeff Carr | e6e379deb2 | |
Jeff Carr | 800fe03c6c | |
Jeff Carr | 8e29587369 | |
Jeff Carr | b21a1c374a | |
Jeff Carr | 64afa33619 | |
Jeff Carr | 7477361154 | |
Jeff Carr | feb8215424 | |
Jeff Carr | 762faf2c5f | |
Jeff Carr | 6979b9c1cd | |
Jeff Carr | 23ce736cf0 | |
Jeff Carr | 38db367f3d | |
Jeff Carr | 20bd32b4ab | |
Jeff Carr | 00719df3fe |
|
@ -1,22 +0,0 @@
|
|||
DEB=mattermost_7.3.0_amd64.deb
|
||||
|
||||
all: md5sum create info
|
||||
|
||||
info:
|
||||
dpkg-deb --info ${DEB}
|
||||
|
||||
clean:
|
||||
rm -rf control.tar.xz data.tar.xz *.deb DEBIAN/md5sums
|
||||
# rm -rf files/opt
|
||||
|
||||
# debian stores the calcuated md5sum checksums for each file in the package
|
||||
md5sum:
|
||||
cd files/ && find -type f -exec md5sum '{}' \; >../DEBIAN/md5sums
|
||||
|
||||
create:
|
||||
cd DEBIAN && tar --ignore-failed-read -cvJf ../control.tar.xz {post,pre}{inst,rm} md5sums control
|
||||
cd files && tar -cvJf ../data.tar.xz .
|
||||
ar rcs ${DEB} debian-binary control.tar.xz data.tar.xz
|
||||
|
||||
install:
|
||||
dpkg --install ${DEB}
|
Binary file not shown.
|
@ -1,22 +0,0 @@
|
|||
Copyright:
|
||||
|
||||
Copyright 2022 Jeff Carr <jcarr@wit.org>
|
||||
|
||||
License:
|
||||
|
||||
This package is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This package is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this package; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
On Debian systems, the complete text of the GNU General
|
||||
Public License version 2 can be found in `/usr/share/common-licenses/GPL-2'.
|
|
@ -1,6 +1,6 @@
|
|||
.debian/mattermost*.deb
|
||||
.debian/control.tar.xz
|
||||
.debian/data.tar.xz
|
||||
.debian/DEBIAN/md5sums
|
||||
.debian/files/opt/
|
||||
mattermost*tar.gz
|
||||
md5sums
|
||||
/*.deb
|
||||
/*.tgz
|
||||
/*.tar.gz
|
||||
/*.tar.xz
|
||||
/files
|
||||
|
|
|
@ -0,0 +1,49 @@
|
|||
.PHONY: control
|
||||
|
||||
# https://github.com/invoke-ai/InvokeAI/releases # download the current version from here
|
||||
|
||||
# https://github.com/invoke-ai/InvokeAI/releases/tag/v2.2.5p2
|
||||
# https://github.com/invoke-ai/InvokeAI/releases/download/v2.2.5p2/InvokeAI-installer-v2.2.5p2-linux.zip
|
||||
|
||||
VERSION=2.2.5p2
|
||||
BASENAME=invokeai
|
||||
|
||||
all: clean extract DEBIAN build
|
||||
cd .. && wit mirrors
|
||||
|
||||
help:
|
||||
@echo
|
||||
@echo "make all # to attempt to download, extract and build the .deb package using dpkg"
|
||||
@echo
|
||||
|
||||
update-keyring:
|
||||
curl -fsSL https://bazel.build/bazel-release.pub.gpg | gpg --dearmor >bazel-archive-keyring.gpg
|
||||
|
||||
clean:
|
||||
rm -rf ../files
|
||||
rm -f ../*.deb
|
||||
rm -f ../*.tar.xz data.tar.xz
|
||||
rm -rf DEBIAN
|
||||
|
||||
extract:
|
||||
cp -r files ..
|
||||
|
||||
# makes the DEBIAN/ directory
|
||||
DEBIAN:
|
||||
mkdir -p DEBIAN
|
||||
|
||||
# make the md5sum file
|
||||
cd ../files/ && find -type f -exec md5sum '{}' \; |sort -k2 >../md5sums
|
||||
mv ../md5sums DEBIAN/
|
||||
|
||||
# make the control there
|
||||
mkdir -p DEBIAN
|
||||
cp control DEBIAN/
|
||||
echo Version: ${VERSION} >>DEBIAN/control
|
||||
|
||||
cp postinst DEBIAN
|
||||
|
||||
build:
|
||||
mv DEBIAN ../files/
|
||||
cd .. && dpkg-deb --build files ${BASENAME}_${VERSION}_amd64.deb
|
||||
cd .. && dpkg-deb --info ${BASENAME}_${VERSION}_amd64.deb
|
|
@ -0,0 +1 @@
|
|||
10
|
|
@ -0,0 +1,7 @@
|
|||
Source: invokeai
|
||||
Build-Depends:
|
||||
Package: invokeai
|
||||
Maintainer: Jeff Carr <jcarr@wit.com>
|
||||
Architecture: amd64
|
||||
Depends: python3-venv
|
||||
Description: install the invokeai installer
|
|
@ -0,0 +1,45 @@
|
|||
name: invokeai
|
||||
channels:
|
||||
- pytorch
|
||||
- conda-forge
|
||||
- defaults
|
||||
dependencies:
|
||||
- albumentations=0.4.3
|
||||
- cudatoolkit
|
||||
- einops=0.3.0
|
||||
- eventlet
|
||||
- flask-socketio=5.3.0
|
||||
- flask=2.1.*
|
||||
- flask_cors=3.0.10
|
||||
- imageio-ffmpeg=0.4.2
|
||||
- imageio=2.9.0
|
||||
- kornia=0.6
|
||||
- numpy=1.19
|
||||
- opencv=4.6.0
|
||||
- pillow=8.*
|
||||
- pip>=22.2.2
|
||||
- pudb=2019.2
|
||||
- python=3.9.*
|
||||
- pytorch
|
||||
- pytorch-lightning=1.7.7
|
||||
- send2trash=1.8.0
|
||||
- streamlit
|
||||
- tokenizers>=0.11.1,!=0.11.3,<0.13
|
||||
- torch-fidelity=0.3.0
|
||||
- torchmetrics=0.7.0
|
||||
- torchvision
|
||||
- transformers=4.21.3
|
||||
- pip:
|
||||
- getpass_asterisk
|
||||
- omegaconf==2.1.1
|
||||
- picklescan
|
||||
- pyreadline3
|
||||
- realesrgan
|
||||
- taming-transformers-rom1504
|
||||
- test-tube>=0.7.5
|
||||
- git+https://github.com/openai/CLIP.git@main#egg=clip
|
||||
- git+https://github.com/Birch-san/k-diffusion.git@mps#egg=k_diffusion
|
||||
- git+https://github.com/invoke-ai/clipseg.git@relaxed-python-requirement#egg=clipseg
|
||||
- git+https://github.com/invoke-ai/GFPGAN@basicsr-1.4.2#egg=gfpgan
|
||||
- git+https://github.com/invoke-ai/PyPatchMatch@0.1.5#egg=pypatchmatch
|
||||
- -e .
|
|
@ -0,0 +1,47 @@
|
|||
name: invokeai
|
||||
channels:
|
||||
- pytorch
|
||||
- conda-forge
|
||||
- defaults
|
||||
dependencies:
|
||||
- python=3.9.*
|
||||
- pip=22.2.2
|
||||
- numpy=1.23.3
|
||||
- pip:
|
||||
- --extra-index-url https://download.pytorch.org/whl/rocm5.2/
|
||||
- albumentations==0.4.3
|
||||
- diffusers==0.6.0
|
||||
- einops==0.3.0
|
||||
- eventlet
|
||||
- flask==2.1.3
|
||||
- flask_cors==3.0.10
|
||||
- flask_socketio==5.3.0
|
||||
- getpass_asterisk
|
||||
- imageio-ffmpeg==0.4.2
|
||||
- imageio==2.9.0
|
||||
- kornia==0.6.0
|
||||
- omegaconf==2.2.3
|
||||
- opencv-python==4.5.5.64
|
||||
- picklescan
|
||||
- pillow==9.2.0
|
||||
- pudb==2019.2
|
||||
- pyreadline3
|
||||
- pytorch-lightning==1.7.7
|
||||
- realesrgan
|
||||
- send2trash==1.8.0
|
||||
- streamlit==1.12.0
|
||||
- taming-transformers-rom1504
|
||||
- test-tube>=0.7.5
|
||||
- tqdm
|
||||
- torch
|
||||
- torch-fidelity==0.3.0
|
||||
- torchaudio
|
||||
- torchmetrics==0.7.0
|
||||
- torchvision
|
||||
- transformers==4.21.3
|
||||
- git+https://github.com/openai/CLIP.git@main#egg=clip
|
||||
- git+https://github.com/Birch-san/k-diffusion.git@mps#egg=k-diffusion
|
||||
- git+https://github.com/invoke-ai/clipseg.git@relaxed-python-requirement#egg=clipseg
|
||||
- git+https://github.com/invoke-ai/GFPGAN@basicsr-1.4.2#egg=gfpgan
|
||||
- git+https://github.com/invoke-ai/PyPatchMatch@0.1.5#egg=pypatchmatch
|
||||
- -e .
|
|
@ -0,0 +1,46 @@
|
|||
name: invokeai
|
||||
channels:
|
||||
- pytorch
|
||||
- conda-forge
|
||||
- defaults
|
||||
dependencies:
|
||||
- python=3.9.*
|
||||
- pip=22.2.2
|
||||
- numpy=1.23.3
|
||||
- torchvision=0.13.1
|
||||
- torchaudio=0.12.1
|
||||
- pytorch=1.12.1
|
||||
- cudatoolkit=11.6
|
||||
- pip:
|
||||
- albumentations==0.4.3
|
||||
- diffusers==0.6.0
|
||||
- einops==0.3.0
|
||||
- eventlet
|
||||
- flask==2.1.3
|
||||
- flask_cors==3.0.10
|
||||
- flask_socketio==5.3.0
|
||||
- getpass_asterisk
|
||||
- imageio-ffmpeg==0.4.2
|
||||
- imageio==2.9.0
|
||||
- kornia==0.6.0
|
||||
- omegaconf==2.2.3
|
||||
- opencv-python==4.5.5.64
|
||||
- picklescan
|
||||
- pillow==9.2.0
|
||||
- pudb==2019.2
|
||||
- pyreadline3
|
||||
- pytorch-lightning==1.7.7
|
||||
- realesrgan
|
||||
- send2trash==1.8.0
|
||||
- streamlit==1.12.0
|
||||
- taming-transformers-rom1504
|
||||
- test-tube>=0.7.5
|
||||
- torch-fidelity==0.3.0
|
||||
- torchmetrics==0.7.0
|
||||
- transformers==4.21.3
|
||||
- git+https://github.com/openai/CLIP.git@main#egg=clip
|
||||
- git+https://github.com/Birch-san/k-diffusion.git@mps#egg=k-diffusion
|
||||
- git+https://github.com/invoke-ai/clipseg.git@relaxed-python-requirement#egg=clipseg
|
||||
- git+https://github.com/invoke-ai/GFPGAN@basicsr-1.4.2#egg=gfpgan
|
||||
- git+https://github.com/invoke-ai/PyPatchMatch@0.1.5#egg=pypatchmatch
|
||||
- -e .
|
|
@ -0,0 +1,65 @@
|
|||
name: invokeai
|
||||
channels:
|
||||
- pytorch
|
||||
- conda-forge
|
||||
- defaults
|
||||
dependencies:
|
||||
- python=3.10
|
||||
- pip>=22.2
|
||||
- pytorch=1.12
|
||||
- pytorch-lightning=1.7
|
||||
- torchvision=0.13
|
||||
- torchmetrics=0.10
|
||||
- torch-fidelity=0.3
|
||||
|
||||
# I suggest to keep the other deps sorted for convenience.
|
||||
# To determine what the latest versions should be, run:
|
||||
#
|
||||
# ```shell
|
||||
# sed -E 's/invokeai/invokeai-updated/;20,99s/- ([^=]+)==.+/- \1/' environment-mac.yml > environment-mac-updated.yml
|
||||
# CONDA_SUBDIR=osx-arm64 conda env create -f environment-mac-updated.yml && conda list -n invokeai-updated | awk ' {print " - " $1 "==" $2;} '
|
||||
# ```
|
||||
|
||||
- albumentations=1.2
|
||||
- coloredlogs=15.0
|
||||
- diffusers=0.6
|
||||
- einops=0.3
|
||||
- eventlet
|
||||
- grpcio=1.46
|
||||
- flask=2.1
|
||||
- flask-socketio=5.3
|
||||
- flask-cors=3.0
|
||||
- humanfriendly=10.0
|
||||
- imageio=2.21
|
||||
- imageio-ffmpeg=0.4
|
||||
- imgaug=0.4
|
||||
- kornia=0.6
|
||||
- mpmath=1.2
|
||||
- nomkl=3
|
||||
- numpy=1.23
|
||||
- omegaconf=2.1
|
||||
- openh264=2.3
|
||||
- onnx=1.12
|
||||
- onnxruntime=1.12
|
||||
- pudb=2019.2
|
||||
- protobuf=3.20
|
||||
- py-opencv=4.6
|
||||
- scipy=1.9
|
||||
- streamlit=1.12
|
||||
- sympy=1.10
|
||||
- send2trash=1.8
|
||||
- tensorboard=2.10
|
||||
- transformers=4.23
|
||||
- pip:
|
||||
- getpass_asterisk
|
||||
- picklescan
|
||||
- taming-transformers-rom1504
|
||||
- test-tube==0.7.5
|
||||
- git+https://github.com/openai/CLIP.git@main#egg=clip
|
||||
- git+https://github.com/Birch-san/k-diffusion.git@mps#egg=k-diffusion
|
||||
- git+https://github.com/invoke-ai/clipseg.git@relaxed-python-requirement#egg=clipseg
|
||||
- git+https://github.com/invoke-ai/GFPGAN@basicsr-1.4.2#egg=gfpgan
|
||||
- git+https://github.com/invoke-ai/PyPatchMatch@0.1.5#egg=pypatchmatch
|
||||
- -e .
|
||||
variables:
|
||||
PYTORCH_ENABLE_MPS_FALLBACK: 1
|
|
@ -0,0 +1,46 @@
|
|||
name: invokeai
|
||||
channels:
|
||||
- pytorch
|
||||
- conda-forge
|
||||
- defaults
|
||||
dependencies:
|
||||
- python=3.10.*
|
||||
- pip=22.2.2
|
||||
- numpy=1.23.3
|
||||
- torchvision=0.13.1
|
||||
- torchaudio=0.12.1
|
||||
- pytorch=1.12.1
|
||||
- cudatoolkit=11.6
|
||||
- pip:
|
||||
- albumentations==0.4.3
|
||||
- diffusers==0.6.0
|
||||
- einops==0.3.0
|
||||
- eventlet
|
||||
- flask==2.1.3
|
||||
- flask_cors==3.0.10
|
||||
- flask_socketio==5.3.0
|
||||
- getpass_asterisk
|
||||
- imageio-ffmpeg==0.4.2
|
||||
- imageio==2.9.0
|
||||
- kornia==0.6.0
|
||||
- omegaconf==2.2.3
|
||||
- opencv-python==4.5.5.64
|
||||
- picklescan
|
||||
- pillow==9.2.0
|
||||
- pudb==2019.2
|
||||
- pyreadline3
|
||||
- pytorch-lightning==1.7.7
|
||||
- realesrgan
|
||||
- send2trash==1.8.0
|
||||
- streamlit==1.12.0
|
||||
- taming-transformers-rom1504
|
||||
- test-tube>=0.7.5
|
||||
- torch-fidelity==0.3.0
|
||||
- torchmetrics==0.7.0
|
||||
- transformers==4.21.3
|
||||
- git+https://github.com/openai/CLIP.git@main#egg=clip
|
||||
- git+https://github.com/Birch-san/k-diffusion.git@mps#egg=k_diffusion
|
||||
- git+https://github.com/invoke-ai/clipseg.git@relaxed-python-requirement#egg=clipseg
|
||||
- git+https://github.com/invoke-ai/GFPGAN@basicsr-1.4.1#egg=gfpgan
|
||||
- git+https://github.com/invoke-ai/PyPatchMatch@0.1.5#egg=pypatchmatch
|
||||
- -e .
|
|
@ -0,0 +1,40 @@
|
|||
# pip will resolve the version which matches torch
|
||||
albumentations
|
||||
diffusers==0.10.*
|
||||
dnspython==2.2.1
|
||||
einops
|
||||
eventlet
|
||||
facexlib
|
||||
flask==2.1.3
|
||||
flask_cors==3.0.10
|
||||
flask_socketio==5.3.0
|
||||
flaskwebgui==1.0.3
|
||||
getpass_asterisk
|
||||
gfpgan==1.3.8
|
||||
huggingface-hub
|
||||
imageio
|
||||
imageio-ffmpeg
|
||||
kornia
|
||||
numpy==1.23.*
|
||||
omegaconf
|
||||
opencv-python
|
||||
picklescan
|
||||
pillow
|
||||
pip>=22
|
||||
pudb
|
||||
pyreadline3
|
||||
pytorch-lightning==1.7.7
|
||||
realesrgan
|
||||
requests==2.25.1
|
||||
scikit-image>=0.19
|
||||
send2trash
|
||||
streamlit
|
||||
taming-transformers-rom1504
|
||||
test-tube>=0.7.5
|
||||
torch-fidelity
|
||||
torchmetrics
|
||||
transformers==4.25.*
|
||||
https://github.com/Birch-san/k-diffusion/archive/refs/heads/mps.zip#egg=k-diffusion
|
||||
https://github.com/invoke-ai/PyPatchMatch/archive/refs/tags/0.1.5.zip#egg=pypatchmatch
|
||||
https://github.com/openai/CLIP/archive/eaa22acb90a5876642d0507623e859909230a52d.zip#egg=clip
|
||||
https://github.com/invoke-ai/clipseg/archive/relaxed-python-requirement.zip#egg=clipseg
|
|
@ -0,0 +1,6 @@
|
|||
-r environments-and-requirements/requirements-base.txt
|
||||
# Get hardware-appropriate torch/torchvision
|
||||
--extra-index-url https://download.pytorch.org/whl/rocm5.1.1 --trusted-host https://download.pytorch.org
|
||||
torch
|
||||
torchvision
|
||||
-e .
|
|
@ -0,0 +1,3 @@
|
|||
--pre torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/nightly/cpu
|
||||
-r environments-and-requirements/requirements-base.txt
|
||||
-e .
|
|
@ -0,0 +1,5 @@
|
|||
--extra-index-url https://download.pytorch.org/whl/cu116 --trusted-host https://download.pytorch.org
|
||||
-r environments-and-requirements/requirements-base.txt
|
||||
torch
|
||||
torchvision
|
||||
-e .
|
|
@ -0,0 +1,6 @@
|
|||
-r environments-and-requirements/requirements-base.txt
|
||||
grpcio<1.51.0
|
||||
protobuf==3.19.6
|
||||
torch<1.13.0
|
||||
torchvision<0.14.0
|
||||
-e .
|
|
@ -0,0 +1,6 @@
|
|||
-r environments-and-requirements/requirements-base.txt
|
||||
# Get hardware-appropriate torch/torchvision
|
||||
--extra-index-url https://download.pytorch.org/whl/cu116 --trusted-host https://download.pytorch.org
|
||||
torch==1.12.1
|
||||
torchvision==0.13.1
|
||||
-e .
|
|
@ -0,0 +1,234 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
# ensure we're in the correct folder in case user's CWD is somewhere else
|
||||
scriptdir=$(dirname "$0")
|
||||
cd "$scriptdir"
|
||||
|
||||
# This version number will be replaced by the one supplied to create_installers.sh.
|
||||
# Do not change it here - change it in create_installers.sh.
|
||||
INVOKEAI_VERSION="v2.2.5p2"
|
||||
|
||||
# make sure we are not already in a venv
|
||||
# (don't need to check status)
|
||||
deactivate >/dev/null 2>&1
|
||||
|
||||
INVOKE_AI_SRC=https://github.com/invoke-ai/InvokeAI/archive/refs/tags/${INVOKEAI_VERSION}.zip
|
||||
INSTRUCTIONS=https://invoke-ai.github.io/InvokeAI/installation/INSTALL_AUTOMATED/
|
||||
TROUBLESHOOTING=https://invoke-ai.github.io/InvokeAI/installation/INSTALL_AUTOMATED/#troubleshooting
|
||||
MINIMUM_PYTHON_VERSION=3.9.0
|
||||
|
||||
set -euo pipefail
|
||||
IFS=$'\n\t'
|
||||
|
||||
function _err_exit {
|
||||
if test "$1" -ne 0
|
||||
then
|
||||
echo -e "Error code $1; Error caught was '$2'"
|
||||
if [ "$OS_NAME" == "osx" ]; then
|
||||
echo "Something went wrong while installing InvokeAI and/or its requirements."
|
||||
echo "You may need to use the Xcode command line tools to proceed. See step number 3 of"
|
||||
echo "https://invoke-ai.github.io/InvokeAI/INSTALL_SOURCE#walk_through for"
|
||||
echo "installation instructions and then run this script again."
|
||||
else
|
||||
echo "Something went wrong while installing InvokeAI and/or its requirements."
|
||||
echo "See https://invoke-ai.github.io/InvokeAI/INSTALL_SOURCE#troubleshooting for troubleshooting"
|
||||
echo "tips, or visit https://invoke-ai.github.io/InvokeAI/#installation for alternative"
|
||||
echo "installation methods"
|
||||
fi
|
||||
read -p "Press any key to exit..."
|
||||
exit
|
||||
fi
|
||||
}
|
||||
|
||||
function readinput() {
|
||||
local CLEAN_ARGS=""
|
||||
while [[ $# -gt 0 ]]; do
|
||||
local i="$1"
|
||||
case "$i" in
|
||||
"-i")
|
||||
if read -i "default" 2>/dev/null <<< "test"; then
|
||||
CLEAN_ARGS="$CLEAN_ARGS -i \"$2\""
|
||||
fi
|
||||
shift
|
||||
shift
|
||||
;;
|
||||
"-p")
|
||||
CLEAN_ARGS="$CLEAN_ARGS -p \"$2\""
|
||||
shift
|
||||
shift
|
||||
;;
|
||||
*)
|
||||
CLEAN_ARGS="$CLEAN_ARGS $1"
|
||||
shift
|
||||
;;
|
||||
esac
|
||||
done
|
||||
eval read $CLEAN_ARGS
|
||||
}
|
||||
|
||||
|
||||
function version { echo "$@" | awk -F. '{ printf("%d%03d%03d%03d\n", $1,$2,$3,$4); }'; }
|
||||
|
||||
echo "InvokeAI simple installer..."
|
||||
echo ""
|
||||
echo "Some of the installation steps take a long time to run. Please be patient."
|
||||
echo "If the script appears to hang for more than 10 minutes, please interrupt with control-C and retry."
|
||||
read -n 1 -s -r -p "<Press any key to start the install>"
|
||||
echo ""
|
||||
|
||||
OS_NAME=$(uname -s)
|
||||
case "${OS_NAME}" in
|
||||
Linux*) OS_NAME="linux";;
|
||||
Darwin*) OS_NAME="osx";;
|
||||
*) echo "Unknown OS: $OS_NAME! This script runs only on Linux or Mac" && exit
|
||||
esac
|
||||
|
||||
OS_ARCH=$(uname -m)
|
||||
case "${OS_ARCH}" in
|
||||
x86_64*) OS_ARCH="64";;
|
||||
arm64*) OS_ARCH="arm64";;
|
||||
*) echo "Unknown system architecture: $OS_ARCH! This script runs only on x86_64 or arm64" && exit
|
||||
esac
|
||||
|
||||
echo "Installing for $OS_NAME-$OS_ARCH"
|
||||
# confirm that python is installed and is up to date
|
||||
|
||||
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
|
||||
echo Python $python_version found at $PYTHON
|
||||
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
|
||||
|
||||
|
||||
ROOTDIR=""
|
||||
while [ "$ROOTDIR" == "" ]
|
||||
do
|
||||
echo
|
||||
readinput -e -p "Select your preferred location for the 'invokeai' directory [$HOME]: " -i $HOME input
|
||||
ROOTDIR=${input:=$HOME}/invokeai
|
||||
|
||||
# This is surprisingly hard to do in plain Bash; easier in ZSH. Just running python in subshell is easiest.
|
||||
ROOTDIR=$(python -c "from pathlib import Path; print(Path('${ROOTDIR}').expanduser().resolve())")
|
||||
|
||||
read -e -p "InvokeAI will be installed into $ROOTDIR. OK? [y]: " input
|
||||
RESPONSE=${input:='y'}
|
||||
if [ "$RESPONSE" == 'y' ]; then
|
||||
if [ -e "$ROOTDIR" ]; then
|
||||
echo
|
||||
read -e -p "Directory "$ROOTDIR" already exists. Do you want to resume an interrupted install? [y]: " input
|
||||
RESPONSE=${input:='y'}
|
||||
if [ "$RESPONSE" != 'y' ]; then
|
||||
ROOTDIR=""
|
||||
fi
|
||||
else
|
||||
mkdir -p "$ROOTDIR"
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "Could not create "$ROOTDIR". Try again with a different install location."
|
||||
ROOTDIR=""
|
||||
fi
|
||||
fi
|
||||
else
|
||||
ROOTDIR=""
|
||||
fi
|
||||
done
|
||||
|
||||
#--------------------------------------------------------------------------------
|
||||
echo
|
||||
echo "** Creating Virtual Environment for InvokeAI **"
|
||||
|
||||
$PYTHON -mvenv "$ROOTDIR"/.venv
|
||||
_err_exit $? "Python failed to create virtual environment "$ROOTDIR"/.venv. Please see $TROUBLESHOOTING for help."
|
||||
|
||||
#--------------------------------------------------------------------------------
|
||||
echo
|
||||
echo "** Activating Virtual Environment for InvokeAI **"
|
||||
|
||||
source "$ROOTDIR"/.venv/bin/activate
|
||||
_err_exit $? "Failed to activate virtual evironment "$ROOTDIR"/.venv. Please see $TROUBLESHOOTING for help."
|
||||
|
||||
PYTHON="$ROOTDIR"/.venv/bin/python
|
||||
$PYTHON -mensurepip --upgrade
|
||||
$PYTHON -mpip install --upgrade pip
|
||||
|
||||
#--------------------------------------------------------------------------------
|
||||
echo
|
||||
echo "*** Installing InvokeAI Dependencies ***"
|
||||
|
||||
if [ "$OS_NAME" == "osx" ]; then
|
||||
echo "macOS detected. Installing MPS and CPU support."
|
||||
egrep -v '^-e .' environments-and-requirements/requirements-mac-mps-cpu.txt >requirements.txt
|
||||
else
|
||||
if (lsmod | grep amdgpu) &>/dev/null ; then
|
||||
readinput -e -p "Linux system with AMD GPU driver detected. Install ROCm AMD accelerated support? (Otherwise, CUDA support will be installed) [n]: " input
|
||||
RESPONSE=${input:='n'}
|
||||
if [ "$RESPONSE" != "n" ]; then
|
||||
echo "Installing ROCm (AMD) support"
|
||||
egrep -v '^-e .' environments-and-requirements/requirements-lin-amd.txt >requirements.txt
|
||||
else
|
||||
echo "Installing CUDA support"
|
||||
egrep -v '^-e .' environments-and-requirements/requirements-lin-cuda.txt >requirements.txt
|
||||
fi
|
||||
else
|
||||
echo "Linux system detected. Installing CUDA and CPU support."
|
||||
egrep -v '^-e .' environments-and-requirements/requirements-lin-cuda.txt >requirements.txt
|
||||
fi
|
||||
fi
|
||||
|
||||
$PYTHON -mpip install --prefer-binary -r requirements.txt
|
||||
_err_exit $? "Failed to install InvokeAI's dependencies."
|
||||
|
||||
#--------------------------------------------------------------------------------
|
||||
echo
|
||||
echo "*** Installing InvokeAI Modules and Executables ***"
|
||||
$PYTHON -mpip install $INVOKE_AI_SRC
|
||||
_err_exit $? "Installation of InvokeAI failed."
|
||||
|
||||
#--------------------------------------------------------------------------------
|
||||
echo " *** Setting Up Root Directory "$ROOTDIR" *** "
|
||||
cp -pr templates/rootdir/* "$ROOTDIR"/
|
||||
cp templates/invoke.sh.in "$ROOTDIR"/invoke.sh
|
||||
chmod a+rx "$ROOTDIR"/invoke.sh
|
||||
cp templates/update.sh.in "$ROOTDIR"/update.sh
|
||||
chmod a+rx "$ROOTDIR"/update.sh
|
||||
|
||||
# This allows the updater to work!
|
||||
cp -pr environments-and-requirements requirements.txt "$ROOTDIR/"
|
||||
|
||||
#--------------------------------------------------------------------------------
|
||||
echo
|
||||
echo "*** Confguring InvokeAI ***"
|
||||
pushd "$ROOTDIR" >/dev/null
|
||||
$PYTHON ./.venv/bin/configure_invokeai.py --root="$ROOTDIR"
|
||||
_err_exit $? "Initial configuration failed. Please see above error messages and $TROUBLESHOOTING for help."
|
||||
|
||||
#--------------------------------------------------------------------------------
|
||||
popd
|
||||
cp templates/invoke.sh.in "$ROOTDIR"/invoke.sh
|
||||
chmod a+rx "$ROOTDIR"/invoke.sh
|
||||
|
||||
cp templates/update.sh.in "$ROOTDIR"/update.sh
|
||||
chmod a+rx "$ROOTDIR"/update.sh
|
||||
|
||||
echo "You may now run InvokeAI by entering the directory $ROOTDIR and running invoke.sh:"
|
||||
echo
|
||||
echo " ${ROOTDIR}/invoke.sh"
|
||||
echo
|
||||
|
||||
read -e -p "Run InvokeAI now? [y]:" input
|
||||
RESPONSE=${input:='y'}
|
||||
if [ "$RESPONSE" == 'y' ]; then
|
||||
exec ${ROOTDIR}/invoke.sh
|
||||
fi
|
|
@ -0,0 +1,52 @@
|
|||
InvokeAI
|
||||
|
||||
Project homepage: https://github.com/invoke-ai/InvokeAI
|
||||
|
||||
Preparations:
|
||||
|
||||
You will need to install Python 3.9 or higher for this installer
|
||||
to work. Instructions are given here:
|
||||
https://invoke-ai.github.io/InvokeAI/installation/INSTALL_AUTOMATED/
|
||||
|
||||
Before you start the installer, please open up your system's command
|
||||
line window (Terminal or Command) and type the commands:
|
||||
|
||||
python --version
|
||||
|
||||
If all is well, it will print "Python 3.X.X", where the version number
|
||||
is at least 3.9.1
|
||||
|
||||
If this works, check the version of the Python package manager, pip:
|
||||
|
||||
pip --version
|
||||
|
||||
You should get a message that indicates that the pip package
|
||||
installer was derived from Python 3.9 or 3.10. For example:
|
||||
"pip 22.3.1 from /usr/bin/pip (python 3.9)"
|
||||
|
||||
Long Paths on Windows:
|
||||
|
||||
If you are on Windows, you will need to enable Windows Long Paths to
|
||||
run InvokeAI successfully. If you're not sure what this is, you
|
||||
almost certainly need to do this.
|
||||
|
||||
Simply double-click the "WinLongPathsEnabled.reg" file located in
|
||||
this directory, and approve the Windows warnings. Note that you will
|
||||
need to have admin privileges in order to do this.
|
||||
|
||||
Launching the installer:
|
||||
|
||||
Windows: double-click the 'install.bat' file (while keeping it inside
|
||||
the InvokeAI-Installer folder).
|
||||
|
||||
Linux and Mac: Please open the terminal application and run
|
||||
'./install.sh' (while keeping it inside the InvokeAI-Installer
|
||||
folder).
|
||||
|
||||
The installer will create a directory named "invokeai" in the folder
|
||||
of your choice. This directory contains everything you need to run
|
||||
invokeai. Once InvokeAI is up and running, you may delete the
|
||||
InvokeAI-Installer folder at your convenience.
|
||||
|
||||
For more information, please see
|
||||
https://invoke-ai.github.io/InvokeAI/installation/INSTALL_AUTOMATED/
|
|
@ -0,0 +1,5 @@
|
|||
-r environments-and-requirements/requirements-base.txt
|
||||
# Get hardware-appropriate torch/torchvision
|
||||
--extra-index-url https://download.pytorch.org/whl/rocm5.1.1 --trusted-host https://download.pytorch.org
|
||||
torch
|
||||
torchvision
|
|
@ -0,0 +1,37 @@
|
|||
@echo off
|
||||
|
||||
PUSHD "%~dp0"
|
||||
setlocal
|
||||
|
||||
call .venv\Scripts\activate.bat
|
||||
set INVOKEAI_ROOT=.
|
||||
|
||||
echo Do you want to generate images using the
|
||||
echo 1. command-line
|
||||
echo 2. browser-based UI
|
||||
echo 3. open the developer console
|
||||
set /P restore="Please enter 1, 2 or 3: "
|
||||
IF /I "%restore%" == "1" (
|
||||
echo Starting the InvokeAI command-line..
|
||||
python .venv\Scripts\invoke.py %*
|
||||
) ELSE IF /I "%restore%" == "2" (
|
||||
echo Starting the InvokeAI browser-based UI..
|
||||
python .venv\Scripts\invoke.py --web %*
|
||||
) ELSE IF /I "%restore%" == "3" (
|
||||
echo Developer Console
|
||||
echo Python command is:
|
||||
where python
|
||||
echo Python version is:
|
||||
python --version
|
||||
echo *************************
|
||||
echo You are now in the system shell, with the local InvokeAI Python virtual environment activated,
|
||||
echo so that you can troubleshoot this InvokeAI installation as necessary.
|
||||
echo *************************
|
||||
echo *** Type `exit` to quit this shell and deactivate the Python virtual environment ***
|
||||
call cmd /k
|
||||
) ELSE (
|
||||
echo Invalid selection
|
||||
pause
|
||||
exit /b
|
||||
)
|
||||
endlocal
|
|
@ -0,0 +1,34 @@
|
|||
#!/bin/bash
|
||||
|
||||
set -eu
|
||||
|
||||
# ensure we're in the correct folder in case user's CWD is somewhere else
|
||||
scriptdir=$(dirname "$0")
|
||||
cd "$scriptdir"
|
||||
|
||||
. .venv/bin/activate
|
||||
|
||||
export INVOKEAI_ROOT="$scriptdir"
|
||||
|
||||
# set required env var for torch on mac MPS
|
||||
if [ "$(uname -s)" == "Darwin" ]; then
|
||||
export PYTORCH_ENABLE_MPS_FALLBACK=1
|
||||
fi
|
||||
|
||||
if [ "$0" != "bash" ]; then
|
||||
echo "Do you want to generate images using the"
|
||||
echo "1. command-line"
|
||||
echo "2. browser-based UI"
|
||||
echo "3. open the developer console"
|
||||
read -p "Please enter 1, 2, or 3: " yn
|
||||
case $yn in
|
||||
1 ) printf "\nStarting the InvokeAI command-line..\n"; .venv/bin/python .venv/bin/invoke.py $*;;
|
||||
2 ) printf "\nStarting the InvokeAI browser-based UI..\n"; .venv/bin/python .venv/bin/invoke.py --web $*;;
|
||||
3 ) printf "\nDeveloper Console:\n"; file_name=$(basename "${BASH_SOURCE[0]}"); bash --init-file "$file_name";;
|
||||
* ) echo "Invalid selection"; exit;;
|
||||
esac
|
||||
else # in developer console
|
||||
python --version
|
||||
echo "Press ^D to exit"
|
||||
export PS1="(InvokeAI) \u@\h \w> "
|
||||
fi
|
|
@ -0,0 +1,80 @@
|
|||
stable-diffusion-1.5:
|
||||
description: The newest Stable Diffusion version 1.5 weight file (4.27 GB)
|
||||
repo_id: runwayml/stable-diffusion-v1-5
|
||||
config: v1-inference.yaml
|
||||
file: v1-5-pruned-emaonly.ckpt
|
||||
recommended: true
|
||||
width: 512
|
||||
height: 512
|
||||
inpainting-1.5:
|
||||
description: RunwayML SD 1.5 model optimized for inpainting (4.27 GB)
|
||||
repo_id: runwayml/stable-diffusion-inpainting
|
||||
config: v1-inpainting-inference.yaml
|
||||
file: sd-v1-5-inpainting.ckpt
|
||||
recommended: True
|
||||
width: 512
|
||||
height: 512
|
||||
ft-mse-improved-autoencoder-840000:
|
||||
description: StabilityAI improved autoencoder fine-tuned for human faces (recommended; 335 MB)
|
||||
repo_id: stabilityai/sd-vae-ft-mse-original
|
||||
config: VAE/default
|
||||
file: vae-ft-mse-840000-ema-pruned.ckpt
|
||||
recommended: True
|
||||
width: 512
|
||||
height: 512
|
||||
stable-diffusion-1.4:
|
||||
description: The original Stable Diffusion version 1.4 weight file (4.27 GB)
|
||||
repo_id: CompVis/stable-diffusion-v-1-4-original
|
||||
config: v1-inference.yaml
|
||||
file: sd-v1-4.ckpt
|
||||
recommended: False
|
||||
width: 512
|
||||
height: 512
|
||||
waifu-diffusion-1.3:
|
||||
description: Stable Diffusion 1.4 fine tuned on anime-styled images (4.27 GB)
|
||||
repo_id: hakurei/waifu-diffusion-v1-3
|
||||
config: v1-inference.yaml
|
||||
file: model-epoch09-float32.ckpt
|
||||
recommended: False
|
||||
width: 512
|
||||
height: 512
|
||||
trinart-2.0:
|
||||
description: An SD model finetuned with ~40,000 assorted high resolution manga/anime-style pictures (2.13 GB)
|
||||
repo_id: naclbit/trinart_stable_diffusion_v2
|
||||
config: v1-inference.yaml
|
||||
file: trinart2_step95000.ckpt
|
||||
recommended: False
|
||||
width: 512
|
||||
height: 512
|
||||
trinart_characters-1.0:
|
||||
description: An SD model finetuned with 19.2M anime/manga style images (2.13 GB)
|
||||
repo_id: naclbit/trinart_characters_19.2m_stable_diffusion_v1
|
||||
config: v1-inference.yaml
|
||||
file: trinart_characters_it4_v1.ckpt
|
||||
recommended: False
|
||||
width: 512
|
||||
height: 512
|
||||
trinart_vae:
|
||||
description: Custom autoencoder for trinart_characters
|
||||
repo_id: naclbit/trinart_characters_19.2m_stable_diffusion_v1
|
||||
config: VAE/trinart
|
||||
file: autoencoder_fix_kl-f8-trinart_characters.ckpt
|
||||
recommended: False
|
||||
width: 512
|
||||
height: 512
|
||||
papercut-1.0:
|
||||
description: SD 1.5 fine-tuned for papercut art (use "PaperCut" in your prompts) (2.13 GB)
|
||||
repo_id: Fictiverse/Stable_Diffusion_PaperCut_Model
|
||||
config: v1-inference.yaml
|
||||
file: PaperCut_v1.ckpt
|
||||
recommended: False
|
||||
width: 512
|
||||
height: 512
|
||||
voxel_art-1.0:
|
||||
description: Stable Diffusion trained on voxel art (use "VoxelArt" in your prompts) (4.27 GB)
|
||||
repo_id: Fictiverse/Stable_Diffusion_VoxelArt_Model
|
||||
config: v1-inference.yaml
|
||||
file: VoxelArt_v1.ckpt
|
||||
recommended: False
|
||||
width: 512
|
||||
height: 512
|
|
@ -0,0 +1,29 @@
|
|||
# This file describes the alternative machine learning models
|
||||
# available to InvokeAI script.
|
||||
#
|
||||
# To add a new model, follow the examples below. Each
|
||||
# model requires a model config file, a weights file,
|
||||
# and the width and height of the images it
|
||||
# was trained on.
|
||||
stable-diffusion-1.5:
|
||||
description: The newest Stable Diffusion version 1.5 weight file (4.27 GB)
|
||||
weights: models/ldm/stable-diffusion-v1/v1-5-pruned-emaonly.ckpt
|
||||
config: configs/stable-diffusion/v1-inference.yaml
|
||||
width: 512
|
||||
height: 512
|
||||
vae: ./models/ldm/stable-diffusion-v1/vae-ft-mse-840000-ema-pruned.ckpt
|
||||
default: true
|
||||
stable-diffusion-1.4:
|
||||
description: Stable Diffusion inference model version 1.4
|
||||
config: configs/stable-diffusion/v1-inference.yaml
|
||||
weights: models/ldm/stable-diffusion-v1/sd-v1-4.ckpt
|
||||
vae: models/ldm/stable-diffusion-v1/vae-ft-mse-840000-ema-pruned.ckpt
|
||||
width: 512
|
||||
height: 512
|
||||
inpainting-1.5:
|
||||
weights: models/ldm/stable-diffusion-v1/sd-v1-5-inpainting.ckpt
|
||||
config: configs/stable-diffusion/v1-inpainting-inference.yaml
|
||||
vae: models/ldm/stable-diffusion-v1/vae-ft-mse-840000-ema-pruned.ckpt
|
||||
description: RunwayML SD 1.5 model optimized for inpainting
|
||||
width: 512
|
||||
height: 512
|
|
@ -0,0 +1,803 @@
|
|||
sd-concepts-library/001glitch-core
|
||||
sd-concepts-library/2814-roth
|
||||
sd-concepts-library/3d-female-cyborgs
|
||||
sd-concepts-library/4tnght
|
||||
sd-concepts-library/80s-anime-ai
|
||||
sd-concepts-library/80s-anime-ai-being
|
||||
sd-concepts-library/852style-girl
|
||||
sd-concepts-library/8bit
|
||||
sd-concepts-library/8sconception
|
||||
sd-concepts-library/Aflac-duck
|
||||
sd-concepts-library/Akitsuki
|
||||
sd-concepts-library/Atako
|
||||
sd-concepts-library/Exodus-Styling
|
||||
sd-concepts-library/RINGAO
|
||||
sd-concepts-library/a-female-hero-from-the-legend-of-mir
|
||||
sd-concepts-library/a-hat-kid
|
||||
sd-concepts-library/a-tale-of-two-empires
|
||||
sd-concepts-library/aadhav-face
|
||||
sd-concepts-library/aavegotchi
|
||||
sd-concepts-library/abby-face
|
||||
sd-concepts-library/abstract-concepts
|
||||
sd-concepts-library/accurate-angel
|
||||
sd-concepts-library/agm-style-nao
|
||||
sd-concepts-library/aj-fosik
|
||||
sd-concepts-library/alberto-mielgo
|
||||
sd-concepts-library/alex-portugal
|
||||
sd-concepts-library/alex-thumbnail-object-2000-steps
|
||||
sd-concepts-library/aleyna-tilki
|
||||
sd-concepts-library/alf
|
||||
sd-concepts-library/alicebeta
|
||||
sd-concepts-library/alien-avatar
|
||||
sd-concepts-library/alisa
|
||||
sd-concepts-library/all-rings-albuns
|
||||
sd-concepts-library/altvent
|
||||
sd-concepts-library/altyn-helmet
|
||||
sd-concepts-library/amine
|
||||
sd-concepts-library/amogus
|
||||
sd-concepts-library/anders-zorn
|
||||
sd-concepts-library/angus-mcbride-style
|
||||
sd-concepts-library/animalve3-1500seq
|
||||
sd-concepts-library/anime-background-style
|
||||
sd-concepts-library/anime-background-style-v2
|
||||
sd-concepts-library/anime-boy
|
||||
sd-concepts-library/anime-girl
|
||||
sd-concepts-library/anyXtronXredshift
|
||||
sd-concepts-library/anya-forger
|
||||
sd-concepts-library/apex-wingman
|
||||
sd-concepts-library/apulian-rooster-v0-1
|
||||
sd-concepts-library/arcane-face
|
||||
sd-concepts-library/arcane-style-jv
|
||||
sd-concepts-library/arcimboldo-style
|
||||
sd-concepts-library/armando-reveron-style
|
||||
sd-concepts-library/armor-concept
|
||||
sd-concepts-library/arq-render
|
||||
sd-concepts-library/art-brut
|
||||
sd-concepts-library/arthur1
|
||||
sd-concepts-library/artist-yukiko-kanagai
|
||||
sd-concepts-library/arwijn
|
||||
sd-concepts-library/ashiok
|
||||
sd-concepts-library/at-wolf-boy-object
|
||||
sd-concepts-library/atm-ant
|
||||
sd-concepts-library/atm-ant-2
|
||||
sd-concepts-library/axe-tattoo
|
||||
sd-concepts-library/ayush-spider-spr
|
||||
sd-concepts-library/azura-from-vibrant-venture
|
||||
sd-concepts-library/ba-shiroko
|
||||
sd-concepts-library/babau
|
||||
sd-concepts-library/babs-bunny
|
||||
sd-concepts-library/babushork
|
||||
sd-concepts-library/backrooms
|
||||
sd-concepts-library/bad_Hub_Hugh
|
||||
sd-concepts-library/bada-club
|
||||
sd-concepts-library/baldi
|
||||
sd-concepts-library/baluchitherian
|
||||
sd-concepts-library/bamse
|
||||
sd-concepts-library/bamse-og-kylling
|
||||
sd-concepts-library/bee
|
||||
sd-concepts-library/beholder
|
||||
sd-concepts-library/beldam
|
||||
sd-concepts-library/belen
|
||||
sd-concepts-library/bella-goth
|
||||
sd-concepts-library/belle-delphine
|
||||
sd-concepts-library/bert-muppet
|
||||
sd-concepts-library/better-collage3
|
||||
sd-concepts-library/between2-mt-fade
|
||||
sd-concepts-library/birb-style
|
||||
sd-concepts-library/black-and-white-design
|
||||
sd-concepts-library/black-waifu
|
||||
sd-concepts-library/bloo
|
||||
sd-concepts-library/blue-haired-boy
|
||||
sd-concepts-library/blue-zombie
|
||||
sd-concepts-library/blue-zombiee
|
||||
sd-concepts-library/bluebey
|
||||
sd-concepts-library/bluebey-2
|
||||
sd-concepts-library/bobs-burgers
|
||||
sd-concepts-library/boissonnard
|
||||
sd-concepts-library/bonzi-monkey
|
||||
sd-concepts-library/borderlands
|
||||
sd-concepts-library/bored-ape-textual-inversion
|
||||
sd-concepts-library/boris-anderson
|
||||
sd-concepts-library/bozo-22
|
||||
sd-concepts-library/breakcore
|
||||
sd-concepts-library/brittney-williams-art
|
||||
sd-concepts-library/bruma
|
||||
sd-concepts-library/brunnya
|
||||
sd-concepts-library/buddha-statue
|
||||
sd-concepts-library/bullvbear
|
||||
sd-concepts-library/button-eyes
|
||||
sd-concepts-library/canadian-goose
|
||||
sd-concepts-library/canary-cap
|
||||
sd-concepts-library/cancer_style
|
||||
sd-concepts-library/captain-haddock
|
||||
sd-concepts-library/captainkirb
|
||||
sd-concepts-library/car-toy-rk
|
||||
sd-concepts-library/carasibana
|
||||
sd-concepts-library/carlitos-el-mago
|
||||
sd-concepts-library/carrascharacter
|
||||
sd-concepts-library/cartoona-animals
|
||||
sd-concepts-library/cat-toy
|
||||
sd-concepts-library/centaur
|
||||
sd-concepts-library/cgdonny1
|
||||
sd-concepts-library/cham
|
||||
sd-concepts-library/chandra-nalaar
|
||||
sd-concepts-library/char-con
|
||||
sd-concepts-library/character-pingu
|
||||
sd-concepts-library/cheburashka
|
||||
sd-concepts-library/chen-1
|
||||
sd-concepts-library/child-zombie
|
||||
sd-concepts-library/chillpill
|
||||
sd-concepts-library/chonkfrog
|
||||
sd-concepts-library/chop
|
||||
sd-concepts-library/christo-person
|
||||
sd-concepts-library/chuck-walton
|
||||
sd-concepts-library/chucky
|
||||
sd-concepts-library/chungus-poodl-pet
|
||||
sd-concepts-library/cindlop
|
||||
sd-concepts-library/collage-cutouts
|
||||
sd-concepts-library/collage14
|
||||
sd-concepts-library/collage3
|
||||
sd-concepts-library/collage3-hubcity
|
||||
sd-concepts-library/cologne
|
||||
sd-concepts-library/color-page
|
||||
sd-concepts-library/colossus
|
||||
sd-concepts-library/command-and-conquer-remastered-cameos
|
||||
sd-concepts-library/concept-art
|
||||
sd-concepts-library/conner-fawcett-style
|
||||
sd-concepts-library/conway-pirate
|
||||
sd-concepts-library/coop-himmelblau
|
||||
sd-concepts-library/coraline
|
||||
sd-concepts-library/cornell-box
|
||||
sd-concepts-library/cortana
|
||||
sd-concepts-library/covid-19-rapid-test
|
||||
sd-concepts-library/cow-uwu
|
||||
sd-concepts-library/cowboy
|
||||
sd-concepts-library/crazy-1
|
||||
sd-concepts-library/crazy-2
|
||||
sd-concepts-library/crb-portraits
|
||||
sd-concepts-library/crb-surrealz
|
||||
sd-concepts-library/crbart
|
||||
sd-concepts-library/crested-gecko
|
||||
sd-concepts-library/crinos-form-garou
|
||||
sd-concepts-library/cry-baby-style
|
||||
sd-concepts-library/crybaby-style-2-0
|
||||
sd-concepts-library/csgo-awp-object
|
||||
sd-concepts-library/csgo-awp-texture-map
|
||||
sd-concepts-library/cubex
|
||||
sd-concepts-library/cumbia-peruana
|
||||
sd-concepts-library/cute-bear
|
||||
sd-concepts-library/cute-cat
|
||||
sd-concepts-library/cute-game-style
|
||||
sd-concepts-library/cyberpunk-lucy
|
||||
sd-concepts-library/dabotap
|
||||
sd-concepts-library/dan-mumford
|
||||
sd-concepts-library/dan-seagrave-art-style
|
||||
sd-concepts-library/dark-penguin-pinguinanimations
|
||||
sd-concepts-library/darkpenguinanimatronic
|
||||
sd-concepts-library/darkplane
|
||||
sd-concepts-library/david-firth-artstyle
|
||||
sd-concepts-library/david-martinez-cyberpunk
|
||||
sd-concepts-library/david-martinez-edgerunners
|
||||
sd-concepts-library/david-moreno-architecture
|
||||
sd-concepts-library/daycare-attendant-sun-fnaf
|
||||
sd-concepts-library/ddattender
|
||||
sd-concepts-library/degods
|
||||
sd-concepts-library/degodsheavy
|
||||
sd-concepts-library/depthmap
|
||||
sd-concepts-library/depthmap-style
|
||||
sd-concepts-library/design
|
||||
sd-concepts-library/detectivedinosaur1
|
||||
sd-concepts-library/diaosu-toy
|
||||
sd-concepts-library/dicoo
|
||||
sd-concepts-library/dicoo2
|
||||
sd-concepts-library/dishonored-portrait-styles
|
||||
sd-concepts-library/disquieting-muses
|
||||
sd-concepts-library/ditko
|
||||
sd-concepts-library/dlooak
|
||||
sd-concepts-library/doc
|
||||
sd-concepts-library/doener-red-line-art
|
||||
sd-concepts-library/dog
|
||||
sd-concepts-library/dog-django
|
||||
sd-concepts-library/doge-pound
|
||||
sd-concepts-library/dong-ho
|
||||
sd-concepts-library/dong-ho2
|
||||
sd-concepts-library/doose-s-realistic-art-style
|
||||
sd-concepts-library/dq10-anrushia
|
||||
sd-concepts-library/dr-livesey
|
||||
sd-concepts-library/dr-strange
|
||||
sd-concepts-library/dragonborn
|
||||
sd-concepts-library/dreamcore
|
||||
sd-concepts-library/dreamy-painting
|
||||
sd-concepts-library/drive-scorpion-jacket
|
||||
sd-concepts-library/dsmuses
|
||||
sd-concepts-library/dtv-pkmn
|
||||
sd-concepts-library/dullboy-caricature
|
||||
sd-concepts-library/duranduran
|
||||
sd-concepts-library/durer-style
|
||||
sd-concepts-library/dyoudim-style
|
||||
sd-concepts-library/early-mishima-kurone
|
||||
sd-concepts-library/eastward
|
||||
sd-concepts-library/eddie
|
||||
sd-concepts-library/edgerunners-style
|
||||
sd-concepts-library/edgerunners-style-v2
|
||||
sd-concepts-library/el-salvador-style-style
|
||||
sd-concepts-library/elegant-flower
|
||||
sd-concepts-library/elspeth-tirel
|
||||
sd-concepts-library/eru-chitanda-casual
|
||||
sd-concepts-library/erwin-olaf-style
|
||||
sd-concepts-library/ettblackteapot
|
||||
sd-concepts-library/explosions-cat
|
||||
sd-concepts-library/eye-of-agamotto
|
||||
sd-concepts-library/f-22
|
||||
sd-concepts-library/facadeplace
|
||||
sd-concepts-library/fairy-tale-painting-style
|
||||
sd-concepts-library/fairytale
|
||||
sd-concepts-library/fang-yuan-001
|
||||
sd-concepts-library/faraon-love-shady
|
||||
sd-concepts-library/fasina
|
||||
sd-concepts-library/felps
|
||||
sd-concepts-library/female-kpop-singer
|
||||
sd-concepts-library/fergal-cat
|
||||
sd-concepts-library/filename-2
|
||||
sd-concepts-library/fileteado-porteno
|
||||
sd-concepts-library/final-fantasy-logo
|
||||
sd-concepts-library/fireworks-over-water
|
||||
sd-concepts-library/fish
|
||||
sd-concepts-library/flag-ussr
|
||||
sd-concepts-library/flatic
|
||||
sd-concepts-library/floral
|
||||
sd-concepts-library/fluid-acrylic-jellyfish-creatures-style-of-carl-ingram-art
|
||||
sd-concepts-library/fnf-boyfriend
|
||||
sd-concepts-library/fold-structure
|
||||
sd-concepts-library/fox-purple
|
||||
sd-concepts-library/fractal
|
||||
sd-concepts-library/fractal-flame
|
||||
sd-concepts-library/fractal-temple-style
|
||||
sd-concepts-library/frank-frazetta
|
||||
sd-concepts-library/franz-unterberger
|
||||
sd-concepts-library/freddy-fazbear
|
||||
sd-concepts-library/freefonix-style
|
||||
sd-concepts-library/furrpopasthetic
|
||||
sd-concepts-library/fursona
|
||||
sd-concepts-library/fzk
|
||||
sd-concepts-library/galaxy-explorer
|
||||
sd-concepts-library/ganyu-genshin-impact
|
||||
sd-concepts-library/garcon-the-cat
|
||||
sd-concepts-library/garfield-pizza-plush
|
||||
sd-concepts-library/garfield-pizza-plush-v2
|
||||
sd-concepts-library/gba-fe-class-cards
|
||||
sd-concepts-library/gba-pokemon-sprites
|
||||
sd-concepts-library/geggin
|
||||
sd-concepts-library/ggplot2
|
||||
sd-concepts-library/ghost-style
|
||||
sd-concepts-library/ghostproject-men
|
||||
sd-concepts-library/gibasachan-v0
|
||||
sd-concepts-library/gim
|
||||
sd-concepts-library/gio
|
||||
sd-concepts-library/giygas
|
||||
sd-concepts-library/glass-pipe
|
||||
sd-concepts-library/glass-prism-cube
|
||||
sd-concepts-library/glow-forest
|
||||
sd-concepts-library/goku
|
||||
sd-concepts-library/gram-tops
|
||||
sd-concepts-library/green-blue-shanshui
|
||||
sd-concepts-library/green-tent
|
||||
sd-concepts-library/grifter
|
||||
sd-concepts-library/grisstyle
|
||||
sd-concepts-library/grit-toy
|
||||
sd-concepts-library/gt-color-paint-2
|
||||
sd-concepts-library/gta5-artwork
|
||||
sd-concepts-library/guttestreker
|
||||
sd-concepts-library/gymnastics-leotard-v2
|
||||
sd-concepts-library/half-life-2-dog
|
||||
sd-concepts-library/handstand
|
||||
sd-concepts-library/hanfu-anime-style
|
||||
sd-concepts-library/happy-chaos
|
||||
sd-concepts-library/happy-person12345
|
||||
sd-concepts-library/happy-person12345-assets
|
||||
sd-concepts-library/harley-quinn
|
||||
sd-concepts-library/harmless-ai-1
|
||||
sd-concepts-library/harmless-ai-house-style-1
|
||||
sd-concepts-library/hd-emoji
|
||||
sd-concepts-library/heather
|
||||
sd-concepts-library/henjo-techno-show
|
||||
sd-concepts-library/herge-style
|
||||
sd-concepts-library/hiten-style-nao
|
||||
sd-concepts-library/hitokomoru-style-nao
|
||||
sd-concepts-library/hiyuki-chan
|
||||
sd-concepts-library/hk-bamboo
|
||||
sd-concepts-library/hk-betweenislands
|
||||
sd-concepts-library/hk-bicycle
|
||||
sd-concepts-library/hk-blackandwhite
|
||||
sd-concepts-library/hk-breakfast
|
||||
sd-concepts-library/hk-buses
|
||||
sd-concepts-library/hk-clouds
|
||||
sd-concepts-library/hk-goldbuddha
|
||||
sd-concepts-library/hk-goldenlantern
|
||||
sd-concepts-library/hk-hkisland
|
||||
sd-concepts-library/hk-leaves
|
||||
sd-concepts-library/hk-market
|
||||
sd-concepts-library/hk-oldcamera
|
||||
sd-concepts-library/hk-opencamera
|
||||
sd-concepts-library/hk-peach
|
||||
sd-concepts-library/hk-phonevax
|
||||
sd-concepts-library/hk-streetpeople
|
||||
sd-concepts-library/hk-vintage
|
||||
sd-concepts-library/hoi4
|
||||
sd-concepts-library/hoi4-leaders
|
||||
sd-concepts-library/homestuck-sprite
|
||||
sd-concepts-library/homestuck-troll
|
||||
sd-concepts-library/hours-sentry-fade
|
||||
sd-concepts-library/hours-style
|
||||
sd-concepts-library/hrgiger-drmacabre
|
||||
sd-concepts-library/huang-guang-jian
|
||||
sd-concepts-library/huatli
|
||||
sd-concepts-library/huayecai820-greyscale
|
||||
sd-concepts-library/hub-city
|
||||
sd-concepts-library/hubris-oshri
|
||||
sd-concepts-library/huckleberry
|
||||
sd-concepts-library/hydrasuit
|
||||
sd-concepts-library/i-love-chaos
|
||||
sd-concepts-library/ibere-thenorio
|
||||
sd-concepts-library/ic0n
|
||||
sd-concepts-library/ie-gravestone
|
||||
sd-concepts-library/ikea-fabler
|
||||
sd-concepts-library/illustration-style
|
||||
sd-concepts-library/ilo-kunst
|
||||
sd-concepts-library/ilya-shkipin
|
||||
sd-concepts-library/im-poppy
|
||||
sd-concepts-library/ina-art
|
||||
sd-concepts-library/indian-watercolor-portraits
|
||||
sd-concepts-library/indiana
|
||||
sd-concepts-library/ingmar-bergman
|
||||
sd-concepts-library/insidewhale
|
||||
sd-concepts-library/interchanges
|
||||
sd-concepts-library/inuyama-muneto-style-nao
|
||||
sd-concepts-library/irasutoya
|
||||
sd-concepts-library/iridescent-illustration-style
|
||||
sd-concepts-library/iridescent-photo-style
|
||||
sd-concepts-library/isabell-schulte-pv-pvii-3000steps
|
||||
sd-concepts-library/isabell-schulte-pviii-1-image-style
|
||||
sd-concepts-library/isabell-schulte-pviii-1024px-1500-steps-style
|
||||
sd-concepts-library/isabell-schulte-pviii-12tiles-3000steps-style
|
||||
sd-concepts-library/isabell-schulte-pviii-4-tiles-1-lr-3000-steps-style
|
||||
sd-concepts-library/isabell-schulte-pviii-4-tiles-3-lr-5000-steps-style
|
||||
sd-concepts-library/isabell-schulte-pviii-4tiles-500steps
|
||||
sd-concepts-library/isabell-schulte-pviii-4tiles-6000steps
|
||||
sd-concepts-library/isabell-schulte-pviii-style
|
||||
sd-concepts-library/isometric-tile-test
|
||||
sd-concepts-library/jacqueline-the-unicorn
|
||||
sd-concepts-library/james-web-space-telescope
|
||||
sd-concepts-library/jamie-hewlett-style
|
||||
sd-concepts-library/jamiels
|
||||
sd-concepts-library/jang-sung-rak-style
|
||||
sd-concepts-library/jetsetdreamcastcovers
|
||||
sd-concepts-library/jin-kisaragi
|
||||
sd-concepts-library/jinjoon-lee-they
|
||||
sd-concepts-library/jm-bergling-monogram
|
||||
sd-concepts-library/joe-mad
|
||||
sd-concepts-library/joe-whiteford-art-style
|
||||
sd-concepts-library/joemad
|
||||
sd-concepts-library/john-blanche
|
||||
sd-concepts-library/johnny-silverhand
|
||||
sd-concepts-library/jojo-bizzare-adventure-manga-lineart
|
||||
sd-concepts-library/jos-de-kat
|
||||
sd-concepts-library/junji-ito-artstyle
|
||||
sd-concepts-library/kaleido
|
||||
sd-concepts-library/kaneoya-sachiko
|
||||
sd-concepts-library/kanovt
|
||||
sd-concepts-library/kanv1
|
||||
sd-concepts-library/karan-gloomy
|
||||
sd-concepts-library/karl-s-lzx-1
|
||||
sd-concepts-library/kasumin
|
||||
sd-concepts-library/kawaii-colors
|
||||
sd-concepts-library/kawaii-girl-plus-object
|
||||
sd-concepts-library/kawaii-girl-plus-style
|
||||
sd-concepts-library/kawaii-girl-plus-style-v1-1
|
||||
sd-concepts-library/kay
|
||||
sd-concepts-library/kaya-ghost-assasin
|
||||
sd-concepts-library/ki
|
||||
sd-concepts-library/kinda-sus
|
||||
sd-concepts-library/kings-quest-agd
|
||||
sd-concepts-library/kiora
|
||||
sd-concepts-library/kira-sensei
|
||||
sd-concepts-library/kirby
|
||||
sd-concepts-library/klance
|
||||
sd-concepts-library/kodakvision500t
|
||||
sd-concepts-library/kogatan-shiny
|
||||
sd-concepts-library/kogecha
|
||||
sd-concepts-library/kojima-ayami
|
||||
sd-concepts-library/koko-dog
|
||||
sd-concepts-library/kuvshinov
|
||||
sd-concepts-library/kysa-v-style
|
||||
sd-concepts-library/laala-character
|
||||
sd-concepts-library/larrette
|
||||
sd-concepts-library/lavko
|
||||
sd-concepts-library/lazytown-stephanie
|
||||
sd-concepts-library/ldr
|
||||
sd-concepts-library/ldrs
|
||||
sd-concepts-library/led-toy
|
||||
sd-concepts-library/lego-astronaut
|
||||
sd-concepts-library/leica
|
||||
sd-concepts-library/leif-jones
|
||||
sd-concepts-library/lex
|
||||
sd-concepts-library/liliana
|
||||
sd-concepts-library/liliana-vess
|
||||
sd-concepts-library/liminal-spaces-2-0
|
||||
sd-concepts-library/liminalspaces
|
||||
sd-concepts-library/line-art
|
||||
sd-concepts-library/line-style
|
||||
sd-concepts-library/linnopoke
|
||||
sd-concepts-library/liquid-light
|
||||
sd-concepts-library/liqwid-aquafarmer
|
||||
sd-concepts-library/lizardman
|
||||
sd-concepts-library/loab-character
|
||||
sd-concepts-library/loab-style
|
||||
sd-concepts-library/lofa
|
||||
sd-concepts-library/logo-with-face-on-shield
|
||||
sd-concepts-library/lolo
|
||||
sd-concepts-library/looney-anime
|
||||
sd-concepts-library/lost-rapper
|
||||
sd-concepts-library/lphr-style
|
||||
sd-concepts-library/lucario
|
||||
sd-concepts-library/lucky-luke
|
||||
sd-concepts-library/lugal-ki-en
|
||||
sd-concepts-library/luinv2
|
||||
sd-concepts-library/lula-13
|
||||
sd-concepts-library/lumio
|
||||
sd-concepts-library/lxj-o4
|
||||
sd-concepts-library/m-geo
|
||||
sd-concepts-library/m-geoo
|
||||
sd-concepts-library/madhubani-art
|
||||
sd-concepts-library/mafalda-character
|
||||
sd-concepts-library/magic-pengel
|
||||
sd-concepts-library/malika-favre-art-style
|
||||
sd-concepts-library/manga-style
|
||||
sd-concepts-library/marbling-art
|
||||
sd-concepts-library/margo
|
||||
sd-concepts-library/marty
|
||||
sd-concepts-library/marty6
|
||||
sd-concepts-library/mass
|
||||
sd-concepts-library/masyanya
|
||||
sd-concepts-library/masyunya
|
||||
sd-concepts-library/mate
|
||||
sd-concepts-library/matthew-stone
|
||||
sd-concepts-library/mattvidpro
|
||||
sd-concepts-library/maurice-quentin-de-la-tour-style
|
||||
sd-concepts-library/maus
|
||||
sd-concepts-library/max-foley
|
||||
sd-concepts-library/mayor-richard-irvin
|
||||
sd-concepts-library/mechasoulall
|
||||
sd-concepts-library/medazzaland
|
||||
sd-concepts-library/memnarch-mtg
|
||||
sd-concepts-library/metagabe
|
||||
sd-concepts-library/meyoco
|
||||
sd-concepts-library/meze-audio-elite-headphones
|
||||
sd-concepts-library/midjourney-style
|
||||
sd-concepts-library/mikako-method
|
||||
sd-concepts-library/mikako-methodi2i
|
||||
sd-concepts-library/miko-3-robot
|
||||
sd-concepts-library/milady
|
||||
sd-concepts-library/mildemelwe-style
|
||||
sd-concepts-library/million-live-akane-15k
|
||||
sd-concepts-library/million-live-akane-3k
|
||||
sd-concepts-library/million-live-akane-shifuku-3k
|
||||
sd-concepts-library/million-live-spade-q-object-3k
|
||||
sd-concepts-library/million-live-spade-q-style-3k
|
||||
sd-concepts-library/minecraft-concept-art
|
||||
sd-concepts-library/mishima-kurone
|
||||
sd-concepts-library/mizkif
|
||||
sd-concepts-library/moeb-style
|
||||
sd-concepts-library/moebius
|
||||
sd-concepts-library/mokoko
|
||||
sd-concepts-library/mokoko-seed
|
||||
sd-concepts-library/monster-girl
|
||||
sd-concepts-library/monster-toy
|
||||
sd-concepts-library/monte-novo
|
||||
sd-concepts-library/moo-moo
|
||||
sd-concepts-library/morino-hon-style
|
||||
sd-concepts-library/moxxi
|
||||
sd-concepts-library/msg
|
||||
sd-concepts-library/mtg-card
|
||||
sd-concepts-library/mtl-longsky
|
||||
sd-concepts-library/mu-sadr
|
||||
sd-concepts-library/munch-leaks-style
|
||||
sd-concepts-library/museum-by-coop-himmelblau
|
||||
sd-concepts-library/muxoyara
|
||||
sd-concepts-library/my-hero-academia-style
|
||||
sd-concepts-library/my-mug
|
||||
sd-concepts-library/mycat
|
||||
sd-concepts-library/mystical-nature
|
||||
sd-concepts-library/naf
|
||||
sd-concepts-library/nahiri
|
||||
sd-concepts-library/namine-ritsu
|
||||
sd-concepts-library/naoki-saito
|
||||
sd-concepts-library/nard-style
|
||||
sd-concepts-library/naruto
|
||||
sd-concepts-library/natasha-johnston
|
||||
sd-concepts-library/nathan-wyatt
|
||||
sd-concepts-library/naval-portrait
|
||||
sd-concepts-library/nazuna
|
||||
sd-concepts-library/nebula
|
||||
sd-concepts-library/ned-flanders
|
||||
sd-concepts-library/neon-pastel
|
||||
sd-concepts-library/new-priests
|
||||
sd-concepts-library/nic-papercuts
|
||||
sd-concepts-library/nikodim
|
||||
sd-concepts-library/nissa-revane
|
||||
sd-concepts-library/nixeu
|
||||
sd-concepts-library/noggles
|
||||
sd-concepts-library/nomad
|
||||
sd-concepts-library/nouns-glasses
|
||||
sd-concepts-library/obama-based-on-xi
|
||||
sd-concepts-library/obama-self-2
|
||||
sd-concepts-library/og-mox-style
|
||||
sd-concepts-library/ohisashiburi-style
|
||||
sd-concepts-library/oleg-kuvaev
|
||||
sd-concepts-library/olli-olli
|
||||
sd-concepts-library/on-kawara
|
||||
sd-concepts-library/one-line-drawing
|
||||
sd-concepts-library/onepunchman
|
||||
sd-concepts-library/onzpo
|
||||
sd-concepts-library/orangejacket
|
||||
sd-concepts-library/ori
|
||||
sd-concepts-library/ori-toor
|
||||
sd-concepts-library/orientalist-art
|
||||
sd-concepts-library/osaka-jyo
|
||||
sd-concepts-library/osaka-jyo2
|
||||
sd-concepts-library/osrsmini2
|
||||
sd-concepts-library/osrstiny
|
||||
sd-concepts-library/other-mother
|
||||
sd-concepts-library/ouroboros
|
||||
sd-concepts-library/outfit-items
|
||||
sd-concepts-library/overprettified
|
||||
sd-concepts-library/owl-house
|
||||
sd-concepts-library/painted-by-silver-of-999
|
||||
sd-concepts-library/painted-by-silver-of-999-2
|
||||
sd-concepts-library/painted-student
|
||||
sd-concepts-library/painting
|
||||
sd-concepts-library/pantone-milk
|
||||
sd-concepts-library/paolo-bonolis
|
||||
sd-concepts-library/party-girl
|
||||
sd-concepts-library/pascalsibertin
|
||||
sd-concepts-library/pastelartstyle
|
||||
sd-concepts-library/paul-noir
|
||||
sd-concepts-library/pen-ink-portraits-bennorthen
|
||||
sd-concepts-library/phan
|
||||
sd-concepts-library/phan-s-collage
|
||||
sd-concepts-library/phc
|
||||
sd-concepts-library/phoenix-01
|
||||
sd-concepts-library/pineda-david
|
||||
sd-concepts-library/pink-beast-pastelae-style
|
||||
sd-concepts-library/pintu
|
||||
sd-concepts-library/pion-by-august-semionov
|
||||
sd-concepts-library/piotr-jablonski
|
||||
sd-concepts-library/pixel-mania
|
||||
sd-concepts-library/pixel-toy
|
||||
sd-concepts-library/pjablonski-style
|
||||
sd-concepts-library/plant-style
|
||||
sd-concepts-library/plen-ki-mun
|
||||
sd-concepts-library/pokemon-conquest-sprites
|
||||
sd-concepts-library/pool-test
|
||||
sd-concepts-library/poolrooms
|
||||
sd-concepts-library/poring-ragnarok-online
|
||||
sd-concepts-library/poutine-dish
|
||||
sd-concepts-library/princess-knight-art
|
||||
sd-concepts-library/progress-chip
|
||||
sd-concepts-library/puerquis-toy
|
||||
sd-concepts-library/purplefishli
|
||||
sd-concepts-library/pyramidheadcosplay
|
||||
sd-concepts-library/qpt-atrium
|
||||
sd-concepts-library/quiesel
|
||||
sd-concepts-library/r-crumb-style
|
||||
sd-concepts-library/rahkshi-bionicle
|
||||
sd-concepts-library/raichu
|
||||
sd-concepts-library/rail-scene
|
||||
sd-concepts-library/rail-scene-style
|
||||
sd-concepts-library/ralph-mcquarrie
|
||||
sd-concepts-library/ransom
|
||||
sd-concepts-library/rayne-weynolds
|
||||
sd-concepts-library/rcrumb-portraits-style
|
||||
sd-concepts-library/rd-chaos
|
||||
sd-concepts-library/rd-paintings
|
||||
sd-concepts-library/red-glasses
|
||||
sd-concepts-library/reeducation-camp
|
||||
sd-concepts-library/reksio-dog
|
||||
sd-concepts-library/rektguy
|
||||
sd-concepts-library/remert
|
||||
sd-concepts-library/renalla
|
||||
sd-concepts-library/repeat
|
||||
sd-concepts-library/retro-girl
|
||||
sd-concepts-library/retro-mecha-rangers
|
||||
sd-concepts-library/retropixelart-pinguin
|
||||
sd-concepts-library/rex-deno
|
||||
sd-concepts-library/rhizomuse-machine-bionic-sculpture
|
||||
sd-concepts-library/ricar
|
||||
sd-concepts-library/rickyart
|
||||
sd-concepts-library/rico-face
|
||||
sd-concepts-library/riker-doll
|
||||
sd-concepts-library/rikiart
|
||||
sd-concepts-library/rikiboy-art
|
||||
sd-concepts-library/rilakkuma
|
||||
sd-concepts-library/rishusei-style
|
||||
sd-concepts-library/rj-palmer
|
||||
sd-concepts-library/rl-pkmn-test
|
||||
sd-concepts-library/road-to-ruin
|
||||
sd-concepts-library/robertnava
|
||||
sd-concepts-library/roblox-avatar
|
||||
sd-concepts-library/roy-lichtenstein
|
||||
sd-concepts-library/ruan-jia
|
||||
sd-concepts-library/russian
|
||||
sd-concepts-library/s1m-naoto-ohshima
|
||||
sd-concepts-library/saheeli-rai
|
||||
sd-concepts-library/sakimi-style
|
||||
sd-concepts-library/salmonid
|
||||
sd-concepts-library/sam-yang
|
||||
sd-concepts-library/sanguo-guanyu
|
||||
sd-concepts-library/sas-style
|
||||
sd-concepts-library/scarlet-witch
|
||||
sd-concepts-library/schloss-mosigkau
|
||||
sd-concepts-library/scrap-style
|
||||
sd-concepts-library/scratch-project
|
||||
sd-concepts-library/sculptural-style
|
||||
sd-concepts-library/sd-concepts-library-uma-meme
|
||||
sd-concepts-library/seamless-ground
|
||||
sd-concepts-library/selezneva-alisa
|
||||
sd-concepts-library/sem-mac2n
|
||||
sd-concepts-library/senneca
|
||||
sd-concepts-library/seraphimmoonshadow-art
|
||||
sd-concepts-library/sewerslvt
|
||||
sd-concepts-library/she-hulk-law-art
|
||||
sd-concepts-library/she-mask
|
||||
sd-concepts-library/sherhook-painting
|
||||
sd-concepts-library/sherhook-painting-v2
|
||||
sd-concepts-library/shev-linocut
|
||||
sd-concepts-library/shigure-ui-style
|
||||
sd-concepts-library/shiny-polyman
|
||||
sd-concepts-library/shrunken-head
|
||||
sd-concepts-library/shu-doll
|
||||
sd-concepts-library/shvoren-style
|
||||
sd-concepts-library/sims-2-portrait
|
||||
sd-concepts-library/singsing
|
||||
sd-concepts-library/singsing-doll
|
||||
sd-concepts-library/sintez-ico
|
||||
sd-concepts-library/skyfalls
|
||||
sd-concepts-library/slm
|
||||
sd-concepts-library/smarties
|
||||
sd-concepts-library/smiling-friend-style
|
||||
sd-concepts-library/smooth-pencils
|
||||
sd-concepts-library/smurf-style
|
||||
sd-concepts-library/smw-map
|
||||
sd-concepts-library/society-finch
|
||||
sd-concepts-library/sorami-style
|
||||
sd-concepts-library/spider-gwen
|
||||
sd-concepts-library/spritual-monsters
|
||||
sd-concepts-library/stable-diffusion-conceptualizer
|
||||
sd-concepts-library/star-tours-posters
|
||||
sd-concepts-library/stardew-valley-pixel-art
|
||||
sd-concepts-library/starhavenmachinegods
|
||||
sd-concepts-library/sterling-archer
|
||||
sd-concepts-library/stretch-re1-robot
|
||||
sd-concepts-library/stuffed-penguin-toy
|
||||
sd-concepts-library/style-of-marc-allante
|
||||
sd-concepts-library/summie-style
|
||||
sd-concepts-library/sunfish
|
||||
sd-concepts-library/super-nintendo-cartridge
|
||||
sd-concepts-library/supitcha-mask
|
||||
sd-concepts-library/sushi-pixel
|
||||
sd-concepts-library/swamp-choe-2
|
||||
sd-concepts-library/t-skrang
|
||||
sd-concepts-library/takuji-kawano
|
||||
sd-concepts-library/tamiyo
|
||||
sd-concepts-library/tangles
|
||||
sd-concepts-library/tb303
|
||||
sd-concepts-library/tcirle
|
||||
sd-concepts-library/teelip-ir-landscape
|
||||
sd-concepts-library/teferi
|
||||
sd-concepts-library/tela-lenca
|
||||
sd-concepts-library/tela-lenca2
|
||||
sd-concepts-library/terraria-style
|
||||
sd-concepts-library/tesla-bot
|
||||
sd-concepts-library/test
|
||||
sd-concepts-library/test-epson
|
||||
sd-concepts-library/test2
|
||||
sd-concepts-library/testing
|
||||
sd-concepts-library/thalasin
|
||||
sd-concepts-library/thegeneral
|
||||
sd-concepts-library/thorneworks
|
||||
sd-concepts-library/threestooges
|
||||
sd-concepts-library/thunderdome-cover
|
||||
sd-concepts-library/thunderdome-covers
|
||||
sd-concepts-library/ti-junglepunk-v0
|
||||
sd-concepts-library/tili-concept
|
||||
sd-concepts-library/titan-robot
|
||||
sd-concepts-library/tnj
|
||||
sd-concepts-library/toho-pixel
|
||||
sd-concepts-library/tomcat
|
||||
sd-concepts-library/tonal1
|
||||
sd-concepts-library/tony-diterlizzi-s-planescape-art
|
||||
sd-concepts-library/towerplace
|
||||
sd-concepts-library/toy
|
||||
sd-concepts-library/toy-bonnie-plush
|
||||
sd-concepts-library/toyota-sera
|
||||
sd-concepts-library/transmutation-circles
|
||||
sd-concepts-library/trash-polka-artstyle
|
||||
sd-concepts-library/travis-bedel
|
||||
sd-concepts-library/trigger-studio
|
||||
sd-concepts-library/trust-support
|
||||
sd-concepts-library/trypophobia
|
||||
sd-concepts-library/ttte
|
||||
sd-concepts-library/tubby
|
||||
sd-concepts-library/tubby-cats
|
||||
sd-concepts-library/tudisco
|
||||
sd-concepts-library/turtlepics
|
||||
sd-concepts-library/type
|
||||
sd-concepts-library/ugly-sonic
|
||||
sd-concepts-library/uliana-kudinova
|
||||
sd-concepts-library/uma
|
||||
sd-concepts-library/uma-clean-object
|
||||
sd-concepts-library/uma-meme
|
||||
sd-concepts-library/uma-meme-style
|
||||
sd-concepts-library/uma-style-classic
|
||||
sd-concepts-library/unfinished-building
|
||||
sd-concepts-library/urivoldemort
|
||||
sd-concepts-library/uzumaki
|
||||
sd-concepts-library/valorantstyle
|
||||
sd-concepts-library/vb-mox
|
||||
sd-concepts-library/vcr-classique
|
||||
sd-concepts-library/venice
|
||||
sd-concepts-library/vespertine
|
||||
sd-concepts-library/victor-narm
|
||||
sd-concepts-library/vietstoneking
|
||||
sd-concepts-library/vivien-reid
|
||||
sd-concepts-library/vkuoo1
|
||||
sd-concepts-library/vraska
|
||||
sd-concepts-library/w3u
|
||||
sd-concepts-library/walter-wick-photography
|
||||
sd-concepts-library/warhammer-40k-drawing-style
|
||||
sd-concepts-library/waterfallshadow
|
||||
sd-concepts-library/wayne-reynolds-character
|
||||
sd-concepts-library/wedding
|
||||
sd-concepts-library/wedding-HandPainted
|
||||
sd-concepts-library/werebloops
|
||||
sd-concepts-library/wheatland
|
||||
sd-concepts-library/wheatland-arknight
|
||||
sd-concepts-library/wheelchair
|
||||
sd-concepts-library/wildkat
|
||||
sd-concepts-library/willy-hd
|
||||
sd-concepts-library/wire-angels
|
||||
sd-concepts-library/wish-artist-stile
|
||||
sd-concepts-library/wlop-style
|
||||
sd-concepts-library/wojak
|
||||
sd-concepts-library/wojaks-now
|
||||
sd-concepts-library/wojaks-now-now-now
|
||||
sd-concepts-library/xatu
|
||||
sd-concepts-library/xatu2
|
||||
sd-concepts-library/xbh
|
||||
sd-concepts-library/xi
|
||||
sd-concepts-library/xidiversity
|
||||
sd-concepts-library/xioboma
|
||||
sd-concepts-library/xuna
|
||||
sd-concepts-library/xyz
|
||||
sd-concepts-library/yb-anime
|
||||
sd-concepts-library/yerba-mate
|
||||
sd-concepts-library/yesdelete
|
||||
sd-concepts-library/yf21
|
||||
sd-concepts-library/yilanov2
|
||||
sd-concepts-library/yinit
|
||||
sd-concepts-library/yoji-shinkawa-style
|
||||
sd-concepts-library/yolandi-visser
|
||||
sd-concepts-library/yoshi
|
||||
sd-concepts-library/youpi2
|
||||
sd-concepts-library/youtooz-candy
|
||||
sd-concepts-library/yuji-himukai-style
|
||||
sd-concepts-library/zaney
|
||||
sd-concepts-library/zaneypixelz
|
||||
sd-concepts-library/zdenek-art
|
||||
sd-concepts-library/zero
|
||||
sd-concepts-library/zero-bottle
|
||||
sd-concepts-library/zero-suit-samus
|
||||
sd-concepts-library/zillertal-can
|
||||
sd-concepts-library/zizigooloo
|
||||
sd-concepts-library/zk
|
||||
sd-concepts-library/zoroark
|
|
@ -0,0 +1,110 @@
|
|||
model:
|
||||
base_learning_rate: 5.0e-03
|
||||
target: ldm.models.diffusion.ddpm.LatentDiffusion
|
||||
params:
|
||||
linear_start: 0.00085
|
||||
linear_end: 0.0120
|
||||
num_timesteps_cond: 1
|
||||
log_every_t: 200
|
||||
timesteps: 1000
|
||||
first_stage_key: image
|
||||
cond_stage_key: caption
|
||||
image_size: 64
|
||||
channels: 4
|
||||
cond_stage_trainable: true # Note: different from the one we trained before
|
||||
conditioning_key: crossattn
|
||||
monitor: val/loss_simple_ema
|
||||
scale_factor: 0.18215
|
||||
use_ema: False
|
||||
embedding_reg_weight: 0.0
|
||||
|
||||
personalization_config:
|
||||
target: ldm.modules.embedding_manager.EmbeddingManager
|
||||
params:
|
||||
placeholder_strings: ["*"]
|
||||
initializer_words: ["sculpture"]
|
||||
per_image_tokens: false
|
||||
num_vectors_per_token: 1
|
||||
progressive_words: False
|
||||
|
||||
unet_config:
|
||||
target: ldm.modules.diffusionmodules.openaimodel.UNetModel
|
||||
params:
|
||||
image_size: 32 # unused
|
||||
in_channels: 4
|
||||
out_channels: 4
|
||||
model_channels: 320
|
||||
attention_resolutions: [ 4, 2, 1 ]
|
||||
num_res_blocks: 2
|
||||
channel_mult: [ 1, 2, 4, 4 ]
|
||||
num_heads: 8
|
||||
use_spatial_transformer: True
|
||||
transformer_depth: 1
|
||||
context_dim: 768
|
||||
use_checkpoint: True
|
||||
legacy: False
|
||||
|
||||
first_stage_config:
|
||||
target: ldm.models.autoencoder.AutoencoderKL
|
||||
params:
|
||||
embed_dim: 4
|
||||
monitor: val/rec_loss
|
||||
ddconfig:
|
||||
double_z: true
|
||||
z_channels: 4
|
||||
resolution: 256
|
||||
in_channels: 3
|
||||
out_ch: 3
|
||||
ch: 128
|
||||
ch_mult:
|
||||
- 1
|
||||
- 2
|
||||
- 4
|
||||
- 4
|
||||
num_res_blocks: 2
|
||||
attn_resolutions: []
|
||||
dropout: 0.0
|
||||
lossconfig:
|
||||
target: torch.nn.Identity
|
||||
|
||||
cond_stage_config:
|
||||
target: ldm.modules.encoders.modules.FrozenCLIPEmbedder
|
||||
|
||||
data:
|
||||
target: main.DataModuleFromConfig
|
||||
params:
|
||||
batch_size: 1
|
||||
num_workers: 2
|
||||
wrap: false
|
||||
train:
|
||||
target: ldm.data.personalized.PersonalizedBase
|
||||
params:
|
||||
size: 512
|
||||
set: train
|
||||
per_image_tokens: false
|
||||
repeats: 100
|
||||
validation:
|
||||
target: ldm.data.personalized.PersonalizedBase
|
||||
params:
|
||||
size: 512
|
||||
set: val
|
||||
per_image_tokens: false
|
||||
repeats: 10
|
||||
|
||||
lightning:
|
||||
modelcheckpoint:
|
||||
params:
|
||||
every_n_train_steps: 500
|
||||
callbacks:
|
||||
image_logger:
|
||||
target: main.ImageLogger
|
||||
params:
|
||||
batch_frequency: 500
|
||||
max_images: 8
|
||||
increase_log_steps: False
|
||||
|
||||
trainer:
|
||||
benchmark: True
|
||||
max_steps: 4000000
|
||||
# max_steps: 4000
|
||||
|
|
@ -0,0 +1,103 @@
|
|||
model:
|
||||
base_learning_rate: 5.0e-03
|
||||
target: ldm.models.diffusion.ddpm.LatentDiffusion
|
||||
params:
|
||||
linear_start: 0.00085
|
||||
linear_end: 0.0120
|
||||
num_timesteps_cond: 1
|
||||
log_every_t: 200
|
||||
timesteps: 1000
|
||||
first_stage_key: image
|
||||
cond_stage_key: caption
|
||||
image_size: 64
|
||||
channels: 4
|
||||
cond_stage_trainable: true # Note: different from the one we trained before
|
||||
conditioning_key: crossattn
|
||||
monitor: val/loss_simple_ema
|
||||
scale_factor: 0.18215
|
||||
use_ema: False
|
||||
embedding_reg_weight: 0.0
|
||||
|
||||
personalization_config:
|
||||
target: ldm.modules.embedding_manager.EmbeddingManager
|
||||
params:
|
||||
placeholder_strings: ["*"]
|
||||
initializer_words: ["painting"]
|
||||
per_image_tokens: false
|
||||
num_vectors_per_token: 1
|
||||
|
||||
unet_config:
|
||||
target: ldm.modules.diffusionmodules.openaimodel.UNetModel
|
||||
params:
|
||||
image_size: 32 # unused
|
||||
in_channels: 4
|
||||
out_channels: 4
|
||||
model_channels: 320
|
||||
attention_resolutions: [ 4, 2, 1 ]
|
||||
num_res_blocks: 2
|
||||
channel_mult: [ 1, 2, 4, 4 ]
|
||||
num_heads: 8
|
||||
use_spatial_transformer: True
|
||||
transformer_depth: 1
|
||||
context_dim: 768
|
||||
use_checkpoint: True
|
||||
legacy: False
|
||||
|
||||
first_stage_config:
|
||||
target: ldm.models.autoencoder.AutoencoderKL
|
||||
params:
|
||||
embed_dim: 4
|
||||
monitor: val/rec_loss
|
||||
ddconfig:
|
||||
double_z: true
|
||||
z_channels: 4
|
||||
resolution: 256
|
||||
in_channels: 3
|
||||
out_ch: 3
|
||||
ch: 128
|
||||
ch_mult:
|
||||
- 1
|
||||
- 2
|
||||
- 4
|
||||
- 4
|
||||
num_res_blocks: 2
|
||||
attn_resolutions: []
|
||||
dropout: 0.0
|
||||
lossconfig:
|
||||
target: torch.nn.Identity
|
||||
|
||||
cond_stage_config:
|
||||
target: ldm.modules.encoders.modules.FrozenCLIPEmbedder
|
||||
|
||||
data:
|
||||
target: main.DataModuleFromConfig
|
||||
params:
|
||||
batch_size: 2
|
||||
num_workers: 16
|
||||
wrap: false
|
||||
train:
|
||||
target: ldm.data.personalized_style.PersonalizedBase
|
||||
params:
|
||||
size: 512
|
||||
set: train
|
||||
per_image_tokens: false
|
||||
repeats: 100
|
||||
validation:
|
||||
target: ldm.data.personalized_style.PersonalizedBase
|
||||
params:
|
||||
size: 512
|
||||
set: val
|
||||
per_image_tokens: false
|
||||
repeats: 10
|
||||
|
||||
lightning:
|
||||
callbacks:
|
||||
image_logger:
|
||||
target: main.ImageLogger
|
||||
params:
|
||||
batch_frequency: 500
|
||||
max_images: 8
|
||||
increase_log_steps: False
|
||||
|
||||
trainer:
|
||||
benchmark: True
|
|
@ -0,0 +1,79 @@
|
|||
model:
|
||||
base_learning_rate: 1.0e-04
|
||||
target: ldm.models.diffusion.ddpm.LatentDiffusion
|
||||
params:
|
||||
linear_start: 0.00085
|
||||
linear_end: 0.0120
|
||||
num_timesteps_cond: 1
|
||||
log_every_t: 200
|
||||
timesteps: 1000
|
||||
first_stage_key: "jpg"
|
||||
cond_stage_key: "txt"
|
||||
image_size: 64
|
||||
channels: 4
|
||||
cond_stage_trainable: false # Note: different from the one we trained before
|
||||
conditioning_key: crossattn
|
||||
monitor: val/loss_simple_ema
|
||||
scale_factor: 0.18215
|
||||
use_ema: False
|
||||
|
||||
scheduler_config: # 10000 warmup steps
|
||||
target: ldm.lr_scheduler.LambdaLinearScheduler
|
||||
params:
|
||||
warm_up_steps: [ 10000 ]
|
||||
cycle_lengths: [ 10000000000000 ] # incredibly large number to prevent corner cases
|
||||
f_start: [ 1.e-6 ]
|
||||
f_max: [ 1. ]
|
||||
f_min: [ 1. ]
|
||||
|
||||
personalization_config:
|
||||
target: ldm.modules.embedding_manager.EmbeddingManager
|
||||
params:
|
||||
placeholder_strings: ["*"]
|
||||
initializer_words: ['sculpture']
|
||||
per_image_tokens: false
|
||||
num_vectors_per_token: 1
|
||||
progressive_words: False
|
||||
|
||||
unet_config:
|
||||
target: ldm.modules.diffusionmodules.openaimodel.UNetModel
|
||||
params:
|
||||
image_size: 32 # unused
|
||||
in_channels: 4
|
||||
out_channels: 4
|
||||
model_channels: 320
|
||||
attention_resolutions: [ 4, 2, 1 ]
|
||||
num_res_blocks: 2
|
||||
channel_mult: [ 1, 2, 4, 4 ]
|
||||
num_heads: 8
|
||||
use_spatial_transformer: True
|
||||
transformer_depth: 1
|
||||
context_dim: 768
|
||||
use_checkpoint: True
|
||||
legacy: False
|
||||
|
||||
first_stage_config:
|
||||
target: ldm.models.autoencoder.AutoencoderKL
|
||||
params:
|
||||
embed_dim: 4
|
||||
monitor: val/rec_loss
|
||||
ddconfig:
|
||||
double_z: true
|
||||
z_channels: 4
|
||||
resolution: 256
|
||||
in_channels: 3
|
||||
out_ch: 3
|
||||
ch: 128
|
||||
ch_mult:
|
||||
- 1
|
||||
- 2
|
||||
- 4
|
||||
- 4
|
||||
num_res_blocks: 2
|
||||
attn_resolutions: []
|
||||
dropout: 0.0
|
||||
lossconfig:
|
||||
target: torch.nn.Identity
|
||||
|
||||
cond_stage_config:
|
||||
target: ldm.modules.encoders.modules.WeightedFrozenCLIPEmbedder
|
|
@ -0,0 +1,79 @@
|
|||
model:
|
||||
base_learning_rate: 7.5e-05
|
||||
target: ldm.models.diffusion.ddpm.LatentInpaintDiffusion
|
||||
params:
|
||||
linear_start: 0.00085
|
||||
linear_end: 0.0120
|
||||
num_timesteps_cond: 1
|
||||
log_every_t: 200
|
||||
timesteps: 1000
|
||||
first_stage_key: "jpg"
|
||||
cond_stage_key: "txt"
|
||||
image_size: 64
|
||||
channels: 4
|
||||
cond_stage_trainable: false # Note: different from the one we trained before
|
||||
conditioning_key: hybrid # important
|
||||
monitor: val/loss_simple_ema
|
||||
scale_factor: 0.18215
|
||||
finetune_keys: null
|
||||
|
||||
scheduler_config: # 10000 warmup steps
|
||||
target: ldm.lr_scheduler.LambdaLinearScheduler
|
||||
params:
|
||||
warm_up_steps: [ 2500 ] # NOTE for resuming. use 10000 if starting from scratch
|
||||
cycle_lengths: [ 10000000000000 ] # incredibly large number to prevent corner cases
|
||||
f_start: [ 1.e-6 ]
|
||||
f_max: [ 1. ]
|
||||
f_min: [ 1. ]
|
||||
|
||||
personalization_config:
|
||||
target: ldm.modules.embedding_manager.EmbeddingManager
|
||||
params:
|
||||
placeholder_strings: ["*"]
|
||||
initializer_words: ['sculpture']
|
||||
per_image_tokens: false
|
||||
num_vectors_per_token: 8
|
||||
progressive_words: False
|
||||
|
||||
unet_config:
|
||||
target: ldm.modules.diffusionmodules.openaimodel.UNetModel
|
||||
params:
|
||||
image_size: 32 # unused
|
||||
in_channels: 9 # 4 data + 4 downscaled image + 1 mask
|
||||
out_channels: 4
|
||||
model_channels: 320
|
||||
attention_resolutions: [ 4, 2, 1 ]
|
||||
num_res_blocks: 2
|
||||
channel_mult: [ 1, 2, 4, 4 ]
|
||||
num_heads: 8
|
||||
use_spatial_transformer: True
|
||||
transformer_depth: 1
|
||||
context_dim: 768
|
||||
use_checkpoint: True
|
||||
legacy: False
|
||||
|
||||
first_stage_config:
|
||||
target: ldm.models.autoencoder.AutoencoderKL
|
||||
params:
|
||||
embed_dim: 4
|
||||
monitor: val/rec_loss
|
||||
ddconfig:
|
||||
double_z: true
|
||||
z_channels: 4
|
||||
resolution: 256
|
||||
in_channels: 3
|
||||
out_ch: 3
|
||||
ch: 128
|
||||
ch_mult:
|
||||
- 1
|
||||
- 2
|
||||
- 4
|
||||
- 4
|
||||
num_res_blocks: 2
|
||||
attn_resolutions: []
|
||||
dropout: 0.0
|
||||
lossconfig:
|
||||
target: torch.nn.Identity
|
||||
|
||||
cond_stage_config:
|
||||
target: ldm.modules.encoders.modules.WeightedFrozenCLIPEmbedder
|
|
@ -0,0 +1,110 @@
|
|||
model:
|
||||
base_learning_rate: 5.0e-03
|
||||
target: ldm.models.diffusion.ddpm.LatentDiffusion
|
||||
params:
|
||||
linear_start: 0.00085
|
||||
linear_end: 0.0120
|
||||
num_timesteps_cond: 1
|
||||
log_every_t: 200
|
||||
timesteps: 1000
|
||||
first_stage_key: image
|
||||
cond_stage_key: caption
|
||||
image_size: 64
|
||||
channels: 4
|
||||
cond_stage_trainable: true # Note: different from the one we trained before
|
||||
conditioning_key: crossattn
|
||||
monitor: val/loss_simple_ema
|
||||
scale_factor: 0.18215
|
||||
use_ema: False
|
||||
embedding_reg_weight: 0.0
|
||||
|
||||
personalization_config:
|
||||
target: ldm.modules.embedding_manager.EmbeddingManager
|
||||
params:
|
||||
placeholder_strings: ["*"]
|
||||
initializer_words: ['sculpture']
|
||||
per_image_tokens: false
|
||||
num_vectors_per_token: 6
|
||||
progressive_words: False
|
||||
|
||||
unet_config:
|
||||
target: ldm.modules.diffusionmodules.openaimodel.UNetModel
|
||||
params:
|
||||
image_size: 32 # unused
|
||||
in_channels: 4
|
||||
out_channels: 4
|
||||
model_channels: 320
|
||||
attention_resolutions: [ 4, 2, 1 ]
|
||||
num_res_blocks: 2
|
||||
channel_mult: [ 1, 2, 4, 4 ]
|
||||
num_heads: 8
|
||||
use_spatial_transformer: True
|
||||
transformer_depth: 1
|
||||
context_dim: 768
|
||||
use_checkpoint: True
|
||||
legacy: False
|
||||
|
||||
first_stage_config:
|
||||
target: ldm.models.autoencoder.AutoencoderKL
|
||||
params:
|
||||
embed_dim: 4
|
||||
monitor: val/rec_loss
|
||||
ddconfig:
|
||||
double_z: true
|
||||
z_channels: 4
|
||||
resolution: 256
|
||||
in_channels: 3
|
||||
out_ch: 3
|
||||
ch: 128
|
||||
ch_mult:
|
||||
- 1
|
||||
- 2
|
||||
- 4
|
||||
- 4
|
||||
num_res_blocks: 2
|
||||
attn_resolutions: []
|
||||
dropout: 0.0
|
||||
lossconfig:
|
||||
target: torch.nn.Identity
|
||||
|
||||
cond_stage_config:
|
||||
target: ldm.modules.encoders.modules.FrozenCLIPEmbedder
|
||||
|
||||
data:
|
||||
target: main.DataModuleFromConfig
|
||||
params:
|
||||
batch_size: 1
|
||||
num_workers: 2
|
||||
wrap: false
|
||||
train:
|
||||
target: ldm.data.personalized.PersonalizedBase
|
||||
params:
|
||||
size: 512
|
||||
set: train
|
||||
per_image_tokens: false
|
||||
repeats: 100
|
||||
validation:
|
||||
target: ldm.data.personalized.PersonalizedBase
|
||||
params:
|
||||
size: 512
|
||||
set: val
|
||||
per_image_tokens: false
|
||||
repeats: 10
|
||||
|
||||
lightning:
|
||||
modelcheckpoint:
|
||||
params:
|
||||
every_n_train_steps: 500
|
||||
callbacks:
|
||||
image_logger:
|
||||
target: main.ImageLogger
|
||||
params:
|
||||
batch_frequency: 500
|
||||
max_images: 5
|
||||
increase_log_steps: False
|
||||
|
||||
trainer:
|
||||
benchmark: False
|
||||
max_steps: 6200
|
||||
# max_steps: 4000
|
||||
|
|
@ -0,0 +1,70 @@
|
|||
@echo off
|
||||
setlocal EnableExtensions EnableDelayedExpansion
|
||||
|
||||
PUSHD "%~dp0"
|
||||
|
||||
set INVOKE_AI_VERSION=latest
|
||||
set arg=%1
|
||||
if "%arg%" neq "" (
|
||||
if "%arg:~0,2%" equ "/?" (
|
||||
echo Usage: update.bat ^<release name or branch^>
|
||||
echo Updates InvokeAI to use the indicated version of the code base.
|
||||
echo Find the version or branch for the release you want, and pass it as the argument.
|
||||
echo For example '.\update.bat v2.2.5' for release 2.2.5.
|
||||
echo '.\update.bat main' for the latest development version
|
||||
echo.
|
||||
echo If no argument provided then will install the most recent release, equivalent to
|
||||
echo '.\update.bat latest'
|
||||
exit /b
|
||||
) else (
|
||||
set INVOKE_AI_VERSION=%arg%
|
||||
)
|
||||
)
|
||||
|
||||
set INVOKE_AI_SRC="https://github.com/invoke-ai/InvokeAI/archive/!INVOKE_AI_VERSION!.zip"
|
||||
set INVOKE_AI_DEP=https://raw.githubusercontent.com/invoke-ai/InvokeAI/!INVOKE_AI_VERSION!/environments-and-requirements/requirements-base.txt
|
||||
|
||||
call curl -I "%INVOKE_AI_DEP%" -fs >.tmp.out
|
||||
if %errorlevel% neq 0 (
|
||||
echo '!INVOKE_AI_VERSION!' is not a known branch name or tag. Please check the version and try again.
|
||||
echo "Press any key to continue"
|
||||
pause
|
||||
exit /b
|
||||
)
|
||||
del .tmp.out
|
||||
|
||||
echo This script will update InvokeAI and all its dependencies to !INVOKE_AI_SRC!.
|
||||
echo If you do not want to do this, press control-C now!
|
||||
pause
|
||||
|
||||
call curl -L "%INVOKE_AI_DEP%" > environments-and-requirements/requirements-base.txt
|
||||
|
||||
call .venv\Scripts\activate.bat
|
||||
call .venv\Scripts\python -mpip install -r requirements.txt
|
||||
if %errorlevel% neq 0 (
|
||||
echo Installation of requirements failed. See https://invoke-ai.github.io/InvokeAI/installation/INSTALL_AUTOMATED/#troubleshooting for suggestions.
|
||||
pause
|
||||
exit /b
|
||||
)
|
||||
|
||||
call .venv\Scripts\python -mpip install !INVOKE_AI_SRC!
|
||||
if %errorlevel% neq 0 (
|
||||
echo Installation of InvokeAI failed. See https://invoke-ai.github.io/InvokeAI/installation/INSTALL_AUTOMATED/#troubleshooting for suggestions.
|
||||
pause
|
||||
exit /b
|
||||
)
|
||||
|
||||
@rem call .venv\Scripts\python .venv\Scripts\configure_invokeai.py --root=.
|
||||
|
||||
@rem if %errorlevel% neq 0 (
|
||||
@rem echo Configuration InvokeAI failed. See https://invoke-ai.github.io/InvokeAI/installation/INSTALL_AUTOMATED/#troubleshooting for suggestions.
|
||||
@rem pause
|
||||
@rem exit /b
|
||||
@rem )
|
||||
|
||||
echo InvokeAI has been updated to '%INVOKE_AI_VERSION%'
|
||||
|
||||
echo "Press any key to continue"
|
||||
pause
|
||||
endlocal
|
||||
|
|
@ -0,0 +1,59 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
set -eu
|
||||
|
||||
if [ $# -ge 1 ] && [ "${1:0:2}" == "-h" ]; then
|
||||
echo "Usage: update.sh <release>"
|
||||
echo "Updates InvokeAI to use the indicated version of the code base."
|
||||
echo "Find the version or branch for the release you want, and pass it as the argument."
|
||||
echo "For example: update.sh v2.2.5 for release 2.2.5."
|
||||
echo " update.sh main for the current development version."
|
||||
echo ""
|
||||
echo "If no argument provided then will install the version tagged with 'latest', equivalent to"
|
||||
echo "update.sh latest"
|
||||
exit -1
|
||||
fi
|
||||
|
||||
INVOKE_AI_VERSION=${1:-latest}
|
||||
|
||||
INVOKE_AI_SRC="https://github.com/invoke-ai/InvokeAI/archive/$INVOKE_AI_VERSION.zip"
|
||||
INVOKE_AI_DEP=https://raw.githubusercontent.com/invoke-ai/InvokeAI/$INVOKE_AI_VERSION/environments-and-requirements/requirements-base.txt
|
||||
|
||||
# ensure we're in the correct folder in case user's CWD is somewhere else
|
||||
scriptdir=$(dirname "$0")
|
||||
cd "$scriptdir"
|
||||
|
||||
function _err_exit {
|
||||
if test "$1" -ne 0
|
||||
then
|
||||
echo "Something went wrong while installing InvokeAI and/or its requirements."
|
||||
echo "Update cannot continue. Please report this error to https://github.com/invoke-ai/InvokeAI/issues"
|
||||
echo -e "Error code $1; Error caught was '$2'"
|
||||
read -p "Press any key to exit..."
|
||||
exit
|
||||
fi
|
||||
}
|
||||
|
||||
if ! curl -I "$INVOKE_AI_DEP" -fs >/dev/null; then
|
||||
echo \'$INVOKE_AI_VERSION\' is not a known branch name or tag. Please check the version and try again.
|
||||
exit
|
||||
fi
|
||||
|
||||
echo This script will update InvokeAI and all its dependencies to version \'$INVOKE_AI_VERSION\'.
|
||||
echo If you do not want to do this, press control-C now!
|
||||
read -p "Press any key to continue, or CTRL-C to exit..."
|
||||
|
||||
curl -L "$INVOKE_AI_DEP" > environments-and-requirements/requirements-base.txt
|
||||
|
||||
. .venv/bin/activate
|
||||
|
||||
./.venv/bin/python -mpip install -r requirements.txt
|
||||
_err_exit $? "The pip program failed to install InvokeAI's requirements."
|
||||
|
||||
./.venv/bin/python -mpip install $INVOKE_AI_SRC
|
||||
_err_exit $? "The pip program failed to install InvokeAI."
|
||||
|
||||
echo InvokeAI updated to \'$INVOKE_AI_VERSION\'
|
||||
|
||||
# ./.venv/bin/python .venv/bin/configure_invokeai.py --root .
|
||||
# _err_exit $? "The configure script failed to run successfully."
|
|
@ -0,0 +1,18 @@
|
|||
** Model Installation Successful **
|
||||
|
||||
You're all set!
|
||||
|
||||
If you installed using one of the automated installation scripts,
|
||||
execute 'invoke.sh' (Linux/macOS) or 'invoke.bat' (Windows) to
|
||||
start InvokeAI.
|
||||
|
||||
If you installed manually, activate the 'invokeai' environment
|
||||
(e.g. 'conda activate invokeai'), then run one of the following
|
||||
commands to start InvokeAI.
|
||||
|
||||
Web UI:
|
||||
python scripts/invoke.py --web # (connect to http://localhost:9090)
|
||||
Command-line interface:
|
||||
python scripts/invoke.py
|
||||
|
||||
Have fun!
|
|
@ -0,0 +1,5 @@
|
|||
#!/bin/sh
|
||||
|
||||
echo
|
||||
echo "Run: cd /opt/invokeai/InvokeAI-Installer/ && ./install.sh"
|
||||
echo
|
36
Makefile
36
Makefile
|
@ -1,11 +1,31 @@
|
|||
.PHONY: cargo-ui
|
||||
|
||||
all:
|
||||
echo "download the current mattermost tarball"
|
||||
echo then build the package using the files in .debian/
|
||||
wit mirrors
|
||||
|
||||
cargo-ui:
|
||||
cd cargo-ui && make
|
||||
make all
|
||||
|
||||
help:
|
||||
@echo
|
||||
@echo "# this are just simple shortcuts to package up files on a system once you have it compiled and installed"
|
||||
@echo "cd <projectName>; make all"
|
||||
@echo
|
||||
|
||||
#
|
||||
# Just for reference, you can make a debian package using 'ar' from the command line
|
||||
#
|
||||
# A .deb file is just output from 'ar rcs'
|
||||
#
|
||||
tar-ar:
|
||||
cd DEBIAN && tar --ignore-failed-read -cvJf ../control.tar.xz .
|
||||
cd files && tar -cvJf ../data.tar.xz .
|
||||
ar rcs ${BASENAME}_${VERSION}_amd64.deb debian-binary control.tar.xz data.tar.xz
|
||||
dpkg-deb --info ${BASENAME}_${VERSION}_amd64.deb
|
||||
|
||||
clean:
|
||||
rm -rf .debian/files/opt/
|
||||
|
||||
download:
|
||||
wget -c https://releases.mattermost.com/7.3.0/mattermost-7.3.0-linux-amd64.tar.gz
|
||||
mkdir -p .debian/files/opt/
|
||||
cd .debian/files/opt/ && tar xfz ../../../mattermost-7.3.0-linux-amd64.tar.gz
|
||||
rm -rf files/
|
||||
rm -f *.deb
|
||||
rm -f *.tar.xz data.tar.xz
|
||||
rm -rf */DEBIAN/
|
||||
|
|
37
README.md
37
README.md
|
@ -1,3 +1,36 @@
|
|||
Needs to make a user and a few other things from
|
||||
# Info
|
||||
|
||||
https://docs.mattermost.com/install/install-tar.html
|
||||
Packages up various stuff using the bare minimum of interaction to make a .deb package.
|
||||
|
||||
.deb packages are 'ar' files. You can create them with 'ar', but the recommended way
|
||||
seems to be to use dpkg-deb.
|
||||
|
||||
The packages themselves you can browse and/or download here:
|
||||
|
||||
http://mirrors.wit.org/wit/pool/main/
|
||||
|
||||
# Makefile
|
||||
```
|
||||
help:
|
||||
@echo
|
||||
@echo "# this are just simple shortcuts to package up files on a system once you have it compiled and installed"
|
||||
@echo "cd <projectName>; make all"
|
||||
@echo
|
||||
|
||||
#
|
||||
# Just for reference, you can make a debian package using 'ar' from the command line
|
||||
#
|
||||
# A .deb file is just output from 'ar rcs'
|
||||
#
|
||||
tar-ar:
|
||||
cd DEBIAN && tar --ignore-failed-read -cvJf ../control.tar.xz .
|
||||
cd files && tar -cvJf ../data.tar.xz .
|
||||
ar rcs ${BASENAME}_${VERSION}_amd64.deb debian-binary control.tar.xz data.tar.xz
|
||||
dpkg-deb --info ${BASENAME}_${VERSION}_amd64.deb
|
||||
|
||||
clean:
|
||||
rm -rf files/
|
||||
rm -f *.deb
|
||||
rm -f *.tar.xz data.tar.xz
|
||||
rm -rf */DEBIAN/
|
||||
```
|
||||
|
|
|
@ -0,0 +1,66 @@
|
|||
.PHONY: control
|
||||
|
||||
TARBALL=/home/android-studio-2022.1.1.19-linux.tar.gz
|
||||
VERSION=2022
|
||||
MINOR=1.1.19
|
||||
BASENAME=android-studio
|
||||
|
||||
help:
|
||||
@echo
|
||||
@echo "make all # to attempt to download, extract and build the .deb package using dpkg"
|
||||
@echo
|
||||
|
||||
all: download clean extract DEBIAN build
|
||||
|
||||
# uses 'ar' to make a .deb file
|
||||
raw: download clean extract DEBIAN tar-ar
|
||||
|
||||
clean:
|
||||
rm -rf ../files
|
||||
rm -f ../*.deb
|
||||
rm -f ../*.tar.xz data.tar.xz
|
||||
rm -rf DEBIAN
|
||||
|
||||
download:
|
||||
@echo
|
||||
@echo CHECK FOR NEW VERSION AT: https://developer.android.com/studio
|
||||
@echo CHECK FOR NEW VERSION AT: https://developer.android.com/studio
|
||||
@echo CHECK FOR NEW VERSION AT: https://developer.android.com/studio
|
||||
@echo
|
||||
|
||||
extract:
|
||||
mkdir -p ../files/opt/
|
||||
cd ../files/opt/ && tar xfz ${TARBALL}
|
||||
|
||||
# makes the DEBIAN/ directory
|
||||
DEBIAN:
|
||||
mkdir -p DEBIAN
|
||||
make md5sum
|
||||
make control
|
||||
cp preinst DEBIAN
|
||||
cp postinst DEBIAN
|
||||
|
||||
control:
|
||||
mkdir -p DEBIAN
|
||||
cp control DEBIAN/
|
||||
echo Version: ${VERSION}.${MINOR} >>DEBIAN/control
|
||||
|
||||
md5sum:
|
||||
cd files/ && find -type f -exec md5sum '{}' \; |sort -k2 >../DEBIAN/md5sums
|
||||
|
||||
build:
|
||||
mv DEBIAN ../files/
|
||||
cd .. && dpkg-deb --build files ${BASENAME}_${VERSION}.${MINOR}_amd64.deb
|
||||
cd .. && dpkg-deb --info ${BASENAME}_${VERSION}.${MINOR}_amd64.deb
|
||||
|
||||
# how to make a debian package "raw" just using tar and ar
|
||||
#
|
||||
# READ THIS AGAIN:
|
||||
#
|
||||
# A .deb file is just output from 'ar rcs'
|
||||
#
|
||||
tar-ar: control
|
||||
cd DEBIAN && tar --ignore-failed-read -cvJf ../control.tar.xz .
|
||||
cd files && tar -cvJf ../data.tar.xz .
|
||||
ar rcs ${BASENAME}_${VERSION}.${MINOR}_amd64.deb debian-binary control.tar.xz data.tar.xz
|
||||
dpkg-deb --info ${BASENAME}_${VERSION}.${MINOR}_amd64.deb
|
|
@ -0,0 +1,14 @@
|
|||
###############################
|
||||
|
||||
Turn everything in files/ into a .deb debian package
|
||||
|
||||
###############################
|
||||
|
||||
|
||||
Needs to make a user and a few other things from
|
||||
|
||||
https://docs.mattermost.com/install/install-tar.html
|
||||
|
||||
also note debian packaging policy:
|
||||
|
||||
https://salsa.debian.org/dbnpolicy/policy
|
|
@ -0,0 +1,14 @@
|
|||
Package: android-studio
|
||||
Source: android-studio
|
||||
Architecture: amd64
|
||||
Maintainer: Jeff Carr <jcarr@wit.com>
|
||||
Installed-Size: 5883
|
||||
Section: development
|
||||
Priority: optional
|
||||
Homepage: https://developer.android.com/studio
|
||||
Description: official integrated development environment for Google's Android operating system
|
||||
Raw tarball from upstream.
|
||||
.
|
||||
Files moved to be stored in /opt/android-studio
|
||||
.
|
||||
This packaging is simple. It is just the tarball.
|
|
@ -0,0 +1 @@
|
|||
#!/bin/sh
|
|
@ -0,0 +1,3 @@
|
|||
#!/bin/sh -x
|
||||
|
||||
# Is there something that should be done here?
|
|
@ -0,0 +1,44 @@
|
|||
VERSION=20230129
|
||||
BASENAME=bazel-google
|
||||
|
||||
help:
|
||||
@echo
|
||||
@echo "make all # to attempt to download, extract and build the .deb package using dpkg"
|
||||
@echo
|
||||
|
||||
all: clean extract DEBIAN build
|
||||
|
||||
update-keyring:
|
||||
curl -fsSL https://bazel.build/bazel-release.pub.gpg | gpg --dearmor >bazel-archive-keyring.gpg
|
||||
|
||||
clean:
|
||||
rm -rf ../files
|
||||
rm -f ../*.deb
|
||||
rm -f ../*.tar.xz data.tar.xz
|
||||
rm -rf DEBIAN
|
||||
|
||||
extract:
|
||||
mkdir -p ../files/usr/share/keyrings
|
||||
cp bazel-archive-keyring.gpg ../files/usr/share/keyrings/
|
||||
mkdir -p ../files/etc/apt/sources.list.d
|
||||
cp bazel.list ../files/etc/apt/sources.list.d/
|
||||
|
||||
# makes the DEBIAN/ directory
|
||||
DEBIAN:
|
||||
mkdir -p DEBIAN
|
||||
|
||||
# make the md5sum file
|
||||
cd ../files/ && find -type f -exec md5sum '{}' \; |sort -k2 >../md5sums
|
||||
mv ../md5sums DEBIAN/
|
||||
|
||||
# make the control there
|
||||
mkdir -p DEBIAN
|
||||
cp control DEBIAN/
|
||||
# echo Version: ${VERSION} >>DEBIAN/control
|
||||
|
||||
cp postinst DEBIAN
|
||||
|
||||
build:
|
||||
mv DEBIAN ../files/
|
||||
cd .. && dpkg-deb --build files ${BASENAME}_${VERSION}_amd64.deb
|
||||
cd .. && dpkg-deb --info ${BASENAME}_${VERSION}_amd64.deb
|
Binary file not shown.
|
@ -0,0 +1,5 @@
|
|||
# sudo apt install -y apt-transport-https curl gnupg
|
||||
# curl -fsSL https://bazel.build/bazel-release.pub.gpg | gpg --dearmor >bazel-archive-keyring.gpg
|
||||
# sudo mv bazel-archive-keyring.gpg /usr/share/keyrings
|
||||
|
||||
deb [arch=amd64 signed-by=/usr/share/keyrings/bazel-archive-keyring.gpg] https://storage.googleapis.com/bazel-apt stable jdk1.8
|
|
@ -0,0 +1 @@
|
|||
10
|
|
@ -0,0 +1,13 @@
|
|||
Source: bazel-google
|
||||
Build-Depends: golang
|
||||
Package: bazel-google
|
||||
Version: 20230129
|
||||
Maintainer: Jeff Carr <jcarr@wit.com>
|
||||
Architecture: amd64
|
||||
Depends: info
|
||||
Description: sets up the apt repository for bazel directly from google
|
||||
As of this build, bazel and tensorflow are under heavy development.
|
||||
For debian, at this time, I would not recommend trying to build this yourself
|
||||
but instead just use the google packages directly. Maybe someone has the time
|
||||
to attempt to rebuild this in the debian build infrastructure, but it's going
|
||||
to be very complicated and error prone.
|
|
@ -0,0 +1,7 @@
|
|||
#!/bin/sh
|
||||
|
||||
echo
|
||||
echo To install the default version of bazel needed for tensorflow:
|
||||
echo
|
||||
echo Run: apt install bazel-5.3.0
|
||||
echo
|
|
@ -0,0 +1,46 @@
|
|||
.PHONY: control
|
||||
|
||||
# ~/tmp/cargo/example/cargo-ui/cargo-ui
|
||||
|
||||
VERSION=20220510.1
|
||||
BASENAME=cargo-ui
|
||||
|
||||
all: clean extract DEBIAN build
|
||||
|
||||
help:
|
||||
@echo
|
||||
@echo "make all # to attempt to download, extract and build the .deb package using dpkg"
|
||||
@echo
|
||||
|
||||
source:
|
||||
git clone https://github.com/slint-ui/cargo-ui.git
|
||||
|
||||
clean:
|
||||
rm -rf ../files
|
||||
rm -f ../*.deb
|
||||
rm -f ../*.tar.xz data.tar.xz
|
||||
rm -rf DEBIAN
|
||||
|
||||
extract:
|
||||
mkdir -p ../files/usr/bin
|
||||
cp ~/tmp/cargo/example/cargo-ui/cargo-ui ../files/usr/bin
|
||||
|
||||
# makes the DEBIAN/ directory
|
||||
DEBIAN:
|
||||
mkdir -p DEBIAN
|
||||
|
||||
# make the md5sum file
|
||||
cd ../files/ && find -type f -exec md5sum '{}' \; |sort -k2 >../md5sums
|
||||
mv ../md5sums DEBIAN/
|
||||
|
||||
# make the control there
|
||||
mkdir -p DEBIAN
|
||||
cp control DEBIAN/
|
||||
echo Version: ${VERSION} >>DEBIAN/control
|
||||
|
||||
cp postinst DEBIAN
|
||||
|
||||
build:
|
||||
mv DEBIAN ../files/
|
||||
cd .. && dpkg-deb --build files ${BASENAME}_${VERSION}_amd64.deb
|
||||
cd .. && dpkg-deb --info ${BASENAME}_${VERSION}_amd64.deb
|
|
@ -0,0 +1 @@
|
|||
10
|
|
@ -0,0 +1,7 @@
|
|||
Source: cargo-ui
|
||||
Build-Depends: rust
|
||||
Package: cargo-ui
|
||||
Maintainer: Jeff Carr <jcarr@wit.com>
|
||||
Architecture: amd64
|
||||
Depends:
|
||||
Description: a rust project to make a GUI for cargo, built using Slint:
|
|
@ -0,0 +1,4 @@
|
|||
#!/bin/sh -x
|
||||
|
||||
systemctl daemon-reload
|
||||
useradd -mrU -s /sbin/nologin -d /var/lib/maddy -c "maddy mail server" maddy
|
|
@ -0,0 +1,62 @@
|
|||
.PHONY: control
|
||||
|
||||
# debian files were taking from upstream:
|
||||
# git clone https://github.com/coredns/debian.git
|
||||
|
||||
# TARBALL=~/tmp/flutter-3.7.0-1.5.pre.tgz
|
||||
VERSION=1.10.1
|
||||
MINOR=7da2ceda
|
||||
BASENAME=coredns
|
||||
|
||||
help:
|
||||
@echo
|
||||
@echo "make all # to attempt to download, extract and build the .deb package using dpkg"
|
||||
@echo
|
||||
|
||||
all: download clean extract DEBIAN build
|
||||
|
||||
# uses 'ar' to make a .deb file
|
||||
raw: download clean extract DEBIAN tar-ar
|
||||
|
||||
clean:
|
||||
rm -rf ../files
|
||||
rm -f ../*.deb
|
||||
rm -f ../*.tar.xz data.tar.xz
|
||||
rm -rf DEBIAN
|
||||
|
||||
download:
|
||||
@echo
|
||||
@echo CHECK FOR NEW VERSION via 'git tags'
|
||||
@echo
|
||||
|
||||
extract:
|
||||
cp -a files ../
|
||||
mkdir -p ../files/usr/bin
|
||||
mkdir -p ../files/usr/share/man/man1/ ../files/usr/share/man/man5/ ../files/usr/share/man/man7/
|
||||
cp ~/go/src/github.com/coredns/coredns/coredns ../files/usr/bin
|
||||
cp ~/go/src/github.com/coredns/coredns/man/*.1 ../files/usr/share/man/man1/
|
||||
cp ~/go/src/github.com/coredns/coredns/man/*.5 ../files/usr/share/man/man5/
|
||||
cp ~/go/src/github.com/coredns/coredns/man/*.7 ../files/usr/share/man/man7/
|
||||
|
||||
# makes the DEBIAN/ directory
|
||||
DEBIAN:
|
||||
mkdir -p DEBIAN
|
||||
make md5sum
|
||||
make control
|
||||
cp postinst DEBIAN
|
||||
|
||||
control:
|
||||
mkdir -p DEBIAN
|
||||
cp control DEBIAN/
|
||||
echo Version: ${VERSION}.${MINOR} >>DEBIAN/control
|
||||
echo Build-Date: `stat -c %z ~/go/src/github.com/coredns/coredns/coredns` >>DEBIAN/control
|
||||
echo Source-Date: `cd ~/go/src/github.com/coredns/coredns/ && git log -1 --format=%cd` >>DEBIAN/control
|
||||
|
||||
md5sum:
|
||||
cd ../files/ && find -type f -exec md5sum '{}' \; |sort -k2 >../md5sums
|
||||
mv ../md5sums DEBIAN/
|
||||
|
||||
build:
|
||||
mv DEBIAN ../files/
|
||||
cd .. && dpkg-deb --build files ${BASENAME}_${VERSION}.${MINOR}_amd64.deb
|
||||
cd .. && dpkg-deb --info ${BASENAME}_${VERSION}.${MINOR}_amd64.deb
|
|
@ -0,0 +1,5 @@
|
|||
coredns (0-0) UNRELEASED; urgency=medium
|
||||
|
||||
* Package for Debian.
|
||||
|
||||
-- Miek Gieben <miek@coredns.io> Sat, 11 Nov 2017 09:52:00 +0000
|
|
@ -0,0 +1 @@
|
|||
10
|
|
@ -0,0 +1,8 @@
|
|||
Source: coredns
|
||||
Maintainer: Miek Gieben <miek@coredns.io>
|
||||
Build-Depends: debhelper (>= 9), ca-certificates, curl, lsb-release, jq
|
||||
|
||||
Package: coredns
|
||||
Architecture: any
|
||||
Description: A modern DNS server written in GO
|
||||
Depends: adduser
|
|
@ -0,0 +1,9 @@
|
|||
# Default Corefile, see https://coredns.io for more information.
|
||||
|
||||
# Answer every below the root, with the whoami plugin. Log all queries
|
||||
# and errors on standard output.
|
||||
. {
|
||||
whoami # coredns.io/plugins/whoami
|
||||
log # coredns.io/plugins/log
|
||||
errors # coredns.io/plugins/errors
|
||||
}
|
|
@ -0,0 +1,20 @@
|
|||
[Unit]
|
||||
Description=CoreDNS DNS server
|
||||
Documentation=https://coredns.io
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
PermissionsStartOnly=true
|
||||
LimitNOFILE=1048576
|
||||
LimitNPROC=512
|
||||
CapabilityBoundingSet=CAP_NET_BIND_SERVICE
|
||||
AmbientCapabilities=CAP_NET_BIND_SERVICE
|
||||
NoNewPrivileges=true
|
||||
User=coredns
|
||||
WorkingDirectory=~
|
||||
ExecStart=/usr/bin/coredns -conf=/etc/coredns/Corefile
|
||||
ExecReload=/bin/kill -SIGUSR1 $MAINPID
|
||||
Restart=on-failure
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
|
@ -0,0 +1,16 @@
|
|||
#!/bin/sh
|
||||
|
||||
set -e
|
||||
|
||||
case "$1" in
|
||||
configure)
|
||||
if ! getent passwd coredns > /dev/null; then
|
||||
adduser --system --disabled-password --disabled-login --home /var/lib/coredns \
|
||||
--quiet --force-badname --group coredns
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
#DEBHELPER#
|
||||
|
||||
exit 0
|
|
@ -0,0 +1,65 @@
|
|||
.PHONY: control
|
||||
|
||||
SOURCE=~/tmp/flutter
|
||||
VERSION=3.7.0
|
||||
MINOR=git
|
||||
BASENAME=flutter-source-build
|
||||
|
||||
help:
|
||||
@echo
|
||||
@echo "make all # to attempt to download, extract and build the .deb package using dpkg"
|
||||
@echo
|
||||
|
||||
all: download clean extract DEBIAN build
|
||||
|
||||
# uses 'ar' to make a .deb file
|
||||
raw: download clean extract DEBIAN tar-ar
|
||||
|
||||
clean:
|
||||
rm -rf ../files
|
||||
rm -f ../*.deb
|
||||
rm -f ../*.tar.xz data.tar.xz
|
||||
rm -rf DEBIAN
|
||||
|
||||
download:
|
||||
@echo
|
||||
@echo CHECK FOR NEW VERSION via 'git tags'
|
||||
@echo
|
||||
|
||||
extract:
|
||||
mkdir -p ../files/opt/
|
||||
cd ../files/opt/ && cp -a ${SOURCE} .
|
||||
|
||||
# makes the DEBIAN/ directory
|
||||
DEBIAN:
|
||||
mkdir -p DEBIAN
|
||||
make md5sum
|
||||
make control
|
||||
cp preinst DEBIAN
|
||||
cp postinst DEBIAN
|
||||
|
||||
control:
|
||||
mkdir -p DEBIAN
|
||||
cp control DEBIAN/
|
||||
echo Version: ${VERSION}.${MINOR} >>DEBIAN/control
|
||||
|
||||
md5sum:
|
||||
cd ../files/ && find -type f -exec md5sum '{}' \; |sort -k2 >../md5sums
|
||||
mv ../md5sums DEBIAN/
|
||||
|
||||
build:
|
||||
mv DEBIAN ../files/
|
||||
cd .. && dpkg-deb --build files ${BASENAME}_${VERSION}.${MINOR}_amd64.deb
|
||||
cd .. && dpkg-deb --info ${BASENAME}_${VERSION}.${MINOR}_amd64.deb
|
||||
|
||||
# how to make a debian package "raw" just using tar and ar
|
||||
#
|
||||
# READ THIS AGAIN:
|
||||
#
|
||||
# A .deb file is just output from 'ar rcs'
|
||||
#
|
||||
tar-ar: control
|
||||
cd DEBIAN && tar --ignore-failed-read -cvJf ../control.tar.xz .
|
||||
cd files && tar -cvJf ../data.tar.xz .
|
||||
ar rcs ${BASENAME}_${VERSION}.${MINOR}_amd64.deb debian-binary control.tar.xz data.tar.xz
|
||||
dpkg-deb --info ${BASENAME}_${VERSION}.${MINOR}_amd64.deb
|
|
@ -0,0 +1,14 @@
|
|||
Package: flutter-source-build
|
||||
Source: flutter-source-build
|
||||
Architecture: amd64
|
||||
Maintainer: Jeff Carr <jcarr@wit.com>
|
||||
Installed-Size: 5883
|
||||
Section: development
|
||||
Priority: optional
|
||||
Homepage: https://flutter.dev/
|
||||
Description: flutter-source-build
|
||||
Raw build from git repo
|
||||
.
|
||||
Files moved to be stored in /opt/flutter/
|
||||
.
|
||||
This packaging is simple. It is just the default build.
|
|
@ -0,0 +1 @@
|
|||
2.0
|
|
@ -0,0 +1 @@
|
|||
#!/bin/sh
|
|
@ -0,0 +1,3 @@
|
|||
#!/bin/sh -x
|
||||
|
||||
# Is there something that should be done here?
|
|
@ -0,0 +1,65 @@
|
|||
.PHONY: control
|
||||
|
||||
TARBALL=~/tmp/flutter-3.7.0-1.5.pre.tgz
|
||||
VERSION=3.7.0
|
||||
MINOR=1.5.pre
|
||||
BASENAME=flutter
|
||||
|
||||
help:
|
||||
@echo
|
||||
@echo "make all # to attempt to download, extract and build the .deb package using dpkg"
|
||||
@echo
|
||||
|
||||
all: download clean extract DEBIAN build
|
||||
|
||||
# uses 'ar' to make a .deb file
|
||||
raw: download clean extract DEBIAN tar-ar
|
||||
|
||||
clean:
|
||||
rm -rf ../files
|
||||
rm -f ../*.deb
|
||||
rm -f ../*.tar.xz data.tar.xz
|
||||
rm -rf DEBIAN
|
||||
|
||||
download:
|
||||
@echo
|
||||
@echo CHECK FOR NEW VERSION via 'git tags'
|
||||
@echo
|
||||
|
||||
extract:
|
||||
mkdir -p ../files/
|
||||
cd ../files/ && tar xfz ${TARBALL}
|
||||
|
||||
# makes the DEBIAN/ directory
|
||||
DEBIAN:
|
||||
mkdir -p DEBIAN
|
||||
make md5sum
|
||||
make control
|
||||
cp preinst DEBIAN
|
||||
cp postinst DEBIAN
|
||||
|
||||
control:
|
||||
mkdir -p DEBIAN
|
||||
cp control DEBIAN/
|
||||
echo Version: ${VERSION}.${MINOR} >>DEBIAN/control
|
||||
|
||||
md5sum:
|
||||
cd ../files/ && find -type f -exec md5sum '{}' \; |sort -k2 >../md5sums
|
||||
mv ../md5sums DEBIAN/
|
||||
|
||||
build:
|
||||
mv DEBIAN ../files/
|
||||
cd .. && dpkg-deb --build files ${BASENAME}_${VERSION}.${MINOR}_amd64.deb
|
||||
cd .. && dpkg-deb --info ${BASENAME}_${VERSION}.${MINOR}_amd64.deb
|
||||
|
||||
# how to make a debian package "raw" just using tar and ar
|
||||
#
|
||||
# READ THIS AGAIN:
|
||||
#
|
||||
# A .deb file is just output from 'ar rcs'
|
||||
#
|
||||
tar-ar: control
|
||||
cd DEBIAN && tar --ignore-failed-read -cvJf ../control.tar.xz .
|
||||
cd files && tar -cvJf ../data.tar.xz .
|
||||
ar rcs ${BASENAME}_${VERSION}.${MINOR}_amd64.deb debian-binary control.tar.xz data.tar.xz
|
||||
dpkg-deb --info ${BASENAME}_${VERSION}.${MINOR}_amd64.deb
|
|
@ -0,0 +1,12 @@
|
|||
Package: flutter
|
||||
Source: flutter
|
||||
Architecture: amd64
|
||||
Maintainer: Jeff Carr <jcarr@wit.com>
|
||||
Installed-Size: 5883
|
||||
Section: development
|
||||
Priority: optional
|
||||
Homepage: https://flutter.dev/
|
||||
Description: open-source UI software development kit created by Google
|
||||
Raw build from git repo
|
||||
Files moved to be stored in /opt/flutter/bin/
|
||||
This packaging is simple. It is just the default build.
|
|
@ -0,0 +1 @@
|
|||
2.0
|
|
@ -0,0 +1 @@
|
|||
#!/bin/sh
|
|
@ -0,0 +1,3 @@
|
|||
#!/bin/sh -x
|
||||
|
||||
# Is there something that should be done here?
|
|
@ -0,0 +1,55 @@
|
|||
.PHONY: control
|
||||
|
||||
# ~/go/src/github.com/foxcpp/maddy/build/maddy version
|
||||
|
||||
# VERSION=0.6.2+9a87d73
|
||||
GITVERSION=$(shell ~/go/src/github.com/foxcpp/maddy/build/maddy version |cut -f1 -d\ |head -n 1)
|
||||
VERSION=$(GITVERSION).3
|
||||
BASENAME=maddy
|
||||
|
||||
all: clean extract DEBIAN build
|
||||
|
||||
help:
|
||||
@echo
|
||||
@echo "make all # to attempt to download, extract and build the .deb package using dpkg"
|
||||
@echo
|
||||
|
||||
source:
|
||||
GO111MODULE="off" go get -v -u github.com/foxcpp/maddy
|
||||
echo
|
||||
echo "cd ~/go/src/github.com/foxcpp/maddy/ && ./build.sh"
|
||||
echo
|
||||
# https://github.com/foxcpp/maddy.git
|
||||
|
||||
clean:
|
||||
rm -rf ../files
|
||||
rm -f ../*.deb
|
||||
rm -f ../*.tar.xz data.tar.xz
|
||||
rm -rf DEBIAN
|
||||
|
||||
extract:
|
||||
cp ~/go/src/github.com/foxcpp/maddy/build/maddy.conf files/etc/maddy/orig-maddy.conf
|
||||
cp ~/go/src/github.com/foxcpp/maddy/build/systemd/maddy* files/lib/systemd/system/
|
||||
cp -a files ../
|
||||
mkdir -p ../files/usr/bin
|
||||
cp ~/go/src/github.com/foxcpp/maddy/build/maddy ../files/usr/bin
|
||||
|
||||
# makes the DEBIAN/ directory
|
||||
DEBIAN:
|
||||
mkdir -p DEBIAN
|
||||
|
||||
# make the md5sum file
|
||||
cd ../files/ && find -type f -exec md5sum '{}' \; |sort -k2 >../md5sums
|
||||
mv ../md5sums DEBIAN/
|
||||
|
||||
# make the control there
|
||||
mkdir -p DEBIAN
|
||||
cp control DEBIAN/
|
||||
echo Version: ${VERSION} >>DEBIAN/control
|
||||
|
||||
cp postinst DEBIAN
|
||||
|
||||
build:
|
||||
mv DEBIAN ../files/
|
||||
cd .. && dpkg-deb --build files ${BASENAME}_${VERSION}_amd64.deb
|
||||
cd .. && dpkg-deb --info ${BASENAME}_${VERSION}_amd64.deb
|
|
@ -0,0 +1 @@
|
|||
10
|
|
@ -0,0 +1,17 @@
|
|||
Source: maddy
|
||||
Build-Depends: golang
|
||||
Package: maddy
|
||||
Maintainer: Jeff Carr <jcarr@wit.com>
|
||||
Architecture: amd64
|
||||
Depends:
|
||||
Description: A modern mail server written in GO
|
||||
Maddy Mail Server implements all functionality required to run a e-mail server.
|
||||
It can send messages via SMTP (works as MTA), accept messages via SMTP (works as MX)
|
||||
and store messages while providing access to them via IMAP. In addition to
|
||||
that it implements auxiliary protocols that are mandatory to keep email reasonably
|
||||
secure (DKIM, SPF, DMARC, DANE, MTA-STS).
|
||||
.
|
||||
It replaces Postfix, Dovecot, OpenDKIM, OpenSPF, OpenDMARC and more
|
||||
with one daemon with uniform configuration and minimal maintenance cost.
|
||||
.
|
||||
Instructions: https://maddy.email/tutorials/setting-up/
|
|
@ -0,0 +1,17 @@
|
|||
.PHONY: certs
|
||||
|
||||
all:
|
||||
echo none of this works yet
|
||||
|
||||
# ?
|
||||
tls:
|
||||
setfacl -R -m u:maddy:rX /etc/ssl/mx1.example.org.crt /etc/ssl/mx1.example.org.key
|
||||
setfacl -R -m u:maddy:rX /etc/letsencrypt/{live,archive}
|
||||
|
||||
# git clone https://github.com/acmesh-official/acme.sh.git
|
||||
certs:
|
||||
mkdir -p certs/mx1.example.org
|
||||
./acme.sh/acme.sh --force --install-cert -d mx1.example.org \
|
||||
--key-file certs/mx1.example.org/privkey.pem \
|
||||
--fullchain-file certs/mx1.example.org/fullchain.pem
|
||||
|
|
@ -0,0 +1,181 @@
|
|||
## Maddy Mail Server - default configuration file (2022-06-18)
|
||||
# Suitable for small-scale deployments. Uses its own format for local users DB,
|
||||
# should be managed via maddy subcommands.
|
||||
#
|
||||
# See tutorials at https://maddy.email for guidance on typical
|
||||
# configuration changes.
|
||||
|
||||
# ----------------------------------------------------------------------------
|
||||
# Base variables
|
||||
|
||||
$(hostname) = example.org
|
||||
$(primary_domain) = example.org
|
||||
$(local_domains) = $(primary_domain)
|
||||
|
||||
tls file /etc/maddy/certs/$(hostname)/fullchain.pem /etc/maddy/certs/$(hostname)/privkey.pem
|
||||
|
||||
# ----------------------------------------------------------------------------
|
||||
# Local storage & authentication
|
||||
|
||||
# pass_table provides local hashed passwords storage for authentication of
|
||||
# users. It can be configured to use any "table" module, in default
|
||||
# configuration a table in SQLite DB is used.
|
||||
# Table can be replaced to use e.g. a file for passwords. Or pass_table module
|
||||
# can be replaced altogether to use some external source of credentials (e.g.
|
||||
# PAM, /etc/shadow file).
|
||||
#
|
||||
# If table module supports it (sql_table does) - credentials can be managed
|
||||
# using 'maddy creds' command.
|
||||
|
||||
auth.pass_table local_authdb {
|
||||
table sql_table {
|
||||
driver sqlite3
|
||||
dsn credentials.db
|
||||
table_name passwords
|
||||
}
|
||||
}
|
||||
|
||||
# imapsql module stores all indexes and metadata necessary for IMAP using a
|
||||
# relational database. It is used by IMAP endpoint for mailbox access and
|
||||
# also by SMTP & Submission endpoints for delivery of local messages.
|
||||
#
|
||||
# IMAP accounts, mailboxes and all message metadata can be inspected using
|
||||
# imap-* subcommands of maddy.
|
||||
|
||||
storage.imapsql local_mailboxes {
|
||||
driver sqlite3
|
||||
dsn imapsql.db
|
||||
}
|
||||
|
||||
# ----------------------------------------------------------------------------
|
||||
# SMTP endpoints + message routing
|
||||
|
||||
hostname $(hostname)
|
||||
|
||||
table.chain local_rewrites {
|
||||
optional_step regexp "(.+)\+(.+)@(.+)" "$1@$3"
|
||||
optional_step static {
|
||||
entry postmaster postmaster@$(primary_domain)
|
||||
}
|
||||
optional_step file /etc/maddy/aliases
|
||||
}
|
||||
|
||||
msgpipeline local_routing {
|
||||
# Insert handling for special-purpose local domains here.
|
||||
# e.g.
|
||||
# destination lists.example.org {
|
||||
# deliver_to lmtp tcp://127.0.0.1:8024
|
||||
# }
|
||||
|
||||
destination postmaster $(local_domains) {
|
||||
modify {
|
||||
replace_rcpt &local_rewrites
|
||||
}
|
||||
|
||||
deliver_to &local_mailboxes
|
||||
}
|
||||
|
||||
default_destination {
|
||||
reject 550 5.1.1 "User doesn't exist"
|
||||
}
|
||||
}
|
||||
|
||||
smtp tcp://0.0.0.0:25 {
|
||||
limits {
|
||||
# Up to 20 msgs/sec across max. 10 SMTP connections.
|
||||
all rate 20 1s
|
||||
all concurrency 10
|
||||
}
|
||||
|
||||
dmarc yes
|
||||
check {
|
||||
require_mx_record
|
||||
dkim
|
||||
spf
|
||||
}
|
||||
|
||||
source $(local_domains) {
|
||||
reject 501 5.1.8 "Use Submission for outgoing SMTP"
|
||||
}
|
||||
default_source {
|
||||
destination postmaster $(local_domains) {
|
||||
deliver_to &local_routing
|
||||
}
|
||||
default_destination {
|
||||
reject 550 5.1.1 "User doesn't exist"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
submission tls://0.0.0.0:465 tcp://0.0.0.0:587 {
|
||||
limits {
|
||||
# Up to 50 msgs/sec across any amount of SMTP connections.
|
||||
all rate 50 1s
|
||||
}
|
||||
|
||||
auth &local_authdb
|
||||
|
||||
source $(local_domains) {
|
||||
check {
|
||||
authorize_sender {
|
||||
prepare_email &local_rewrites
|
||||
user_to_email identity
|
||||
}
|
||||
}
|
||||
|
||||
destination postmaster $(local_domains) {
|
||||
deliver_to &local_routing
|
||||
}
|
||||
default_destination {
|
||||
modify {
|
||||
dkim $(primary_domain) $(local_domains) default
|
||||
}
|
||||
deliver_to &remote_queue
|
||||
}
|
||||
}
|
||||
default_source {
|
||||
reject 501 5.1.8 "Non-local sender domain"
|
||||
}
|
||||
}
|
||||
|
||||
target.remote outbound_delivery {
|
||||
limits {
|
||||
# Up to 20 msgs/sec across max. 10 SMTP connections
|
||||
# for each recipient domain.
|
||||
destination rate 20 1s
|
||||
destination concurrency 10
|
||||
}
|
||||
mx_auth {
|
||||
dane
|
||||
mtasts {
|
||||
cache fs
|
||||
fs_dir mtasts_cache/
|
||||
}
|
||||
local_policy {
|
||||
min_tls_level encrypted
|
||||
min_mx_level none
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
target.queue remote_queue {
|
||||
target &outbound_delivery
|
||||
|
||||
autogenerated_msg_domain $(primary_domain)
|
||||
bounce {
|
||||
destination postmaster $(local_domains) {
|
||||
deliver_to &local_routing
|
||||
}
|
||||
default_destination {
|
||||
reject 550 5.0.0 "Refusing to send DSNs to non-local addresses"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# ----------------------------------------------------------------------------
|
||||
# IMAP endpoints
|
||||
|
||||
imap tls://0.0.0.0:993 tcp://0.0.0.0:143 {
|
||||
auth &local_authdb
|
||||
storage &local_mailboxes
|
||||
}
|
|
@ -0,0 +1,81 @@
|
|||
[Unit]
|
||||
Description=maddy mail server
|
||||
Documentation=man:maddy(1)
|
||||
Documentation=man:maddy.conf(5)
|
||||
Documentation=https://maddy.email
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=notify
|
||||
NotifyAccess=main
|
||||
|
||||
User=maddy
|
||||
Group=maddy
|
||||
|
||||
# cd to state directory to make sure any relative paths
|
||||
# in config will be relative to it unless handled specially.
|
||||
WorkingDirectory=/var/lib/maddy
|
||||
|
||||
ConfigurationDirectory=maddy
|
||||
RuntimeDirectory=maddy
|
||||
StateDirectory=maddy
|
||||
LogsDirectory=maddy
|
||||
ReadOnlyPaths=/usr/lib/maddy
|
||||
ReadWritePaths=/var/lib/maddy
|
||||
|
||||
# Strict sandboxing. You have no reason to trust code written by strangers from GitHub.
|
||||
PrivateTmp=true
|
||||
ProtectHome=true
|
||||
ProtectSystem=strict
|
||||
ProtectKernelTunables=true
|
||||
ProtectHostname=true
|
||||
ProtectClock=true
|
||||
ProtectControlGroups=true
|
||||
RestrictAddressFamilies=AF_UNIX AF_INET AF_INET6
|
||||
|
||||
# Additional sandboxing. You need to disable all of these options
|
||||
# for privileged helper binaries (for system auth) to work correctly.
|
||||
NoNewPrivileges=true
|
||||
PrivateDevices=true
|
||||
DeviceAllow=/dev/syslog
|
||||
RestrictSUIDSGID=true
|
||||
ProtectKernelModules=true
|
||||
MemoryDenyWriteExecute=true
|
||||
RestrictNamespaces=true
|
||||
RestrictRealtime=true
|
||||
LockPersonality=true
|
||||
|
||||
# Graceful shutdown with a reasonable timeout.
|
||||
TimeoutStopSec=7s
|
||||
KillMode=mixed
|
||||
KillSignal=SIGTERM
|
||||
|
||||
# Required to bind on ports lower than 1024.
|
||||
AmbientCapabilities=CAP_NET_BIND_SERVICE
|
||||
CapabilityBoundingSet=CAP_NET_BIND_SERVICE
|
||||
|
||||
# Force all files created by maddy to be only readable by it.
|
||||
UMask=0027
|
||||
|
||||
# Bump FD limitations. Even idle mail server can have a lot of FDs open (think
|
||||
# of idle IMAP connections, especially ones abandoned on the other end and
|
||||
# slowly timing out).
|
||||
LimitNOFILE=131072
|
||||
|
||||
# Limit processes count to something reasonable to
|
||||
# prevent resources exhausting due to big amounts of helper
|
||||
# processes launched.
|
||||
LimitNPROC=512
|
||||
|
||||
# Restart server on any problem.
|
||||
Restart=on-failure
|
||||
# ... Unless it is a configuration problem.
|
||||
RestartPreventExitStatus=2
|
||||
|
||||
ExecStart=/usr/local/bin/maddy run
|
||||
|
||||
ExecReload=/bin/kill -USR1 $MAINPID
|
||||
ExecReload=/bin/kill -USR2 $MAINPID
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
|
@ -0,0 +1,77 @@
|
|||
[Unit]
|
||||
Description=maddy mail server (using %i.conf)
|
||||
Documentation=man:maddy(1)
|
||||
Documentation=man:maddy.conf(5)
|
||||
Documentation=https://maddy.email
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=notify
|
||||
NotifyAccess=main
|
||||
|
||||
User=maddy
|
||||
Group=maddy
|
||||
|
||||
ConfigurationDirectory=maddy
|
||||
RuntimeDirectory=maddy
|
||||
StateDirectory=maddy
|
||||
LogsDirectory=maddy
|
||||
ReadOnlyPaths=/usr/lib/maddy
|
||||
ReadWritePaths=/var/lib/maddy
|
||||
|
||||
# Strict sandboxing. You have no reason to trust code written by strangers from GitHub.
|
||||
PrivateTmp=true
|
||||
PrivateHome=true
|
||||
ProtectSystem=strict
|
||||
ProtectKernelTunables=true
|
||||
ProtectHostname=true
|
||||
ProtectClock=true
|
||||
ProtectControlGroups=true
|
||||
RestrictAddressFamilies=AF_UNIX AF_INET AF_INET6
|
||||
DeviceAllow=/dev/syslog
|
||||
|
||||
# Additional sandboxing. You need to disable all of these options
|
||||
# for privileged helper binaries (for system auth) to work correctly.
|
||||
NoNewPrivileges=true
|
||||
PrivateDevices=true
|
||||
RestrictSUIDSGID=true
|
||||
ProtectKernelModules=true
|
||||
MemoryDenyWriteExecute=true
|
||||
RestrictNamespaces=true
|
||||
RestrictRealtime=true
|
||||
LockPersonality=true
|
||||
|
||||
# Graceful shutdown with a reasonable timeout.
|
||||
TimeoutStopSec=7s
|
||||
KillMode=mixed
|
||||
KillSignal=SIGTERM
|
||||
|
||||
# Required to bind on ports lower than 1024.
|
||||
AmbientCapabilities=CAP_NET_BIND_SERVICE
|
||||
CapabilityBoundingSet=CAP_NET_BIND_SERVICE
|
||||
|
||||
# Force all files created by maddy to be only readable by it.
|
||||
UMask=0027
|
||||
|
||||
# Bump FD limitations. Even idle mail server can have a lot of FDs open (think
|
||||
# of idle IMAP connections, especially ones abandoned on the other end and
|
||||
# slowly timing out).
|
||||
LimitNOFILE=131072
|
||||
|
||||
# Limit processes count to something reasonable to
|
||||
# prevent resources exhausting due to big amounts of helper
|
||||
# processes launched.
|
||||
LimitNPROC=512
|
||||
|
||||
# Restart server on any problem.
|
||||
Restart=on-failure
|
||||
# ... Unless it is a configuration problem.
|
||||
RestartPreventExitStatus=2
|
||||
|
||||
ExecStart=/usr/local/bin/maddy --config /etc/maddy/%i.conf run
|
||||
|
||||
ExecReload=/bin/kill -USR1 $MAINPID
|
||||
ExecReload=/bin/kill -USR2 $MAINPID
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
|
@ -0,0 +1,4 @@
|
|||
#!/bin/sh -x
|
||||
|
||||
systemctl daemon-reload
|
||||
useradd -mrU -s /sbin/nologin -d /var/lib/maddy -c "maddy mail server" maddy
|
|
@ -0,0 +1,67 @@
|
|||
.PHONY: control
|
||||
|
||||
VERSION=7.7.1
|
||||
MINOR=v10
|
||||
|
||||
help:
|
||||
@echo
|
||||
@echo "make all # to attempt to download, extract and build the .deb package using dpkg"
|
||||
@echo "make raw # to attempt to download, extract and build the .deb package using 'tar' and 'ar'"
|
||||
@echo
|
||||
|
||||
all: download clean extract DEBIAN build
|
||||
|
||||
raw: download clean extract DEBIAN tar-ar
|
||||
|
||||
clean:
|
||||
rm -rf files/opt files/DEBIAN/control
|
||||
rm -f *.deb
|
||||
rm -f control.tar.xz data.tar.xz
|
||||
rm -rf files/DEBIAN DEBIAN
|
||||
|
||||
download:
|
||||
@echo
|
||||
@echo
|
||||
@echo CHECK FOR NEW VERSION AT: https://mattermost.com/deploy/
|
||||
@echo CHECK FOR NEW VERSION AT: https://mattermost.com/deploy/
|
||||
@echo CHECK FOR NEW VERSION AT: https://mattermost.com/deploy/
|
||||
@echo
|
||||
@echo
|
||||
sleep 3
|
||||
cd .. && wget -c https://releases.mattermost.com/${VERSION}/mattermost-${VERSION}-linux-amd64.tar.gz
|
||||
|
||||
extract:
|
||||
mkdir -p ../files/opt/
|
||||
cd ../files/opt/ && tar xfz ../../mattermost-${VERSION}-linux-amd64.tar.gz
|
||||
|
||||
# update the bash-completion script
|
||||
bash-completion:
|
||||
cd ../ && mattermost completion bash > files/etc/bash_completion.d/mattermost
|
||||
|
||||
# makes the DEBIAN/ directory
|
||||
DEBIAN:
|
||||
mkdir -p DEBIAN
|
||||
make md5sum
|
||||
make control
|
||||
cp preinst DEBIAN
|
||||
cp postinst DEBIAN
|
||||
|
||||
control:
|
||||
mkdir -p DEBIAN
|
||||
cp control DEBIAN/
|
||||
echo Version: ${VERSION}.${MINOR} >>DEBIAN/control
|
||||
|
||||
md5sum:
|
||||
cd ../files/ && find -type f -exec md5sum '{}' \; |sort -k2 >../DEBIAN/md5sums
|
||||
|
||||
build:
|
||||
mv DEBIAN ../files/
|
||||
cd ../files && dpkg-deb --build files mattermost_${VERSION}.${MINOR}_amd64.deb
|
||||
cd ../files && dpkg-deb --info mattermost_${VERSION}.${MINOR}_amd64.deb
|
||||
|
||||
# how to make a debian package "raw" just using tar and ar
|
||||
tar-ar: control
|
||||
cd DEBIAN && tar --ignore-failed-read -cvJf ../control.tar.xz .
|
||||
cd files && tar -cvJf ../data.tar.xz .
|
||||
ar rcs mattermost_${VERSION}.${MINOR}_amd64.deb debian-binary control.tar.xz data.tar.xz
|
||||
dpkg-deb --info mattermost_${VERSION}.${MINOR}_amd64.deb
|
|
@ -0,0 +1,14 @@
|
|||
###############################
|
||||
|
||||
Turn everything in files/ into a .deb debian package
|
||||
|
||||
###############################
|
||||
|
||||
|
||||
Needs to make a user and a few other things from
|
||||
|
||||
https://docs.mattermost.com/install/install-tar.html
|
||||
|
||||
also note debian packaging policy:
|
||||
|
||||
https://salsa.debian.org/dbnpolicy/policy
|
|
@ -1,16 +1,13 @@
|
|||
Package: mattermost
|
||||
Source: mattermost
|
||||
Version: 7.3.0
|
||||
Architecture: amd64
|
||||
Maintainer: Jeff Carr <jcarr@wit.com>
|
||||
Installed-Size: 5883
|
||||
Section: network
|
||||
Requires: postgresql
|
||||
Depends: postgresql
|
||||
Priority: optional
|
||||
Homepage: https://github.com/mattermost/mattermost-server
|
||||
Description: mattermost
|
||||
Description: open-source, self-hostable online chat service
|
||||
Raw tarball from upstream.
|
||||
.
|
||||
Files moved to be stored in /var/mattermost
|
||||
.
|
||||
This packaging is a test and may not work
|
|
@ -0,0 +1 @@
|
|||
2.0
|
|
@ -0,0 +1,325 @@
|
|||
# bash completion V2 for mattermost -*- shell-script -*-
|
||||
|
||||
__mattermost_debug()
|
||||
{
|
||||
if [[ -n ${BASH_COMP_DEBUG_FILE:-} ]]; then
|
||||
echo "$*" >> "${BASH_COMP_DEBUG_FILE}"
|
||||
fi
|
||||
}
|
||||
|
||||
# Macs have bash3 for which the bash-completion package doesn't include
|
||||
# _init_completion. This is a minimal version of that function.
|
||||
__mattermost_init_completion()
|
||||
{
|
||||
COMPREPLY=()
|
||||
_get_comp_words_by_ref "$@" cur prev words cword
|
||||
}
|
||||
|
||||
# This function calls the mattermost program to obtain the completion
|
||||
# results and the directive. It fills the 'out' and 'directive' vars.
|
||||
__mattermost_get_completion_results() {
|
||||
local requestComp lastParam lastChar args
|
||||
|
||||
# Prepare the command to request completions for the program.
|
||||
# Calling ${words[0]} instead of directly mattermost allows to handle aliases
|
||||
args=("${words[@]:1}")
|
||||
requestComp="${words[0]} __complete ${args[*]}"
|
||||
|
||||
lastParam=${words[$((${#words[@]}-1))]}
|
||||
lastChar=${lastParam:$((${#lastParam}-1)):1}
|
||||
__mattermost_debug "lastParam ${lastParam}, lastChar ${lastChar}"
|
||||
|
||||
if [ -z "${cur}" ] && [ "${lastChar}" != "=" ]; then
|
||||
# If the last parameter is complete (there is a space following it)
|
||||
# We add an extra empty parameter so we can indicate this to the go method.
|
||||
__mattermost_debug "Adding extra empty parameter"
|
||||
requestComp="${requestComp} ''"
|
||||
fi
|
||||
|
||||
# When completing a flag with an = (e.g., mattermost -n=<TAB>)
|
||||
# bash focuses on the part after the =, so we need to remove
|
||||
# the flag part from $cur
|
||||
if [[ "${cur}" == -*=* ]]; then
|
||||
cur="${cur#*=}"
|
||||
fi
|
||||
|
||||
__mattermost_debug "Calling ${requestComp}"
|
||||
# Use eval to handle any environment variables and such
|
||||
out=$(eval "${requestComp}" 2>/dev/null)
|
||||
|
||||
# Extract the directive integer at the very end of the output following a colon (:)
|
||||
directive=${out##*:}
|
||||
# Remove the directive
|
||||
out=${out%:*}
|
||||
if [ "${directive}" = "${out}" ]; then
|
||||
# There is not directive specified
|
||||
directive=0
|
||||
fi
|
||||
__mattermost_debug "The completion directive is: ${directive}"
|
||||
__mattermost_debug "The completions are: ${out}"
|
||||
}
|
||||
|
||||
__mattermost_process_completion_results() {
|
||||
local shellCompDirectiveError=1
|
||||
local shellCompDirectiveNoSpace=2
|
||||
local shellCompDirectiveNoFileComp=4
|
||||
local shellCompDirectiveFilterFileExt=8
|
||||
local shellCompDirectiveFilterDirs=16
|
||||
|
||||
if [ $((directive & shellCompDirectiveError)) -ne 0 ]; then
|
||||
# Error code. No completion.
|
||||
__mattermost_debug "Received error from custom completion go code"
|
||||
return
|
||||
else
|
||||
if [ $((directive & shellCompDirectiveNoSpace)) -ne 0 ]; then
|
||||
if [[ $(type -t compopt) = "builtin" ]]; then
|
||||
__mattermost_debug "Activating no space"
|
||||
compopt -o nospace
|
||||
else
|
||||
__mattermost_debug "No space directive not supported in this version of bash"
|
||||
fi
|
||||
fi
|
||||
if [ $((directive & shellCompDirectiveNoFileComp)) -ne 0 ]; then
|
||||
if [[ $(type -t compopt) = "builtin" ]]; then
|
||||
__mattermost_debug "Activating no file completion"
|
||||
compopt +o default
|
||||
else
|
||||
__mattermost_debug "No file completion directive not supported in this version of bash"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
# Separate activeHelp from normal completions
|
||||
local completions=()
|
||||
local activeHelp=()
|
||||
__mattermost_extract_activeHelp
|
||||
|
||||
if [ $((directive & shellCompDirectiveFilterFileExt)) -ne 0 ]; then
|
||||
# File extension filtering
|
||||
local fullFilter filter filteringCmd
|
||||
|
||||
# Do not use quotes around the $completions variable or else newline
|
||||
# characters will be kept.
|
||||
for filter in ${completions[*]}; do
|
||||
fullFilter+="$filter|"
|
||||
done
|
||||
|
||||
filteringCmd="_filedir $fullFilter"
|
||||
__mattermost_debug "File filtering command: $filteringCmd"
|
||||
$filteringCmd
|
||||
elif [ $((directive & shellCompDirectiveFilterDirs)) -ne 0 ]; then
|
||||
# File completion for directories only
|
||||
|
||||
# Use printf to strip any trailing newline
|
||||
local subdir
|
||||
subdir=$(printf "%s" "${completions[0]}")
|
||||
if [ -n "$subdir" ]; then
|
||||
__mattermost_debug "Listing directories in $subdir"
|
||||
pushd "$subdir" >/dev/null 2>&1 && _filedir -d && popd >/dev/null 2>&1 || return
|
||||
else
|
||||
__mattermost_debug "Listing directories in ."
|
||||
_filedir -d
|
||||
fi
|
||||
else
|
||||
__mattermost_handle_completion_types
|
||||
fi
|
||||
|
||||
__mattermost_handle_special_char "$cur" :
|
||||
__mattermost_handle_special_char "$cur" =
|
||||
|
||||
# Print the activeHelp statements before we finish
|
||||
if [ ${#activeHelp} -ne 0 ]; then
|
||||
printf "\n";
|
||||
printf "%s\n" "${activeHelp[@]}"
|
||||
printf "\n"
|
||||
|
||||
# The prompt format is only available from bash 4.4.
|
||||
# We test if it is available before using it.
|
||||
if (x=${PS1@P}) 2> /dev/null; then
|
||||
printf "%s" "${PS1@P}${COMP_LINE[@]}"
|
||||
else
|
||||
# Can't print the prompt. Just print the
|
||||
# text the user had typed, it is workable enough.
|
||||
printf "%s" "${COMP_LINE[@]}"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# Separate activeHelp lines from real completions.
|
||||
# Fills the $activeHelp and $completions arrays.
|
||||
__mattermost_extract_activeHelp() {
|
||||
local activeHelpMarker="_activeHelp_ "
|
||||
local endIndex=${#activeHelpMarker}
|
||||
|
||||
while IFS='' read -r comp; do
|
||||
if [ "${comp:0:endIndex}" = "$activeHelpMarker" ]; then
|
||||
comp=${comp:endIndex}
|
||||
__mattermost_debug "ActiveHelp found: $comp"
|
||||
if [ -n "$comp" ]; then
|
||||
activeHelp+=("$comp")
|
||||
fi
|
||||
else
|
||||
# Not an activeHelp line but a normal completion
|
||||
completions+=("$comp")
|
||||
fi
|
||||
done < <(printf "%s\n" "${out}")
|
||||
}
|
||||
|
||||
__mattermost_handle_completion_types() {
|
||||
__mattermost_debug "__mattermost_handle_completion_types: COMP_TYPE is $COMP_TYPE"
|
||||
|
||||
case $COMP_TYPE in
|
||||
37|42)
|
||||
# Type: menu-complete/menu-complete-backward and insert-completions
|
||||
# If the user requested inserting one completion at a time, or all
|
||||
# completions at once on the command-line we must remove the descriptions.
|
||||
# https://github.com/spf13/cobra/issues/1508
|
||||
local tab=$'\t' comp
|
||||
while IFS='' read -r comp; do
|
||||
[[ -z $comp ]] && continue
|
||||
# Strip any description
|
||||
comp=${comp%%$tab*}
|
||||
# Only consider the completions that match
|
||||
if [[ $comp == "$cur"* ]]; then
|
||||
COMPREPLY+=("$comp")
|
||||
fi
|
||||
done < <(printf "%s\n" "${completions[@]}")
|
||||
;;
|
||||
|
||||
*)
|
||||
# Type: complete (normal completion)
|
||||
__mattermost_handle_standard_completion_case
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
__mattermost_handle_standard_completion_case() {
|
||||
local tab=$'\t' comp
|
||||
|
||||
# Short circuit to optimize if we don't have descriptions
|
||||
if [[ "${completions[*]}" != *$tab* ]]; then
|
||||
IFS=$'\n' read -ra COMPREPLY -d '' < <(compgen -W "${completions[*]}" -- "$cur")
|
||||
return 0
|
||||
fi
|
||||
|
||||
local longest=0
|
||||
local compline
|
||||
# Look for the longest completion so that we can format things nicely
|
||||
while IFS='' read -r compline; do
|
||||
[[ -z $compline ]] && continue
|
||||
# Strip any description before checking the length
|
||||
comp=${compline%%$tab*}
|
||||
# Only consider the completions that match
|
||||
[[ $comp == "$cur"* ]] || continue
|
||||
COMPREPLY+=("$compline")
|
||||
if ((${#comp}>longest)); then
|
||||
longest=${#comp}
|
||||
fi
|
||||
done < <(printf "%s\n" "${completions[@]}")
|
||||
|
||||
# If there is a single completion left, remove the description text
|
||||
if [ ${#COMPREPLY[*]} -eq 1 ]; then
|
||||
__mattermost_debug "COMPREPLY[0]: ${COMPREPLY[0]}"
|
||||
comp="${COMPREPLY[0]%%$tab*}"
|
||||
__mattermost_debug "Removed description from single completion, which is now: ${comp}"
|
||||
COMPREPLY[0]=$comp
|
||||
else # Format the descriptions
|
||||
__mattermost_format_comp_descriptions $longest
|
||||
fi
|
||||
}
|
||||
|
||||
__mattermost_handle_special_char()
|
||||
{
|
||||
local comp="$1"
|
||||
local char=$2
|
||||
if [[ "$comp" == *${char}* && "$COMP_WORDBREAKS" == *${char}* ]]; then
|
||||
local word=${comp%"${comp##*${char}}"}
|
||||
local idx=${#COMPREPLY[*]}
|
||||
while [[ $((--idx)) -ge 0 ]]; do
|
||||
COMPREPLY[$idx]=${COMPREPLY[$idx]#"$word"}
|
||||
done
|
||||
fi
|
||||
}
|
||||
|
||||
__mattermost_format_comp_descriptions()
|
||||
{
|
||||
local tab=$'\t'
|
||||
local comp desc maxdesclength
|
||||
local longest=$1
|
||||
|
||||
local i ci
|
||||
for ci in ${!COMPREPLY[*]}; do
|
||||
comp=${COMPREPLY[ci]}
|
||||
# Properly format the description string which follows a tab character if there is one
|
||||
if [[ "$comp" == *$tab* ]]; then
|
||||
__mattermost_debug "Original comp: $comp"
|
||||
desc=${comp#*$tab}
|
||||
comp=${comp%%$tab*}
|
||||
|
||||
# $COLUMNS stores the current shell width.
|
||||
# Remove an extra 4 because we add 2 spaces and 2 parentheses.
|
||||
maxdesclength=$(( COLUMNS - longest - 4 ))
|
||||
|
||||
# Make sure we can fit a description of at least 8 characters
|
||||
# if we are to align the descriptions.
|
||||
if [[ $maxdesclength -gt 8 ]]; then
|
||||
# Add the proper number of spaces to align the descriptions
|
||||
for ((i = ${#comp} ; i < longest ; i++)); do
|
||||
comp+=" "
|
||||
done
|
||||
else
|
||||
# Don't pad the descriptions so we can fit more text after the completion
|
||||
maxdesclength=$(( COLUMNS - ${#comp} - 4 ))
|
||||
fi
|
||||
|
||||
# If there is enough space for any description text,
|
||||
# truncate the descriptions that are too long for the shell width
|
||||
if [ $maxdesclength -gt 0 ]; then
|
||||
if [ ${#desc} -gt $maxdesclength ]; then
|
||||
desc=${desc:0:$(( maxdesclength - 1 ))}
|
||||
desc+="…"
|
||||
fi
|
||||
comp+=" ($desc)"
|
||||
fi
|
||||
COMPREPLY[ci]=$comp
|
||||
__mattermost_debug "Final comp: $comp"
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
__start_mattermost()
|
||||
{
|
||||
local cur prev words cword split
|
||||
|
||||
COMPREPLY=()
|
||||
|
||||
# Call _init_completion from the bash-completion package
|
||||
# to prepare the arguments properly
|
||||
if declare -F _init_completion >/dev/null 2>&1; then
|
||||
_init_completion -n "=:" || return
|
||||
else
|
||||
__mattermost_init_completion -n "=:" || return
|
||||
fi
|
||||
|
||||
__mattermost_debug
|
||||
__mattermost_debug "========= starting completion logic =========="
|
||||
__mattermost_debug "cur is ${cur}, words[*] is ${words[*]}, #words[@] is ${#words[@]}, cword is $cword"
|
||||
|
||||
# The user could have moved the cursor backwards on the command-line.
|
||||
# We need to trigger completion from the $cword location, so we need
|
||||
# to truncate the command-line ($words) up to the $cword location.
|
||||
words=("${words[@]:0:$cword+1}")
|
||||
__mattermost_debug "Truncated words[*]: ${words[*]},"
|
||||
|
||||
local out directive
|
||||
__mattermost_get_completion_results
|
||||
__mattermost_process_completion_results
|
||||
}
|
||||
|
||||
if [[ $(type -t compopt) = "builtin" ]]; then
|
||||
complete -o default -F __start_mattermost mattermost
|
||||
else
|
||||
complete -o default -o nospace -F __start_mattermost mattermost
|
||||
fi
|
||||
|
||||
# ex: ts=4 sw=4 et filetype=sh
|
|
@ -0,0 +1,3 @@
|
|||
# config.json
|
||||
|
||||
This is the system configuration file for your Mattermost server. Settings are specific to different editions of Mattermost. Please read the documentation before making changes: https://docs.mattermost.com/configure/configuration-settings.html/
|
|
@ -0,0 +1,617 @@
|
|||
{
|
||||
"ServiceSettings": {
|
||||
"SiteURL": "",
|
||||
"WebsocketURL": "",
|
||||
"LicenseFileLocation": "",
|
||||
"ListenAddress": ":8065",
|
||||
"ConnectionSecurity": "",
|
||||
"TLSCertFile": "",
|
||||
"TLSKeyFile": "",
|
||||
"TLSMinVer": "1.2",
|
||||
"TLSStrictTransport": false,
|
||||
"TLSStrictTransportMaxAge": 63072000,
|
||||
"TLSOverwriteCiphers": [],
|
||||
"UseLetsEncrypt": false,
|
||||
"LetsEncryptCertificateCacheFile": "./config/letsencrypt.cache",
|
||||
"Forward80To443": false,
|
||||
"TrustedProxyIPHeader": [],
|
||||
"ReadTimeout": 300,
|
||||
"WriteTimeout": 300,
|
||||
"IdleTimeout": 60,
|
||||
"MaximumLoginAttempts": 10,
|
||||
"GoroutineHealthThreshold": -1,
|
||||
"EnableOAuthServiceProvider": false,
|
||||
"EnableIncomingWebhooks": true,
|
||||
"EnableOutgoingWebhooks": true,
|
||||
"EnableCommands": true,
|
||||
"EnablePostUsernameOverride": false,
|
||||
"EnablePostIconOverride": false,
|
||||
"GoogleDeveloperKey": "",
|
||||
"EnableLinkPreviews": true,
|
||||
"EnablePermalinkPreviews": true,
|
||||
"RestrictLinkPreviews": "",
|
||||
"EnableTesting": false,
|
||||
"EnableDeveloper": false,
|
||||
"DeveloperFlags": "",
|
||||
"EnableClientPerformanceDebugging": false,
|
||||
"EnableOpenTracing": false,
|
||||
"EnableSecurityFixAlert": true,
|
||||
"EnableInsecureOutgoingConnections": false,
|
||||
"AllowedUntrustedInternalConnections": "",
|
||||
"EnableMultifactorAuthentication": false,
|
||||
"EnforceMultifactorAuthentication": false,
|
||||
"EnableUserAccessTokens": false,
|
||||
"AllowCorsFrom": "",
|
||||
"CorsExposedHeaders": "",
|
||||
"CorsAllowCredentials": false,
|
||||
"CorsDebug": false,
|
||||
"AllowCookiesForSubdomains": false,
|
||||
"ExtendSessionLengthWithActivity": true,
|
||||
"SessionLengthWebInDays": 30,
|
||||
"SessionLengthWebInHours": 720,
|
||||
"SessionLengthMobileInDays": 30,
|
||||
"SessionLengthMobileInHours": 720,
|
||||
"SessionLengthSSOInDays": 30,
|
||||
"SessionLengthSSOInHours": 720,
|
||||
"SessionCacheInMinutes": 10,
|
||||
"SessionIdleTimeoutInMinutes": 43200,
|
||||
"WebsocketSecurePort": 443,
|
||||
"WebsocketPort": 80,
|
||||
"WebserverMode": "gzip",
|
||||
"EnableGifPicker": true,
|
||||
"GfycatAPIKey": "2_KtH_W5",
|
||||
"GfycatAPISecret": "3wLVZPiswc3DnaiaFoLkDvB4X0IV6CpMkj4tf2inJRsBY6-FnkT08zGmppWFgeof",
|
||||
"EnableCustomEmoji": true,
|
||||
"EnableEmojiPicker": true,
|
||||
"PostEditTimeLimit": -1,
|
||||
"TimeBetweenUserTypingUpdatesMilliseconds": 5000,
|
||||
"EnablePostSearch": true,
|
||||
"EnableFileSearch": true,
|
||||
"MinimumHashtagLength": 3,
|
||||
"EnableUserTypingMessages": true,
|
||||
"EnableChannelViewedMessages": true,
|
||||
"EnableUserStatuses": true,
|
||||
"ExperimentalEnableAuthenticationTransfer": true,
|
||||
"ClusterLogTimeoutMilliseconds": 2000,
|
||||
"EnablePreviewFeatures": true,
|
||||
"EnableTutorial": true,
|
||||
"EnableOnboardingFlow": true,
|
||||
"ExperimentalEnableDefaultChannelLeaveJoinMessages": true,
|
||||
"ExperimentalGroupUnreadChannels": "disabled",
|
||||
"EnableAPITeamDeletion": false,
|
||||
"EnableAPIUserDeletion": false,
|
||||
"ExperimentalEnableHardenedMode": false,
|
||||
"ExperimentalStrictCSRFEnforcement": false,
|
||||
"EnableEmailInvitations": false,
|
||||
"DisableBotsWhenOwnerIsDeactivated": true,
|
||||
"EnableBotAccountCreation": false,
|
||||
"EnableSVGs": false,
|
||||
"EnableLatex": false,
|
||||
"EnableInlineLatex": true,
|
||||
"EnableAPIChannelDeletion": false,
|
||||
"EnableLocalMode": false,
|
||||
"LocalModeSocketLocation": "/var/tmp/mattermost_local.socket",
|
||||
"EnableAWSMetering": false,
|
||||
"SplitKey": "",
|
||||
"FeatureFlagSyncIntervalSeconds": 30,
|
||||
"DebugSplit": false,
|
||||
"ThreadAutoFollow": true,
|
||||
"CollapsedThreads": "always_on",
|
||||
"ManagedResourcePaths": "",
|
||||
"EnableCustomGroups": true
|
||||
},
|
||||
"TeamSettings": {
|
||||
"SiteName": "Mattermost",
|
||||
"MaxUsersPerTeam": 50,
|
||||
"EnableUserCreation": true,
|
||||
"EnableOpenServer": false,
|
||||
"EnableUserDeactivation": false,
|
||||
"RestrictCreationToDomains": "",
|
||||
"EnableCustomUserStatuses": true,
|
||||
"EnableCustomBrand": false,
|
||||
"CustomBrandText": "",
|
||||
"CustomDescriptionText": "",
|
||||
"RestrictDirectMessage": "any",
|
||||
"UserStatusAwayTimeout": 300,
|
||||
"MaxChannelsPerTeam": 2000,
|
||||
"MaxNotificationsPerChannel": 1000,
|
||||
"EnableConfirmNotificationsToChannel": true,
|
||||
"TeammateNameDisplay": "username",
|
||||
"ExperimentalViewArchivedChannels": true,
|
||||
"ExperimentalEnableAutomaticReplies": false,
|
||||
"LockTeammateNameDisplay": false,
|
||||
"ExperimentalPrimaryTeam": "",
|
||||
"ExperimentalDefaultChannels": []
|
||||
},
|
||||
"ClientRequirements": {
|
||||
"AndroidLatestVersion": "",
|
||||
"AndroidMinVersion": "",
|
||||
"IosLatestVersion": "",
|
||||
"IosMinVersion": ""
|
||||
},
|
||||
"SqlSettings": {
|
||||
"DriverName": "postgres",
|
||||
"DataSource": "postgres://mmuser:mmtest@localhost/mattermost?sslmode=disable\u0026connect_timeout=10\u0026binary_parameters=yes",
|
||||
"DataSourceReplicas": [],
|
||||
"DataSourceSearchReplicas": [],
|
||||
"MaxIdleConns": 20,
|
||||
"ConnMaxLifetimeMilliseconds": 3600000,
|
||||
"ConnMaxIdleTimeMilliseconds": 300000,
|
||||
"MaxOpenConns": 300,
|
||||
"Trace": false,
|
||||
"AtRestEncryptKey": "",
|
||||
"QueryTimeout": 30,
|
||||
"DisableDatabaseSearch": false,
|
||||
"MigrationsStatementTimeoutSeconds": 100000,
|
||||
"ReplicaLagSettings": []
|
||||
},
|
||||
"LogSettings": {
|
||||
"EnableConsole": true,
|
||||
"ConsoleLevel": "INFO",
|
||||
"ConsoleJson": true,
|
||||
"EnableColor": false,
|
||||
"EnableFile": true,
|
||||
"FileLevel": "INFO",
|
||||
"FileJson": true,
|
||||
"FileLocation": "",
|
||||
"EnableWebhookDebugging": true,
|
||||
"EnableDiagnostics": true,
|
||||
"EnableSentry": true,
|
||||
"AdvancedLoggingConfig": ""
|
||||
},
|
||||
"ExperimentalAuditSettings": {
|
||||
"FileEnabled": false,
|
||||
"FileName": "",
|
||||
"FileMaxSizeMB": 100,
|
||||
"FileMaxAgeDays": 0,
|
||||
"FileMaxBackups": 0,
|
||||
"FileCompress": false,
|
||||
"FileMaxQueueSize": 1000,
|
||||
"AdvancedLoggingConfig": ""
|
||||
},
|
||||
"NotificationLogSettings": {
|
||||
"EnableConsole": true,
|
||||
"ConsoleLevel": "INFO",
|
||||
"ConsoleJson": true,
|
||||
"EnableColor": false,
|
||||
"EnableFile": true,
|
||||
"FileLevel": "INFO",
|
||||
"FileJson": true,
|
||||
"FileLocation": "",
|
||||
"AdvancedLoggingConfig": ""
|
||||
},
|
||||
"PasswordSettings": {
|
||||
"MinimumLength": 8,
|
||||
"Lowercase": false,
|
||||
"Number": false,
|
||||
"Uppercase": false,
|
||||
"Symbol": false
|
||||
},
|
||||
"FileSettings": {
|
||||
"EnableFileAttachments": true,
|
||||
"EnableMobileUpload": true,
|
||||
"EnableMobileDownload": true,
|
||||
"MaxFileSize": 104857600,
|
||||
"MaxImageResolution": 33177600,
|
||||
"MaxImageDecoderConcurrency": -1,
|
||||
"DriverName": "local",
|
||||
"Directory": "./data/",
|
||||
"EnablePublicLink": false,
|
||||
"ExtractContent": true,
|
||||
"ArchiveRecursion": false,
|
||||
"PublicLinkSalt": "",
|
||||
"InitialFont": "nunito-bold.ttf",
|
||||
"AmazonS3AccessKeyId": "",
|
||||
"AmazonS3SecretAccessKey": "",
|
||||
"AmazonS3Bucket": "",
|
||||
"AmazonS3PathPrefix": "",
|
||||
"AmazonS3Region": "",
|
||||
"AmazonS3Endpoint": "s3.amazonaws.com",
|
||||
"AmazonS3SSL": true,
|
||||
"AmazonS3SignV2": false,
|
||||
"AmazonS3SSE": false,
|
||||
"AmazonS3Trace": false,
|
||||
"AmazonS3RequestTimeoutMilliseconds": 30000
|
||||
},
|
||||
"EmailSettings": {
|
||||
"EnableSignUpWithEmail": true,
|
||||
"EnableSignInWithEmail": true,
|
||||
"EnableSignInWithUsername": true,
|
||||
"SendEmailNotifications": false,
|
||||
"UseChannelInEmailNotifications": false,
|
||||
"RequireEmailVerification": false,
|
||||
"FeedbackName": "",
|
||||
"FeedbackEmail": "",
|
||||
"ReplyToAddress": "",
|
||||
"FeedbackOrganization": "",
|
||||
"EnableSMTPAuth": false,
|
||||
"SMTPUsername": "",
|
||||
"SMTPPassword": "",
|
||||
"SMTPServer": "",
|
||||
"SMTPPort": "10025",
|
||||
"SMTPServerTimeout": 10,
|
||||
"ConnectionSecurity": "",
|
||||
"SendPushNotifications": true,
|
||||
"PushNotificationServer": "https://push-test.mattermost.com",
|
||||
"PushNotificationContents": "full",
|
||||
"PushNotificationBuffer": 1000,
|
||||
"EnableEmailBatching": false,
|
||||
"EmailBatchingBufferSize": 256,
|
||||
"EmailBatchingInterval": 30,
|
||||
"EnablePreviewModeBanner": true,
|
||||
"SkipServerCertificateVerification": false,
|
||||
"EmailNotificationContentsType": "full",
|
||||
"LoginButtonColor": "#0000",
|
||||
"LoginButtonBorderColor": "#2389D7",
|
||||
"LoginButtonTextColor": "#2389D7",
|
||||
"EnableInactivityEmail": true
|
||||
},
|
||||
"RateLimitSettings": {
|
||||
"Enable": false,
|
||||
"PerSec": 10,
|
||||
"MaxBurst": 100,
|
||||
"MemoryStoreSize": 10000,
|
||||
"VaryByRemoteAddr": true,
|
||||
"VaryByUser": false,
|
||||
"VaryByHeader": ""
|
||||
},
|
||||
"PrivacySettings": {
|
||||
"ShowEmailAddress": true,
|
||||
"ShowFullName": true
|
||||
},
|
||||
"SupportSettings": {
|
||||
"TermsOfServiceLink": "https://mattermost.com/terms-of-use/",
|
||||
"PrivacyPolicyLink": "https://mattermost.com/privacy-policy/",
|
||||
"AboutLink": "https://docs.mattermost.com/about/product.html/",
|
||||
"HelpLink": "https://mattermost.com/default-help/",
|
||||
"ReportAProblemLink": "https://mattermost.com/default-report-a-problem/",
|
||||
"SupportEmail": "",
|
||||
"CustomTermsOfServiceEnabled": false,
|
||||
"CustomTermsOfServiceReAcceptancePeriod": 365,
|
||||
"EnableAskCommunityLink": true
|
||||
},
|
||||
"AnnouncementSettings": {
|
||||
"EnableBanner": false,
|
||||
"BannerText": "",
|
||||
"BannerColor": "#f2a93b",
|
||||
"BannerTextColor": "#333333",
|
||||
"AllowBannerDismissal": true,
|
||||
"AdminNoticesEnabled": true,
|
||||
"UserNoticesEnabled": true,
|
||||
"NoticesURL": "https://notices.mattermost.com/",
|
||||
"NoticesFetchFrequency": 3600,
|
||||
"NoticesSkipCache": false
|
||||
},
|
||||
"ThemeSettings": {
|
||||
"EnableThemeSelection": true,
|
||||
"DefaultTheme": "default",
|
||||
"AllowCustomThemes": true,
|
||||
"AllowedThemes": []
|
||||
},
|
||||
"GitLabSettings": {
|
||||
"Enable": false,
|
||||
"Secret": "",
|
||||
"Id": "",
|
||||
"Scope": "",
|
||||
"AuthEndpoint": "",
|
||||
"TokenEndpoint": "",
|
||||
"UserAPIEndpoint": "",
|
||||
"DiscoveryEndpoint": "",
|
||||
"ButtonText": "",
|
||||
"ButtonColor": ""
|
||||
},
|
||||
"GoogleSettings": {
|
||||
"Enable": false,
|
||||
"Secret": "",
|
||||
"Id": "",
|
||||
"Scope": "profile email",
|
||||
"AuthEndpoint": "https://accounts.google.com/o/oauth2/v2/auth",
|
||||
"TokenEndpoint": "https://www.googleapis.com/oauth2/v4/token",
|
||||
"UserAPIEndpoint": "https://people.googleapis.com/v1/people/me?personFields=names,emailAddresses,nicknames,metadata",
|
||||
"DiscoveryEndpoint": "",
|
||||
"ButtonText": "",
|
||||
"ButtonColor": ""
|
||||
},
|
||||
"Office365Settings": {
|
||||
"Enable": false,
|
||||
"Secret": "",
|
||||
"Id": "",
|
||||
"Scope": "User.Read",
|
||||
"AuthEndpoint": "https://login.microsoftonline.com/common/oauth2/v2.0/authorize",
|
||||
"TokenEndpoint": "https://login.microsoftonline.com/common/oauth2/v2.0/token",
|
||||
"UserAPIEndpoint": "https://graph.microsoft.com/v1.0/me",
|
||||
"DiscoveryEndpoint": "",
|
||||
"DirectoryId": ""
|
||||
},
|
||||
"OpenIdSettings": {
|
||||
"Enable": false,
|
||||
"Secret": "",
|
||||
"Id": "",
|
||||
"Scope": "profile openid email",
|
||||
"AuthEndpoint": "",
|
||||
"TokenEndpoint": "",
|
||||
"UserAPIEndpoint": "",
|
||||
"DiscoveryEndpoint": "",
|
||||
"ButtonText": "",
|
||||
"ButtonColor": "#145DBF"
|
||||
},
|
||||
"LdapSettings": {
|
||||
"Enable": false,
|
||||
"EnableSync": false,
|
||||
"LdapServer": "",
|
||||
"LdapPort": 389,
|
||||
"ConnectionSecurity": "",
|
||||
"BaseDN": "",
|
||||
"BindUsername": "",
|
||||
"BindPassword": "",
|
||||
"UserFilter": "",
|
||||
"GroupFilter": "",
|
||||
"GuestFilter": "",
|
||||
"EnableAdminFilter": false,
|
||||
"AdminFilter": "",
|
||||
"GroupDisplayNameAttribute": "",
|
||||
"GroupIdAttribute": "",
|
||||
"FirstNameAttribute": "",
|
||||
"LastNameAttribute": "",
|
||||
"EmailAttribute": "",
|
||||
"UsernameAttribute": "",
|
||||
"NicknameAttribute": "",
|
||||
"IdAttribute": "",
|
||||
"PositionAttribute": "",
|
||||
"LoginIdAttribute": "",
|
||||
"PictureAttribute": "",
|
||||
"SyncIntervalMinutes": 60,
|
||||
"SkipCertificateVerification": false,
|
||||
"PublicCertificateFile": "",
|
||||
"PrivateKeyFile": "",
|
||||
"QueryTimeout": 60,
|
||||
"MaxPageSize": 0,
|
||||
"LoginFieldName": "",
|
||||
"LoginButtonColor": "#0000",
|
||||
"LoginButtonBorderColor": "#2389D7",
|
||||
"LoginButtonTextColor": "#2389D7",
|
||||
"Trace": false
|
||||
},
|
||||
"ComplianceSettings": {
|
||||
"Enable": false,
|
||||
"Directory": "./data/",
|
||||
"EnableDaily": false,
|
||||
"BatchSize": 30000
|
||||
},
|
||||
"LocalizationSettings": {
|
||||
"DefaultServerLocale": "en",
|
||||
"DefaultClientLocale": "en",
|
||||
"AvailableLocales": ""
|
||||
},
|
||||
"SamlSettings": {
|
||||
"Enable": false,
|
||||
"EnableSyncWithLdap": false,
|
||||
"EnableSyncWithLdapIncludeAuth": false,
|
||||
"IgnoreGuestsLdapSync": false,
|
||||
"Verify": true,
|
||||
"Encrypt": true,
|
||||
"SignRequest": false,
|
||||
"IdpURL": "",
|
||||
"IdpDescriptorURL": "",
|
||||
"IdpMetadataURL": "",
|
||||
"ServiceProviderIdentifier": "",
|
||||
"AssertionConsumerServiceURL": "",
|
||||
"SignatureAlgorithm": "RSAwithSHA1",
|
||||
"CanonicalAlgorithm": "Canonical1.0",
|
||||
"ScopingIDPProviderId": "",
|
||||
"ScopingIDPName": "",
|
||||
"IdpCertificateFile": "",
|
||||
"PublicCertificateFile": "",
|
||||
"PrivateKeyFile": "",
|
||||
"IdAttribute": "",
|
||||
"GuestAttribute": "",
|
||||
"EnableAdminAttribute": false,
|
||||
"AdminAttribute": "",
|
||||
"FirstNameAttribute": "",
|
||||
"LastNameAttribute": "",
|
||||
"EmailAttribute": "",
|
||||
"UsernameAttribute": "",
|
||||
"NicknameAttribute": "",
|
||||
"LocaleAttribute": "",
|
||||
"PositionAttribute": "",
|
||||
"LoginButtonText": "SAML",
|
||||
"LoginButtonColor": "#34a28b",
|
||||
"LoginButtonBorderColor": "#2389D7",
|
||||
"LoginButtonTextColor": "#ffffff"
|
||||
},
|
||||
"NativeAppSettings": {
|
||||
"AppCustomURLSchemes": [
|
||||
"mmauth://",
|
||||
"mmauthbeta://"
|
||||
],
|
||||
"AppDownloadLink": "https://mattermost.com/download/#mattermostApps",
|
||||
"AndroidAppDownloadLink": "https://mattermost.com/mattermost-android-app/",
|
||||
"IosAppDownloadLink": "https://mattermost.com/mattermost-ios-app/"
|
||||
},
|
||||
"ClusterSettings": {
|
||||
"Enable": false,
|
||||
"ClusterName": "",
|
||||
"OverrideHostname": "",
|
||||
"NetworkInterface": "",
|
||||
"BindAddress": "",
|
||||
"AdvertiseAddress": "",
|
||||
"UseIPAddress": true,
|
||||
"EnableGossipCompression": true,
|
||||
"EnableExperimentalGossipEncryption": false,
|
||||
"ReadOnlyConfig": true,
|
||||
"GossipPort": 8074,
|
||||
"StreamingPort": 8075,
|
||||
"MaxIdleConns": 100,
|
||||
"MaxIdleConnsPerHost": 128,
|
||||
"IdleConnTimeoutMilliseconds": 90000
|
||||
},
|
||||
"MetricsSettings": {
|
||||
"Enable": false,
|
||||
"BlockProfileRate": 0,
|
||||
"ListenAddress": ":8067"
|
||||
},
|
||||
"ExperimentalSettings": {
|
||||
"ClientSideCertEnable": false,
|
||||
"ClientSideCertCheck": "secondary",
|
||||
"LinkMetadataTimeoutMilliseconds": 5000,
|
||||
"RestrictSystemAdmin": false,
|
||||
"UseNewSAMLLibrary": false,
|
||||
"CloudBilling": false,
|
||||
"EnableSharedChannels": false,
|
||||
"EnableRemoteClusterService": false,
|
||||
"EnableAppBar": false
|
||||
},
|
||||
"AnalyticsSettings": {
|
||||
"MaxUsersForStatistics": 2500
|
||||
},
|
||||
"ElasticsearchSettings": {
|
||||
"ConnectionURL": "http://localhost:9200",
|
||||
"Username": "elastic",
|
||||
"Password": "changeme",
|
||||
"EnableIndexing": false,
|
||||
"EnableSearching": false,
|
||||
"EnableAutocomplete": false,
|
||||
"Sniff": true,
|
||||
"PostIndexReplicas": 1,
|
||||
"PostIndexShards": 1,
|
||||
"ChannelIndexReplicas": 1,
|
||||
"ChannelIndexShards": 1,
|
||||
"UserIndexReplicas": 1,
|
||||
"UserIndexShards": 1,
|
||||
"AggregatePostsAfterDays": 365,
|
||||
"PostsAggregatorJobStartTime": "03:00",
|
||||
"IndexPrefix": "",
|
||||
"LiveIndexingBatchSize": 1,
|
||||
"BatchSize": 10000,
|
||||
"RequestTimeoutSeconds": 30,
|
||||
"SkipTLSVerification": false,
|
||||
"Trace": ""
|
||||
},
|
||||
"BleveSettings": {
|
||||
"IndexDir": "",
|
||||
"EnableIndexing": false,
|
||||
"EnableSearching": false,
|
||||
"EnableAutocomplete": false,
|
||||
"BatchSize": 10000
|
||||
},
|
||||
"DataRetentionSettings": {
|
||||
"EnableMessageDeletion": false,
|
||||
"EnableFileDeletion": false,
|
||||
"EnableBoardsDeletion": false,
|
||||
"MessageRetentionDays": 365,
|
||||
"FileRetentionDays": 365,
|
||||
"BoardsRetentionDays": 365,
|
||||
"DeletionJobStartTime": "02:00",
|
||||
"BatchSize": 3000
|
||||
},
|
||||
"MessageExportSettings": {
|
||||
"EnableExport": false,
|
||||
"ExportFormat": "actiance",
|
||||
"DailyRunTime": "01:00",
|
||||
"ExportFromTimestamp": 0,
|
||||
"BatchSize": 10000,
|
||||
"DownloadExportResults": false,
|
||||
"GlobalRelaySettings": {
|
||||
"CustomerType": "A9",
|
||||
"SMTPUsername": "",
|
||||
"SMTPPassword": "",
|
||||
"EmailAddress": "",
|
||||
"SMTPServerTimeout": 1800
|
||||
}
|
||||
},
|
||||
"JobSettings": {
|
||||
"RunJobs": true,
|
||||
"RunScheduler": true,
|
||||
"CleanupJobsThresholdDays": -1,
|
||||
"CleanupConfigThresholdDays": -1
|
||||
},
|
||||
"PluginSettings": {
|
||||
"Enable": true,
|
||||
"EnableUploads": false,
|
||||
"AllowInsecureDownloadURL": false,
|
||||
"EnableHealthCheck": true,
|
||||
"Directory": "./plugins",
|
||||
"ClientDirectory": "./client/plugins",
|
||||
"Plugins": {},
|
||||
"PluginStates": {
|
||||
"com.mattermost.apps": {
|
||||
"Enable": true
|
||||
},
|
||||
"com.mattermost.calls": {
|
||||
"Enable": true
|
||||
},
|
||||
"com.mattermost.nps": {
|
||||
"Enable": true
|
||||
},
|
||||
"focalboard": {
|
||||
"Enable": true
|
||||
},
|
||||
"playbooks": {
|
||||
"Enable": true
|
||||
}
|
||||
},
|
||||
"EnableMarketplace": true,
|
||||
"EnableRemoteMarketplace": true,
|
||||
"AutomaticPrepackagedPlugins": true,
|
||||
"RequirePluginSignature": false,
|
||||
"MarketplaceURL": "https://api.integrations.mattermost.com",
|
||||
"SignaturePublicKeyFiles": [],
|
||||
"ChimeraOAuthProxyURL": ""
|
||||
},
|
||||
"DisplaySettings": {
|
||||
"CustomURLSchemes": [],
|
||||
"ExperimentalTimezone": true
|
||||
},
|
||||
"GuestAccountsSettings": {
|
||||
"Enable": false,
|
||||
"AllowEmailAccounts": true,
|
||||
"EnforceMultifactorAuthentication": false,
|
||||
"RestrictCreationToDomains": ""
|
||||
},
|
||||
"ImageProxySettings": {
|
||||
"Enable": false,
|
||||
"ImageProxyType": "local",
|
||||
"RemoteImageProxyURL": "",
|
||||
"RemoteImageProxyOptions": ""
|
||||
},
|
||||
"CloudSettings": {
|
||||
"CWSURL": "https://customers.mattermost.com",
|
||||
"CWSAPIURL": "https://portal.internal.prod.cloud.mattermost.com"
|
||||
},
|
||||
"FeatureFlags": {
|
||||
"TestFeature": "off",
|
||||
"TestBoolFeature": false,
|
||||
"CollapsedThreads": true,
|
||||
"EnableRemoteClusterService": false,
|
||||
"AppsEnabled": true,
|
||||
"PluginPlaybooks": "",
|
||||
"PluginApps": "",
|
||||
"PluginFocalboard": "",
|
||||
"PluginCalls": "",
|
||||
"PermalinkPreviews": true,
|
||||
"CallsMobile": false,
|
||||
"CallsEnabled": true,
|
||||
"BoardsFeatureFlags": "",
|
||||
"GuidedChannelCreation": false,
|
||||
"InviteToTeam": "none",
|
||||
"CustomGroups": true,
|
||||
"BoardsDataRetention": false,
|
||||
"NormalizeLdapDNs": false,
|
||||
"EnableInactivityCheckJob": true,
|
||||
"UseCaseOnboarding": true,
|
||||
"GraphQL": false,
|
||||
"InsightsEnabled": true,
|
||||
"CommandPalette": false,
|
||||
"AdvancedTextEditor": true,
|
||||
"BoardsProduct": false,
|
||||
"PlanUpgradeButtonText": "upgrade"
|
||||
},
|
||||
"ImportSettings": {
|
||||
"Directory": "./import",
|
||||
"RetentionDays": 30
|
||||
},
|
||||
"ExportSettings": {
|
||||
"Directory": "./export",
|
||||
"RetentionDays": 30
|
||||
}
|
||||
}
|
|
@ -0,0 +1,4 @@
|
|||
DROP DATABASE mattermost;
|
||||
CREATE DATABASE mattermost;
|
||||
CREATE USER mmuser WITH PASSWORD 'mmpass';
|
||||
GRANT ALL PRIVILEGES ON DATABASE mattermost to mmuser;
|
|
@ -0,0 +1,4 @@
|
|||
#
|
||||
# PostgreSQL Authentication Configuration for Mattermost
|
||||
#
|
||||
local all mattermost trust
|
|
@ -5,7 +5,7 @@ After=postgresql.service
|
|||
BindsTo=postgresql.service
|
||||
[Service]
|
||||
Type=notify
|
||||
ExecStart=/opt/mattermost/bin/mattermost
|
||||
ExecStart=/usr/bin/mattermost --config files/etc/mattermost/config.json
|
||||
TimeoutStartSec=3600
|
||||
KillMode=mixed
|
||||
Restart=always
|
|
@ -0,0 +1,4 @@
|
|||
#!/bin/sh
|
||||
|
||||
cd /opt/mattermost
|
||||
./bin/mattermost --config /etc/mattermost/config.json
|
|
@ -0,0 +1 @@
|
|||
../../opt/mattermost/bin/mmctl
|
Binary file not shown.
|
@ -0,0 +1,897 @@
|
|||
Mattermost Licensing
|
||||
|
||||
SOFTWARE LICENSING
|
||||
|
||||
You are licensed to use compiled versions of the Mattermost platform produced by Mattermost, Inc. under an MIT LICENSE
|
||||
|
||||
- See MIT-COMPILED-LICENSE.md included in compiled versions for details
|
||||
|
||||
You may be licensed to use source code to create compiled versions not produced by Mattermost, Inc. in one of two ways:
|
||||
|
||||
1. Under the Free Software Foundation’s GNU AGPL v.3.0, subject to the exceptions outlined in this policy; or
|
||||
2. Under a commercial license available from Mattermost, Inc. by contacting commercial@mattermost.com
|
||||
|
||||
You are licensed to use the source code in Admin Tools and Configuration Files (templates/, config/default.json, i18n/, model/,
|
||||
plugin/ and all subdirectories thereof) under the Apache License v2.0.
|
||||
|
||||
We promise that we will not enforce the copyleft provisions in AGPL v3.0 against you if your application (a) does not
|
||||
link to the Mattermost Platform directly, but exclusively uses the Mattermost Admin Tools and Configuration Files, and
|
||||
(b) you have not modified, added to or adapted the source code of Mattermost in a way that results in the creation of
|
||||
a “modified version” or “work based on” Mattermost as these terms are defined in the AGPL v3.0 license.
|
||||
|
||||
MATTERMOST TRADEMARK GUIDELINES
|
||||
|
||||
Your use of the mark Mattermost is subject to Mattermost, Inc's prior written approval and our organization’s Trademark
|
||||
Standards of Use at https://mattermost.com/trademark-standards-of-use/. For trademark approval or any questions
|
||||
you have about using these trademarks, please email trademark@mattermost.com
|
||||
|
||||
------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
APPENDIX: How to apply the Apache License to your work.
|
||||
|
||||
To apply the Apache License to your work, attach the following
|
||||
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||
replaced with your own identifying information. (Don't include
|
||||
the brackets!) The text should be enclosed in the appropriate
|
||||
comment syntax for the file format. We also recommend that a
|
||||
file or class name and description of purpose be included on the
|
||||
same "printed page" as the copyright notice for easier
|
||||
identification within third-party archives.
|
||||
|
||||
Copyright [yyyy] [name of copyright owner]
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
|
||||
The software is released under the terms of the GNU Affero General Public
|
||||
License, version 3.
|
||||
|
||||
GNU AFFERO GENERAL PUBLIC LICENSE
|
||||
Version 3, 19 November 2007
|
||||
|
||||
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The GNU Affero General Public License is a free, copyleft license for
|
||||
software and other kinds of works, specifically designed to ensure
|
||||
cooperation with the community in the case of network server software.
|
||||
|
||||
The licenses for most software and other practical works are designed
|
||||
to take away your freedom to share and change the works. By contrast,
|
||||
our General Public Licenses are intended to guarantee your freedom to
|
||||
share and change all versions of a program--to make sure it remains free
|
||||
software for all its users.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
them if you wish), that you receive source code or can get it if you
|
||||
want it, that you can change the software or use pieces of it in new
|
||||
free programs, and that you know you can do these things.
|
||||
|
||||
Developers that use our General Public Licenses protect your rights
|
||||
with two steps: (1) assert copyright on the software, and (2) offer
|
||||
you this License which gives you legal permission to copy, distribute
|
||||
and/or modify the software.
|
||||
|
||||
A secondary benefit of defending all users' freedom is that
|
||||
improvements made in alternate versions of the program, if they
|
||||
receive widespread use, become available for other developers to
|
||||
incorporate. Many developers of free software are heartened and
|
||||
encouraged by the resulting cooperation. However, in the case of
|
||||
software used on network servers, this result may fail to come about.
|
||||
The GNU General Public License permits making a modified version and
|
||||
letting the public access it on a server without ever releasing its
|
||||
source code to the public.
|
||||
|
||||
The GNU Affero General Public License is designed specifically to
|
||||
ensure that, in such cases, the modified source code becomes available
|
||||
to the community. It requires the operator of a network server to
|
||||
provide the source code of the modified version running there to the
|
||||
users of that server. Therefore, public use of a modified version, on
|
||||
a publicly accessible server, gives the public access to the source
|
||||
code of the modified version.
|
||||
|
||||
An older license, called the Affero General Public License and
|
||||
published by Affero, was designed to accomplish similar goals. This is
|
||||
a different license, not a version of the Affero GPL, but Affero has
|
||||
released a new version of the Affero GPL which permits relicensing under
|
||||
this license.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
TERMS AND CONDITIONS
|
||||
|
||||
0. Definitions.
|
||||
|
||||
"This License" refers to version 3 of the GNU Affero General Public License.
|
||||
|
||||
"Copyright" also means copyright-like laws that apply to other kinds of
|
||||
works, such as semiconductor masks.
|
||||
|
||||
"The Program" refers to any copyrightable work licensed under this
|
||||
License. Each licensee is addressed as "you". "Licensees" and
|
||||
"recipients" may be individuals or organizations.
|
||||
|
||||
To "modify" a work means to copy from or adapt all or part of the work
|
||||
in a fashion requiring copyright permission, other than the making of an
|
||||
exact copy. The resulting work is called a "modified version" of the
|
||||
earlier work or a work "based on" the earlier work.
|
||||
|
||||
A "covered work" means either the unmodified Program or a work based
|
||||
on the Program.
|
||||
|
||||
To "propagate" a work means to do anything with it that, without
|
||||
permission, would make you directly or secondarily liable for
|
||||
infringement under applicable copyright law, except executing it on a
|
||||
computer or modifying a private copy. Propagation includes copying,
|
||||
distribution (with or without modification), making available to the
|
||||
public, and in some countries other activities as well.
|
||||
|
||||
To "convey" a work means any kind of propagation that enables other
|
||||
parties to make or receive copies. Mere interaction with a user through
|
||||
a computer network, with no transfer of a copy, is not conveying.
|
||||
|
||||
An interactive user interface displays "Appropriate Legal Notices"
|
||||
to the extent that it includes a convenient and prominently visible
|
||||
feature that (1) displays an appropriate copyright notice, and (2)
|
||||
tells the user that there is no warranty for the work (except to the
|
||||
extent that warranties are provided), that licensees may convey the
|
||||
work under this License, and how to view a copy of this License. If
|
||||
the interface presents a list of user commands or options, such as a
|
||||
menu, a prominent item in the list meets this criterion.
|
||||
|
||||
1. Source Code.
|
||||
|
||||
The "source code" for a work means the preferred form of the work
|
||||
for making modifications to it. "Object code" means any non-source
|
||||
form of a work.
|
||||
|
||||
A "Standard Interface" means an interface that either is an official
|
||||
standard defined by a recognized standards body, or, in the case of
|
||||
interfaces specified for a particular programming language, one that
|
||||
is widely used among developers working in that language.
|
||||
|
||||
The "System Libraries" of an executable work include anything, other
|
||||
than the work as a whole, that (a) is included in the normal form of
|
||||
packaging a Major Component, but which is not part of that Major
|
||||
Component, and (b) serves only to enable use of the work with that
|
||||
Major Component, or to implement a Standard Interface for which an
|
||||
implementation is available to the public in source code form. A
|
||||
"Major Component", in this context, means a major essential component
|
||||
(kernel, window system, and so on) of the specific operating system
|
||||
(if any) on which the executable work runs, or a compiler used to
|
||||
produce the work, or an object code interpreter used to run it.
|
||||
|
||||
The "Corresponding Source" for a work in object code form means all
|
||||
the source code needed to generate, install, and (for an executable
|
||||
work) run the object code and to modify the work, including scripts to
|
||||
control those activities. However, it does not include the work's
|
||||
System Libraries, or general-purpose tools or generally available free
|
||||
programs which are used unmodified in performing those activities but
|
||||
which are not part of the work. For example, Corresponding Source
|
||||
includes interface definition files associated with source files for
|
||||
the work, and the source code for shared libraries and dynamically
|
||||
linked subprograms that the work is specifically designed to require,
|
||||
such as by intimate data communication or control flow between those
|
||||
subprograms and other parts of the work.
|
||||
|
||||
The Corresponding Source need not include anything that users
|
||||
can regenerate automatically from other parts of the Corresponding
|
||||
Source.
|
||||
|
||||
The Corresponding Source for a work in source code form is that
|
||||
same work.
|
||||
|
||||
2. Basic Permissions.
|
||||
|
||||
All rights granted under this License are granted for the term of
|
||||
copyright on the Program, and are irrevocable provided the stated
|
||||
conditions are met. This License explicitly affirms your unlimited
|
||||
permission to run the unmodified Program. The output from running a
|
||||
covered work is covered by this License only if the output, given its
|
||||
content, constitutes a covered work. This License acknowledges your
|
||||
rights of fair use or other equivalent, as provided by copyright law.
|
||||
|
||||
You may make, run and propagate covered works that you do not
|
||||
convey, without conditions so long as your license otherwise remains
|
||||
in force. You may convey covered works to others for the sole purpose
|
||||
of having them make modifications exclusively for you, or provide you
|
||||
with facilities for running those works, provided that you comply with
|
||||
the terms of this License in conveying all material for which you do
|
||||
not control copyright. Those thus making or running the covered works
|
||||
for you must do so exclusively on your behalf, under your direction
|
||||
and control, on terms that prohibit them from making any copies of
|
||||
your copyrighted material outside their relationship with you.
|
||||
|
||||
Conveying under any other circumstances is permitted solely under
|
||||
the conditions stated below. Sublicensing is not allowed; section 10
|
||||
makes it unnecessary.
|
||||
|
||||
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
|
||||
|
||||
No covered work shall be deemed part of an effective technological
|
||||
measure under any applicable law fulfilling obligations under article
|
||||
11 of the WIPO copyright treaty adopted on 20 December 1996, or
|
||||
similar laws prohibiting or restricting circumvention of such
|
||||
measures.
|
||||
|
||||
When you convey a covered work, you waive any legal power to forbid
|
||||
circumvention of technological measures to the extent such circumvention
|
||||
is effected by exercising rights under this License with respect to
|
||||
the covered work, and you disclaim any intention to limit operation or
|
||||
modification of the work as a means of enforcing, against the work's
|
||||
users, your or third parties' legal rights to forbid circumvention of
|
||||
technological measures.
|
||||
|
||||
4. Conveying Verbatim Copies.
|
||||
|
||||
You may convey verbatim copies of the Program's source code as you
|
||||
receive it, in any medium, provided that you conspicuously and
|
||||
appropriately publish on each copy an appropriate copyright notice;
|
||||
keep intact all notices stating that this License and any
|
||||
non-permissive terms added in accord with section 7 apply to the code;
|
||||
keep intact all notices of the absence of any warranty; and give all
|
||||
recipients a copy of this License along with the Program.
|
||||
|
||||
You may charge any price or no price for each copy that you convey,
|
||||
and you may offer support or warranty protection for a fee.
|
||||
|
||||
5. Conveying Modified Source Versions.
|
||||
|
||||
You may convey a work based on the Program, or the modifications to
|
||||
produce it from the Program, in the form of source code under the
|
||||
terms of section 4, provided that you also meet all of these conditions:
|
||||
|
||||
a) The work must carry prominent notices stating that you modified
|
||||
it, and giving a relevant date.
|
||||
|
||||
b) The work must carry prominent notices stating that it is
|
||||
released under this License and any conditions added under section
|
||||
7. This requirement modifies the requirement in section 4 to
|
||||
"keep intact all notices".
|
||||
|
||||
c) You must license the entire work, as a whole, under this
|
||||
License to anyone who comes into possession of a copy. This
|
||||
License will therefore apply, along with any applicable section 7
|
||||
additional terms, to the whole of the work, and all its parts,
|
||||
regardless of how they are packaged. This License gives no
|
||||
permission to license the work in any other way, but it does not
|
||||
invalidate such permission if you have separately received it.
|
||||
|
||||
d) If the work has interactive user interfaces, each must display
|
||||
Appropriate Legal Notices; however, if the Program has interactive
|
||||
interfaces that do not display Appropriate Legal Notices, your
|
||||
work need not make them do so.
|
||||
|
||||
A compilation of a covered work with other separate and independent
|
||||
works, which are not by their nature extensions of the covered work,
|
||||
and which are not combined with it such as to form a larger program,
|
||||
in or on a volume of a storage or distribution medium, is called an
|
||||
"aggregate" if the compilation and its resulting copyright are not
|
||||
used to limit the access or legal rights of the compilation's users
|
||||
beyond what the individual works permit. Inclusion of a covered work
|
||||
in an aggregate does not cause this License to apply to the other
|
||||
parts of the aggregate.
|
||||
|
||||
6. Conveying Non-Source Forms.
|
||||
|
||||
You may convey a covered work in object code form under the terms
|
||||
of sections 4 and 5, provided that you also convey the
|
||||
machine-readable Corresponding Source under the terms of this License,
|
||||
in one of these ways:
|
||||
|
||||
a) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by the
|
||||
Corresponding Source fixed on a durable physical medium
|
||||
customarily used for software interchange.
|
||||
|
||||
b) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by a
|
||||
written offer, valid for at least three years and valid for as
|
||||
long as you offer spare parts or customer support for that product
|
||||
model, to give anyone who possesses the object code either (1) a
|
||||
copy of the Corresponding Source for all the software in the
|
||||
product that is covered by this License, on a durable physical
|
||||
medium customarily used for software interchange, for a price no
|
||||
more than your reasonable cost of physically performing this
|
||||
conveying of source, or (2) access to copy the
|
||||
Corresponding Source from a network server at no charge.
|
||||
|
||||
c) Convey individual copies of the object code with a copy of the
|
||||
written offer to provide the Corresponding Source. This
|
||||
alternative is allowed only occasionally and noncommercially, and
|
||||
only if you received the object code with such an offer, in accord
|
||||
with subsection 6b.
|
||||
|
||||
d) Convey the object code by offering access from a designated
|
||||
place (gratis or for a charge), and offer equivalent access to the
|
||||
Corresponding Source in the same way through the same place at no
|
||||
further charge. You need not require recipients to copy the
|
||||
Corresponding Source along with the object code. If the place to
|
||||
copy the object code is a network server, the Corresponding Source
|
||||
may be on a different server (operated by you or a third party)
|
||||
that supports equivalent copying facilities, provided you maintain
|
||||
clear directions next to the object code saying where to find the
|
||||
Corresponding Source. Regardless of what server hosts the
|
||||
Corresponding Source, you remain obligated to ensure that it is
|
||||
available for as long as needed to satisfy these requirements.
|
||||
|
||||
e) Convey the object code using peer-to-peer transmission, provided
|
||||
you inform other peers where the object code and Corresponding
|
||||
Source of the work are being offered to the general public at no
|
||||
charge under subsection 6d.
|
||||
|
||||
A separable portion of the object code, whose source code is excluded
|
||||
from the Corresponding Source as a System Library, need not be
|
||||
included in conveying the object code work.
|
||||
|
||||
A "User Product" is either (1) a "consumer product", which means any
|
||||
tangible personal property which is normally used for personal, family,
|
||||
or household purposes, or (2) anything designed or sold for incorporation
|
||||
into a dwelling. In determining whether a product is a consumer product,
|
||||
doubtful cases shall be resolved in favor of coverage. For a particular
|
||||
product received by a particular user, "normally used" refers to a
|
||||
typical or common use of that class of product, regardless of the status
|
||||
of the particular user or of the way in which the particular user
|
||||
actually uses, or expects or is expected to use, the product. A product
|
||||
is a consumer product regardless of whether the product has substantial
|
||||
commercial, industrial or non-consumer uses, unless such uses represent
|
||||
the only significant mode of use of the product.
|
||||
|
||||
"Installation Information" for a User Product means any methods,
|
||||
procedures, authorization keys, or other information required to install
|
||||
and execute modified versions of a covered work in that User Product from
|
||||
a modified version of its Corresponding Source. The information must
|
||||
suffice to ensure that the continued functioning of the modified object
|
||||
code is in no case prevented or interfered with solely because
|
||||
modification has been made.
|
||||
|
||||
If you convey an object code work under this section in, or with, or
|
||||
specifically for use in, a User Product, and the conveying occurs as
|
||||
part of a transaction in which the right of possession and use of the
|
||||
User Product is transferred to the recipient in perpetuity or for a
|
||||
fixed term (regardless of how the transaction is characterized), the
|
||||
Corresponding Source conveyed under this section must be accompanied
|
||||
by the Installation Information. But this requirement does not apply
|
||||
if neither you nor any third party retains the ability to install
|
||||
modified object code on the User Product (for example, the work has
|
||||
been installed in ROM).
|
||||
|
||||
The requirement to provide Installation Information does not include a
|
||||
requirement to continue to provide support service, warranty, or updates
|
||||
for a work that has been modified or installed by the recipient, or for
|
||||
the User Product in which it has been modified or installed. Access to a
|
||||
network may be denied when the modification itself materially and
|
||||
adversely affects the operation of the network or violates the rules and
|
||||
protocols for communication across the network.
|
||||
|
||||
Corresponding Source conveyed, and Installation Information provided,
|
||||
in accord with this section must be in a format that is publicly
|
||||
documented (and with an implementation available to the public in
|
||||
source code form), and must require no special password or key for
|
||||
unpacking, reading or copying.
|
||||
|
||||
7. Additional Terms.
|
||||
|
||||
"Additional permissions" are terms that supplement the terms of this
|
||||
License by making exceptions from one or more of its conditions.
|
||||
Additional permissions that are applicable to the entire Program shall
|
||||
be treated as though they were included in this License, to the extent
|
||||
that they are valid under applicable law. If additional permissions
|
||||
apply only to part of the Program, that part may be used separately
|
||||
under those permissions, but the entire Program remains governed by
|
||||
this License without regard to the additional permissions.
|
||||
|
||||
When you convey a copy of a covered work, you may at your option
|
||||
remove any additional permissions from that copy, or from any part of
|
||||
it. (Additional permissions may be written to require their own
|
||||
removal in certain cases when you modify the work.) You may place
|
||||
additional permissions on material, added by you to a covered work,
|
||||
for which you have or can give appropriate copyright permission.
|
||||
|
||||
Notwithstanding any other provision of this License, for material you
|
||||
add to a covered work, you may (if authorized by the copyright holders of
|
||||
that material) supplement the terms of this License with terms:
|
||||
|
||||
a) Disclaiming warranty or limiting liability differently from the
|
||||
terms of sections 15 and 16 of this License; or
|
||||
|
||||
b) Requiring preservation of specified reasonable legal notices or
|
||||
author attributions in that material or in the Appropriate Legal
|
||||
Notices displayed by works containing it; or
|
||||
|
||||
c) Prohibiting misrepresentation of the origin of that material, or
|
||||
requiring that modified versions of such material be marked in
|
||||
reasonable ways as different from the original version; or
|
||||
|
||||
d) Limiting the use for publicity purposes of names of licensors or
|
||||
authors of the material; or
|
||||
|
||||
e) Declining to grant rights under trademark law for use of some
|
||||
trade names, trademarks, or service marks; or
|
||||
|
||||
f) Requiring indemnification of licensors and authors of that
|
||||
material by anyone who conveys the material (or modified versions of
|
||||
it) with contractual assumptions of liability to the recipient, for
|
||||
any liability that these contractual assumptions directly impose on
|
||||
those licensors and authors.
|
||||
|
||||
All other non-permissive additional terms are considered "further
|
||||
restrictions" within the meaning of section 10. If the Program as you
|
||||
received it, or any part of it, contains a notice stating that it is
|
||||
governed by this License along with a term that is a further
|
||||
restriction, you may remove that term. If a license document contains
|
||||
a further restriction but permits relicensing or conveying under this
|
||||
License, you may add to a covered work material governed by the terms
|
||||
of that license document, provided that the further restriction does
|
||||
not survive such relicensing or conveying.
|
||||
|
||||
If you add terms to a covered work in accord with this section, you
|
||||
must place, in the relevant source files, a statement of the
|
||||
additional terms that apply to those files, or a notice indicating
|
||||
where to find the applicable terms.
|
||||
|
||||
Additional terms, permissive or non-permissive, may be stated in the
|
||||
form of a separately written license, or stated as exceptions;
|
||||
the above requirements apply either way.
|
||||
|
||||
8. Termination.
|
||||
|
||||
You may not propagate or modify a covered work except as expressly
|
||||
provided under this License. Any attempt otherwise to propagate or
|
||||
modify it is void, and will automatically terminate your rights under
|
||||
this License (including any patent licenses granted under the third
|
||||
paragraph of section 11).
|
||||
|
||||
However, if you cease all violation of this License, then your
|
||||
license from a particular copyright holder is reinstated (a)
|
||||
provisionally, unless and until the copyright holder explicitly and
|
||||
finally terminates your license, and (b) permanently, if the copyright
|
||||
holder fails to notify you of the violation by some reasonable means
|
||||
prior to 60 days after the cessation.
|
||||
|
||||
Moreover, your license from a particular copyright holder is
|
||||
reinstated permanently if the copyright holder notifies you of the
|
||||
violation by some reasonable means, this is the first time you have
|
||||
received notice of violation of this License (for any work) from that
|
||||
copyright holder, and you cure the violation prior to 30 days after
|
||||
your receipt of the notice.
|
||||
|
||||
Termination of your rights under this section does not terminate the
|
||||
licenses of parties who have received copies or rights from you under
|
||||
this License. If your rights have been terminated and not permanently
|
||||
reinstated, you do not qualify to receive new licenses for the same
|
||||
material under section 10.
|
||||
|
||||
9. Acceptance Not Required for Having Copies.
|
||||
|
||||
You are not required to accept this License in order to receive or
|
||||
run a copy of the Program. Ancillary propagation of a covered work
|
||||
occurring solely as a consequence of using peer-to-peer transmission
|
||||
to receive a copy likewise does not require acceptance. However,
|
||||
nothing other than this License grants you permission to propagate or
|
||||
modify any covered work. These actions infringe copyright if you do
|
||||
not accept this License. Therefore, by modifying or propagating a
|
||||
covered work, you indicate your acceptance of this License to do so.
|
||||
|
||||
10. Automatic Licensing of Downstream Recipients.
|
||||
|
||||
Each time you convey a covered work, the recipient automatically
|
||||
receives a license from the original licensors, to run, modify and
|
||||
propagate that work, subject to this License. You are not responsible
|
||||
for enforcing compliance by third parties with this License.
|
||||
|
||||
An "entity transaction" is a transaction transferring control of an
|
||||
organization, or substantially all assets of one, or subdividing an
|
||||
organization, or merging organizations. If propagation of a covered
|
||||
work results from an entity transaction, each party to that
|
||||
transaction who receives a copy of the work also receives whatever
|
||||
licenses to the work the party's predecessor in interest had or could
|
||||
give under the previous paragraph, plus a right to possession of the
|
||||
Corresponding Source of the work from the predecessor in interest, if
|
||||
the predecessor has it or can get it with reasonable efforts.
|
||||
|
||||
You may not impose any further restrictions on the exercise of the
|
||||
rights granted or affirmed under this License. For example, you may
|
||||
not impose a license fee, royalty, or other charge for exercise of
|
||||
rights granted under this License, and you may not initiate litigation
|
||||
(including a cross-claim or counterclaim in a lawsuit) alleging that
|
||||
any patent claim is infringed by making, using, selling, offering for
|
||||
sale, or importing the Program or any portion of it.
|
||||
|
||||
11. Patents.
|
||||
|
||||
A "contributor" is a copyright holder who authorizes use under this
|
||||
License of the Program or a work on which the Program is based. The
|
||||
work thus licensed is called the contributor's "contributor version".
|
||||
|
||||
A contributor's "essential patent claims" are all patent claims
|
||||
owned or controlled by the contributor, whether already acquired or
|
||||
hereafter acquired, that would be infringed by some manner, permitted
|
||||
by this License, of making, using, or selling its contributor version,
|
||||
but do not include claims that would be infringed only as a
|
||||
consequence of further modification of the contributor version. For
|
||||
purposes of this definition, "control" includes the right to grant
|
||||
patent sublicenses in a manner consistent with the requirements of
|
||||
this License.
|
||||
|
||||
Each contributor grants you a non-exclusive, worldwide, royalty-free
|
||||
patent license under the contributor's essential patent claims, to
|
||||
make, use, sell, offer for sale, import and otherwise run, modify and
|
||||
propagate the contents of its contributor version.
|
||||
|
||||
In the following three paragraphs, a "patent license" is any express
|
||||
agreement or commitment, however denominated, not to enforce a patent
|
||||
(such as an express permission to practice a patent or covenant not to
|
||||
sue for patent infringement). To "grant" such a patent license to a
|
||||
party means to make such an agreement or commitment not to enforce a
|
||||
patent against the party.
|
||||
|
||||
If you convey a covered work, knowingly relying on a patent license,
|
||||
and the Corresponding Source of the work is not available for anyone
|
||||
to copy, free of charge and under the terms of this License, through a
|
||||
publicly available network server or other readily accessible means,
|
||||
then you must either (1) cause the Corresponding Source to be so
|
||||
available, or (2) arrange to deprive yourself of the benefit of the
|
||||
patent license for this particular work, or (3) arrange, in a manner
|
||||
consistent with the requirements of this License, to extend the patent
|
||||
license to downstream recipients. "Knowingly relying" means you have
|
||||
actual knowledge that, but for the patent license, your conveying the
|
||||
covered work in a country, or your recipient's use of the covered work
|
||||
in a country, would infringe one or more identifiable patents in that
|
||||
country that you have reason to believe are valid.
|
||||
|
||||
If, pursuant to or in connection with a single transaction or
|
||||
arrangement, you convey, or propagate by procuring conveyance of, a
|
||||
covered work, and grant a patent license to some of the parties
|
||||
receiving the covered work authorizing them to use, propagate, modify
|
||||
or convey a specific copy of the covered work, then the patent license
|
||||
you grant is automatically extended to all recipients of the covered
|
||||
work and works based on it.
|
||||
|
||||
A patent license is "discriminatory" if it does not include within
|
||||
the scope of its coverage, prohibits the exercise of, or is
|
||||
conditioned on the non-exercise of one or more of the rights that are
|
||||
specifically granted under this License. You may not convey a covered
|
||||
work if you are a party to an arrangement with a third party that is
|
||||
in the business of distributing software, under which you make payment
|
||||
to the third party based on the extent of your activity of conveying
|
||||
the work, and under which the third party grants, to any of the
|
||||
parties who would receive the covered work from you, a discriminatory
|
||||
patent license (a) in connection with copies of the covered work
|
||||
conveyed by you (or copies made from those copies), or (b) primarily
|
||||
for and in connection with specific products or compilations that
|
||||
contain the covered work, unless you entered into that arrangement,
|
||||
or that patent license was granted, prior to 28 March 2007.
|
||||
|
||||
Nothing in this License shall be construed as excluding or limiting
|
||||
any implied license or other defenses to infringement that may
|
||||
otherwise be available to you under applicable patent law.
|
||||
|
||||
12. No Surrender of Others' Freedom.
|
||||
|
||||
If conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot convey a
|
||||
covered work so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you may
|
||||
not convey it at all. For example, if you agree to terms that obligate you
|
||||
to collect a royalty for further conveying from those to whom you convey
|
||||
the Program, the only way you could satisfy both those terms and this
|
||||
License would be to refrain entirely from conveying the Program.
|
||||
|
||||
13. Remote Network Interaction; Use with the GNU General Public License.
|
||||
|
||||
Notwithstanding any other provision of this License, if you modify the
|
||||
Program, your modified version must prominently offer all users
|
||||
interacting with it remotely through a computer network (if your version
|
||||
supports such interaction) an opportunity to receive the Corresponding
|
||||
Source of your version by providing access to the Corresponding Source
|
||||
from a network server at no charge, through some standard or customary
|
||||
means of facilitating copying of software. This Corresponding Source
|
||||
shall include the Corresponding Source for any work covered by version 3
|
||||
of the GNU General Public License that is incorporated pursuant to the
|
||||
following paragraph.
|
||||
|
||||
Notwithstanding any other provision of this License, you have
|
||||
permission to link or combine any covered work with a work licensed
|
||||
under version 3 of the GNU General Public License into a single
|
||||
combined work, and to convey the resulting work. The terms of this
|
||||
License will continue to apply to the part which is the covered work,
|
||||
but the work with which it is combined will remain governed by version
|
||||
3 of the GNU General Public License.
|
||||
|
||||
14. Revised Versions of this License.
|
||||
|
||||
The Free Software Foundation may publish revised and/or new versions of
|
||||
the GNU Affero General Public License from time to time. Such new versions
|
||||
will be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the
|
||||
Program specifies that a certain numbered version of the GNU Affero General
|
||||
Public License "or any later version" applies to it, you have the
|
||||
option of following the terms and conditions either of that numbered
|
||||
version or of any later version published by the Free Software
|
||||
Foundation. If the Program does not specify a version number of the
|
||||
GNU Affero General Public License, you may choose any version ever published
|
||||
by the Free Software Foundation.
|
||||
|
||||
If the Program specifies that a proxy can decide which future
|
||||
versions of the GNU Affero General Public License can be used, that proxy's
|
||||
public statement of acceptance of a version permanently authorizes you
|
||||
to choose that version for the Program.
|
||||
|
||||
Later license versions may give you additional or different
|
||||
permissions. However, no additional obligations are imposed on any
|
||||
author or copyright holder as a result of your choosing to follow a
|
||||
later version.
|
||||
|
||||
15. Disclaimer of Warranty.
|
||||
|
||||
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
|
||||
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
|
||||
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
|
||||
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
|
||||
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
|
||||
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
|
||||
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||
|
||||
16. Limitation of Liability.
|
||||
|
||||
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
|
||||
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
|
||||
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
|
||||
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
|
||||
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
|
||||
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
|
||||
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
|
||||
SUCH DAMAGES.
|
||||
|
||||
17. Interpretation of Sections 15 and 16.
|
||||
|
||||
If the disclaimer of warranty and limitation of liability provided
|
||||
above cannot be given local legal effect according to their terms,
|
||||
reviewing courts shall apply local law that most closely approximates
|
||||
an absolute waiver of all civil liability in connection with the
|
||||
Program, unless a warranty or assumption of liability accompanies a
|
||||
copy of the Program in return for a fee.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to the public, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest
|
||||
to attach them to the start of each source file to most effectively
|
||||
state the exclusion of warranty; and each file should have at least
|
||||
the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Affero General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If your software can interact with users remotely through a computer
|
||||
network, you should also make sure that it provides a way for users to
|
||||
get its source. For example, if your program is a web application, its
|
||||
interface could display a "Source" link that leads users to an archive
|
||||
of the code. There are many ways you could offer source, and different
|
||||
solutions will be better for different programs; see section 13 for the
|
||||
specific requirements.
|
||||
|
||||
You should also get your employer (if you work as a programmer) or school,
|
||||
if any, to sign a "copyright disclaimer" for the program, if necessary.
|
||||
For more information on this, and how to apply and follow the GNU AGPL, see
|
||||
<http://www.gnu.org/licenses/>.
|
|
@ -0,0 +1,23 @@
|
|||
#!/bin/sh
|
||||
|
||||
# create the mattermost user and database
|
||||
su postgres -c 'createuser mmuser'
|
||||
|
||||
# not sure this or the other one works
|
||||
# su postgres -c 'createdb mattermost'
|
||||
su postgres -c 'createdb -O mmuser mattermost'
|
||||
|
||||
echo
|
||||
echo systemctl status mattermost.service
|
||||
echo
|
||||
echo 'su - postgres'
|
||||
echo 'psql'
|
||||
echo '\\db # will list the tablespaces'
|
||||
echo '\\dg # will list users'
|
||||
echo
|
||||
echo "ALTER USER mmuser with password 'mmpass';"
|
||||
echo
|
||||
echo "CREATE DATABASE mattermost;"
|
||||
echo "CREATE USER mmuser WITH PASSWORD 'mmpass';"
|
||||
echo "GRANT ALL PRIVILEGES ON DATABASE mattermost to mmuser;"
|
||||
echo
|
|
@ -0,0 +1,15 @@
|
|||
#!/bin/sh -x
|
||||
echo "got here in mattermost -- jcarr put this here"
|
||||
touch /tmp/mattermost.jcarr.install
|
||||
echo
|
||||
echo follow the instructions to complete an install from here:
|
||||
echo
|
||||
echo https://docs.mattermost.com/install/install-tar.html
|
||||
echo
|
||||
|
||||
useradd --system --user-group mattermost
|
||||
echo $?
|
||||
|
||||
systemctl daemon-reload
|
||||
echo systemctl status mattermost.service
|
||||
echo systemctl start mattermost.service
|
|
@ -0,0 +1,74 @@
|
|||
.PHONY: control
|
||||
|
||||
VERSION=221118-e58fee0fb
|
||||
BASENAME=photoprism
|
||||
|
||||
help:
|
||||
@echo
|
||||
@echo "make all # to attempt to download, extract and build the .deb package using dpkg"
|
||||
@echo
|
||||
|
||||
all: download clean extract DEBIAN build
|
||||
|
||||
build-dep:
|
||||
apt install tensorflow # this isn't actually packaged
|
||||
git clone https://github.com/photoprism/photoprism.git
|
||||
dd photoprism
|
||||
git checkout release
|
||||
sudo make all
|
||||
sudo ./scripts/build.sh prod /opt/photoprism/bin/photoprism
|
||||
sudo cp -a assets/ /opt/photoprism/assets
|
||||
# now follow instructions for adduser, postgresql, etc:
|
||||
# https://github.com/IndrekHaav/photoprism-debian
|
||||
|
||||
clean:
|
||||
rm -rf ../files
|
||||
rm -f ../*.deb
|
||||
rm -f ../*.tar.xz data.tar.xz
|
||||
rm -rf DEBIAN
|
||||
|
||||
download:
|
||||
@echo
|
||||
@echo This uses the binary /usr/local/bin/photoprism
|
||||
@echo
|
||||
@echo https://github.com/photoprism/photoprism/releases
|
||||
@echo mkdir ~/go/src/github.com/photoprism; cd ~/go/src/github.com/photoprism/
|
||||
@echo git clone http://github.com/photoprism/photoprism
|
||||
@echo cd photoprims/; go get -v -u ...
|
||||
|
||||
extract:
|
||||
cp -a files ../
|
||||
mkdir -p ../files/opt/
|
||||
cd ../files/opt/ && tar xfz ../../221118-e58fee0fb.tar.gz
|
||||
|
||||
# makes the DEBIAN/ directory
|
||||
DEBIAN:
|
||||
mkdir -p DEBIAN
|
||||
|
||||
# make the md5sum file
|
||||
cd ../files/ && find -type f -exec md5sum '{}' \; |sort -k2 >../md5sums
|
||||
mv ../md5sums DEBIAN/
|
||||
|
||||
# make the control there
|
||||
mkdir -p DEBIAN
|
||||
cp control DEBIAN/
|
||||
# echo Version: ${VERSION} >>DEBIAN/control
|
||||
|
||||
cp postinst DEBIAN
|
||||
|
||||
build:
|
||||
mv DEBIAN ../files/
|
||||
cd .. && dpkg-deb --build files ${BASENAME}_${VERSION}_amd64.deb
|
||||
cd .. && dpkg-deb --info ${BASENAME}_${VERSION}_amd64.deb
|
||||
|
||||
# how to make a debian package "raw" just using tar and ar
|
||||
#
|
||||
# READ THIS AGAIN:
|
||||
#
|
||||
# A .deb file is just output from 'ar rcs'
|
||||
#
|
||||
tar-ar: control
|
||||
cd DEBIAN && tar --ignore-failed-read -cvJf ../control.tar.xz .
|
||||
cd files && tar -cvJf ../data.tar.xz .
|
||||
ar rcs ${BASENAME}_${VERSION}_amd64.deb debian-binary control.tar.xz data.tar.xz
|
||||
dpkg-deb --info ${BASENAME}_${VERSION}_amd64.deb
|
|
@ -0,0 +1 @@
|
|||
10
|
|
@ -0,0 +1,13 @@
|
|||
Source: photoprism
|
||||
Build-Depends: golang
|
||||
Package: photoprism
|
||||
Version: 221118-e58fee0fb
|
||||
Maintainer: Jeff Carr <jcarr@wit.com>
|
||||
Architecture: any
|
||||
Depends:
|
||||
Description: self-hosted web application for managing and organising a photo collection
|
||||
PhotoPrism® is an AI-Powered Photos App for the Decentralized Web.
|
||||
.
|
||||
It makes use of the latest technologies to tag and find pictures automatically without
|
||||
getting in your way. You can run it at home, on a private server, or in the cloud.
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
[Unit]
|
||||
Description=PhotoPrism service
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=forking
|
||||
User=photoprism
|
||||
Group=photoprism
|
||||
WorkingDirectory=/opt/photoprism
|
||||
EnvironmentFile=/var/lib/photoprism/.env
|
||||
ExecStart=/opt/photoprism/bin/photoprism up -d
|
||||
ExecStop=/opt/photoprism/bin/photoprism down
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
|
@ -0,0 +1 @@
|
|||
#!/bin/sh
|
|
@ -0,0 +1,78 @@
|
|||
.PHONY: control
|
||||
|
||||
VERSION=0.6.2
|
||||
BASENAME=tensorflow
|
||||
|
||||
help:
|
||||
@echo
|
||||
@echo "make all # to attempt to download, extract and build the .deb package using dpkg"
|
||||
@echo
|
||||
|
||||
all: download clean extract DEBIAN build
|
||||
|
||||
build-deb:
|
||||
# apt install -y gcc g++ git gnupg make zip unzip
|
||||
# pip install tensorflow
|
||||
# this actually seems to work:
|
||||
pip install tf-nightly-cpu
|
||||
|
||||
build:
|
||||
apt install python3-dev python3-pip
|
||||
pip install -U --user pip numpy wheel packaging requests opt_einsum
|
||||
pip install -U --user keras_preprocessing --no-deps
|
||||
apt install bazel
|
||||
mkdir ~/tmp; cd ~/tmp/ && git clone https://github.com/tensorflow/tensorflow.git
|
||||
./configure
|
||||
bazel build [--config=option] //tensorflow/tools/pip_package:build_pip_package # for cpu support
|
||||
bazel build --config=cuda [--config=option] //tensorflow/tools/pip_package:build_pip_package # for gpu support
|
||||
./bazel-bin/tensorflow/tools/pip_package/build_pip_package --nightly_flag /tmp/tensorflow_pkg
|
||||
pip install /tmp/tensorflow_pkg/tensorflow-version
|
||||
|
||||
clean:
|
||||
rm -rf ../files
|
||||
rm -f ../*.deb
|
||||
rm -f ../*.tar.xz data.tar.xz
|
||||
rm -rf DEBIAN
|
||||
|
||||
download:
|
||||
@echo
|
||||
@echo This uses the binary /usr/local/bin/tensorflow
|
||||
@echo
|
||||
@echo pip install tensorflow
|
||||
|
||||
extract:
|
||||
cp -a files ../
|
||||
mkdir -p ../files/usr/bin
|
||||
cp /usr/local/bin/tensorflow ../files/usr/bin
|
||||
|
||||
# makes the DEBIAN/ directory
|
||||
DEBIAN:
|
||||
mkdir -p DEBIAN
|
||||
|
||||
# make the md5sum file
|
||||
cd ../files/ && find -type f -exec md5sum '{}' \; |sort -k2 >../md5sums
|
||||
mv ../md5sums DEBIAN/
|
||||
|
||||
# make the control there
|
||||
mkdir -p DEBIAN
|
||||
cp control DEBIAN/
|
||||
# echo Version: ${VERSION} >>DEBIAN/control
|
||||
|
||||
cp postinst DEBIAN
|
||||
|
||||
build:
|
||||
mv DEBIAN ../files/
|
||||
cd .. && dpkg-deb --build files ${BASENAME}_${VERSION}_amd64.deb
|
||||
cd .. && dpkg-deb --info ${BASENAME}_${VERSION}_amd64.deb
|
||||
|
||||
# how to make a debian package "raw" just using tar and ar
|
||||
#
|
||||
# READ THIS AGAIN:
|
||||
#
|
||||
# A .deb file is just output from 'ar rcs'
|
||||
#
|
||||
tar-ar: control
|
||||
cd DEBIAN && tar --ignore-failed-read -cvJf ../control.tar.xz .
|
||||
cd files && tar -cvJf ../data.tar.xz .
|
||||
ar rcs ${BASENAME}_${VERSION}_amd64.deb debian-binary control.tar.xz data.tar.xz
|
||||
dpkg-deb --info ${BASENAME}_${VERSION}_amd64.deb
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue