aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPinapelz <yukais@pinapelz.com>2023-12-15 23:31:29 -0800
committerPinapelz <yukais@pinapelz.com>2023-12-15 23:31:29 -0800
commit81a8bcff49b1515bd31215c871c2545794d82fbb (patch)
tree95d100d815cbdd827beb706944943753a4cc228d
Initial commit
-rw-r--r--.idea/.gitignore3
-rw-r--r--.idea/KnowledgeBase.iml8
-rw-r--r--.idea/modules.xml8
-rw-r--r--.idea/vcs.xml6
-rw-r--r--Writerside/api-docs/patchwork-archive-api.yml324
-rw-r--r--Writerside/c.list6
-rw-r--r--Writerside/hi.tree13
-rw-r--r--Writerside/images/completion_procedure.pngbin0 -> 128146 bytes
-rw-r--r--Writerside/images/completion_procedure_dark.pngbin0 -> 68718 bytes
-rw-r--r--Writerside/images/convert_table_to_xml.pngbin0 -> 349338 bytes
-rw-r--r--Writerside/images/convert_table_to_xml_dark.pngbin0 -> 121495 bytes
-rw-r--r--Writerside/images/new_topic_options.pngbin0 -> 293755 bytes
-rw-r--r--Writerside/images/new_topic_options_dark.pngbin0 -> 156186 bytes
-rw-r--r--Writerside/topics/Default-topic.md80
-rw-r--r--Writerside/topics/Patchwork-API.md7
-rw-r--r--Writerside/topics/Patchwork-Archive.md9
-rw-r--r--Writerside/topics/VTuber-Captcha.md152
-rw-r--r--Writerside/topics/Welcome.md6
-rw-r--r--Writerside/v.list5
-rw-r--r--Writerside/writerside.cfg10
20 files changed, 637 insertions, 0 deletions
diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..26d3352
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,3 @@
+# Default ignored files
+/shelf/
+/workspace.xml
diff --git a/.idea/KnowledgeBase.iml b/.idea/KnowledgeBase.iml
new file mode 100644
index 0000000..6102194
--- /dev/null
+++ b/.idea/KnowledgeBase.iml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="EMPTY_MODULE" version="4">
+ <component name="NewModuleRootManager">
+ <content url="file://$MODULE_DIR$" />
+ <orderEntry type="inheritedJdk" />
+ <orderEntry type="sourceFolder" forTests="false" />
+ </component>
+</module> \ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..76dfed3
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+ <component name="ProjectModuleManager">
+ <modules>
+ <module fileurl="file://$PROJECT_DIR$/.idea/KnowledgeBase.iml" filepath="$PROJECT_DIR$/.idea/KnowledgeBase.iml" />
+ </modules>
+ </component>
+</project> \ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..94a25f7
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+ <component name="VcsDirectoryMappings">
+ <mapping directory="$PROJECT_DIR$" vcs="Git" />
+ </component>
+</project> \ No newline at end of file
diff --git a/Writerside/api-docs/patchwork-archive-api.yml b/Writerside/api-docs/patchwork-archive-api.yml
new file mode 100644
index 0000000..c17c0c6
--- /dev/null
+++ b/Writerside/api-docs/patchwork-archive-api.yml
@@ -0,0 +1,324 @@
+openapi: 3.0.3
+info:
+ title: Patchwork Archive API
+ description: |-
+ API data from Patchwork Archive is public and **no API key** is required to access what is publicly available on the frontend.
+
+ license:
+ name: MIT License
+ url: https://opensource.org/license/mit/
+ version: MIT
+servers:
+ - url: https://archive.pinapelz.moe/api
+tags:
+ - name: channel
+ description: Data regarding a specific channel
+ - name: video
+ description: Data regarding archived videos
+ - name: database
+ description: More detailed data regarding videos
+paths:
+ /channel/{channel_id}:
+ get:
+ tags:
+ - channel
+ summary: Gets archived videos from a particular channel
+ description: Gets a paginated result of archived videos matching a channel id
+ parameters:
+ - name: channel_id
+ in: path
+ description: YouTube Channel ID
+ required: true
+ schema:
+ type: string
+ - name: page
+ in: query
+ description: Page of video to show (starts on page 1)
+ required: true
+ schema:
+ type: integer
+ responses:
+ '200':
+ description: successful operation
+ content:
+ application/json:
+ schema:
+ type: array
+ items:
+ $ref: '#/components/schemas/Video'
+ /channel_name:
+ get:
+ tags:
+ - channel
+ summary: Gets archived videos from a particular channel
+ description: Gets a paginated result of archived videos matching a channel id
+ parameters:
+ - name: channel_id
+ in: query
+ description: YouTube Channel ID
+ required: true
+ schema:
+ type: string
+ responses:
+ '200':
+ description: successful operation
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ channel_name:
+ type: string
+ example: Erina Ch. エリナ・マキナ 【Phase Connect】
+
+
+ /video/{video_id}:
+ get:
+ tags:
+ - video
+ summary: Get basic information regarding a specific video
+ description: Pulls basic information about a video from fallback database only
+ operationId: getBasicVideoInfo
+ parameters:
+ - name: video_id
+ in: path
+ description: YouTube Video ID
+ required: true
+ schema:
+ type: string
+ responses:
+ '200':
+ description: successful operation
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ channel_id:
+ type: string
+ example: UCupmjRr7kPgzXKh-cPxxGbg
+ channel_name:
+ type: string
+ example: Erina Ch. エリナ・マキナ 【Phase Connect】
+ description:
+ type: string
+ example: The very long description portion
+ title:
+ type: string
+ example: イート / jon-YAKITORY feat.Ado - eat / cover by erina makina
+ upload_date:
+ type: string
+ example: 2022-07-11
+ video_id:
+ type: string
+ example: bX8-8928lcM
+ '404':
+ description: Video not found
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ error:
+ type: string
+ example: "Video ID does not exist"
+
+ /random_video:
+ get:
+ tags:
+ - video
+ summary: Get a singular random video
+ responses:
+ '200':
+ description: successful operation
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Video'
+
+ /discover_videos:
+ get:
+ tags:
+ - video
+ summary: Get multiple random videos
+ parameters:
+ - name: count
+ in: query
+ description: Number of random videos to get (default=1)
+ required: false
+ schema:
+ type: integer
+ responses:
+ '200':
+ description: successful operation
+ content:
+ application/json:
+ schema:
+ type: array
+ items:
+ $ref: '#/components/schemas/Video'
+
+ /search/results:
+ get:
+ tags:
+ - video
+ summary: Get paginated search results for some keyword
+ parameters:
+ - name: q
+ in: query
+ description: Keywords to search for
+ required: true
+ schema:
+ type: string
+ - name: page
+ in: query
+ description: Page number for results (default=1)
+ required: false
+ schema:
+ type: integer
+ responses:
+ '200':
+ description: successful operation
+ content:
+ application/json:
+ schema:
+ type: array
+ items:
+ $ref: '#/components/schemas/Video'
+
+ /daily_featured_videos:
+ get:
+ tags:
+ - video
+ summary: Get today's daily features videos
+ description: Either 1 or 2 video objects in an array depending on calculated hash
+ responses:
+ '200':
+ description: successful operation
+ content:
+ application/json:
+ schema:
+ type: array
+ items:
+ $ref: '#/components/schemas/Video'
+
+ /recently_archived:
+ get:
+ tags:
+ - video
+ summary: Get the 6 most recently archived videos
+ responses:
+ '200':
+ description: successful operation
+ content:
+ application/json:
+ schema:
+ type: array
+ items:
+ $ref: '#/components/schemas/Video'
+
+ /database/video_data/{video_id}:
+ get:
+ tags:
+ - database
+ summary: Get detailed information about the video if available
+ description: If info.json generated by yt-dlp is available it will be directly delivered here, if not, fallback video data from the database is used instead
+ parameters:
+ - name: video_id
+ in: path
+ description: YouTube Video ID
+ required: true
+ schema:
+ type: string
+ responses:
+ '200':
+ description: successful operation.
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Video'
+
+ /database/status:
+ get:
+ tags:
+ - database
+ summary: Get the status of the database
+ responses:
+ '200':
+ description: successful operation.
+ content:
+ application/json:
+ schema:
+ properties:
+ OK:
+ type: string
+ example: "OK"
+ '500':
+ description: database is down
+ content:
+ application/json:
+ schema:
+ properties:
+ FAIL:
+ type: string
+ example: "500"
+
+ /storage/status:
+ get:
+ tags:
+ - database
+ summary: Get the status of the database
+ description: Gets the number of videos archived and space used in GB
+ responses:
+ '200':
+ description: successful operation.
+ content:
+ application/json:
+ schema:
+ properties:
+ number_of_files:
+ type: integer
+ example: 3823
+ storage_size:
+ type: integer
+ example: 900
+
+
+components:
+ schemas:
+ Channel:
+ type: object
+ required:
+ - channel_name
+ properties:
+ channel_name:
+ type: string
+ example: Erina Ch. エリナ・マキナ 【Phase Connect】
+ Video:
+ type: object
+ required:
+ - channel_id
+ - channel_name
+ - description
+ - title
+ - upload_date
+ - video_id
+ properties:
+ channel_id:
+ type: string
+ example: UCupmjRr7kPgzXKh-cPxxGbg
+ channel_name:
+ type: string
+ example: Erina Ch. エリナ・マキナ 【Phase Connect】
+ description:
+ type: string
+ example: The very long description portion
+ title:
+ type: string
+ example: イート / jon-YAKITORY feat.Ado - eat / cover by erina makina
+ upload_date:
+ type: string
+ example: 2022-07-11
+ video_id:
+ type: string
+ example: bX8-8928lcM \ No newline at end of file
diff --git a/Writerside/c.list b/Writerside/c.list
new file mode 100644
index 0000000..c4c77a2
--- /dev/null
+++ b/Writerside/c.list
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE categories
+ SYSTEM "https://resources.jetbrains.com/writerside/1.0/categories.dtd">
+<categories>
+ <category id="wrs" name="Writerside documentation" order="1"/>
+</categories> \ No newline at end of file
diff --git a/Writerside/hi.tree b/Writerside/hi.tree
new file mode 100644
index 0000000..70350b6
--- /dev/null
+++ b/Writerside/hi.tree
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE instance-profile
+ SYSTEM "https://resources.jetbrains.com/writerside/1.0/product-profile.dtd">
+
+<instance-profile id="hi"
+ name="Project Knowledge Base"
+ start-page="Welcome.md">
+ <toc-element topic="Welcome.md"/>
+ <toc-element topic="Patchwork-Archive.md">
+ <toc-element topic="Patchwork-API.md"/>
+ </toc-element>
+ <toc-element topic="VTuber-Captcha.md"/>
+</instance-profile> \ No newline at end of file
diff --git a/Writerside/images/completion_procedure.png b/Writerside/images/completion_procedure.png
new file mode 100644
index 0000000..3535a3f
--- /dev/null
+++ b/Writerside/images/completion_procedure.png
Binary files differ
diff --git a/Writerside/images/completion_procedure_dark.png b/Writerside/images/completion_procedure_dark.png
new file mode 100644
index 0000000..a65beb0
--- /dev/null
+++ b/Writerside/images/completion_procedure_dark.png
Binary files differ
diff --git a/Writerside/images/convert_table_to_xml.png b/Writerside/images/convert_table_to_xml.png
new file mode 100644
index 0000000..2518a64
--- /dev/null
+++ b/Writerside/images/convert_table_to_xml.png
Binary files differ
diff --git a/Writerside/images/convert_table_to_xml_dark.png b/Writerside/images/convert_table_to_xml_dark.png
new file mode 100644
index 0000000..4716122
--- /dev/null
+++ b/Writerside/images/convert_table_to_xml_dark.png
Binary files differ
diff --git a/Writerside/images/new_topic_options.png b/Writerside/images/new_topic_options.png
new file mode 100644
index 0000000..ea9744d
--- /dev/null
+++ b/Writerside/images/new_topic_options.png
Binary files differ
diff --git a/Writerside/images/new_topic_options_dark.png b/Writerside/images/new_topic_options_dark.png
new file mode 100644
index 0000000..c919638
--- /dev/null
+++ b/Writerside/images/new_topic_options_dark.png
Binary files differ
diff --git a/Writerside/topics/Default-topic.md b/Writerside/topics/Default-topic.md
new file mode 100644
index 0000000..dd51468
--- /dev/null
+++ b/Writerside/topics/Default-topic.md
@@ -0,0 +1,80 @@
+# This is the first topic
+
+<!--Writerside adds this topic when you create a new documentation project.
+You can use it as a sandbox to play with Writerside features, and remove it from the TOC when you don't need it anymore.
+If you want to re-add it for your experiments, click + to create a new topic, choose Topic from Template, and select the
+"Starter" template.-->
+
+## Add new topics
+You can create empty topics, or choose a template for different types of content that contains some boilerplate structure to help you get started:
+
+![Create new topic options](new_topic_options.png){ width=290 }{border-effect=line}
+
+## Write content
+%product% supports two types of markup: Markdown and XML.
+When you create a new help article, you can choose between two topic types, but this doesn't mean you have to stick to a single format.
+You can author content in Markdown and extend it with semantic attributes or inject entire XML elements.
+
+## Inject XML
+For example, this is how you inject a procedure:
+
+<procedure title="Inject a procedure" id="inject-a-procedure">
+ <step>
+ <p>Start typing and select a procedure type from the completion suggestions:</p>
+ <img src="completion_procedure.png" alt="completion suggestions for procedure" border-effect="line"/>
+ </step>
+ <step>
+ <p>Press <shortcut>Tab</shortcut> or <shortcut>Enter</shortcut> to insert the markup.</p>
+ </step>
+</procedure>
+
+## Add interactive elements
+
+### Tabs
+To add switchable content, you can make use of tabs (inject them by starting to type `tab` on a new line):
+
+<tabs>
+ <tab title="Markdown">
+ <code-block lang="plain text">![Alt Text](new_topic_options.png){ width=450 }</code-block>
+ </tab>
+ <tab title="Semantic markup">
+ <code-block lang="xml">
+ <![CDATA[<img src="new_topic_options.png" alt="Alt text" width="450px"/>]]></code-block>
+ </tab>
+</tabs>
+
+### Collapsible blocks
+Apart from injecting entire XML elements, you can use attributes to configure the behavior of certain elements.
+For example, you can collapse a chapter that contains non-essential information:
+
+#### Supplementary info {collapsible="true"}
+Content under such header will be collapsed by default, but you can modify the behavior by adding the following attribute:
+`default-state="expanded"`
+
+### Convert selection to XML
+If you need to extend an element with more functions, you can convert selected content from Markdown to semantic markup.
+For example, if you want to merge cells in a table, it's much easier to convert it to XML than do this in Markdown.
+Position the caret anywhere in the table and press <shortcut>Alt+Enter</shortcut>:
+
+<img src="convert_table_to_xml.png" alt="Convert table to XML" width="706" border-effect="line"/>
+
+## Feedback and support
+Please report any issues, usability improvements, or feature requests to our
+<a href="https://youtrack.jetbrains.com/newIssue?project=WRS">YouTrack project</a>
+(you will need to register).
+
+You are welcome to join our
+<a href="https://join.slack.com/t/writerside/shared_invite/zt-1hnvxnl0z-Nc6RWXTppRI2Oc566vumYw">public Slack workspace</a>.
+Before you do, please read our [Code of conduct](https://plugins.jetbrains.com/plugin/20158-writerside/docs/writerside-code-of-conduct.html).
+We assume that you’ve read and acknowledged it before joining.
+
+You can also always send an email to [writerside@jetbrains.com](mailto:writerside@jetbrains.com).
+
+<seealso>
+ <category ref="wrs">
+ <a href="https://plugins.jetbrains.com/plugin/20158-writerside/docs/markup-reference.html">Markup reference</a>
+ <a href="https://plugins.jetbrains.com/plugin/20158-writerside/docs/manage-table-of-contents.html">Reorder topics in the TOC</a>
+ <a href="https://plugins.jetbrains.com/plugin/20158-writerside/docs/local-build.html">Build and publish</a>
+ <a href="https://plugins.jetbrains.com/plugin/20158-writerside/docs/configure-search.html">Configure Search</a>
+ </category>
+</seealso>
diff --git a/Writerside/topics/Patchwork-API.md b/Writerside/topics/Patchwork-API.md
new file mode 100644
index 0000000..165c7db
--- /dev/null
+++ b/Writerside/topics/Patchwork-API.md
@@ -0,0 +1,7 @@
+# Patchwork Archive API
+API data from Patchwork Archive is public and **no API key** is required to access what is publicly available on the frontend.
+
+Below is an offering of what endpoints are available publicly.
+If you are for whatever reason hosting an instance of **Patchwork-Backend** please refer to the **README** in the repository for worker and queuer API endpoints
+<api-doc openapi-path="../api-docs/patchwork-archive-api.yml" />
+
diff --git a/Writerside/topics/Patchwork-Archive.md b/Writerside/topics/Patchwork-Archive.md
new file mode 100644
index 0000000..22c0ebb
--- /dev/null
+++ b/Writerside/topics/Patchwork-Archive.md
@@ -0,0 +1,9 @@
+# Patchwork Archive
+
+Patchwork Archive is a project that centers around the preservation and archival of music created by virtual youtubers.
+
+Worker scripts are ran which download and store videos identified as music, which are then hosted at *[patchwork.moekyun.me](https://patchwork.moekyun.me)*
+
+In this section you'll find various information about Patchwork Archive as well as the documentation for how to call the publicly available API.
+
+![Patchwork Archive Video Page](https://github.com/Patchwork-Archive/Patchwork-Browser/assets/21994085/30b2cabf-07b4-4331-8ebf-709520d42baa)
diff --git a/Writerside/topics/VTuber-Captcha.md b/Writerside/topics/VTuber-Captcha.md
new file mode 100644
index 0000000..3129f1c
--- /dev/null
+++ b/Writerside/topics/VTuber-Captcha.md
@@ -0,0 +1,152 @@
+# VTuber Captcha
+
+A simple web API that serves VTuber related CAPTCHAs including server-side verification.
+Bring your own frontend to display the data.
+
+# Available Endpoints
+The base URL or the API currently is: `https://vtuber-captcha.vercel.app/api`
+
+Below are the current API endpoints supported:
+[Authenticating Against the API](https://github.com/pinapelz/vtuber-captcha/wiki/Authenticating-Answers-Against-the-API)
+
+## `/affiliation/<org>`
+Returns a captcha asking user to identify which of the VTubers are affiliated with a particular organization or group
+
+**Path Parameters**
+- `<org>`: Refer to [organization page](https://github.com/pinapelz/vtuber-captcha/wiki/Supported-Terms#organizations) for a list of supported terms
+ **Query Parameters**
+- `server_auth`: false if answers to captcha should be sent to response, true if you would like the API to store the answer and authenticate against it.
+ - Default: `false`
+ - Enums: `true, false`
+
+
+
+# Authenticating Answers Against The Server
+The API supports server-side verification meaning that the answer to the CAPTCHA is never sent to you after making the initial request.
+
+Instead, each request will be assigned a session-token which uniquely identifies the CAPTCHA. The server then saves the answer to the CAPTCHA.
+This makes it safe for you to directly call the API client-side from a frontend without the need for a middle-man to store the answer.
+
+To authenticate answers against the API. You need to specify the query parameter `?server_auth=true`
+
+**Example Response with `?server_auth=true`**
+```
+{
+ "category": "affiliation",
+ "onFail": {
+ "extra": null,
+ "text": "You got some wrong"
+ },
+ "questions": [
+ {
+ "id": "UCgZuwn-O7Szh9cAgHqJ6vjw",
+ "image": "https://yt3.ggpht.com/ytc/AMLnZu_aQ3akSpFc9SVPcFMXATjdKZAcmy1aXtGq364A=s800-c-k-c0x00ffffff-no-rj",
+ "name": "Aloe Ch.魔乃アロエ"
+ },
+ {
+ "id": "UC7MMNHR-kf9EN1rXiesMTMw",
+ "image": "https://yt3.ggpht.com/8SFoIMf_6XTf0jyeLd6Txdl96BqSyGhb250P3qEh7E4ui8fLNxLXLiLf7phYVy0CIYx3as42=s800-c-k-c0x00ffffff-no-rj",
+ "name": "Magni Dezmond Ch. HOLOSTARS-EN"
+ },
+ {
+ "id": "UCwL7dgTxKo8Y4RFIKWaf8gA",
+ "image": "https://yt3.ggpht.com/ytc/AOPolaStFlTJ6ISi2Wuwz7L_OLHHShXfoVPDDnqsPWLb=s800-c-k-c0x00ffffff-no-rj",
+ "name": "Oga Ch.荒咬オウガ"
+ },
+ {
+ "id": "UCdn5BQ06XqgXoAxIhbqw5Rg",
+ "image": "https://yt3.ggpht.com/ytc/AOPolaSFPK_6xlqthNXIpMC7OTWfGsDAoNkR9OexBYxcpA=s800-c-k-c0x00ffffff-no-rj",
+ "name": "フブキCh。白上フブキ"
+ },
+ {
+ "id": "UCa9Y57gfeY0Zro_noHRVrnw",
+ "image": "https://yt3.ggpht.com/O7m_5HMY_O8yxR3Jhn9cEO1fLNL_GifMERExnAmfY7JrdTRsTjNijTcNYTPN97Llj3zGn8Susw=s800-c-k-c0x00ffffff-no-rj",
+ "name": "Luna Ch. 姫森ルーナ"
+ },
+ {
+ "id": "UC1CfXB_kRs3C-zaeTG3oGyg",
+ "image": "https://yt3.ggpht.com/B2tq3IQAFxUe9W3MaMc0V62bmlTWCSoTuCk-Y-Ab8yXkZKdIswQhHABZhz2e4YM1-B_Kxen_7w=s800-c-k-c0x00ffffff-no-rj",
+ "name": "HAACHAMA Ch 赤井はあと"
+ },
+ {
+ "id": "UCw1KNjVqfrJSfcFd6zlcSzA",
+ "image": "https://yt3.ggpht.com/7QQ7vnkdwS7e8cLY6YYRoLTLftUxQCopsIxE7L9Qd6vXW_TsCjb4YZDVqYTJ3qceAAqWtwQH=s800-c-k-c0x00ffffff-no-rj",
+ "name": "Nia Suzune / 鈴音にあ [PRISM Project]"
+ },
+ {
+ "id": "UCambvP8yxNDot4FzQc9cgiw",
+ "image": "https://yt3.ggpht.com/EgL9iOOKL7KiLIBxjqJO6gmVJE7BJ4xqfmgyis_QQ9zdbYAD_Pco7xagjdpWCTFoPbgxEXyJ=s800-c-k-c0x00ffffff-no-rj",
+ "name": "宇佐美リト / Usami Rito【にじさんじ】"
+ },
+ {
+ "id": "UCqEp6RdtsMbUNrCdCswr6pA",
+ "image": "https://yt3.ggpht.com/ytc/AMLnZu9ZF7fPn4IghqjrWH-SFrdSzlY9EMtkkoUntGLWLA=s800-c-k-c0x00ffffff-no-rj",
+ "name": "海夜叉神/黄泉波咲夜【にじさんじ】"
+ },
+ {
+ "id": "UC6TfqY40Xt1Y0J-N18c85qQ",
+ "image": "https://yt3.ggpht.com/50JCdIpi9B-ZxDaveVfSyKuvRyj8d2DgLe0sMkd_UxuxN-VcGQ54W4M-6T0wXzJV2TdfAeZglSc=s800-c-k-c0x00ffffff-no-rj",
+ "name": "安土桃"
+ },
+ {
+ "id": "UCFTLzh12_nrtzqBPsTCqenA",
+ "image": "https://yt3.ggpht.com/ytc/AOPolaRF12upNUVmDXfH2A7ViS-gyKCcAvAQXTyEmbWAcA=s800-c-k-c0x00ffffff-no-rj",
+ "name": "アキロゼCh。Vtuber/ホロライブ所属"
+ },
+ {
+ "id": "UCMwGHR0BTZuLsmjY_NT5Pwg",
+ "image": "https://yt3.ggpht.com/f4uYWHJxiGwyXm8NUlm818N1MRnywtgL6wM8JdWqWsKBzI7v1eg8dxDWG7igkWuukUSiufydqPg=s800-c-k-c0x00ffffff-no-rj",
+ "name": "Ninomae Ina'nis Ch. hololive-EN"
+ },
+ {
+ "id": "UC6oW4FXETgEGOFTxWmI2h5Q",
+ "image": "https://yt3.ggpht.com/ytc/AMLnZu_clEsYJi5qCPCpxCuw2qMwB5rfcm2hgDITVRRn=s800-c-k-c0x00ffffff-no-rj",
+ "name": "Noor【NIJISANJI IN】"
+ },
+ {
+ "id": "UC_sFNM0z0MWm9A6WlKPuMMg",
+ "image": "https://yt3.ggpht.com/JDCIBWj11TgjY2Uyba_efZ0n5hzjysMB9GxkvHGkIN_sfFQJR5mx3iVPqgJ96IPcYjZpCLsb=s800-c-k-c0x00ffffff-no-rj",
+ "name": "Nerissa Ravencroft Ch. hololive-EN"
+ },
+ {
+ "id": "UCnYhIk9aGEx_bIgheVjs53w",
+ "image": "https://yt3.ggpht.com/ytc/AOPolaRL4Pk2cC2Q0GXLV-N9tSPZkCDp_c2RqdQEBpY-=s800-c-k-c0x00ffffff-no-rj",
+ "name": "Luto Araka / 新火ると [PRISM Project]"
+ },
+ {
+ "id": "UCIytNcoz4pWzXfLda0DoULQ",
+ "image": "https://yt3.ggpht.com/21x1Ab6pEffGItAcNTjcYUkG3IzQ1y--5cUUjtEhrUEuz2iCttL08vswnPRe1XvtBaZ0yUAm=s800-c-k-c0x00ffffff-no-rj",
+ "name": "エクス・アルビオ -Ex Albio-"
+ }
+ ],
+ "session": "GUQkquh03dwF84EAxif_EA",
+ "title": "Select all the VTuber affiliated with Hololive"
+}
+```
+
+To check your answers against the API. Send `session` token and the `id` of each selected element as a string comma separated as part of a data payload to `/api/verify`
+
+Example Payload
+```
+session: "j4WjkoMcPgNX8_gnNXf8HA"
+answer: "UC0ZTVxCHkZanT5dnP2FZD4Q,UC4WvIIAo89_AzGUh1AZ6Dkg,UCe0JiGnjPfEwEIbWASbOimw"
+```
+Response:
+```
+{
+ success: false
+}
+```
+In the case above the user selected:
+- UC0ZTVxCHkZanT5dnP2FZD4Q
+- UC4WvIIAo89_AzGUh1AZ6Dkg
+- UCe0JiGnjPfEwEIbWASbOimw
+
+and their answer was incorrect.
+
+After failing a captcha, the token becomes invalidated and a request for a new CAPTCHA must be made
+
+# Supported Keywords
+## Organization
+- Hololive: All hololive Production affiliated members, including Holostars
+- Nijisanji: All Nijisanji affiliated livers, including EN branches (does not include VirtuaReal) \ No newline at end of file
diff --git a/Writerside/topics/Welcome.md b/Writerside/topics/Welcome.md
new file mode 100644
index 0000000..df9139a
--- /dev/null
+++ b/Writerside/topics/Welcome.md
@@ -0,0 +1,6 @@
+# Welcome
+
+Welcome to a collection of documentation for some of the various things I have over on GitHub.
+
+These docs should serve
+as both a guide and archive of previously of both currently active and previously projects. \ No newline at end of file
diff --git a/Writerside/v.list b/Writerside/v.list
new file mode 100644
index 0000000..2d12cb3
--- /dev/null
+++ b/Writerside/v.list
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE vars SYSTEM "https://resources.jetbrains.com/writerside/1.0/vars.dtd">
+<vars>
+ <var name="product" value="Writerside"/>
+</vars>
diff --git a/Writerside/writerside.cfg b/Writerside/writerside.cfg
new file mode 100644
index 0000000..5f10ad4
--- /dev/null
+++ b/Writerside/writerside.cfg
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE ihp SYSTEM "https://resources.jetbrains.com/writerside/1.0/ihp.dtd">
+
+<ihp version="2.0">
+ <topics dir="topics" web-path="topics"/>
+ <images dir="images" web-path="images"/>
+ <categories src="c.list"/>
+ <vars src="v.list"/>
+ <instance src="hi.tree"/>
+</ihp> \ No newline at end of file
send patches to the email below
yukais@pinapelz.com
include the subject [PATCH repo_name]
pinapelz.com
homepage