Rename flux_1 to mflux
26
README.md
@ -1,5 +1,5 @@
|
||||
|
||||

|
||||

|
||||
*A MLX port of FLUX based on the Huggingface Diffusers implementation.*
|
||||
|
||||
### About
|
||||
@ -96,8 +96,8 @@ import sys
|
||||
|
||||
sys.path.append("/path/to/mflux/src")
|
||||
|
||||
from flux_1.config.config import Config
|
||||
from flux_1.flux import Flux1
|
||||
from mflux.config.config import Config
|
||||
from mflux.flux import Flux1
|
||||
|
||||
# Load the model
|
||||
flux = Flux1.from_alias(alias="schnell") # "schnell" or "dev"
|
||||
@ -157,27 +157,27 @@ However, if we were to import a fixed instance of this latent array saved from t
|
||||
The images below illustrate this equivalence.
|
||||
In all cases the Schnell model was run for 2 time steps.
|
||||
The Diffusers implementation ran in CPU mode.
|
||||
The precision for MFLUX can be set in the [Config](src/flux_1/config/config.py) class.
|
||||
The precision for MFLUX can be set in the [Config](src/mflux/config/config.py) class.
|
||||
There is typically a noticeable but very small difference in the final image when switching between 16bit and 32bit precision.
|
||||
|
||||
---
|
||||
```
|
||||
Luxury food photograph
|
||||
```
|
||||

|
||||

|
||||
|
||||
---
|
||||
```
|
||||
detailed cinematic dof render of an old dusty detailed CRT monitor on a wooden desk in a dim room with items around, messy dirty room. On the screen are the letters "FLUX" glowing softly. High detail hard surface render
|
||||
```
|
||||

|
||||

|
||||
|
||||
---
|
||||
|
||||
```
|
||||
photorealistic, lotr, A tiny red dragon curled up asleep inside a nest, (Soft Focus) , (f_stop 2.8) , (focal_length 50mm) macro lens f/2. 8, medieval wizard table, (pastel) colors, (cozy) morning light filtering through a nearby window, (whimsical) steam shapes, captured with a (Canon EOS R5) , highlighting (serene) comfort, medieval, dnd, rpg, 3d, 16K, 8K
|
||||
```
|
||||

|
||||

|
||||
|
||||
---
|
||||
|
||||
@ -185,14 +185,14 @@ photorealistic, lotr, A tiny red dragon curled up asleep inside a nest, (Soft Fo
|
||||
```
|
||||
A weathered fisherman in his early 60s stands on the deck of his boat, gazing out at a stormy sea. He has a thick, salt-and-pepper beard, deep-set blue eyes, and skin tanned and creased from years of sun exposure. He's wearing a yellow raincoat and hat, with water droplets clinging to the fabric. Behind him, dark clouds loom ominously, and waves crash against the side of the boat. The overall atmosphere is one of tension and respect for the power of nature.
|
||||
```
|
||||

|
||||

|
||||
|
||||
---
|
||||
|
||||
```
|
||||
Luxury food photograph of an italian Linguine pasta alle vongole dish with lots of clams. It has perfect lighting and a cozy background with big bokeh and shallow depth of field. The mood is a sunset balcony in tuscany. The photo is taken from the side of the plate. The pasta is shiny with sprinkled parmesan cheese and basil leaves on top. The scene is complemented by a warm, inviting light that highlights the textures and colors of the ingredients, giving it an appetizing and elegant look.
|
||||
```
|
||||

|
||||

|
||||
|
||||
---
|
||||
|
||||
@ -211,7 +211,7 @@ python main.py \
|
||||
--width 1024 \
|
||||
--prompt "Tranquil pond in a bamboo forest at dawn, the sun is barely starting to peak over the horizon, panda practices Tai Chi near the edge of the pond, atmospheric perspective through the mist of morning dew, sunbeams, its movements are graceful and fluid — creating a sense of harmony and balance, the pond’s calm waters reflecting the scene, inviting a sense of meditation and connection with nature, style of Howard Terpning and Jessica Rossier"
|
||||
```
|
||||

|
||||

|
||||
|
||||
*In this example, weights are quantized at **runtime** - this is convenient if you don't want to [save a quantized copy of the weights to disk](#saving-a-quantized-version-to-disk), but still want to benefit from the potential speedup and RAM reduction quantization might bring.*
|
||||
|
||||
@ -320,7 +320,7 @@ The following example [The_Hound](https://huggingface.co/TheLastBen/The_Hound) L
|
||||
python main.py --prompt "sandor clegane" --model dev --steps 20 --seed 43 -q 8 --lora-paths "sandor_clegane_single_layer.safetensors"
|
||||
```
|
||||
|
||||

|
||||

|
||||
---
|
||||
|
||||
The following example is [Flux_1_Dev_LoRA_Paper-Cutout-Style](https://huggingface.co/Norod78/Flux_1_Dev_LoRA_Paper-Cutout-Style) LoRA from [@Norod78](https://huggingface.co/Norod78):
|
||||
@ -328,7 +328,7 @@ The following example is [Flux_1_Dev_LoRA_Paper-Cutout-Style](https://huggingfac
|
||||
```
|
||||
python main.py --prompt "pikachu, Paper Cutout Style" --model schnell --steps 4 --seed 43 -q 8 --lora-paths "Flux_1_Dev_LoRA_Paper-Cutout-Style.safetensors"
|
||||
```
|
||||

|
||||

|
||||
|
||||
*Note that LoRA trained weights are typically trained with a **trigger word or phrase**. For example, in the latter case, the sentence should include the phrase **"Paper Cutout Style"**.*
|
||||
|
||||
@ -348,7 +348,7 @@ python main.py \
|
||||
--lora-scales 1.0 1.0 \
|
||||
-q 8
|
||||
```
|
||||

|
||||

|
||||
|
||||
Just to see the difference, this image displays the four cases: One of having both adapters fully active, partially active and no LoRA at all.
|
||||
The example above also show the usage of `--lora-scales` flag.
|
||||
|
||||
6
main.py
@ -5,9 +5,9 @@ import time
|
||||
|
||||
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), 'src')))
|
||||
|
||||
from flux_1.config.model_config import ModelConfig
|
||||
from flux_1.config.config import Config
|
||||
from flux_1.flux import Flux1
|
||||
from mflux.config.model_config import ModelConfig
|
||||
from mflux.config.config import Config
|
||||
from mflux.flux import Flux1
|
||||
|
||||
|
||||
def main():
|
||||
|
||||
4
save.py
@ -4,8 +4,8 @@ import sys
|
||||
|
||||
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), 'src')))
|
||||
|
||||
from flux_1.flux import Flux1
|
||||
from flux_1.config.model_config import ModelConfig
|
||||
from mflux.flux import Flux1
|
||||
from mflux.config.model_config import ModelConfig
|
||||
|
||||
|
||||
def main():
|
||||
|
||||
|
Before Width: | Height: | Size: 1.8 MiB After Width: | Height: | Size: 1.8 MiB |
|
Before Width: | Height: | Size: 1.9 MiB After Width: | Height: | Size: 1.9 MiB |
|
Before Width: | Height: | Size: 2.0 MiB After Width: | Height: | Size: 2.0 MiB |
|
Before Width: | Height: | Size: 2.2 MiB After Width: | Height: | Size: 2.2 MiB |
|
Before Width: | Height: | Size: 1.9 MiB After Width: | Height: | Size: 1.9 MiB |
|
Before Width: | Height: | Size: 2.0 MiB After Width: | Height: | Size: 2.0 MiB |
|
Before Width: | Height: | Size: 60 KiB After Width: | Height: | Size: 60 KiB |
|
Before Width: | Height: | Size: 806 KiB After Width: | Height: | Size: 806 KiB |
|
Before Width: | Height: | Size: 789 KiB After Width: | Height: | Size: 789 KiB |
|
Before Width: | Height: | Size: 770 KiB After Width: | Height: | Size: 770 KiB |
@ -1,8 +1,8 @@
|
||||
import mlx.core as mx
|
||||
import numpy as np
|
||||
|
||||
from flux_1.config.config import Config
|
||||
from flux_1.config.model_config import ModelConfig
|
||||
from mflux.config.config import Config
|
||||
from mflux.config.model_config import ModelConfig
|
||||
|
||||
|
||||
class RuntimeConfig:
|
||||
@ -5,19 +5,19 @@ from mlx import nn
|
||||
from mlx.utils import tree_flatten
|
||||
from tqdm import tqdm
|
||||
|
||||
from flux_1.config.config import Config
|
||||
from flux_1.config.model_config import ModelConfig
|
||||
from flux_1.config.runtime_config import RuntimeConfig
|
||||
from flux_1.models.text_encoder.clip_encoder.clip_encoder import CLIPEncoder
|
||||
from flux_1.models.text_encoder.t5_encoder.t5_encoder import T5Encoder
|
||||
from flux_1.models.transformer.transformer import Transformer
|
||||
from flux_1.models.vae.vae import VAE
|
||||
from flux_1.post_processing.image import Image
|
||||
from flux_1.post_processing.image_util import ImageUtil
|
||||
from flux_1.tokenizer.clip_tokenizer import TokenizerCLIP
|
||||
from flux_1.tokenizer.t5_tokenizer import TokenizerT5
|
||||
from flux_1.tokenizer.tokenizer_handler import TokenizerHandler
|
||||
from flux_1.weights.weight_handler import WeightHandler
|
||||
from mflux.config.config import Config
|
||||
from mflux.config.model_config import ModelConfig
|
||||
from mflux.config.runtime_config import RuntimeConfig
|
||||
from mflux.models.text_encoder.clip_encoder.clip_encoder import CLIPEncoder
|
||||
from mflux.models.text_encoder.t5_encoder.t5_encoder import T5Encoder
|
||||
from mflux.models.transformer.transformer import Transformer
|
||||
from mflux.models.vae.vae import VAE
|
||||
from mflux.post_processing.image import Image
|
||||
from mflux.post_processing.image_util import ImageUtil
|
||||
from mflux.tokenizer.clip_tokenizer import TokenizerCLIP
|
||||
from mflux.tokenizer.t5_tokenizer import TokenizerT5
|
||||
from mflux.tokenizer.tokenizer_handler import TokenizerHandler
|
||||
from mflux.weights.weight_handler import WeightHandler
|
||||
|
||||
|
||||
class Flux1:
|
||||
@ -1,7 +1,7 @@
|
||||
from mlx import nn
|
||||
import mlx.core as mx
|
||||
|
||||
from flux_1.tokenizer.clip_tokenizer import TokenizerCLIP
|
||||
from mflux.tokenizer.clip_tokenizer import TokenizerCLIP
|
||||
|
||||
|
||||
class CLIPEmbeddings(nn.Module):
|
||||
@ -1,7 +1,7 @@
|
||||
import mlx.core as mx
|
||||
from mlx import nn
|
||||
|
||||
from flux_1.models.text_encoder.clip_encoder.clip_text_model import CLIPTextModel
|
||||
from mflux.models.text_encoder.clip_encoder.clip_text_model import CLIPTextModel
|
||||
|
||||
|
||||
class CLIPEncoder(nn.Module):
|
||||
@ -1,8 +1,8 @@
|
||||
from mlx import nn
|
||||
import mlx.core as mx
|
||||
|
||||
from flux_1.models.text_encoder.clip_encoder.clip_mlp import CLIPMLP
|
||||
from flux_1.models.text_encoder.clip_encoder.clip_sdpa_attention import CLIPSdpaAttention
|
||||
from mflux.models.text_encoder.clip_encoder.clip_mlp import CLIPMLP
|
||||
from mflux.models.text_encoder.clip_encoder.clip_sdpa_attention import CLIPSdpaAttention
|
||||
|
||||
|
||||
class CLIPEncoderLayer(nn.Module):
|
||||
@ -1,8 +1,8 @@
|
||||
import mlx.core as mx
|
||||
from mlx import nn
|
||||
|
||||
from flux_1.models.text_encoder.clip_encoder.clip_embeddings import CLIPEmbeddings
|
||||
from flux_1.models.text_encoder.clip_encoder.encoder_clip import EncoderCLIP
|
||||
from mflux.models.text_encoder.clip_encoder.clip_embeddings import CLIPEmbeddings
|
||||
from mflux.models.text_encoder.clip_encoder.encoder_clip import EncoderCLIP
|
||||
|
||||
|
||||
class CLIPTextModel(nn.Module):
|
||||
@ -1,7 +1,7 @@
|
||||
import mlx.core as mx
|
||||
from mlx import nn
|
||||
|
||||
from flux_1.models.text_encoder.clip_encoder.clip_encoder_layer import CLIPEncoderLayer
|
||||
from mflux.models.text_encoder.clip_encoder.clip_encoder_layer import CLIPEncoderLayer
|
||||
|
||||
|
||||
class EncoderCLIP(nn.Module):
|
||||
@ -1,8 +1,8 @@
|
||||
import mlx.core as mx
|
||||
from mlx import nn
|
||||
|
||||
from flux_1.models.text_encoder.t5_encoder.t5_layer_norm import T5LayerNorm
|
||||
from flux_1.models.text_encoder.t5_encoder.t5_self_attention import T5SelfAttention
|
||||
from mflux.models.text_encoder.t5_encoder.t5_layer_norm import T5LayerNorm
|
||||
from mflux.models.text_encoder.t5_encoder.t5_self_attention import T5SelfAttention
|
||||
|
||||
|
||||
class T5Attention(nn.Module):
|
||||
@ -1,8 +1,8 @@
|
||||
import mlx.core as mx
|
||||
from mlx import nn
|
||||
|
||||
from flux_1.models.text_encoder.t5_encoder.t5_attention import T5Attention
|
||||
from flux_1.models.text_encoder.t5_encoder.t5_feed_forward import T5FeedForward
|
||||
from mflux.models.text_encoder.t5_encoder.t5_attention import T5Attention
|
||||
from mflux.models.text_encoder.t5_encoder.t5_feed_forward import T5FeedForward
|
||||
|
||||
|
||||
class T5Block(nn.Module):
|
||||
@ -1,8 +1,8 @@
|
||||
import mlx.core as mx
|
||||
from mlx import nn
|
||||
|
||||
from flux_1.models.text_encoder.t5_encoder.t5_block import T5Block
|
||||
from flux_1.models.text_encoder.t5_encoder.t5_layer_norm import T5LayerNorm
|
||||
from mflux.models.text_encoder.t5_encoder.t5_block import T5Block
|
||||
from mflux.models.text_encoder.t5_encoder.t5_layer_norm import T5LayerNorm
|
||||
|
||||
|
||||
class T5Encoder(nn.Module):
|
||||
@ -3,8 +3,8 @@ import math
|
||||
from mlx import nn
|
||||
import mlx.core as mx
|
||||
|
||||
from flux_1.models.text_encoder.t5_encoder.t5_dense_relu_dense import T5DenseReluDense
|
||||
from flux_1.models.text_encoder.t5_encoder.t5_layer_norm import T5LayerNorm
|
||||
from mflux.models.text_encoder.t5_encoder.t5_dense_relu_dense import T5DenseReluDense
|
||||
from mflux.models.text_encoder.t5_encoder.t5_layer_norm import T5LayerNorm
|
||||
|
||||
|
||||
class T5FeedForward(nn.Module):
|
||||
@ -1,7 +1,7 @@
|
||||
from mlx import nn
|
||||
import mlx.core as mx
|
||||
|
||||
from flux_1.config.config import Config
|
||||
from mflux.config.config import Config
|
||||
|
||||
|
||||
class AdaLayerNormContinuous(nn.Module):
|
||||
@ -1,9 +1,9 @@
|
||||
import mlx.core as mx
|
||||
from mlx import nn
|
||||
|
||||
from flux_1.models.transformer.ada_layer_norm_zero import AdaLayerNormZero
|
||||
from flux_1.models.transformer.feed_forward import FeedForward
|
||||
from flux_1.models.transformer.joint_attention import JointAttention
|
||||
from mflux.models.transformer.ada_layer_norm_zero import AdaLayerNormZero
|
||||
from mflux.models.transformer.feed_forward import FeedForward
|
||||
from mflux.models.transformer.joint_attention import JointAttention
|
||||
|
||||
|
||||
class JointTransformerBlock(nn.Module):
|
||||
@ -1,8 +1,8 @@
|
||||
import mlx.core as mx
|
||||
from mlx import nn
|
||||
|
||||
from flux_1.models.transformer.ada_layer_norm_zero_single import AdaLayerNormZeroSingle
|
||||
from flux_1.models.transformer.single_block_attention import SingleBlockAttention
|
||||
from mflux.models.transformer.ada_layer_norm_zero_single import AdaLayerNormZeroSingle
|
||||
from mflux.models.transformer.single_block_attention import SingleBlockAttention
|
||||
|
||||
|
||||
class SingleTransformerBlock(nn.Module):
|
||||
@ -2,11 +2,11 @@ import math
|
||||
from mlx import nn
|
||||
import mlx.core as mx
|
||||
|
||||
from flux_1.config.config import Config
|
||||
from flux_1.config.model_config import ModelConfig
|
||||
from flux_1.models.transformer.text_embedder import TextEmbedder
|
||||
from flux_1.models.transformer.timestep_embedder import TimestepEmbedder
|
||||
from flux_1.models.transformer.guidance_embedder import GuidanceEmbedder
|
||||
from mflux.config.config import Config
|
||||
from mflux.config.model_config import ModelConfig
|
||||
from mflux.models.transformer.text_embedder import TextEmbedder
|
||||
from mflux.models.transformer.timestep_embedder import TimestepEmbedder
|
||||
from mflux.models.transformer.guidance_embedder import GuidanceEmbedder
|
||||
|
||||
|
||||
class TimeTextEmbed(nn.Module):
|
||||
@ -1,13 +1,13 @@
|
||||
import mlx.core as mx
|
||||
from mlx import nn
|
||||
|
||||
from flux_1.config.model_config import ModelConfig
|
||||
from flux_1.config.runtime_config import RuntimeConfig
|
||||
from flux_1.models.transformer.ada_layer_norm_continous import AdaLayerNormContinuous
|
||||
from flux_1.models.transformer.embed_nd import EmbedND
|
||||
from flux_1.models.transformer.joint_transformer_block import JointTransformerBlock
|
||||
from flux_1.models.transformer.single_transformer_block import SingleTransformerBlock
|
||||
from flux_1.models.transformer.time_text_embed import TimeTextEmbed
|
||||
from mflux.config.model_config import ModelConfig
|
||||
from mflux.config.runtime_config import RuntimeConfig
|
||||
from mflux.models.transformer.ada_layer_norm_continous import AdaLayerNormContinuous
|
||||
from mflux.models.transformer.embed_nd import EmbedND
|
||||
from mflux.models.transformer.joint_transformer_block import JointTransformerBlock
|
||||
from mflux.models.transformer.single_transformer_block import SingleTransformerBlock
|
||||
from mflux.models.transformer.time_text_embed import TimeTextEmbed
|
||||
|
||||
|
||||
class Transformer(nn.Module):
|
||||
@ -1,7 +1,7 @@
|
||||
import mlx.core as mx
|
||||
from mlx import nn
|
||||
|
||||
from flux_1.config.config import Config
|
||||
from mflux.config.config import Config
|
||||
|
||||
|
||||
class Attention(nn.Module):
|
||||
@ -1,7 +1,7 @@
|
||||
import mlx.core as mx
|
||||
from mlx import nn
|
||||
|
||||
from flux_1.config.config import Config
|
||||
from mflux.config.config import Config
|
||||
|
||||
|
||||
class ResnetBlock2D(nn.Module):
|
||||
@ -1,8 +1,8 @@
|
||||
import mlx.core as mx
|
||||
from mlx import nn
|
||||
|
||||
from flux_1.models.vae.common.attention import Attention
|
||||
from flux_1.models.vae.common.resnet_block_2d import ResnetBlock2D
|
||||
from mflux.models.vae.common.attention import Attention
|
||||
from mflux.models.vae.common.resnet_block_2d import ResnetBlock2D
|
||||
|
||||
|
||||
class UnetMidBlock(nn.Module):
|
||||
@ -1,7 +1,7 @@
|
||||
import mlx.core as mx
|
||||
import mlx.nn as nn
|
||||
|
||||
from flux_1.config.config import Config
|
||||
from mflux.config.config import Config
|
||||
|
||||
|
||||
class ConvNormOut(nn.Module):
|
||||
@ -1,13 +1,13 @@
|
||||
import mlx.core as mx
|
||||
from mlx import nn
|
||||
|
||||
from flux_1.models.vae.decoder.conv_in import ConvIn
|
||||
from flux_1.models.vae.decoder.conv_norm_out import ConvNormOut
|
||||
from flux_1.models.vae.decoder.conv_out import ConvOut
|
||||
from flux_1.models.vae.common.unet_mid_block import UnetMidBlock
|
||||
from flux_1.models.vae.decoder.up_block_1_or_2 import UpBlock1Or2
|
||||
from flux_1.models.vae.decoder.up_block_3 import UpBlock3
|
||||
from flux_1.models.vae.decoder.up_block_4 import UpBlock4
|
||||
from mflux.models.vae.decoder.conv_in import ConvIn
|
||||
from mflux.models.vae.decoder.conv_norm_out import ConvNormOut
|
||||
from mflux.models.vae.decoder.conv_out import ConvOut
|
||||
from mflux.models.vae.common.unet_mid_block import UnetMidBlock
|
||||
from mflux.models.vae.decoder.up_block_1_or_2 import UpBlock1Or2
|
||||
from mflux.models.vae.decoder.up_block_3 import UpBlock3
|
||||
from mflux.models.vae.decoder.up_block_4 import UpBlock4
|
||||
|
||||
|
||||
class Decoder(nn.Module):
|
||||
@ -1,8 +1,8 @@
|
||||
import mlx.core as mx
|
||||
from mlx import nn
|
||||
|
||||
from flux_1.models.vae.common.resnet_block_2d import ResnetBlock2D
|
||||
from flux_1.models.vae.decoder.up_sampler import UpSampler
|
||||
from mflux.models.vae.common.resnet_block_2d import ResnetBlock2D
|
||||
from mflux.models.vae.decoder.up_sampler import UpSampler
|
||||
|
||||
|
||||
class UpBlock1Or2(nn.Module):
|
||||
@ -1,8 +1,8 @@
|
||||
import mlx.core as mx
|
||||
from mlx import nn
|
||||
|
||||
from flux_1.models.vae.common.resnet_block_2d import ResnetBlock2D
|
||||
from flux_1.models.vae.decoder.up_sampler import UpSampler
|
||||
from mflux.models.vae.common.resnet_block_2d import ResnetBlock2D
|
||||
from mflux.models.vae.decoder.up_sampler import UpSampler
|
||||
|
||||
|
||||
class UpBlock3(nn.Module):
|
||||
@ -1,7 +1,7 @@
|
||||
import mlx.core as mx
|
||||
from mlx import nn
|
||||
|
||||
from flux_1.models.vae.common.resnet_block_2d import ResnetBlock2D
|
||||
from mflux.models.vae.common.resnet_block_2d import ResnetBlock2D
|
||||
|
||||
|
||||
class UpBlock4(nn.Module):
|
||||
@ -1,8 +1,8 @@
|
||||
import mlx.core as mx
|
||||
from mlx import nn
|
||||
|
||||
from flux_1.models.vae.common.resnet_block_2d import ResnetBlock2D
|
||||
from flux_1.models.vae.encoder.down_sampler import DownSampler
|
||||
from mflux.models.vae.common.resnet_block_2d import ResnetBlock2D
|
||||
from mflux.models.vae.encoder.down_sampler import DownSampler
|
||||
|
||||
|
||||
class DownBlock1(nn.Module):
|
||||
@ -1,8 +1,8 @@
|
||||
import mlx.core as mx
|
||||
from mlx import nn
|
||||
|
||||
from flux_1.models.vae.common.resnet_block_2d import ResnetBlock2D
|
||||
from flux_1.models.vae.encoder.down_sampler import DownSampler
|
||||
from mflux.models.vae.common.resnet_block_2d import ResnetBlock2D
|
||||
from mflux.models.vae.encoder.down_sampler import DownSampler
|
||||
|
||||
|
||||
class DownBlock2(nn.Module):
|
||||
@ -1,8 +1,8 @@
|
||||
import mlx.core as mx
|
||||
from mlx import nn
|
||||
|
||||
from flux_1.models.vae.common.resnet_block_2d import ResnetBlock2D
|
||||
from flux_1.models.vae.encoder.down_sampler import DownSampler
|
||||
from mflux.models.vae.common.resnet_block_2d import ResnetBlock2D
|
||||
from mflux.models.vae.encoder.down_sampler import DownSampler
|
||||
|
||||
|
||||
class DownBlock3(nn.Module):
|
||||
@ -1,7 +1,7 @@
|
||||
import mlx.core as mx
|
||||
from mlx import nn
|
||||
|
||||
from flux_1.models.vae.common.resnet_block_2d import ResnetBlock2D
|
||||
from mflux.models.vae.common.resnet_block_2d import ResnetBlock2D
|
||||
|
||||
|
||||
class DownBlock4(nn.Module):
|
||||
@ -1,15 +1,15 @@
|
||||
import mlx.core as mx
|
||||
from mlx import nn
|
||||
|
||||
from flux_1.models.vae.common.unet_mid_block import UnetMidBlock
|
||||
from mflux.models.vae.common.unet_mid_block import UnetMidBlock
|
||||
|
||||
from flux_1.models.vae.encoder.conv_in import ConvIn
|
||||
from flux_1.models.vae.encoder.conv_norm_out import ConvNormOut
|
||||
from flux_1.models.vae.encoder.conv_out import ConvOut
|
||||
from flux_1.models.vae.encoder.down_block_1 import DownBlock1
|
||||
from flux_1.models.vae.encoder.down_block_2 import DownBlock2
|
||||
from flux_1.models.vae.encoder.down_block_3 import DownBlock3
|
||||
from flux_1.models.vae.encoder.down_block_4 import DownBlock4
|
||||
from mflux.models.vae.encoder.conv_in import ConvIn
|
||||
from mflux.models.vae.encoder.conv_norm_out import ConvNormOut
|
||||
from mflux.models.vae.encoder.conv_out import ConvOut
|
||||
from mflux.models.vae.encoder.down_block_1 import DownBlock1
|
||||
from mflux.models.vae.encoder.down_block_2 import DownBlock2
|
||||
from mflux.models.vae.encoder.down_block_3 import DownBlock3
|
||||
from mflux.models.vae.encoder.down_block_4 import DownBlock4
|
||||
|
||||
|
||||
class Encoder(nn.Module):
|
||||
@ -1,8 +1,8 @@
|
||||
import mlx.core as mx
|
||||
from mlx import nn
|
||||
|
||||
from flux_1.models.vae.decoder.decoder import Decoder
|
||||
from flux_1.models.vae.encoder.encoder import Encoder
|
||||
from mflux.models.vae.decoder.decoder import Decoder
|
||||
from mflux.models.vae.encoder.encoder import Encoder
|
||||
|
||||
|
||||
class VAE(nn.Module):
|
||||
@ -6,7 +6,7 @@ import PIL.Image
|
||||
import mlx.core as mx
|
||||
import piexif
|
||||
|
||||
from flux_1.config.model_config import ModelConfig
|
||||
from mflux.config.model_config import ModelConfig
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
@ -3,8 +3,8 @@ from PIL import Image
|
||||
import mlx.core as mx
|
||||
import numpy as np
|
||||
|
||||
from flux_1.config.runtime_config import RuntimeConfig
|
||||
from flux_1.post_processing.image import Image
|
||||
from mflux.config.runtime_config import RuntimeConfig
|
||||
from mflux.post_processing.image import Image
|
||||
|
||||
|
||||
class ImageUtil:
|
||||
@ -3,7 +3,7 @@ from pathlib import Path
|
||||
import transformers
|
||||
from huggingface_hub import snapshot_download
|
||||
|
||||
from flux_1.tokenizer.clip_tokenizer import TokenizerCLIP
|
||||
from mflux.tokenizer.clip_tokenizer import TokenizerCLIP
|
||||
|
||||
|
||||
class TokenizerHandler:
|
||||
@ -31,7 +31,7 @@ class LoraUtil:
|
||||
if lora_scale < 0.0 or lora_scale > 1.0:
|
||||
raise Exception(f"Invalid scale {lora_scale} provided for {lora_file}. Valid Range [0.0 - 1.0] ")
|
||||
|
||||
from flux_1.weights.weight_handler import WeightHandler
|
||||
from mflux.weights.weight_handler import WeightHandler
|
||||
lora_transformer, _ = WeightHandler.load_transformer(lora_path=lora_file)
|
||||
LoraUtil._apply_transformer(transformer, lora_transformer, lora_scale)
|
||||
|
||||
@ -4,8 +4,8 @@ import mlx.core as mx
|
||||
from huggingface_hub import snapshot_download
|
||||
from mlx.utils import tree_unflatten
|
||||
|
||||
from flux_1.weights.lora_util import LoraUtil
|
||||
from flux_1.weights.weight_util import WeightUtil
|
||||
from mflux.weights.lora_util import LoraUtil
|
||||
from mflux.weights.weight_util import WeightUtil
|
||||
|
||||
|
||||
class WeightHandler:
|
||||
@ -1,4 +1,4 @@
|
||||
from flux_1.config.config import Config
|
||||
from mflux.config.config import Config
|
||||
|
||||
|
||||
class WeightUtil:
|
||||