いろいろLoRA作成記録

概要

LoRAの作成記録とか検証とか
原神LoRA検証に書き足すのは限界があるので、原神キャラ再現以外を記録する。というかあっちはもう更新するつもりはない。
参考程度に。

注意

NSFW画像があるので閲覧注意。
このメモはあくまでも一例です。このメモだけで結論を出すべきではありません。ほかの情報も参考にしてください。

学習について

特に記載がない限り、AdamW,512x512,animefull,キャプションシャッフル,トークン保持1、正則化無しで学習している。

キャプションについて

WD14Tagger(convnext-v2)を用いてDanbooruタグ方式で作成。
プロンプトの応答性を改善するために意味が重複・矛盾するタグは削除する。
また、重複する単語を含むタグは別の文字に変更する。


キャラクター

アロナ

いつもの設定で学習。
画像は64枚、繰り返し数は8。

Image Prompt Description
Generated by AI <lora:arona:1>1girl, arona (blue archive), school uniform, serafuku, upper body やや不安定。
Generated by AI <lora:arona_v2:1>1girl, arona (blue archive), school uniform, serafuku, upper body 4epoch(4000steps)回した。やっぱり不安定。
Generated by AI <lora:arona_v3:1>1girl, arona (blue archive), school uniform, serafuku, upper body 原因はタグだった。誤検出と集約忘れのタグを消したら改善した。

教師画像が足りないのも原因だった。

アズサ(AdamW vs DAdaptLion)

4096Steps、Dim64Alpha16,Conv2d拡張有効(C3Lier)、AdamWのLRは0.0001。教師画像64枚でWD14Taggerでキャプション作成。
DAdaptLionの設定: --optimizer_args "betas=0.9,0.999" "weight_decay=0" "d0=1e-06"

dwがAdamWでdlがDAdaptLion。
Image
袖の再現度が上がった。

ハルカ(AdamW vs DAdaptLion)

4096Steps、Dim64Alpha16,Conv2d拡張有効(C3Lier)、AdamWのLRは0.0001。教師画像64枚でWD14Taggerでキャプション作成。
DAdaptLionの設定: --optimizer_args "betas=0.9,0.999" "weight_decay=0" "d0=1e-06"
Image
衣装の再現度が良くなった。

アル(AdamW vs DAdaptLion)

4508Steps、Dim64Alpha16,Conv2d拡張有効(C3Lier)、AdamWのLRは0.0001、解像度は768。教師画像161枚でWD14Taggerでキャプション作成。
DAdaptLionの設定: --optimizer_args "betas=0.9,0.999" "weight_decay=0" "d0=1e-06"
v7がAdamWでv7_dlがDAdaptLion。
Image
衣装の再現度が良くなった気がする。

AdamWとDAdaptLionのstepごとの変化

Image
3000stepsで突然背景が変化した。
Image
AdamWは3000から、DAdaptLionは2000から再現できている。

DAdaptLionにしたら少し再現度が上がる。ただしCPUボトルネックがかなり出やすいのか、CPUの1スレッド使い切ってGPU消費電力がフラフラする。

DAdaptLion vs Prodigy

DAdaptLionとProdigyの設定: learning_rate 1 --optimizer_args "betas=0.9,0.999" "weight_decay=0" "d0=1e-06"

v12がDAdaptLionでv12pがProdigy
大体4000steps回した。
Image
ん?
dlがDAdaptLionでpdがProdigy
大体5000steps回した。
Image
えーっと、何が変わったのか、分かりません

steps数ごとの変化
Image
Image
prodigyは学習が速いっていう人いるけどむしろ遅いような・・・設定の問題なのかな?

ProdigyはDyLoRAを使わないならあまり意味はなさそう。

キャラは層別でOUT03-06だけでいいかも

Image
Image
見ての通り、再現度が一切変わらない。
ほとんどのキャラは問題ないが、目の再現度が低下する場合がある(アロナで確認)。その場合はIN04-07を有効にするといい。
学習速度上昇、VRAM消費削減、ファイルサイズ削減できるのでおすすめ!

DAdaptation系の注意

  • LRは1を強く推奨。
  • 一部のDAdaptation系OptimizerはUNetとTEのLRを個別に設定できない。
  • 一部のDAdaptation系Optimizerは層別学習率で0と1以外は設定できない。

その他

ノノミを画像23枚、Dim64Alpha32で学習したらHighres時に崩れやすかったり衣装が不自然だったりしたのでAlpha16で学習したら改善した。
画像の枚数が少ないときはAlpha下げたほうがよさそう。

LBWでNIN(IN無効化)使っても再現度はほとんど変わらないので、学習時にINとMIDを切ってもいい。多くのキャラが再現度そのまま画風などの悪影響を減らせる。
ただしすべてのキャラで再現度が維持できるわけではない。ハナコで試したら目の周りが不安定になった。


小物類

M4 Carbine

Conv2dオンのLoRA,Dim64/Alpha1で学習。stepsは大体9000。教師画像は94枚、繰り返し数は8。
aimingとaiming at viewerで単語が被って生成時に両者の特徴が混ざってしまうのでaiming at viewerをaavに変更。

Image Prompt Description
Generated by AI <lora:m4_carbine:1>1girl, m4 carbine, holding gun 相変わらず武器はへたくそ。 画風が変わった。
Generated by AI <lora:m4_carbine:0.8:NCNF>1girl, m4 carbine, holding gun 強度を下げてLBW有効化。ちょっと良くなった。
Generated by AI <lora:m4_carbine:1><lora:aru:1>1girl, aru (blue archive), m4 carbine, holding gun キャラLoRAと併用する。汚くなった。
Generated by AI <lora:m4_carbine:0.8><lora:aru:1>1girl, aru (blue archive), m4 carbine, holding gun 強度を下げるが効果なし。
Generated by AI <lora:m4_carbine:0.8:NCNF><lora:aru:1>1girl, aru (blue archive), m4 carbine, holding gun 顔とキャラ周りの層を切ったら改善した。

9000step回してようやく反応するようになったが、aiming周りが怪しいのでもっと回す必要あり?
追記:16000steps回してもダメだった。多分SD1.Xの限界。XLに期待。

まとめ

手に持つ小物類もかなり回さないと反応しないようだ。
複数のLoRAを使用した時に汚くなる場合は、LoRA Block Weightを使うと良い。


構図・シチュエーション

驚いた時の「^^^」

networks.lora, Dim32/Alpha2(Conv2d拡張オン、convも同じ値)で学習。教師画像は64枚、繰り返し数は8。

Image Prompt Description
Generated by AI <lora:SurprisedEffect6K:1>1girl, ^^^, surprised 6000程度では効果が薄い
Generated by AI <lora:SurprisedEffect12K:1>1girl, ^^^, surprised 12000steps回したら効き目が出た。画風への影響は小さい。
Generated by AI <lora:SurprisedEffect12K:1><lora:aru:1>1girl, aru (blue archive), ^^^, surprised キャラLoRAと併用。相性はキャラLoRAによって異なる。

パイズリ

NAI含めてほとんどのモデルがパイズリをせずに挿入してしまうので作成した。

networks.lora, Dim64/Alpha16(Conv2d拡張オン、convも同じ値)で学習。教師画像は64枚、繰り返し数は8。
9000stepsでも結果が出るが、キャラLoRAと組み合わせたとたんに何もしなくなるので12288steps回した。

Image Prompt Description
Generated by AI <lora:BetterPaizuri:1>1girl, paizuri, penis, nude 画風の影響は控え目
Generated by AI <lora:BetterPaizuri:1><lora:mika_n:1>1girl, paizuri, penis, nude, mika (blue archive), ejaculation, cum on breasts キャラLoRAと併用。少し相性が悪い。
Generated by AI <lora:BetterPaizuri:1:NCNF><lora:mika_n:1>1girl, paizuri, penis, nude, mika (blue archive), ejaculation, cum on breasts LBWでNCNF(塗りと顔の層を無効化)を適用で改善。

フェラ打率アップ

lycoris_kohya, algo=lora, Dim64/Alpha16(convも同じ値)で学習。教師画像は116枚、繰り返し数は4。
8000ステップ程度ではプロンプトの応答性が悪いので、14000ステップ回した。

  • Promptについて
    shallowthroatで先舐め、middlethroatで真ん中まで、deepthroatで根本までしゃぶる。licking penisで竿舐め。
    nutslickingで玉舐めするはずだが、画像が少な過ぎて反応しない。
Image Prompt Description
Generated by AI <lora:fellatio3:1>1girl, fellatio, penis, shallowthroat 若干画風が変化してる。
Generated by AI <lora:fellatio3:1>1girl, fellatio, penis, middlethroat Good
Generated by AI <lora:fellatio3:1>1girl, fellatio, penis, deepthroat いうほどDeepか?
Generated by AI <lora:fellatio3:1>1girl, fellatio, penis, licking penis 問題なし
Generated by AI <lora:fellatio3:1><lora:yuuka:1>1girl, yuuka (blue archive), fellatio, penis, deepthroat, pov キャラLoRAと併用。問題なし。

14Kステップでも反応が悪い気がする。もっと回すべき?

ラーメン

なぜかAIはラーメンをてづかみで食べるものと思っているので、指導してやった。
lycoris_kohya, algo=lora, Dim32/Alpha8(convも同じ値)で学習。教師画像は139枚、繰り返し数は4。6400steps回した。

正則化画像は透明240枚。

Image Prompt Description
Generated by AI 1girl, ramen, chopsticks, eating LoRA無し。右手に持ってる箸は何のためにあるのか
Generated by AI <lora:ramen_v1.1:1>1girl, ramen, chopsticks, eating 問題解決。画風の影響も小さい。
Generated by AI <lora:ramen_v1.1:1><lora:aru:1>1girl, aru (blue archive), ramen, chopsticks, eating キャラLoRAと併用。問題なし。

驚いた時の白目

networks.lora, Dim32/Alpha1(Conv2d拡張オン、convも同じ値)で学習。教師画像は45枚、繰り返し数は10。
warmup_stepsは未指定。

Image Prompt Description
Generated by AI <lora:SurprisedBlankEyes:1>1girl, blank eyes, surprised Good
Generated by AI <lora:SurprisedBlankEyes:1>1girl, blank eyes, blonde hair, surprised, school uniform, 4koma 謎の4コマ
Generated by AI <lora:SurprisedBlankEyes:1><lora:aru:1>1girl, aru (blue archive), blank eyes, surprised キャラLoRAと併用。問題なし。
Generated by AIhttps://www.imagebam.com/view/MEKAYN7 <lora:SurprisedBlankEyes4:1><lora:aru:1>1girl, aru (blue archive), blank eyes, surprised, explosion, standing Dim16にして8100steps回した。白目にならない確率が下がって、プロンプトの応答性とHighres時の安定性が改善した。ファイルサイズ的にもこっちでいいかな

まとめ

シチュエーションはかなり回さないとプロンプトに反応しない。
目安として9000steps以上。
Dimは32-16でよさそう。


背景

桜(写真)

networks.lora, Dim32/Alpha8(convも同じ値)で学習。教師画像は48枚、繰り返し数は10。3840steps回した。
正則化画像は透明16枚。

Image Prompt Description
Generated by AI <lora:SakuraScenery_v1.25:1>1girl, cherry blossoms ド派手なピンク色の桜が上品な色になった。キャラの画風が若干変化した。
Generated by AI <lora:SakuraScenery_v1.25:1>1girl, cherry blossoms Dim16Alpha8
Generated by AI <lora:SakuraScenery_v1.3:1:NCNF>1girl, cherry blossoms LBWでキャラ周りをオフにした。キャラへの影響が減ったが、桜の色が濃くなった。
Generated by AI <lora:SakuraScenery_v1.25:1><lora:arona_v4:1>1girl, arona (blue archive), cherry blossoms キャラLoRAと併用。アロナとの相性が悪いのか、髪色が安定しない。
Generated by AI <lora:SakuraScenery_v1.3:1><lora:arona_v4:1>1girl, arona (blue archive), cherry blossoms Dim16Alpha8。アロナとの相性が悪いのか、髪色が安定しない。

竹富島

networks.lora, Dim32/Alpha8(convも同じ値)で学習。教師画像は52枚、繰り返し数は8。5824steps回した。

正則化画像よる変化

透明正則化画像16枚使用。
ngとついてるのが正則化画像なし。数字はステップ数。
Image

正則化無しのほうが人物の出現率が高く、汚くなりにくい。

正則化画像よる変化

教師画像に犬が写った写真が1枚あるが、これにdogのタグはつけてない。
5824_ngは水牛車にanimalとcow、犬にanimalとdogをつけた。
Image
5824_ngだけ動物が出現してない。やはりタグ付けは重要。
また、画像内の人物関連のタグは消してはいけない。キャラLoRAとの相性が大幅に悪化する。
Conv2d拡張(LoCon)は過学習に似た結果になることがあるようで、通常のLoRAのほうがいいときもある。

まとめ

背景は低dimで5000steps以下でできるので簡単。dim32以下でよいと思われる。
キャラの出現率が低下するが、強度を下げるかLoRA Block Weightを使用することで改善できる。


画風

ねんどろいど

networks.lora, Dim64/Alpha32(convも同じ値)で学習。教師画像は108枚、繰り返し数は5。4088steps回した。
正則化画像は透明240枚。

Image Prompt Description
Generated by AI <lora:nendoroid_v1.1:1>1girl, nendoroid いけるやん
Generated by AI <lora:nendoroid_v1.1:1>1girl, nendoroid, red hair, bangs, kimono, forest いけるやん(背景は変化しないが)
Generated by AI <lora:nendoroid_v1.1:1><lora:hifumi:1>1girl, nendoroid, hifumi (blue archive), serafuku キャラLoRAと併用。問題なし。

まとめ?

塗りだけを変化させるLoRAならunetだけの学習でいいかもしれない。TextEncoderを切ると構図の影響がなくなる。
UNet=塗りなどの言語化できない概念への影響大。TextEncoder=単語と画像の特徴を紐づけるもの。構図への影響大。

検証

512,768,1024の違い

原神LoRAメモでは効果が無かったので、別のキャラで再度学習時の解像度による再現性の変化を検証。
コマンドは自作のGUIで生成。解像度と省メモリ設定(gradient_checkpointing, mem_eff_atten)以外は共通。
教師画像は64枚、正則化は透明240枚
Step数は4096
accelerate launch --num_cpu_threads_per_process 16 train_network.py --pretrained_model_name_or_path="G:\sd_train\Train\nai_full.ckpt" --train_data_dir="G:\sd_train\Train\shiroko\train" --output_dir="G:\sd_train\Train\shiroko\out" --reg_data_dir="G:\sd_train\Train\Lora_RegImageA240" --network_module=lycoris.kohya --network_args "algo=lora" "conv_dim=64" "conv_alpha=32" --mem_eff_attn --gradient_checkpointing --persistent_data_loader_workers --color_aug --enable_bucket --save_model_as="safetensors" --lr_scheduler_num_cycles=4 --mixed_precision=fp16 --learning_rate=0.0001 --resolution=1024,1024 --train_batch_size=1 --max_train_epochs=4 --network_dim=64 --network_alpha=32 --shuffle_caption --keep_tokens=1 --optimizer_type="AdamW8bit" --lr_warmup_steps=100 --output_name="shiroko_1024" --clip_skip=2 --seed=42 --save_precision="fp16" --lr_scheduler=cosine_with_restarts --min_bucket_reso=320 --max_bucket_reso=2048 --caption_extension=".txt"

画像を右クリックで別ウィンドウで開くと見やすい。

生成解像度 Prompt Image Description
512x512 <lora:shiroko_512:1>1girl, shiroko (blue archive), school uniform, id card, gloves, blue necktie Generated by AIhttps://www.imagebam.com/view/MEKAYOT よくなったよね?
768x768 Generated by AIhttps://www.imagebam.com/view/MEKAYOV
1024x1024 Generated by AIhttps://www.imagebam.com/view/MEKAYOX
512x768 <lora:shiroko_512:1>1girl, shiroko (blue archive), school uniform, id card, gloves, blue necktie, cityscape, looking at viewer Generated by AIhttps://www.imagebam.com/view/MEKAYP1 512でもたまに出る
↑のHighes.fix(2倍) Generated by AIhttps://www.imagebam.com/view/MEKAYP3 1024が最も再現度が高い
512x768 <lora:shiroko_512:1>1girl, shiroko (blue archive), school uniform, (id card:1.1), gloves, blue necktie, city Generated by AIhttps://www.imagebam.com/view/MEKAYP7 1024は安定して三角形が出る。ABYDOSの文字と太陽までは出ない

1024はid cardのアビドスの模様が最も正確に出ている。
768でもある程度再現できた。512はほとんど溶けてしまった。

まとめ

1024pxで精細な模様の再現性が向上する可能性がある。ただし、かえって品質が低下する場合があるので注意。
前回の検証では効果が出なかったのは文字などの複雑な模様がなかったのが原因かもしれない。
つまり、対象の特徴が単純だと効果が低いかも。


タグについて

キャラ

Additional Tagsで先頭にキャラ名を追加する。Keep tokenは1。

タグを消す理由

キャラを召喚するのにblonde hair, bangs, blue eyes....みたいにいちいち特徴の単語を入力するのは面倒くさい。
そこで、特徴の単語を1つにまとめることで1単語で召喚できるようにする。
なお、残したタグは個別に覚えるので脱がせたり部分的にアレンジしたりするといったことができるはず。
1girlは消さないほうがいいかも?消すと生成時に1girlと指定しても2girlsになったりする場合あり。

消すべきタグ

  • 身体的特徴のタグ
    キャラを1プロンプトで召喚したいのでその類のタグは消す。消すことでそれらの特徴を先頭の1タグで覚える。
  • 抽象的なタグ(例:virtual youtuber,highres)
    どの画像につくかわからないタグはどうせ覚えないから不要。
  • 誤検出タグ
    モデルの記憶と混ざって意図しないものが出てくるかもしれない。

IMG
上の画像には次のタグがつけられた。
kayoko (blue archive), 1girl, solo, multicolored hair, black hair, horns, hood, white hair, halo, sitting, skirt, bag, hoodie, two-tone hair, red eyes, blush, long sleeves, black hoodie, red skirt, ponytail, bangs, looking at viewer, closed mouth, miniskirt, collarbone, hair between eyes, feet out of frame, plaid skirt, pleated skirt, sidelocks, hood down, hand up, mole on neck, medium hair, backpack, clothes writing, plaid

この画像から、次のタグを削除する。するとそれらのタグがkayoko (blue archive)に集約される。
white_hair,horns,black_hair,halo,red_eyes,ponytail,two-tone_hair,bangs,long_hair,hair_between_eyes,wings,sidelocks,blush,multicolored_hair,halo

構図・シチュエーション

Additional Tagsで先頭に構図・シチュエーション名を追加する。Keep tokenは1。

消すべきタグ

  • 抽象的なタグ(例:virtual youtuber,highres)
    どの画像につくかわからないタグはどうせ覚えないから不要。
  • キャラ名
    生成時に特定のキャラ名を入れると特定の教師画像の影響が強く出る。
  • 誤検出タグ
    モデルの記憶と混ざって意図しないものが出てくるかもしれない。

IMG
上の画像には次のタグがつけられた。
paizuri, 1girl, breasts, nonomi (blue archive), 1boy, nipples, hetero, penis, censored, nude, green eyes, blush, long hair, bar censor, completely nude, large breasts, open mouth, looking at viewer, smile, dark-skinned male, halo, solo focus, ass, bangs, male pubic hair, indoors, collarbone, pubic hair, grey hair, dark skin, window, :d, hair bun, huge breasts
この画像から、次のタグを削除する。
nonomi_(blue_archive)

画風

キャラなどを覚えるわけではないのでkeep tokenは0。なおShuffle captionは有効。

消すべきタグ

無し。すべてそのままでいい。

オブジェクト(持ち物)

消すべきタグ

  • 意味が矛盾、重複するタグ(例:gun,weapon,assault rifle)
    そのままにしておくと複数の概念が混ざり、持ち方を変えるといったことができなくなる。
  • 抽象的なタグ(例:virtual youtuber,highres)
    どの画像につくかわからないタグはどうせ覚えないから不要。
  • キャラ名
    生成時に特定のキャラ名を入れると特定の教師画像の影響が強く出る。
  • 誤検出タグ
    モデルの記憶と混ざって意図しないものが出てくるかもしれない。あるいは既存タグが学習対象で汚染されるともいえる。

正則化画像の検証

正則化画像の種類でどう変化するか検証。4つのパターンで検証。

  • 正則化無し
  • Booruサイトの画像64枚
    適当に64枚集めた画像
  • NAIの画像64枚
    1girlだけで64枚生成したもの
  • 透明64枚

教師画像は128枚。繰り返しは4(1ep=512steps)。総step数は4096(Batch1相当)。学習に用いたモデルはNAI。正則化画像のkeep tokenは0に設定。
コマンド:
accelerate launch --num_cpu_threads_per_process 16 train_network.py --pretrained_model_name_or_path="D:\sd_train\Train\nai_full.ckpt" --train_data_dir="D:\sd_train\Train\mika\train" --output_dir="D:\sd_train\Train\mika\out" --network_module="networks.lora" --network_args "conv_dim=64" "conv_alpha=28" --xformers --color_aug --persistent_data_loader_workers --max_data_loader_n_workers=1 --enable_bucket --save_model_as="safetensors" --lr_scheduler_num_cycles=4 --mixed_precision="fp16" --learning_rate=0.0001 --resolution=512,512 --train_batch_size=2 --max_train_epochs=8 --network_dim=64 --network_alpha=28 --shuffle_caption --keep_tokens=1 --optimizer_type="AdamW" --lr_warmup_steps=500 --output_name="mika_noreg" --clip_skip=2 --seed=42 --save_precision="fp16" --lr_scheduler="cosine_with_restarts" --min_bucket_reso=320 --max_bucket_reso=1536 --caption_extension=".txt"

比較

noregが正則化無し、booru64がbooruサイトの画像64枚、nai64がNAI64枚、trans64が透明64枚。

Prompt: <lora:mika_noreg:1>1girl, mika \(blue archive\), white capelet
Negative Prompt(共通): lowres, bad anatomy, signature
使用モデル: NAI(fp16,pruned)
Image
使用モデル: 自家製闇鍋マージモデル(NAI+Any4.5 MBW=BaseA, BaseA+Counterfeit2.5 MBW=BaseB, BaseB+NostalgiaClear MBW=完成品)
Image
booru64は衣装の再現度が低下した。nai64は全体的に粗くなった。透明64はよくわからない。

Prompt: <lora:mika_noreg:1>1girl, mika \(blue archive\), town
使用モデル: 自家製闇鍋マージモデル
Image
booru64は衣装の再現度が低下した。nai64は全体的に粗くなった。透明64はよくわからない。

Prompt:<lora:mika_noreg:1>1girl, mika \(blue archive\), in the school classroom
使用モデル: 自家製闇鍋マージモデル
Image
nai64以外で大きな違いはない。

Prompt:<lora:mika_noreg:1>1girl, mika \(blue archive\), snowy forest, coat
使用モデル: 自家製闇鍋マージモデル
Image
nai64とbooru64はタグを集約しなかった部分(衣装)がいい感じに変化する。

Prompt:<lora:mika_noreg:1>1girl, mika \(blue archive\), white capelet, night view
Negative Prompt: lowres, bad anatomy, signature, cape
Image
white capeletと衣装を指定したらすべていい感じに再現した。
ネガのcapeは岬のcapeが出ないようにするためのもの。

まとめ

  • 透明画像は無意味。 あとStable Diffusionはアルファ値は使用しない。そりゃ情報の無い画像を渡しても意味ないよな
  • 正則化ありでは衣装のタグがない場合の衣装の再現度が低下した。
  • AI製の画像は品質低下の原因となるため、使用してはならない。
  • 衣装固定(再現性優先)でいいなら正則化無しでいい。
  • 着せ替えしたいならBooruサイトの画像を使うのがよさそう。ただしごくわずかに品質が低下する?

本来正則化は、あるものを覚えた代わりに別のものを忘れてしまうという問題を回避するためのもの。
例:鳥獣戯画カエルをshs frogで学習すると、frogで普通のカエルが出なくなる。そこで、学習中に正則化画像として普通のカエルの画像を渡すことで問題を改善できる。

つまり、学習対象だけ出てくればいいなら正則化は不要。


その他

LyCORISはやめとけ

LyCORISのメリット:

  • 専用のアルゴリズム(loha,lokr,ia3)が使用できる。実質的なdim数がdim^2になる。その分dimを下げてファイルサイズを減らせる。

デメリット:

  • loha系は重い(学習時間増加)
  • loha系にしても品質向上なし
    dim下げたときの品質低下がやや少ない程度
  • LoCon(C3Lier)での学習は標準のnetworks.loraでもできる

このデメリットでDim削ってファイルサイズを減らす価値を見いだせないし、LoConが標準で使えるからいらない子やね

Edit
Pub: 08 Apr 2023 07:14 UTC
Edit: 10 Aug 2023 11:28 UTC
Views: 7080