Paint Journey V2 is V1 fine-tuned on 768x768 oil paintings by Midjourney V4, Open Journey V2, Disco Diffusion, and artists given permission
Begin the prompt with ((oil painting)) to add the oil paint effect. For digital and other painting styles, use similar prompts as you would for Midjourney V4 (with some tweaks), Stable Diffusion v1.5 (add more styles), Open Journey V2, or Disco Diffusion.
Paint Journey V2's paintings are closer to human-drawn art than Open Journey V2.
Compared to models like Dreamlike Diffusion 1.0, PJ V2 tends to generate 768x768 or higher resolution images with reduced noise levels.
This model is also capable of generating stunning portraits at 768x1136 resolution without duplicated faces (with Camenduru's WebUI), a difficult task to models like DreamShaper 3.3.
At lower resolutions, DreamShaper 3.3 tends to generate higher quality portraits than PJ V2 in terms of noise levels, given the same (short) postive and negative prompts.
However, PJ V2 can craft more stunning masterpieces with more descriptive positive and negative prompts and can still generate beautiful landscapes with shorter prompts.
Training
Instead of solely fine-tuning its Unet, Paint Journey V2 focuses on fine-tuning its text encoder with a diverse range of prompts.
This allows for a seamless blend of the digital and oil painting styles into various other types of prompts, resulting in a more natural and dynamic output.
This model was trained on a curated dataset of roughly 300 images hand-picked from Midjourney, Prompt Hero, PixaBay, Open Journey V2, and Reddit.
Before training, I used R-ESRGAN 4x on many images to increase their resolution and reduce noise.
Portrait sizes include, but are not limited to, 512x768, 768x768, and 768x1136.
Landscape sizes include, but are not limited to, 768x512, 768x768, 1152x768, and 1280x768.
Download checkpoint and vae to the ./stable-diffusion-webui/models/Stable-diffusion folder. Run webui-user.bat.
🧨 Diffusers
Tip: using double, tripple, or quadriple brackets around some letters WORD (e.g. "((WORD))") will put an 'emphasis' on WORD
pip install --upgrade diffusers transformers
python
1# see more sampling algorithms at https://huggingface.co/docs/diffusers/using-diffusers/schedulers#changing-the-scheduler23from diffusers import StableDiffusionPipeline, EulerAncestralDiscreteScheduler
4import torch, random, datetime
56pipe = StableDiffusionPipeline.from_pretrained("FredZhang7/paint-journey-v2")7pipe.scheduler = EulerAncestralDiscreteScheduler.from_config(pipe.scheduler.config)8pipe = pipe.to("cuda")910defrandom_seed():11return random.randint(0,2**32-1)121314prompt ="((oil painting)), gentle waves, bright blue sky, white sails billowing, sun glistening on the surface, salty sea air, distant horizon, calm breeze, birds soaring overhead, vibrant colors, artstation digital painting, high resolution, uhd, 4 k, 8k wallpaper"# what you want to see15negative_prompt ="low-res, blurry, haze, dark clouds looming, choppy waves, engine failing, sails tattered, stormy winds".split(", ")# what you don't want to see16seed = random_seed()# replace with the desired seed if needed17width, height =1280,768# width and height of the generated image18cfg_scale =7.5# classifer free guidance scale, smaller means more creative, 7 to 11 is usually a good range19num_inference_steps =40# sampling steps, 30 to 40 is usually good for Euler Ancestral202122generator = torch.Generator("cuda").manual_seed(seed)23with torch.autocast("cuda"):24 image = pipe(prompt=prompt,25 num_inference_steps=num_inference_steps,26 width=width, height=height,27 generator=generator,28 guidance_scale=cfg_scale).images[0]2930defgenerate_filename(string, seed):31 invalid_chars =["<",">",":",'"',"/","\\","|","?","*"]32for char in invalid_chars:33 string = string.replace(char,"")34returnf"{datetime.now().strftime('%Y-%m-%d_%H-%M-%S')}_{seed}_{string}"3536image.save(f"./{generate_filename(prompt, seed)}.png")