【novelAI】【python】pythonでnovelAIのプロンプトの内容をpythonで作る

  • 目的
    • ymlファイルを用意することでnovelAIで使えるプロンプトを生成する
  • 結論
    • 以下のソースを同じディレクトリに配置して実行することでプロンプトの内容が出力される
  • 出力結果
    • 以下のソースを実行すると得られるプロンプト
    • 202402050128
      除外したいもの
      {longbody,lowres,bad anatomy,bad hands,missing fingers,pubic hair,extra digit,fewer digits,cropped,worst quality,low quality,bad hands,owres,bad anatomy,bad hands,text,error,missing fingers,extra digit,fewer digits,cropped,worst quality,low quality,normal quality,jpeg artifacts,signature,watermark,username,blurry,missing fingers,bad hands,missing arms,large breasts}
      
      入力コンテンツ
      {one girl,{baby face},{red eyes and like a star},{big breasts},}
      {one boy,{baby face},{blue eyes and like a star},{small breasts},}
  • python
    • #!/usr/bin/python
      # -*- coding: utf-8 -*-
      
      import yaml
      from datetime import datetime
      
      
      # configファイルを読み込ませる
      YML_FILE = "./config.yml"
      
      # 出力ファイルを定義する
      OUT_PUT_LILE = "./output.txt"
      
      # 配列を宣言
      # 除外するもの
      undesired_content = []
      # 設定するもの
      set_content = []
      
      # 実行日付を取得(yyyymmddhhmm)
      current_datetime = datetime.now()
      # フォーマットを指定して日付を文字列に変換
      date_format = current_datetime.strftime('%Y%m%d%H%M')
      # 出力例
      # 202402050007
      
      # ymlファイルを読み込む
      with open(YML_FILE, 'r') as file:
          read_config = yaml.safe_load(file)
      
      for content, value_list in read_config.items():
          # ループの内容が除外したい項目の場合
          if content == "undesired_content":
              # 除外したい内容の項目でループさせる
              for value in value_list:
                  # novelAIに書き込む形に変換する
                  undesired_content.append(value)
              # ファイルに出力する
              # ファイルを書き込みモードでオープン
              # wで上書きさせる
              with open(OUT_PUT_LILE, 'w') as file:
                  # ファイルにテキストを書き込む
                  # 実行日時を出力
                  file.write(date_format + '\n')
                  # ヘッダー
                  file.write('除外したいもの\n')
                  # 書き込む内容を作成
                  custom_output_data = '{' + ','.join(undesired_content) + '}' + '\n'
                  # 内容を書き込み
                  file.write(custom_output_data)
                  # 改行
                  file.write('\n')
          # ループの内容がコンテンツの場合
          # ファイルへの出力を開始しておく
          with open(OUT_PUT_LILE, 'a') as file:
              if content == "make_content":
                  # ヘッダー
                  file.write('入力コンテンツ\n')
                  # 概要の中身でループ
                  for value_content in value_list:
                      # 上記の内容を変数に入れる
                      # all_contentには概要含めて1人分の生成内容が全部入ってる
                      all_content = value_content
                      # all_contentの例
                      # {'one girl': [{'face': 'baby face'}, {'eye': ['red', 'like a star']}]}
                      for overview in all_content:
                          # 概要を出力
                          file.write('{' + overview + ',')
                          # one_contentには1人分の生成内容が全部入ってる
                          one_content = all_content[overview]
                          # one_contentの例
                          # [{'face': 'baby face'}, {'eye': ['red', 'like a star']}]
                      for element in one_content:
                          # element = 要素
                          for key, value in element.items():
                              # keyにはパーツの名称
                              # 例:
                              # face
                              # eye
                              # valueにはパーツの内容が入ってる
                              # 例:
                              # baby face
                              # ['red', 'like a star']
                              # valueが'list'か'str'かで処理を分ける
                              # valueのtypeを確認
                              value_type = type(value)
                              # typeが'str'の場合
                              if value_type == str:
                                  # 内容を書き込む
                                  file.write('{' + value + '}')
                              # typeが'list'の場合
                              if value_type == list:
                                  # 内容を書き込む
                                  file.write('{' + ' and '.join(value) + '}')
                              # keyごとに','で区切る
                              file.write(',')
                      # one_contentの区切りとして最後に'}'を記載する
                      file.write('}\n')
  • ymlファイルの中身
    • # 除外したいものリスト
      undesired_content:
        - longbody
        - lowres
        - bad anatomy
        - bad hands
        - missing fingers
        - pubic hair
        - extra digit
        - fewer digits
        - cropped
        - worst quality
        - low quality
        - bad hands
        - owres
        - bad anatomy
        - bad hands
        - text
        - error
        - missing fingers
        - extra digit
        - fewer digits
        - cropped
        - worst quality
        - low quality
        - normal quality
        - jpeg artifacts
        - signature
        - watermark
        - username
        - blurry
        - missing fingers
        - bad hands
        - missing arms
        - large breasts
      # 出力する内容
      make_content:
        # フォーマット
        # ざっくり概要
        - one girl:
          # 顔の特徴
          - face: baby face
          # 目
          - eye:
            # 赤い
            - red eyes
            # 星のような
            - like a star
          # 胸
          - breasts:
            - big breasts
        - one boy:
          # 顔の特徴
          - face: baby face
          # 目
          - eye:
            # 青い
            - blue eyes
            # 星のような
            - like a star
          # 胸
          - breasts:
              - small breasts
NovelAIpython
スポンサーリンク
K・B・S
タイトルとURLをコピーしました