Maison
biniou est un webui auto-hébergé pour plusieurs types de GenAI (intelligence artificielle générative). Vous pouvez générer du contenu multimédia avec l'IA et utiliser un chatbot sur votre propre ordinateur, même sans GPU dédié et à partir de 8 Go de RAM. Peut fonctionner hors ligne (une fois déployé et les modèles requis téléchargés).
GNU/Linux [ base OpenSUSE | Socle RHEL | Base Debian ] • Windows • macOS Intel (expérimental) • Docker
Documentation ❓ | Salle d'exposition ?️
Mises à jour
? 2024-11-23 : Les mises à jour de cette semaine >
- Ajoutez la prise en charge du modèle Chatbot prithivMLmods/Llama-Doctor-3.2-3B-Instruct-GGUF.
- Ajout de la prise en charge des modèles Flux LoRA Strangerzonehf/Flux-Super-Realism-LoRA, Strangerzonehf/Flux-Midjourney-Mix-LoRA, Norod78/Flux_1_Dev_LoRA_Paper-Cutout-Style, prithivMLmods/Knitted-Character-Flux-LoRA, Shakker-Labs/FLUX. 1-dev-LoRA-Enfants-Simple-Sketch, renderartist/retrocomicflux, prithivMLmods/Seamless-Pattern-Design-Flux-LoRA, alvdansen/haunted_linework_flux, prithivMLmods/Flux.1-Dev-Poster-HQ-LoRA, Grohv/randart2_lora, renderartist/retroadflux, prithivMLmods/Flux.1-Dev- Temps réel-Toon-Mix et prithivMLmods/Flux-Product-Ad-Backdrop.
? 2024-11-16 : Les mises à jour de cette semaine >
- Ajoutez la prise en charge des modèles Chatbot bartowski/SuperNova-Medius-GGUF et bartowski/OpenCoder-8B-Instruct-GGUF.
- Ajout de la prise en charge des modèles Flux LoRA Shakker-Labs/FLUX.1-dev-LoRA-Text-Poster, dataautogpt3/FLUX-SyntheticAnime, prithivMLmods/Canopus-Pixar-3D-Flux-LoRA, prithivMLmods/Flux-Dev-Real-Anime- LoRA, glif-loradex-trainer/shipley_flux_dev_AlicesAdventuresInWonderland_v2, prithivMLmods/Ton618-Only-Stickers-Flux-LoRA, markury/surrealidescent, FounderFeed/gta-style-lora, Keltezaa/movie-poster-ce-sdxl-flux, FounderFeed/MidjourneyMeetFlux et dooart/flux-lora-vintage-tarot.
- Ajout de la prise en charge des modèles SD 3.5 Large LoRA nerijs/pixel-art-3.5L.
- Ajoutez la prise en charge préliminaire du module Flux to IP-Adapter.
- Ajoutez un support préliminaire pour le module Flux au ControlNet (seuls Canny et Deep fonctionnent actuellement).
- Optimisations et corrections de bugs.
? 09/11/2024 : Les mises à jour de cette semaine >
- Ajoutez la prise en charge des modèles Chatbot bartowski/SmolLM2-1.7B-Instruct-GGUF, bartowski/cybertron-v4-qw7B-MGS-GGUF et bartowski/OpenChat-3.5-0106_32K-PoSE-GGUF.
- Mise à jour du modèle Chatbot Llama-3.2-3B-Instruct-GGUF vers bartowski/Llama-3.2-3B-Instruct-uncensored-GGUF.
- Ajoutez la prise en charge de nombreux modèles Flux LoRA. Le plus remarquable est le modèle LoRA rapide Lingyuzhou/Hyper_Flux.1_Dev_4_step_Lora, qui permet des inférences en 4 étapes. Cela vaut vraiment la peine d'essayer si vous utilisez Flux.
- Ajout de la prise en charge des modèles Flux et Flux LoRA pour le module img2img.
- Ajout de la prise en charge des modèles SD 3.5 Medium LoRA pour la diffusion stable et du module img2img.
- Ajoutez des catégories aux modèles Flux LoRA.
- Corrections de bugs pour Docker lorsqu'il est utilisé avec plusieurs disques durs et résolution de problèmes dans les paramètres du module img2img.
? 02/11/2024 : Les mises à jour de cette semaine >
- Ajoutez la prise en charge des modèles SD 3.5 ariG23498/sd-3.5-merged et adamo1139/stable-diffusion-3.5-medium-ungate aux modules Stable Diffusion et img2img.
- Ajoutez la prise en charge du modèle Chatbot bartowski/granite-3.0-8b-instruct-GGUF.
- Ajoutez le support des modèles Flux LoRA dvyio/flux-lora-seventies-photograph, Bootoshi/retroanime, XLabs-AI/flux-RealismLora et prithivMLmods/Ton618-Tarot-Cards-Flux-LoRA (ce dernier donne des résultats impressionnants !).
- Ajout de la prise en charge des modèles SD 3.5 LoRA alvarobartt/ghibli-characters-sd3.5-lora, reverentelusarca/ancient-style-sd35 et Wadaka/NewYorkerComic_Style.
- Ajoutez la prise en charge des modèles SD 3.5 au module img2img.
? 2024-10-26 : Les mises à jour de cette semaine >
- Comme annoncé précédemment, le modèle Flux Freepik/flux.1-lite-8B-alpha et le modèle SD 3.5 adamo1139/stable-diffusion-3.5-large-turbo-ungate sont désormais pris en charge par le module Stable Diffusion. Le support sera étendu à tous les modules éligibles. Ajoutez également la prise en charge des LoRA sur ces modèles.
- Ajoutez la prise en charge du modèle SDXL dataautogpt3/Proteus-v0.6 à tous les modules basés sur Stable Diffusion.
- Ajoutez la prise en charge des modèles Chatbot anthracite-org/magnum-v4-9b-gguf et bartowski/Ministral-8B-Instruct-2410-GGUF.
- Ajout de la prise en charge du modèle SDXL LoRA KappaNeuro/moebius-jean-giraud-style.
Liste des mises à jour archivées
Menu
• Caractéristiques
• Conditions préalables
•Installation
GNU/Linux
OpenSUSE Leap 15.5 / OpenSUSE Tumbleweed
Rocky 9.3 / Alma 9.3 / CentOS Stream 9 / Fedora 39
Debian 12 / Ubuntu 22.04.3 / Ubuntu 24.04 / Linux Mint 21.2
Windows 10 / Windows 11
Installation de macOS Intel Homebrew
Fichier Docker
• Prise en charge de CUDA
• Comment utiliser
• Bon à savoir
• Crédits
• Licence
Caractéristiques
Génération de texte en utilisant :
- ✍️ Module chatbot basé sur lama-cpp (utilise des modèles .gguf)
- ?️ Module chatbot multimodal Llava (utilise des modèles .gguf)
- ?️ Module de sous-titrage d'images Microsoft GIT
- ? Module de synthèse vocale chuchotée
- module de traduction nllb (200 langues)
- Générateur d'invites (nécessite 16 Go+ de RAM pour le type de sortie ChatGPT)
Génération et modification d'images à l'aide de :
- ?️ Module de diffusion stable
- ?️ Module Kandinsky (nécessite 16 Go+ de RAM)
- ?️ Module Modèles de cohérence latente
- ?️ Module mini-mi-parcours
- ?️Module PixArt-Alpha
- ?️ Module Img2img à diffusion stable
- ?️ Module adaptateur IP
- ?️ Module de variation d'image à diffusion stable (nécessite 16 Go + RAM)
- ?️ Instruire le module Pix2Pix
- ?️Module MagicMix
- ?️ Module Inpaint à diffusion stable
- ?️ Module Fantasy Studio Paint par exemple (nécessite 16 Go + RAM)
- ?️ Module de diffusion stable (nécessite 16 Go + RAM)
- ?️ Module ControlNet de diffusion stable
- ?️ Module Photobooth
- ? Module d'échange de visage Insight Face
- ? Véritable module upscaler ESRGAN
- ?Module de restauration du visage GFPGAN
Génération audio utilisant :
- ? Module MusicGen
- ? Module MusicGen Melody (nécessite 16 Go + RAM)
- ? Module MusiqueLDM
- ? Module Audiogen (nécessite 16 Go+ de RAM)
- ? Module Harmonaï
- Module écorce
Génération et modification de vidéo à l'aide de :
- ? Module Modelscope (nécessite 16 Go + RAM)
- ? Module Text2Video-Zéro
- ? Module AnimateDiff (nécessite 16 Go+ de RAM)
- ? Module de diffusion vidéo stable (nécessite 16 Go + RAM)
- ?️ Module vidéo Instruct-Pix2Pix (nécessite 16 Go + RAM)
Génération d'objets 3D à l'aide de :
- ? Module Shap-E txt2shape
- ? Module Shap-E img2shape (nécessite 16 Go+ de RAM)
Autres fonctionnalités
- Installation de Zeroconf via des programmes d'installation en un clic ou un exe Windows.
- Convivial : Tout ce qui est nécessaire au fonctionnement de biniou est installé automatiquement, soit au moment de l'installation, soit à la première utilisation.
- WebUI en anglais, français, chinois (traditionnel).
- Gestion facile via un panneau de contrôle directement dans webui : mettre à jour, redémarrer, arrêter, activer l'authentification, contrôler l'accès au réseau ou partager votre instance en ligne en un seul clic.
- Gestion facile des modèles via une interface simple.
- Communication entre modules : envoyer une sortie en entrée vers un autre module
- Alimenté par ? Câlins et gradio
- Multiplateforme : GNU/Linux, Windows 10/11 et macOS (expérimental, via homebrew)
- Dockerfile pratique pour les instances cloud
- Paramètres de génération enregistrés sous forme de métadonnées dans chaque contenu.
- Prise en charge de CUDA (voir Prise en charge de CUDA)
- Support expérimental pour ROCm (voir ici)
- Prise en charge de Stable Diffusion SD-1.5, SD-2.1, SD-Turbo, SDXL, SDXL-Turbo, SDXL-Lightning, Hyper-SD, Stable Diffusion 3, LCM, VegaRT, Segmind, Playground-v2, Koala, Pixart-Alpha, Modèles Pixart-Sigma, Kandinsky et compatibles, via une liste de modèles intégrée ou des fichiers .safetensors autonomes
- Prise en charge des modèles LoRA (SD 1.5, SDXL et SD3)
- Prise en charge de l'inversion textuelle
- Prend en charge les optimisations llama-cpp-python CUDA, OpenBLAS, OpenCL BLAS, ROCm et Vulkan via un paramètre simple
- Prise en charge des modèles quantifiés Llama/2/3, Mistral, Mixtral et GGUF compatibles, via une liste de modèles intégrée ou des fichiers .gguf autonomes.
- Intégration facile du copier/coller pour les modèles quantifiés TheBloke GGUF.
Conditions préalables
Matériel minimal :
- Processeur 64 bits (architecture AMD64 UNIQUEMENT)
- 8 Go de RAM
- Exigences de stockage :
- pour GNU/Linux : au moins 20 Go pour une installation sans modèles.
- pour Windows : au moins 30 Go pour une installation sans modèles.
- pour macOS : au moins ??Go pour une installation sans modèles.
- Type de stockage : Disque dur
- Accès Internet (nécessaire uniquement pour l'installation et le téléchargement des modèles) : accès Internet fibre optique à bande passante illimitée
Matériel recommandé :
- CPU 64 bits massivement multicœur (architecture AMD64 UNIQUEMENT) et GPU compatible CUDA ou ROCm
- 16 Go+ de RAM
- Exigences de stockage :
- pour GNU/Linux : environ 200 Go pour l'installation incluant tous les modèles par défaut.
- pour Windows : environ 200 Go pour l'installation, y compris tous les modèles par défaut.
- pour macOS : environ ??Go pour l'installation incluant tous les modèles par défaut.
- Type de stockage : SSD Nvme
- Accès Internet (nécessaire uniquement pour l'installation et le téléchargement des modèles) : accès Internet fibre optique à bande passante illimitée
Système opérateur :
- un OS 64 bits :
- Debian12
- Ubuntu 22.04.3 / 24.04
- Linux Menthe 21.2+ / 22
- Rocheux 9.3
- Alma 9.3
- Flux CentOS 9
- Fedora 39
- OpenSUSE Leap 15.5
- OpenSUSE Tumbleweed
- Windows 10 22H2
- Windows 11 22H2
- macOS ???
Remarque : biniou supporte Cuda ou ROCm mais ne nécessite pas de GPU dédié pour fonctionner. Vous pouvez l'installer dans une machine virtuelle.
Installation
GNU/Linux
OpenSUSE Leap 15.5 / OpenSUSE Tumbleweed
Installateur en un clic :
- Copiez/collez et exécutez la commande suivante dans un terminal :
sh <( curl https://raw.githubusercontent.com/Woolverine94/biniou/main/oci-opensuse.sh || wget -O - https://raw.githubusercontent.com/Woolverine94/biniou/main/oci-opensuse.sh )
Rocky 9.3 / Alma 9.3 / CentOS Stream 9 / Fedora 39
Installateur en un clic :
- Copiez/collez et exécutez la commande suivante dans un terminal :
sh <( curl https://raw.githubusercontent.com/Woolverine94/biniou/main/oci-rhel.sh || wget -O - https://raw.githubusercontent.com/Woolverine94/biniou/main/oci-rhel.sh )
Debian 12 / Ubuntu 22.04.3 / Ubuntu 24.04 / Linux Mint 21.2+
Installateur en un clic :
- Copiez/collez et exécutez la commande suivante dans un terminal :
sh <( curl https://raw.githubusercontent.com/Woolverine94/biniou/main/oci-debian.sh || wget -O - https://raw.githubusercontent.com/Woolverine94/biniou/main/oci-debian.sh )
Installation manuelle :
- Installez les pré-requis en tant que root :
apt install git pip python3 python3-venv gcc perl make ffmpeg openssl
- Clonez ce dépôt en tant qu'utilisateur :
git clone https://github.com/Woolverine94/biniou.git
- Lancez l'installateur :
- (facultatif, mais fortement recommandé) Installez TCMalloc en tant que root pour optimiser la gestion de la mémoire :
apt install google-perftools
Windows 10 / Windows 11
L'installation de Windows a plus de prérequis que celle de GNU/Linux, et nécessite les logiciels suivants (qui seront installés automatiquement) :
- Git
- Python 3.11 (et spécifiquement la version 3.11)
- OuvertSSL
- Outils de création de Visual Studio
- Kit de développement logiciel Windows 10/11
- Vcréditiste
- ffmpeg
- ...et toutes leurs dépendances.
Cela représente de nombreux changements sur votre système d'exploitation, et cela pourrait potentiellement entraîner des comportements indésirables sur votre système, en fonction des logiciels qui y sont déjà installés.
️ Vous devriez vraiment faire une sauvegarde de votre système et de vos données avant de commencer le processus d'installation. ️
- Téléchargez et exécutez : biniou_netinstall.exe
OU
- Téléchargez et exécutez : install_win.cmd (faites un clic droit sur le lien et sélectionnez "Enregistrer la cible/le lien sous..." pour télécharger)
Toute l'installation est automatisée, mais Windows UAC vous demandera une confirmation pour chaque logiciel installé lors de la phase « prérequis ». Vous pouvez éviter cela en exécutant le programme d'installation choisi en tant qu'administrateur.
️ Depuis le commit 8d2537b, les utilisateurs Windows peuvent désormais définir un chemin personnalisé pour le répertoire biniou, lors de l'installation avec install_win.cmd
️
Procédez comme suit :
- Téléchargez et modifiez install_win.cmd
- Modifiez
set DEFAULT_BINIOU_DIR="%userprofile%"
pour set DEFAULT_BINIOU_DIR="E:datassomedir"
(par exemple) - Utilisez uniquement le chemin absolu (par exemple :
E:datassomedir
et non .datassomedir
) - N'ajoutez pas de barre oblique finale (par exemple :
E:datassomedir
et non E:datassomedir
) - N'ajoutez pas de suffixe "biniou" à votre chemin (par exemple :
E:datassomedirbiniou
), car le répertoire biniou sera créé par la commande git clone - Enregistrez et lancez install_win.cmd
Installation de macOS Intel Homebrew
️ L'installation Homebrew est théoriquement compatible avec macOS Intel, mais n'a pas été testée. Utilisez à vos propres risques. Notez également que biniou est actuellement incompatible avec le silicium Apple. Tout retour sur cette procédure via des discussions ou un ticket de problème sera vraiment apprécié. ️
️ Mise à jour du 09/01/2024 : Grâce à @lepicodon, il existe une solution de contournement pour les utilisateurs d'Apple Silicon : vous pouvez installer biniou dans une machine virtuelle en utilisant OrbStack. Voir ce commentaire pour les explications. ️
Installez Homebrew pour votre système d'exploitation
Installez les "bouteilles" homebrew requises :
brew install git python3 gcc gcc@11 perl make ffmpeg openssl
- Installez python virtualenv :
python3 -m pip install virtualenv
- Clonez ce dépôt en tant qu'utilisateur :
git clone https://github.com/Woolverine94/biniou.git
- Lancez l'installateur :
Fichier Docker
Ces instructions supposent que vous disposez déjà d’un environnement Docker configuré et fonctionnel.
- Créez l'image docker :
docker build -t biniou https://github.com/Woolverine94/biniou.git
ou, pour le support CUDA :
docker build -t biniou https://raw.githubusercontent.com/Woolverine94/biniou/main/CUDA/Dockerfile
- Lancez le conteneur :
docker run -it --restart=always -p 7860:7860
-v biniou_outputs:/home/biniou/biniou/outputs
-v biniou_models:/home/biniou/biniou/models
-v biniou_cache:/home/biniou/.cache/huggingface
-v biniou_gfpgan:/home/biniou/biniou/gfpgan
biniou:latest
ou, pour le support CUDA :
docker run -it --gpus all --restart=always -p 7860:7860
-v biniou_outputs:/home/biniou/biniou/outputs
-v biniou_models:/home/biniou/biniou/models
-v biniou_cache:/home/biniou/.cache/huggingface
-v biniou_gfpgan:/home/biniou/biniou/gfpgan
biniou:latest
- Accédez au webui par l'url :
https://127.0.0.1:7860 ou https://127.0.0.1:7860/?__theme=dark pour le thème sombre (recommandé)
... ou remplacez 127.0.0.1 par l'ip de votre conteneur
Remarque : pour économiser de l'espace de stockage, la commande de lancement de conteneur précédente définit des volumes partagés communs pour tous les conteneurs biniou et garantit que le conteneur redémarre automatiquement en cas de crash du MOO. Supprimez les arguments --restart
et -v
si vous ne souhaitez pas ces comportements.
Prise en charge de CUDA
biniou est nativement CPU uniquement, pour garantir la compatibilité avec une large gamme de matériel, mais vous pouvez facilement activer le support CUDA via Nvidia CUDA (si vous disposez d'un environnement CUDA 12.1 fonctionnel) ou AMD ROCm (si vous disposez d'un environnement ROCm 5.6 fonctionnel) en sélectionnant le type d'optimisation à activer (CPU, CUDA ou ROCm pour Linux), dans le module de contrôle WebUI.
Actuellement, tous les modules, à l'exception des modules Chatbot, Llava et faceswap, pourraient bénéficier de l'optimisation CUDA.
Comment utiliser
- Lancez- vous en exécutant depuis le répertoire biniou :
cd /home/ $USER /biniou
./webui.sh
Double-cliquez sur webui.cmd dans le répertoire biniou (C:Users%username%biniou). Lorsque l'UAC vous le demande, configurez le pare-feu en fonction de votre type de réseau pour autoriser l'accès au webui
Remarque : Le premier démarrage peut être très lent sous Windows 11 (par rapport aux autres systèmes d'exploitation).
Accédez au webui par l'url :
https://127.0.0.1:7860 ou https://127.0.0.1:7860/?__theme=dark pour le thème sombre (recommandé)
Vous pouvez également accéder à biniou depuis n'importe quel appareil (y compris les smartphones) sur le même réseau LAN/Wifi en remplaçant 127.0.0.1 dans l'URL par l'adresse IP de l'hôte biniou.
Quittez en utilisant le raccourci clavier CTRL+C dans le Terminal
Mettez à jour cette application (environnement virtuel biniou + python) en utilisant les options de mise à jour du contrôle WebUI.
Bon à savoir
La cause de crash la plus fréquente est le manque de mémoire sur l'hôte. Le symptôme est que le programme biniou se ferme et revient/ferme le terminal sans message d'erreur spécifique. Vous pouvez utiliser biniou avec 8 Go de RAM, mais 16 Go au moins sont recommandés pour éviter une erreur MOO (mémoire insuffisante).
biniou utilise beaucoup de modèles d'IA différents, ce qui nécessite beaucoup d'espace : si vous souhaitez utiliser tous les modules de biniou, vous aurez besoin d'environ 200 Go d'espace disque uniquement pour le modèle par défaut de chaque module. Les modèles sont téléchargés lors de la première exécution de chaque module ou lorsque vous sélectionnez un nouveau modèle dans un module et générez du contenu. Les modèles sont stockés dans le répertoire /models de l'installation biniou. Les modèles inutilisés pourraient être supprimés pour économiser de l'espace.
... par conséquent, vous aurez besoin d'un accès Internet rapide pour télécharger des modèles.
Une sauvegarde de chaque contenu généré est disponible dans le répertoire /outputs du dossier biniou.
biniou ne s'appuie nativement que sur le CPU pour toutes les opérations. Il utilise une version spécifique de PyTorch, uniquement CPU. Il en résulte une meilleure compatibilité avec une large gamme de matériels, mais des performances dégradées. En fonction de votre matériel, attendez-vous à de la lenteur. Voir ici pour la prise en charge de Nvidia CUDA et la prise en charge expérimentale d'AMD ROCm (GNU/Linux uniquement).
Les paramètres par défaut sont sélectionnés pour permettre la génération de contenus sur des ordinateurs bas de gamme, avec le meilleur rapport performance/qualité. Si vous avez une configuration supérieure aux paramètres minimaux, vous pouvez essayer d'utiliser d'autres modèles, en augmentant les dimensions ou la durée du média, en modifiant les paramètres d'inférence ou d'autres paramètres (comme la fusion de jetons pour les images) pour obtenir un contenu de meilleure qualité.
biniou est sous licence GNU GPL3, mais chaque modèle utilisé dans biniou possède sa propre licence. Veuillez consulter chaque licence de modèle pour savoir ce que vous pouvez et ne pouvez pas faire avec les modèles. Pour chaque modèle, vous pouvez retrouver un lien vers la page huggingface du modèle dans la rubrique "A propos" du module associé.
N'ayez pas trop d'attentes : biniou est à un stade précoce de développement, et la plupart des logiciels open source utilisés sont en développement (certains sont encore expérimentaux).
Chaque module biniou propose 2 éléments accordéons A propos et Paramètres :
- À propos est une fonction d'aide rapide qui décrit le module et donne des instructions et des conseils sur la façon de l'utiliser.
- Paramètres est un paramètre de panneau spécifique au module qui vous permet de configurer les paramètres de génération.
Crédits
Cette application utilise les logiciels et technologies suivants :
- ? Huggingface : Bibliothèques Diffuseurs et Transformateurs et presque tous les modèles génératifs.
- Radio : interface utilisateur Web
- llama-cpp-python : liaisons python pour lama-cpp
- Lava
- BakLLava
- Microsoft GIT : Image2text
- Chuchotement : discours2texte
- traduction nllb : traduction linguistique
- Diffusion stable : txt2img, img2img, Variation d'image, inpaint, ControlNet, Text2Video-Zero, img2vid
- Kandinsky : txt2img
- Modèles de cohérence latente : txt2img
- PixArt-Alpha : PixArt-Alpha
- Adaptateur IP : Adaptateur IP img2img
- Instruire pix2pix : pix2pix
- MagicMix : MagicMix
- Fantasy Studio Paint par exemple : paintbyex
- Modèles auxiliaires Controlnet : modèles d'aperçu pour le module ControlNet
- IP-Adapter FaceID : Modèle d'adaptateur pour module Photobooth
- Modèle d'adaptateur Photomaker pour module Photobooth
- Insight Face : échange de visages
- Real ESRGAN : upscaler
- GFPGAN : restauration de visage
- Audiocraft : musicgen, mélodie musicgen, audiogen
- MusiqueLDM : MusiqueLDM
- Harmonaï : harmoniaï
- Écorce : text2speech
- Synthèse texte-vidéo Modelscope : txt2vid
- AnimerLCM : txt2vid
- Ouvrir AI Shap-E : txt2shape, img2shape
- compel : amélioration rapide pour divers modules basés sur
StableDiffusionPipeline
- tomesd : Fusion de jetons pour divers modules basés sur
StableDiffusionPipeline
- Python
- PyTorch
- Git
- ffmpeg
... et toutes leurs dépendances
Licence
Licence publique générale GNU v3.0
GitHub @Woolverine94 ·