From b0e2951a037fa633a9acc1e4c612a6268cc62bcb Mon Sep 17 00:00:00 2001
From: GeneralYadoc <133023047+GeneralYadoc@users.noreply.github.com>
Date: Sun, 2 Jul 2023 04:00:36 +0900
Subject: [PATCH] Initial commit for OSS release v2.0.0.
---
.gitattributes | 1 +
LICENSE_ffmpeg | 165 ++++++++
README.md | 144 +++++--
README2.md | 187 +++++++++
ReadMeParts/main_window.png | Bin 0 -> 5362 bytes
ReadMeParts/raw_button.png | Bin 4858 -> 0 bytes
ReadMeParts/start_form.png | Bin 4230 -> 4605 bytes
ReadMeParts/zundamon_full.png | Bin 1133356 -> 0 bytes
ReadMeParts/zundamon_opaque_transparent.png | Bin 118944 -> 105869 bytes
ReadMeParts/zundamon_thumbnail.png | Bin 0 -> 370458 bytes
Release/ZundamonGPTonYouTube.zip | 3 -
TransparentViewer.exe | Bin 0 -> 676352 bytes
TransparentViewer.exe.config | 6 +
ZundamonGPTonYouTube.py | 7 +
requirements.txt | 7 +
setting.yaml | 48 +++
setup.py | 37 ++
src/ZundamonAIStreamer.py | 187 +++++++++
src/ZundamonAIStreamerManager.py | 126 ++++++
src/ZundamonAIStreamerUI.py | 409 ++++++++++++++++++++
src/__init__.py | 5 +
zundamon.gif | 3 +
zundamon.png | Bin 0 -> 135505 bytes
zundamon_icon1.ico | Bin 0 -> 270398 bytes
24 files changed, 1291 insertions(+), 44 deletions(-)
create mode 100644 LICENSE_ffmpeg
create mode 100644 README2.md
create mode 100644 ReadMeParts/main_window.png
delete mode 100644 ReadMeParts/raw_button.png
delete mode 100644 ReadMeParts/zundamon_full.png
create mode 100644 ReadMeParts/zundamon_thumbnail.png
delete mode 100644 Release/ZundamonGPTonYouTube.zip
create mode 100644 TransparentViewer.exe
create mode 100644 TransparentViewer.exe.config
create mode 100644 ZundamonGPTonYouTube.py
create mode 100644 requirements.txt
create mode 100644 setting.yaml
create mode 100644 setup.py
create mode 100755 src/ZundamonAIStreamer.py
create mode 100644 src/ZundamonAIStreamerManager.py
create mode 100644 src/ZundamonAIStreamerUI.py
create mode 100644 src/__init__.py
create mode 100644 zundamon.gif
create mode 100644 zundamon.png
create mode 100644 zundamon_icon1.ico
diff --git a/.gitattributes b/.gitattributes
index 486a232..8b4a606 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -1 +1,2 @@
*.zip filter=lfs diff=lfs merge=lfs -text
+*.gif filter=lfs diff=lfs merge=lfs -text
diff --git a/LICENSE_ffmpeg b/LICENSE_ffmpeg
new file mode 100644
index 0000000..65c5ca8
--- /dev/null
+++ b/LICENSE_ffmpeg
@@ -0,0 +1,165 @@
+ GNU LESSER GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc.
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+
+ This version of the GNU Lesser General Public License incorporates
+the terms and conditions of version 3 of the GNU General Public
+License, supplemented by the additional permissions listed below.
+
+ 0. Additional Definitions.
+
+ As used herein, "this License" refers to version 3 of the GNU Lesser
+General Public License, and the "GNU GPL" refers to version 3 of the GNU
+General Public License.
+
+ "The Library" refers to a covered work governed by this License,
+other than an Application or a Combined Work as defined below.
+
+ An "Application" is any work that makes use of an interface provided
+by the Library, but which is not otherwise based on the Library.
+Defining a subclass of a class defined by the Library is deemed a mode
+of using an interface provided by the Library.
+
+ A "Combined Work" is a work produced by combining or linking an
+Application with the Library. The particular version of the Library
+with which the Combined Work was made is also called the "Linked
+Version".
+
+ The "Minimal Corresponding Source" for a Combined Work means the
+Corresponding Source for the Combined Work, excluding any source code
+for portions of the Combined Work that, considered in isolation, are
+based on the Application, and not on the Linked Version.
+
+ The "Corresponding Application Code" for a Combined Work means the
+object code and/or source code for the Application, including any data
+and utility programs needed for reproducing the Combined Work from the
+Application, but excluding the System Libraries of the Combined Work.
+
+ 1. Exception to Section 3 of the GNU GPL.
+
+ You may convey a covered work under sections 3 and 4 of this License
+without being bound by section 3 of the GNU GPL.
+
+ 2. Conveying Modified Versions.
+
+ If you modify a copy of the Library, and, in your modifications, a
+facility refers to a function or data to be supplied by an Application
+that uses the facility (other than as an argument passed when the
+facility is invoked), then you may convey a copy of the modified
+version:
+
+ a) under this License, provided that you make a good faith effort to
+ ensure that, in the event an Application does not supply the
+ function or data, the facility still operates, and performs
+ whatever part of its purpose remains meaningful, or
+
+ b) under the GNU GPL, with none of the additional permissions of
+ this License applicable to that copy.
+
+ 3. Object Code Incorporating Material from Library Header Files.
+
+ The object code form of an Application may incorporate material from
+a header file that is part of the Library. You may convey such object
+code under terms of your choice, provided that, if the incorporated
+material is not limited to numerical parameters, data structure
+layouts and accessors, or small macros, inline functions and templates
+(ten or fewer lines in length), you do both of the following:
+
+ a) Give prominent notice with each copy of the object code that the
+ Library is used in it and that the Library and its use are
+ covered by this License.
+
+ b) Accompany the object code with a copy of the GNU GPL and this license
+ document.
+
+ 4. Combined Works.
+
+ You may convey a Combined Work under terms of your choice that,
+taken together, effectively do not restrict modification of the
+portions of the Library contained in the Combined Work and reverse
+engineering for debugging such modifications, if you also do each of
+the following:
+
+ a) Give prominent notice with each copy of the Combined Work that
+ the Library is used in it and that the Library and its use are
+ covered by this License.
+
+ b) Accompany the Combined Work with a copy of the GNU GPL and this license
+ document.
+
+ c) For a Combined Work that displays copyright notices during
+ execution, include the copyright notice for the Library among
+ these notices, as well as a reference directing the user to the
+ copies of the GNU GPL and this license document.
+
+ d) Do one of the following:
+
+ 0) Convey the Minimal Corresponding Source under the terms of this
+ License, and the Corresponding Application Code in a form
+ suitable for, and under terms that permit, the user to
+ recombine or relink the Application with a modified version of
+ the Linked Version to produce a modified Combined Work, in the
+ manner specified by section 6 of the GNU GPL for conveying
+ Corresponding Source.
+
+ 1) Use a suitable shared library mechanism for linking with the
+ Library. A suitable mechanism is one that (a) uses at run time
+ a copy of the Library already present on the user's computer
+ system, and (b) will operate properly with a modified version
+ of the Library that is interface-compatible with the Linked
+ Version.
+
+ e) Provide Installation Information, but only if you would otherwise
+ be required to provide such information under section 6 of the
+ GNU GPL, and only to the extent that such information is
+ necessary to install and execute a modified version of the
+ Combined Work produced by recombining or relinking the
+ Application with a modified version of the Linked Version. (If
+ you use option 4d0, the Installation Information must accompany
+ the Minimal Corresponding Source and Corresponding Application
+ Code. If you use option 4d1, you must provide the Installation
+ Information in the manner specified by section 6 of the GNU GPL
+ for conveying Corresponding Source.)
+
+ 5. Combined Libraries.
+
+ You may place library facilities that are a work based on the
+Library side by side in a single library together with other library
+facilities that are not Applications and are not covered by this
+License, and convey such a combined library under terms of your
+choice, if you do both of the following:
+
+ a) Accompany the combined library with a copy of the same work based
+ on the Library, uncombined with any other library facilities,
+ conveyed under the terms of this License.
+
+ b) Give prominent notice with the combined library that part of it
+ is a work based on the Library, and explaining where to find the
+ accompanying uncombined form of the same work.
+
+ 6. Revised Versions of the GNU Lesser General Public License.
+
+ The Free Software Foundation may publish revised and/or new versions
+of the GNU Lesser General Public License from time to time. Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Library as you received it specifies that a certain numbered version
+of the GNU Lesser General Public License "or any later version"
+applies to it, you have the option of following the terms and
+conditions either of that published version or of any later version
+published by the Free Software Foundation. If the Library as you
+received it does not specify a version number of the GNU Lesser
+General Public License, you may choose any version of the GNU Lesser
+General Public License ever published by the Free Software Foundation.
+
+ If the Library as you received it specifies that a proxy can decide
+whether future versions of the GNU Lesser General Public License shall
+apply, that proxy's public statement of acceptance of any version is
+permanent authorization for you to choose that version for the
+Library.
diff --git a/README.md b/README.md
index 82f1799..6b7948a 100644
--- a/README.md
+++ b/README.md
@@ -1,34 +1,64 @@
# ZundamonGPTonYouTube
+English | [日本語](README2.md)
Intelligent Zundamon replies YouTube chat with GPT brain.
## First of all
-- This project is now Japanese only but I have a plan to open my source codes, then you'll be able to customize language.
-- If you are not good at English, please use [Google Transrate](https://translate.google.com/?sjid=2238627840605957328-AP&sl=auto&op=websites)
-
+- This Application is Japanese only since it's depend on Japanese voice engine "VOICEVOX", but You can cutomize by modifying MIT liccenced source codes.
## This application works on
- Windows OS (tested on Windows 10)
- .Net Framework v.4 (tested on v4.7.2)
- the machine on which installed [VOICEVOX](https://voicevox.hiroshiba.jp/) (tested on v.0.14.6)
-Core Module is implemented by Python, so it can adapt to other OS or voice generators. Please wait for opening source codes.
+ Core Module is implemented by Python, so it can adapt to other OS or voice generators.
+ Only avatar image viewer heavily depends on Windows since its codes are written in C#. I have a plan to replace the codes to python in order to be available on other several platforms.
## This application can
- automatically pick up messages from YouTube chat and make Zundamon speak the GPT answer of those messages out.
Thogh non Japanese messages are given, Zundamon answers in Japanese.
- display all comments of YouTube chat, picked up comments, answers of picked up comments.
-- display Zundamon portrait with transparent background.
-
-![](ReadMeParts/zundamon_full.png)
+- display Zundamon portrait with transparent background.
+- You can use not only Zundamon voice and image but also other ones.
+[![GttsAIStreamer sample](ReadMeParts/zundamon_thumbnail.png)](https://www.youtube.com/embed/7GgssTTo2-c)
## Usage
- Install [VOICEVOX](https://voicevox.hiroshiba.jp/)
- Get OpenAI api-key. Please refer [here(English)](https://www.howtogeek.com/885918/how-to-get-an-openai-api-key/) or [here(Japanese)](https://laboratory.kazuuu.net/how-to-get-an-openai-api-key/)
-- click [here](https://github.com/GeneralYadoc/ZundamonGPTonYouTube/releases/download/v1.0.0/ZundamonGPTonYouTube.zip) to download.
-- Unzip Downloaded "ZundamonGPTonYouTube.zip" file.
-- Open "ZundamonGPTonYouTube" and double click ZundamonGPTonYouTube_SampleUI.exe.
+- if you want to launch from .exe file.
+ - click [here](https://github.com/GeneralYadoc/ZundamonGPTonYouTube/releases) to download newest version.
+ - Unzip Downloaded "ZundamonGPTonYouTube.zip" file.
+ - Open "ZundamonGPTonYouTube" and double click ZundamonGPTonYouTube.exe.
+- if you want to launch from source codes.
+ - Install ffmpeg.
+ For Linux: Execute following command.
+ ```ffmpeg installation for Linux
+ $ sudo apt-get install ffmpeg
+ ```
+
+ For Windows: Access [here](https://github.com/BtbN/FFmpeg-Builds/releases), download '*-win64-gpl.zip', extract the zip and move three exe files (ffmpeg.exe, ffprobe.exe, ffplay.exe) to the folder where you'll execute the sample or added path.
+
+ For Mac: Access [here](https://brew.sh/), copy installation command to your terminal and push Enter key, and execute following command.
+ ```
+ brew install ffmpeg
+ ```
+ - Clone repository.
+ ```clone
+ git clone https://github.com/GeneralYadoc/ZundamonGPTonYouTube.git
+ ```
+ - Move to ZundamonGPTonYouTube directory
+ ```mv
+ mv ZundamonGPTonYouTube.
+ ```
+ - Install the application.
+ ```install
+ pip install .
+ ```
+ - Start the application.
+ ```
+ python3 ZundamonGPTonYouTube.py
+ ```
- Check Video ID of target YouTube stream.
![](ReadMeParts/video_id.png)
- Fill in the Video ID brank of start form. (use Ctrl+V to paste)
@@ -37,42 +67,54 @@ Thogh non Japanese messages are given, Zundamon answers in Japanese.
![](ReadMeParts/start_form.png)
### Notice
-- OpenAI api-key and Video ID is recorded in "variable_cache.yaml" and You can skip either or both from the 2nd time.
-- Please be aware of treating "variable_cache.yaml" in order to avoid leaking OpenAI api-key.
+- OpenAI api key and Video ID is recorded in "variable_cache.yaml" and You can skip either or both from the 2nd time.
+- Please be aware of treating "variable_cache.yaml" in order to avoid leaking OpenAI api key.
## GUI is consisted of
-### Zundamon portrait window (main window)
-- You can swich opaque or transparent background by double clicking Zundamon.
-- You can resize Zundamon in opaque background mode, please elase background after adjusting Zundamon size if you want.
-- Minimizinq window also is available in opaque backgroune mode.
-- You can exit the application by closing this window. window "x" button of TopRight also is enable in opaque background mode.
+### Main window
+- You can change visibility of chat window by pressing "ちゃっと" button, asking window by pressing "しつもん" button, answering window by pressing "こたえ" button, portrait window by pressing "立ち絵" button.
+- You can change voice volume by using slide bar which is at the bottom of the window.
+- Also you can change voice volume by putting value on text box at the just right of the slide bar and press enter key.
+- You can exit the application by closing this window. window "x" button of TopRight.
+ ![](ReadMeParts/main_window.png)
+
+### Portrait window
+- You can display a portrait of avatar which you like by specifying the path in setting file.
+- You can switch opaque or transparent background by double clicking the avatar.
+- You can resize the avatar in opaque background mode, please erase background after adjusting avatar size if you want.
+- Minimizinq window also is available in opaque backgroune mode.
+- The Application keeps running even if this window is closed, so you can close this window if unnecessary.
![](ReadMeParts/zundamon_opaque_transparent.png)
### YouTube chat monitor window
- Almost all messages are shown in this window.
-- Messages contain only stamps are ignored.
-- Some messages which exist in 1msec polling gap may lost.
+- Messages contain only emoticons are ignored.
+- Some messages which exist in polling gap may lost.
+- You can switch visibility of window frame by double clicking message area of the window.
+- Please turn on the frame when resizing the window.
- The Application keeps running even if this window is closed, so you can close this window if unnecessary.
![](ReadMeParts/monitor_window.png)
### Window for asking
-- All picked up messages which will be answered by Zundamon are shown in this window.
+- All picked up messages which will be answered by ChatAI are shown in this window.
+- You can switch visibility of window frame by double clicking message area of the window.
+- Please turn on the frame when resizing the window.
- The Application keeps running even if this window is closed, so you can close this window if unnecessary.
![](ReadMeParts/ask_window.png)
### Window for answering
-- Zundamon answers for picked up messages are shown in this window.
+- ChatAI answers for picked up messages are shown in this window.
+- You can switch visibility of window frame by double clicking message area of the window.
+- Please turn on the frame when resizing the window.
- The Application keeps running even if this window is closed, so you can close this window if unnecessary.
![](ReadMeParts/answer_window.png)
### Notice
- The following window is VOICEVOX which is external application.
- It's necessary for generating Zundamon voices, so please don't close the window.
+ It's necessary for generating Zundamon voices, so please don't close the window. (please minimize if you want to hide it.)
![](ReadMeParts/voicevox_window.png)
-
-
# Settings
@@ -83,41 +125,61 @@ You can customize the application with "setting.yaml" which is exist in the same
voicevox_path: ''
# チャット欄ウインドウの設定
-monitor_window_visible: 'True' # 'True' or 'False'
-display_user_name_on_monitor_window: 'False' # 'True' or 'False'
-monitor_window_title: 'ちゃっとらん'
-monitor_window_size: '350x754'
-monitor_window_color: '#ffffff'
-monitor_font_color: '#000000'
-monitor_font_size: '10'
-monitor_font_type: 'Courier'
+display_user_name_on_chat_window: 'True'
+chat_window_title: 'ちゃっとらん'
+chat_window_size: '350x754'
+chat_window_padx : '9'
+chat_window_pady : '9'
+chat_window_color: '#ffffff'
+chat_font_color: '#000000'
+chat_font_size: '10'
+chat_font_type: 'Courier'
+chat_rendering_method: 'normal'
# 質問ウインドウの設定
-display_user_name_on_ask_window: 'False' # 'True' or 'False'
+display_user_name_on_ask_window: 'False'
ask_window_title: 'ぐみんのしつもん'
ask_window_size: '500x250'
+ask_window_padx : '9'
+ask_window_pady : '9'
ask_window_color: '#354c87'
ask_font_color: '#ffe4fb'
ask_font_size: '12'
ask_font_type: 'Courier'
+ask_rendering_method: 'refresh'
# 回答ウインドウの設定
answer_window_title: 'てんさいずんだもんのこたえ'
answer_window_size: '500x450'
+answer_window_padx : '9'
+answer_window_pady : '9'
answer_window_color: '#ffe4e0'
answer_font_color: '#004cF7'
answer_font_size: '13'
answer_font_type: 'Helvetica'
-volume: 100 # 0 - 1000
+answer_rendering_method: 'incremental'
+
+# AIの設定
model: 'gpt-3.5-turbo'
-max_tokens_per_request: 256
-ask_interval_sec: 5.0
+max_tokens_per_request: 1024
+ask_interval_sec: 20.0
+
+# 回答キャラクターの設定
+speaker_type: 1
+volume: 100
+system_role: 'あなたはユーザーとの会話を楽しく盛り上げるために存在する、日本語話者の愉快なアシスタントです。'
+image_file: zundamon.gif
```
-- voicevox_path can remain blank if VOICEVOX has been installed to default path.
-- You can change AI model by modifying "model" value.
+- "voicevox_path" can remain blank if VOICEVOX has been installed to default path.
+- You can change AI model by changing "model" value.
+- You can change voice actor by changing "speaker_type" value.
+- You can change Avatar image by changing "image_file" path.
+
+# Licence
+- The lisence type of this application is MIT, so you can customize freely.
+- the lisence type of ffmeg executable files included in release package is LGPL.
-
# Links
-- [Pixiv page of 坂本アヒル](https://www.pixiv.net/users/12147115) I obtained Zundamon portrait from here.
-- [pytchat](https://github.com/taizan-hokuto/pytchat) Python library for fetching youtube live chat.
+- [Pixiv page of 坂本アヒル](https://www.pixiv.net/users/12147115) I obtained static Zundamon portrait which is the material of the gif animation from here.
+- [ChatAIStreamer](https://github.com/taizan-hokuto/pytchat) Python library for getting ChatGPT voiced answer of YouTube chat stream.
diff --git a/README2.md b/README2.md
new file mode 100644
index 0000000..ef33c72
--- /dev/null
+++ b/README2.md
@@ -0,0 +1,187 @@
+# ZundamonGPTonYouTube
+[English](README.md) | 日本語
+かしこいずんだもんがYouTubeのチャット欄にGPTずのーでこたえてくれるプログラムです。
+
+
+## はじめに
+- このアプリケーションは日本製のボイスジェネレータ VOICEVOX に依存しているため日本語限定ですが、ソースコードをMITライセンスで公開しているので、自由にカスタマイズできます。
+
+## 動作環境
+- Windows OS (10 にて動作確認済)
+- .Net Framework v.4 (v4.7.2 にて動作確認済)
+- [VOICEVOX](https://voicevox.hiroshiba.jp/) のインストールが必要 (v.0.14.6 にて動作確認済)
+
+ コアモジュールはPythonで作成されているため、その他の複数のOSやボイスジェネレータに適応可能です。
+ キャラクター表示ウィンドウだけはC#で作られているためWindowsに強く依存しています。キャラクター表示ウィンドウについてもPythonへの移植を計画しています。
+
+
+## 機能
+- YouTubeチャットを自動で拾い、それに対するChatGPTの回答をずんだもんの声で読み上げます。
+日本語以外のメッセージに対しても日本語で返答します。
+- YouTubeのすべてのチャットメッセージ、ピックアップされたメッセージ、ピックアップされたメッセージへの回答コメントを表示できます。
+- ずんだもんの立ち絵を背景透過で表示できます。
+- 声や立ち絵はずんだもん以外に変更することも可能です。
+[![GttsAIStreamer sample](ReadMeParts/zundamon_thumbnail.png)](https://www.youtube.com/embed/7GgssTTo2-c)
+
+## 使い方
+- [VOICEVOX](https://voicevox.hiroshiba.jp/) をリンク先からインストール。
+- OpenAIのapi-keyを取得。 取得方法は [ここ(英語)](https://www.howtogeek.com/885918/how-to-get-an-openai-api-key/) か [ここ(日本語)](https://laboratory.kazuuu.net/how-to-get-an-openai-api-key/) を参照してください。
+- .exe ファイルから実行する場合
+ - [ここ](https://github.com/GeneralYadoc/ZundamonGPTonYouTube/releases) をクリックして最新版をダウンロード。
+ - "ZundamonGPTonYouTube.zip" ファイルを解凍。
+ - "ZundamonGPTonYouTube" フォルダを開き、 ZundamonGPTonYouTube.exe ファイルをダブルクリック。
+- ソースコードから実行する場合
+ - ffmpegをインストール。
+ Linux の場合: 以下のコマンドを実行。
+ ```ffmpeg installation for Linux
+ $ sudo apt-get install ffmpeg
+ ```
+
+ Windows の場合:[ここ](https://github.com/BtbN/FFmpeg-Builds/releases) にアクセスして、'\*-win64-gpl.zip' をダウンロード。
+ zip ファイルを解凍し、中の3つの exe ファイル(ffmpeg.exe, ffprobe.exe, ffplay.exe)を、ZundamonGPTonYouTube 実行フォルダ、もしくはパスの通ったフォルダに置く。
+
+ Mac の場合:[ここ](https://brew.sh/)にアクセスし、記載されているコマンドを端末に貼り付けて Enter を押下。
+ 以下のコマンドを実行。
+ ```
+ brew install ffmpeg
+ ```
+ - リポジトリをクローン。
+ ```clone
+ git clone https://github.com/GeneralYadoc/ZundamonGPTonYouTube.git
+ ```
+ - ZundamonGPTonYouTube ディレクトリに移動。
+ ```mv
+ mv ZundamonGPTonYouTube.
+ ```
+ - アプリケーションをインストール。
+ ```install
+ pip install .
+ ```
+ - アプリケーションを開始。
+ ```
+ python3 ZundamonGPTonYouTube.py
+ ```
+- 対象 YouTube ストリームの Video ID をチェック。
+ ![](ReadMeParts/video_id.png)
+- スタートウィンドウの Video ID 欄に YouTube ストリームの Video ID を記入。 (Ctrl+V で貼り付けできます)
+- スタートウィンドウの API Key 欄に OpenAI の api key を記入。 (Ctrl+V で貼り付けできます)
+- "すたーと" ボタンをクリック。
+ ![](ReadMeParts/start_form.png)
+
+### 注意
+- OpenAI の apikey と Video ID は "variable_cache.yaml" という名前のファイルに記録され、2回目以降の入力を省略できます。
+- OpenAI の api key が流出しないよう、"variable_cache.yaml" の扱いには気をつけてください。
+
+
+## 画面構成
+
+### メインウィンドウ
+- "ちゃっと" ボタンを押すことでチャット欄ウィンドウの、"しつもん" ボタンを押すことで質問ウィンドウの、"こたえ" ボタンを押すことで回答ウィンドウの、"立ち絵" ボタンを押すことで立ち絵ウィンドウの表示・非表示を切り替えることができます。
+- ウィンドウ下部のスライドバーで音声ボリュームを調整できます。
+- スライドバーの右隣にあるテキストボックスに値を記入し、エンターキーを押下する方法でも、音量変更が可能です。
+- ウィンドウ右上の "x" ボタンをクリックすることで、アプリケーションを終了できます。
+ ![](ReadMeParts/main_window.png)
+
+### 立ち絵ウィンドウ
+- 設定ファイルに画像ファイルパスを指定することで好きなイラストを表示できます。
+- 立ち絵をダブルクリックすることで、背景の透過・不透過を切り替えることができます。
+- キャラクターのサイズは背景不透明モードのときに変更することができます。キャラクターのサイズを調整した後に背景を消してください。
+- ウィンドウの最小化についても、実行できるのは背景不透明モードのときです。
+- このウィンドウを閉じてもアプリケーションは動作し続けますので、不要な場合は閉じてください。
+ ![](ReadMeParts/zundamon_opaque_transparent.png)
+
+### YouTubu チャットウィンドウ
+- ほぼすべての YouTube チャットコメントがここに表示されます。
+- 絵文字のみで構成されているコメントは無視されます。
+- ポーリング間隔の隙間に入ったコメントは漏れることがあります。
+- メッセージ領域をダブルクリックすることで、ウィンドウ枠の表示・非表示を切り替えることができます。
+- ウィンドウをリサイズするときはウィンドウ枠を表示させてください。
+- このウィンドウを閉じてもアプリケーションは動作し続けますので、不要な場合は閉じてください。
+ ![](ReadMeParts/monitor_window.png)
+
+### 質問ウィンドウ
+- ChatAI に回答させるためにピックアップしたすべてのコメントがここに表示されます。
+- メッセージ領域をダブルクリックすることで、ウィンドウ枠の表示・非表示を切り替えることができます。
+- ウィンドウをリサイズするときはウィンドウ枠を表示させてください。
+- このウィンドウを閉じてもアプリケーションは動作し続けますので、不要な場合は閉じてください。
+ ![](ReadMeParts/ask_window.png)
+
+### 回答ウィンドウ
+- ピックアップされたメッセージに対する ChatAI の回答がここに表示されます。
+- メッセージ領域をダブルクリックすることで、ウィンドウ枠の表示・非表示を切り替えることができます。
+- ウィンドウをリサイズするときはウィンドウ枠を表示させてください。
+- このウィンドウを閉じてもアプリケーションは動作し続けますので、不要な場合は閉じてください。
+ ![](ReadMeParts/answer_window.png)
+
+### 注意
+ - 以下のウィンドウは、外部アプリケーション "VoiceVox" のものです。
+ ずんだもんの音声再生に必要ですので、閉じないでください。(隠したい場合は最小化してください)
+ ![](ReadMeParts/voicevox_window.png)
+
+
+# 設定
+
+アプリケーションの .exe ファイルと同じ階層にある設定ファイル "setting.yaml" を用いて、設定を変更することが出来ます。
+```setting.yaml
+# VoiceVoxの設定
+voicevox_path: ''
+
+# チャット欄ウィンドウの設定
+display_user_name_on_chat_window: 'True'
+chat_window_title: 'ちゃっとらん'
+chat_window_size: '350x754'
+chat_window_padx : '9'
+chat_window_pady : '9'
+chat_window_color: '#ffffff'
+chat_font_color: '#000000'
+chat_font_size: '10'
+chat_font_type: 'Courier'
+chat_rendering_method: 'normal'
+
+# 質問ウィンドウの設定
+display_user_name_on_ask_window: 'False'
+ask_window_title: 'ぐみんのしつもん'
+ask_window_size: '500x250'
+ask_window_padx : '9'
+ask_window_pady : '9'
+ask_window_color: '#354c87'
+ask_font_color: '#ffe4fb'
+ask_font_size: '12'
+ask_font_type: 'Courier'
+ask_rendering_method: 'refresh'
+
+# 回答ウィンドウの設定
+answer_window_title: 'てんさいずんだもんのこたえ'
+answer_window_size: '500x450'
+answer_window_padx : '9'
+answer_window_pady : '9'
+answer_window_color: '#ffe4e0'
+answer_font_color: '#004cF7'
+answer_font_size: '13'
+answer_font_type: 'Helvetica'
+answer_rendering_method: 'incremental'
+
+# AIの設定
+model: 'gpt-3.5-turbo'
+max_tokens_per_request: 1024
+ask_interval_sec: 20.0
+
+# 回答キャラクターの設定
+speaker_type: 1
+volume: 100
+system_role: 'あなたはユーザーとの会話を楽しく盛り上げるために存在する、日本語話者の愉快なアシスタントです。'
+image_file: zundamon.gif
+```
+
+- VOICEVOX を標準の場所にインストールしている場合は、"voicevox_path" を空欄のままにしておくことができます。
+- "model" の値を変更することで、AI のモデルを変更できます。
+- "speaker_type" の値を変更することで、回答の声を変更できます。
+- "image_file" に記載のパスを変更することで、キャラクター画像を変更できます。
+
+# ライセンス
+- このアプリケーションはMITライセンスですので、自由にカスタマイズ可能です。
+- リリースパッケージに含まれる ffmpeg の実行ファイル一式は LGPL ライセンスです。
+
+# リンク集
+- [Pixiv page of 坂本アヒル](https://www.pixiv.net/users/12147115) GIF アニメーションに使用したずんだもん立ち絵静止画の入手元。
+- [ChatAIStreamer](https://github.com/taizan-hokuto/pytchat) YouTube チャットに対するChatGPTの音声付き回答を取得することができる Python ライブラリ。
diff --git a/ReadMeParts/main_window.png b/ReadMeParts/main_window.png
new file mode 100644
index 0000000000000000000000000000000000000000..3ad9413ba41b6d839d6e448c5b171a3b900371eb
GIT binary patch
literal 5362
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
K2dYqg9QGfG2VhwM
literal 0
HcmV?d00001
diff --git a/ReadMeParts/raw_button.png b/ReadMeParts/raw_button.png
deleted file mode 100644
index 515501d9faf1ee4d3f8f302a2cb363d4f1716f33..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 4858
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
e!4g0m#d9dvCy^J1vZHcya@4
z(3}U5eEFC2b>@1a&iO{;YpkgXl=pM4o+lTbRUj$=P!)gm#E$Mfzv89!#1{YzQiWF%*+5fMbC{n*Is$3GD|}pfch;f4=nR3^9A&1@
zQ28-5;#8I6SfrLJE4<=Ador_ia#@y3zZesT;t)`!9!}2VG90a6FWmN4Jf#j!&_0ce
zRX`%x6dDjGoV|Ub6JmZKaZdzq@QHxDO_;g=9Ry}y-=lH!Mk?YPpO(pLEt(d1rYT>4
zFKt5x$Wyy`AGr7^;exU)OqBoGP9plI*m$T5L#k9rO+{g#>XRHf5L%3$KXZ%@{Euxy^PG5YXpa)A+_1YPx
zAEBU)JrC!YT$V1S$^tHW*JPsWBK~uRbmi0^Z@wm=cO_bG@dtVqUp7{$^|2~1IW2Lr
zo<1&BU7)_T)YS{-jxfU?V7YY{k*3cjA%$1ihnNf%;$l}_CMUdR18bHs-Tv7{EaE<4
z5C<2vq7rGhvk=oGf)b@$niMkcx*|=LB)PRw#9Q=XtLs`8M@P%Ky4%gi{AgHBu@|PM*K4MTb1cdQy*)v-`-fnAfJ;X$id*uo^t;zmm|F4+L
z*J@DN1h_Qp7DlyTtDefRVIS!9Avmr?E
z^!ey!U+da&4$OiQkRxwpmNEjr|2}9-(Z0$?72gS67tyKQ6!F?o0BtT+$L=H%`xJ#0Sz|O&&Rb3mRw$0pPv~P*gj(^>3qXaa977#e2Z^m<)(0h^M1kDS!rNWnokof
zx1k2&B$+Y*W9%MoJ$;((=>
z>qAn*EXFO?I?+Y0m?1W5p@**gbNNggS@{vvZEf>zfkg%!YhdU8kvPA-1sJD(|DyoK
zZkZHn6
z3JG$q2-$?c>RN-+5Z^XPq8s^+))DA+xEzD(*tYMVWEsgY#guv*+S3YZu0{;a?7UmQ
zT-H&`H$kni(-@_CliOi_R4p?zvyBuR{3jU#-@^#HCr#yZ@W39?%;Xfryhqtr!#xP*
zZN*IDk)ZWnKCJGcFiaz!vKZ%{`Sy!saMLGyS-5|zJ~saSuh_}Gc=!|JyLNLY5xX5L
zwDE8Ya@Byf9e&^B)Zp&JfL)=`H_#|3x0Z^yML~XMukkRyCd`x<`*P2UEI$F2fbx2z
zlbeox)VUfj=)2C#?)Yan%jCodY%x9i5UM{K+Fv_u{>y3u2`Lyx-XUe~kix`7Y>-Ee
zmmti}CcdL5Wh7SqpuLWkI!~~QsU6;F6~)I(@Dd(*;di&F?wl^=thqsjd+&B5*CE~A
z1U^?gSmc{|)egD-nDzm2qMu~w##!Tr2oANSQzl!MH8|Jjkb7MEiBe9V7AQ!pW|SXb
z#NA@+^=79p{xP!#cK*e2DYM(aDv_~8Fpz5|vFt=xb_c#&f_`i@U+Onk>6Rkk=U)S(o1A
zsU8o*?={Qm`n`Tr;H$PK+8};l(a_wiAH+86J>Tfrd6uO@dN`8
z#1S?ZndBwYE6WLZ?VPsvSF}>`AX=dDh<+Gm9i-k$T@#d}1H5)a8AdK~huC%kfPQNP
zEATCrhb}z)vN3Qu>Zj=S$K-~dy+>aJYUfA74mAbN4^aQ8_`CF90-%UaT*Cm&gM|TM
zOss&RC?%yGHbIILZ2`ZK$o%9>@$@U3mwRvq9Ro*1od&g)TfUHRtWZZ%S3a0xCG3
zRAy&wnmpfI;4FZLnJwQ>YA+q;Jd%6191WrsDdPU&_BD=}z1`2JbAG2+S9fW6@>;J9
zTgnUVWTSBcI$(}eKM~;}FUx)*sSU8Y9D9_n1wvlPP7=ge5=LZ>#qy4)9@G4lKRB+i
z2T9OyT5@&lEOvG)mxeYJ0bjD!nZ#{#@I{=X)MX)AEV#a$&F8NM+_B7(ws(iB6I&S-@Ne(p}
zfVGTUgyrY~^DsJ>x}a^hv2nrcrZS8+^(I_Pzb(RR#WB|*ze~43Zu(?E*tZMF^*~OW
z;#K46W`mCAtUZ*X=KY=q(6X*)Pe9?LW_h7`LcafvOnB>ih(A)_L;CVs2P#QdlQ+XA
zbx-{%t1^T{SL`y!&G}U;-%>kAtnwM6Ke@i*R*^J8uR@4ouNHw`k?o{TK}y
z;{up3v$@3YnA{0hGQ|L1FRbWybngIzVy6(ydCok@OMgzzAGsVf;lN?>HQ+L?qIH5D
z=ofs+3S79YMZ?4MZ_#>M+}rF
z)La1w;Xj`X^?_DQQrsWBnIcoGsNEAU34x)?Gii}JD5V-_Pxz#u#P97t{k&iQg7OWD
zO~Um92a68%`UBHn39&x`tj1z}2#P|}_TFr|c5#
zp(blF#%!o6A3FA)D0&r`41yz#7+jNNK{OXb9n@-q97K_1*kpndBkA&`V>M`ORhB
zw)O0ZH%o$8zEMLqGjy&4mQ;Q%U-n5(n^d*gJ2vc$uq>(V>EE<77)z_VuMGBlUUU!6
zJ{!fd?PfI2%yA{MBMxb52c=ca$4e`If1L7Vrs!_d=p>6as2hF;e^1tO4?fMo8+U#p
zGGhIBtM*(XPl^_tJ#kc4AalNEKZg=|A{P3a*-LBTcIV9(h>)?f{Ji8V$~SRZRuq2>
zjO<%Y$f384g`bRG9^_zKy~>vaP91RzRAv3p{=YGzQ3m{^Xq0a-pOeb0LJ!dVw9tD(U9eLBTLO&($pJh2rx+ZH>(%#=R{k|3#{g&
zWeV=CKC|=*z_Yabnf|FF1^C^={Gn?sU;qpZu*kl(d+&w?r;1AG!Sk>50j5xfmv`>4@9Lx0HuCkDI7oLoI*2SWKPPzhGsyst2}8vxB1F
zW^Id5PgXWkP_z0KyzWLr7h0TNvaS?9)gRtTcZwB{BaeAoY8O=s7dKQ8r!
z0r>lqL3R#v^QctC$nWsRg5#Gq&>Bb0S4WgGi4@g5n{t1M${RAb9Bgc%t!
zk`P%M3}!4-p@}gj>&O_+sLmhf^Ev1DIlpuMc$WLQ@9TQ5<@>#^=YA5eTA7LnNeKxE
z2#A*(S5Vgk^ac$jX|dQVPl&$SniiypJQM|%!v&C*;7
zLFz(T+NUJ*KUL*juFeJ7sGgFI71Oc`SZ2)3nAfib>FZvnUs?26V$2MGiHYtZ%QR&b
zL;~)~xunjq+0&BuejI$zijouv5(5dC$iW1X4eLNP3JZl3QlLB5pF622VOJ0xk+2!d+_i=C-aO5gY3iYRWPjIgi^|r;~<=5B&jI
z8CBTj#m%+&%}XI0^@|MdgfnN|F?DV^ZQ3-c_r-H;a78;a7&Cp@wD$rh?B)BmBy^;S
zW|#9AFJ(h>!;$y>6|$Vpqast1?WpF=Yjc0D$Uf8!w6|MJ3p~1_vG80$6KcU&UTt}-
zWUy=dk$hj}5Puxzpc;N7%o5ToYpK0rVm-a?iaDaslr8pE<|!A8<~PN<0v*m^aCGKn
zv?>nbY16}_sYhRtbWoKPUaAWpLH^b1vbM&oT%O8wUK`(>pD@*rUPE|Ha$y#^Nilf(Atos%{$%=D$C+o(*{H`-mZ?CWW5^t^u+Euq)H*0{;kO7a3x3FFe&
zc8sk&dD3h(Y?5C-vZ#(}Y#0o-j0hMJS~~7(b@XJwmp`ID!h@Zz*r*gjaYZ>Hh=9lf
z&+U1-3%krw%{MiwZum|n%1oXSWlglFta+{ZEvX&dAgbMLnadpjlLHeq
z$BgaKF)8)e8|%=6ci{pK^gEQYk>Boj>Hmch9{XCbh}%vjo;+H7I!@7&SUk0tGEDYfh_SrbQ?+%c8Y
z-vXRk6^A;sHFN;MagjhE?`At|@1Cpx5#d|CS-iP2w&)R`{H(#gh7%R5dtiauP(;yn
zjJ^TMg&$c66~qXSB?=42TVdrAbe
z-Lm?;s)PAc9H;BpYxT;(?e494%zFQk917wJX=4iVM)AXd^n2Hsd;b0){lgj#QfIza
z7cRx(*^97;*up3t47PdtJgkM38e8Ld0><7Kb4iM!e@U#!)TbgdA?9<=aTq4eXlx2~
zyin+%E|tlW4(kiKpe&V$iMNF4nJ;YCeBm`l8F(YGwb-7OQG(R8Uf}2pH%F7T!nBQN&7|#qLOickd$$
z9VW+t@g9lr_%1aVeY2b8dFT(>PBs!h5Gqa1k=a^E2t(P`ZRr^NA_w~{50g`XJxGAZ
zKY+(4!$GoGi3(z(9px`(6w4~!mV>j*IBT!`>Un>+^wgXXj1}p@Jd+^7iaEnNIoj@B
znr=@9Di(f#nArq!34v;%1l=~K7_QX_|5j6*Y(ueIkFpG%^VWm}N>!INV|J^<8r$#K
z-Er4u(&~gZU|^qlF`R$*6+ARU#$YJNM~kBBo=$nLVkA88Pxemnno=5)9+LZIXHGsm
zJQFns4~w%SWKg4kifJ}3Mu}@B=#hXDTIVDar=XNxhR^F)?dZuXJ>^Mw#oM?VPYNFY
z2H%m(3l{%n({=KUz5L3%W(k~!S+>N`hFwiTS7%9$TiS_}tcgZnonE2}ekH%OdLkUe
z0WG2=i%j{BIFkcgr`00S_bcGbtZ3qwg@?FR566xI=A%RrnTj!ZYmM{Qrlmb%xKdnL
zjQw@6@b)dI?C~_nJ0OTL)_mxIdWjlrygQ2VtW(2jMbNtsZp*4$_;6ieg;VcM
z@3Vm|ES+5~S{je;wqu(_)wltF;d^
zHUZBzgJB&XAdV^}lOa|K@su~ssi;ADdD!Qi7Pzr68Fn5FyvfJb`UTKsun+n_f*auU
ze}V0P`hJT~cHXu-2Jp#O9QQ~ZB!;8@MCLJAjWOQP1b-3l@e`o2@NP-6P_{Fkw3$27
zdwSpbztK10C2TFMro$E+e5%B7-?tRtS`G1UO}8W^g~>wnBPL}fHXg>s($`C8W5}Ug
zpkl`B*8}c>4wa(9fwFy2<+O~wz?pD!I?I+iZ#m7w2$hL0Qus*bYtcrMz0v6%dFHf_
zx81Lg?F`>GpsHLGm_O=xsSJ>BOHl7rI~w6~=oFT417)}R^%Shz#>8GmCA0>+sL4rw
zFRjF(o0>A&$ZYEsrQ%K_%PJUZ(1p*u+#2|@iN};uaf6jx5o*xHu(vZB^OeN`c<2MPzBE;3bf|H9%cEB6atf2j&zF94Z~4L27`gQ;EqtDjLRwbt#9oj~
zk8@hMN|>NQfpIKXX9@g_z7wB`xzdU=eL0aKT7ci7RDv}^jG9I?gYmD2?rE0QR_FRr
zoD}X(s?Z!+$We{oVa$bhXHIK>8u>L;fW>&c1kl?mivZ*t5O&I%|C;iK&BTuglq72K
z{{Ywjj^O`TgG2x_Y+)%#^tSi9-_&Oly!>BqId7ERJ8=+Lgq);0zP^!qJVpfFCOb7)pvi2Nt$A`n@CmUu*KeKr{loOx(3i;1bUus-lAseXRq_|A!!8W^4tn
IFuWD_cl9GXBLDyZ
diff --git a/ReadMeParts/zundamon_full.png b/ReadMeParts/zundamon_full.png
deleted file mode 100644
index eb24c9544b469ddc8d7831c21c29566c659c5232..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 1133356
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