My goal in this analysis is to investigate various questions about the fandom for Thai live-action GL/Yuri1 series on YouTube.
In particular, I want to look at the following questions:
People and companies creating YouTube video have access to a rich set of metrics, including information on the number of unique viewers and inferred demographic information.2 Unfortunately, such information is not available to the general public, and must be indirectly inferred using only publicly-available metrics.
For this analysis I use the R statistical software3 and the additional Tidyverse4 software for R.
I load the following R libraries, for the purposes listed:
I also define custom functions to style tables consistently and to convert ISO 639 language codes to language names.
I obtained data for this analysis using a combination of the YouTube API8 and direct scraping of YouTube.com and Internet Archive web pages, followed by programmatic classification of videos into types and subsequent manual review to correct video classifications where needed. See the “Methodology” section below for more information.
I produced multiple CSV files as input to the analysis, all stored in
the data subdirectory. See the “Data Codebook” section
below for full details on the data files and variables.
I check the MD5 hash values for all the CSV files to be used in the analysis, and stop if the contents are not what are expected.
I load the data from the CSV files into a set of tables (“tibbles” in Tidyverse jargon).
I do a basic integrity check to verify that the number of video
entries in the series_videos tibble matches the number of
videos in series_extras and series_types, and
likewise for reaction_videos, reaction_extras,
and reaction_types.
I do some basic exploratory data analysis, starting with the total number of videos in the dataset, the earliest dates of publication, and the latest dates of publication.
The core datasets correspond to the following:
Public YouTube data (e.g., as made available via the YouTube public API), includes a count of “views” for each video; a view is counted when a viewer intentionally watches a video for at least thirty seconds.9 (“Intentional” here means that the user deliberately clicked on the video, as opposed to it autoplaying for some reason.) This definition results in two issues when trying to estimate the number of viewers from the number of views.
First, a given viewer may watch only a small portion of a Thai
GL-related video, perhaps only a few minutes of an hour-long episode.
For example, someone may have linked to a particular portion of a video
(i.e., using the t= timestamp parameter of a YouTube URL)
and posted that link to a social media site. A person reading the social
media post and clicking on the link would likely watch only that portion
of the video, and no others.
Second, a given viewer may watch a given video (or portion of a video) more than once. The rewatches will be counted as additional views as long as they meet the basic criteria (intentional watching for at least thirty seconds).
An example illustrating both these issues is the most-watched YouTube video for the Thai GL series Gap, part two (of four) of episode nine, which has over fifty-seven million views at the time of writing. This video contains a sensual scene featuring the main couple that lasts several minutes and, per the YouTube web interface, contains the “most replayed” portions of the video.
We cannot take this inflated view count and conclude that there are over fifty milion fans of Thai GL series. Instead we must have a reasonable definition of how to distinguish a Thai GL fan from a more casual viewer, and then some way to use public YouTube data to use this distinction to estimate the number of fans.
For the purposes of this analysis I define a fan as someone who has watched all episodes of two or more Thai GL series. This distinguishes fans in this sense from people who may have watched only one series (e.g., Gap) and no others, or who may have only viewed isolated scenes from a series (e.g., as posted to social media). Below I discuss in more detail how to estimate the number of Thai GL fans according to this definition.
I’ll start with the total number of fans. Based on the available YouTube data, there are two possible ways to estimate the overall size of Thai GL fandom:
I first attempt to estimate the total number of Thai GL fans based on the number of views of videos comprising official series episodes or compilations. (Compilation videos collect together multiple episodes. They are commonly used with shorter series.)
I propose estimating the number of fans based on view counts of the least-watched episodes (or parts of episodes) of Thai GL series. Per my definition above, a fan watching a given series will likely watch all videos comprising episodes of that series, including the least-watched videos in the series. Casual viewers (non-fans) may watch some episodes or parts of episodes, and fans may rewatch some episodes or parts of episodes, but this activity is likely to be at a minimum for the least-watched video in the series.
The least-watched video may still have some rewatches, so at best it gives an upper limit on the number of viewers of that video. But that upper limit is lower than than we might obtain by looking at the view counts of other videos in the series.
In the table below, for each Thai GL series I show the minimum number of views for all compilations, episodes, and parts of episodes for that series. I exclude the “rerun” episodes of Gap in order to focus on the original airing. I also calculate the median and maximum number of views as a comparison. I present the results for the top twenty-five series in terms of the minimum numbers of views across the set of videos for each series.
| Top 25 Thai GL Series by Minimum Episode Views | ||||
| Series | Minimum Views Per Episode Video | Median Views Per Episode Video | Maximum Views Per Episode Video | Date of First Episode |
|---|---|---|---|---|
| Gap | 7,641,196 | 15,657,322 | 57,360,903 | 2022-11-19 |
| Blank | 4,106,135 | 6,078,562 | 35,789,010 | 2024-03-02 |
| Affair | 2,083,251 | 3,261,334 | 22,875,057 | 2024-08-30 |
| The Loyal Pin | 1,921,372 | 3,339,335 | 20,724,853 | 2024-08-04 |
| My Secret Tutor | 1,713,909 | 1,713,909 | 1,713,909 | 2024-10-05 |
| Pluto | 1,573,297 | 2,054,400 | 11,113,105 | 2024-10-19 |
| Poisonous Love | 1,472,675 | 2,764,232 | 10,420,331 | 2025-09-20 |
| Dangerous Queen | 1,280,012 | 1,680,300 | 3,610,448 | 2025-10-05 |
| Service Charge | 1,215,461 | 1,414,208 | 1,432,875 | 2022-12-20 |
| Us | 1,198,722 | 2,284,668 | 5,652,016 | 2025-01-18 |
| The Secret of Us | 1,056,812 | 2,501,914 | 6,400,401 | 2024-06-26 |
| I Still Remember the Feeling | 1,041,857 | 1,041,857 | 1,041,857 | 2023-11-01 |
| Club Friday S16: Love Bully | 1,020,258 | 1,541,793 | 3,879,692 | 2024-06-07 |
| My Marvellous Dream is You | 1,012,791 | 1,505,812 | 14,592,191 | 2024-05-08 |
| Share House | 985,105 | 2,277,992 | 3,042,879 | 2024-07-16 |
| Show Me Love | 938,640 | 1,484,954 | 5,382,029 | 2023-02-28 |
| Love of Secret | 923,138 | 923,138 | 923,138 | 2022-11-21 |
| Fate's Whisper | 866,262 | 866,262 | 866,262 | 2025-03-05 |
| A Piece of Memory | 836,585 | 836,585 | 836,585 | 2025-01-04 |
| 23.5 | 751,116 | 961,484 | 3,324,867 | 2024-03-08 |
| ClaireBell | 726,351 | 1,357,478 | 2,783,203 | 2025-11-01 |
| Favorite Girl | 725,898 | 1,043,966 | 1,362,034 | 2022-09-14 |
| Unlock Your Love | 724,296 | 901,255 | 4,901,953 | 2024-09-11 |
| Mate | 712,611 | 1,606,994 | 3,500,701 | 2024-11-26 |
| Queendom | 706,476 | 890,436 | 1,074,396 | 2025-08-14 |
If we ignore Gap and Blank as outliers, the least-watched videos for the most popular Thai GL series get at least a million views, and in some cases up to two million views. Also, not every fan is likely to sample episodes from every series. Thus, for example, the viewership for the least-watched episode of Pluto likely overlaps only partially with the viewership for the least-watched episodes of Dangerous Queen and Poisonous Love.
Using this measure, I therefore estimate the total number of Thai GL fans as being at least one million, and possibly as high as two or even three million.
I next attempt to estimate the number of fans by looking at the number of subscribers for the top twenty-five channels, as retrieved during the period of data collection:
| Subscribers to YouTube Channels Producing Thai GL Series | |
| Channel | Subscribers |
|---|---|
| ช่อง one31 | 44,400,000 |
| WorkpointOfficial | 43,500,000 |
| Ch3Thailand | 36,700,000 |
| GMMTV OFFICIAL | 20,100,000 |
| ZENSE MORE | 8,340,000 |
| CHANGE2561 | 5,940,000 |
| หม่อมถนัดแดก | 4,950,000 |
| IDOLFACTORY OFFICIAL | 3,500,000 |
| 3Plus | 3,460,000 |
| Studio Wabi Sabi | 2,670,000 |
| GrandTV | 2,480,000 |
| WONDERFRAME | 2,160,000 |
| MONO Original | 2,070,000 |
| MeMindY Official | 1,910,000 |
| JPC Series | 1,550,000 |
| JPC Media | 1,380,000 |
| Star Hunter Entertainment | 1,250,000 |
| NineStarStudios | 886,000 |
| WeTV Original | 811,000 |
| Mahanakhon Channel | 576,000 |
| Kongthup's Channel | 464,000 |
| COPY A BANGKOK | 445,000 |
| NORTH STAR ENTERTAINMENT | 420,000 |
| SHAKESHOULDER FILMMAKER | 390,000 |
| H'our channel | 313,000 |
Some of the channels listed produce videos of all types, while others primarily produce BL series and have only recently produced GL series. Only a few channels are devoted exclusively or almost exclusively to GL series; of those, the following each have over 300,000 subscribers:
The number of subscribers to these channels likely underestimates the number of fans, since not all fans may bother to subscribe to a channel. If we discount some of the IdolFactory subscribers (who may be watching BL shows) and use the subscriber counts for the other channels as lower bounds, then we get an an estimate of at least one million fans and possibly more. This is roughly consistent with the number of fans estimated based on the number of views.
I not only want to create estimates of the number of fans of Thai GL series, I also would like to distinguish between different types of fans based on their types and numbers of fan-related activities. As with estimating the total number of fans, if possible I’d like to distinguish between groups of fans using the available YouTube data.
I propose that we can distinguish at least two smaller groups within the overall Thai GL fandom:
Below I discuss in more detail how I estimate the size of these groups.
As discussed above, I define an “engaged” fan as one who does not just watch videos or subscribe to video channels, but rather goes beyond that by interacting with videos or with fellow fans.
YouTube provides three main mechanisms for such interactions, each of which might be useful in estimating the number of more engaged fans:
I first look at the number of likes. To avoid double counting, I look only at official series episodes (ignoring compilations that collect together multiple episodes) and for each series take the median number of likes for all episodes and parts of episodes for that series. I present the results for the top twenty-five series in terms of likes.
| Top 25 Thai GL Series by Episode Likes | ||
| Series | Median Likes Per Episode Video | Median % Likes to Views |
|---|---|---|
| Gap | 197,365 | 1.4 |
| Blank | 96,205 | 1.5 |
| The Loyal Pin | 89,039 | 2.7 |
| Affair | 62,339 | 1.9 |
| Pluto | 58,160 | 2.6 |
| Poisonous Love | 57,287 | 2.0 |
| Us | 52,402 | 2.3 |
| Dangerous Queen | 50,277 | 2.8 |
| The Secret of Us | 39,418 | 1.4 |
| My Marvellous Dream is You | 37,502 | 2.4 |
| ClaireBell | 36,961 | 2.8 |
| Roller Coaster | 35,389 | 2.0 |
| Music Story: Losing Control | 34,327 | 1.6 |
| Mate | 33,330 | 2.0 |
| Somewhere Somehow | 32,347 | 3.1 |
| Lucky My Love | 28,329 | 2.4 |
| Club Friday S16: Love Bully | 28,152 | 1.8 |
| Love Senior | 27,105 | 1.7 |
| Queendom | 23,704 | 2.6 |
| 23.5 | 23,093 | 2.4 |
| Apple My Love | 22,835 | 2.2 |
| Whale Store XOXO | 22,070 | 4.7 |
| Unlock Your Love | 22,062 | 2.4 |
| Share House | 19,694 | 1.3 |
| MuTeLuv: Hello, Is This Luck? | 19,417 | 4.0 |
The median number of likes as a percentage of views is actually relatively low for most of these series compared to industry metrics. “A common benchmark is roughly four to five likes for every 100 views.”10 However the ratio of likes to views is likely misleading for videos that have many people watching them more than once. As noted above, a video can be watched multiple times but liked only once.
Seventeen series have median likes per series video above twenty-five thousand, and six have between fifty and a hundred thousand per video. (I ignore Gap as being an outlier.) As noted above, every like corresponds to a viewer, so on the order of fifty to a hundred thousand fans are engaged enough to like series videos.
However, it’s likely that this underestimates the number of more engaged fans, since not all fans will watch and like videos for every series, and the set of fans liking the videos for one series may only partially overlap with the set of fans liking the videos for some other series. Thus it seems reasonable to estimate the number of more engaged fans as being at least a hundred thousand and possibly more.
A second approach to estimate the number of more engaged fans is to look at the number of people who have left comments on series-related videos. (In this dataset this includes comments on series-related videos such as trailers in addition to comments on series episodes themselves.)
I create a table showing the number of commenters who have left at least one comment, at least two comments, and so on.
| Numbers of Commenters Submitting at Least N Comments for Thai GL Series Videos | |
| Number of Comments | Number of Commenters Meeting that Threshold |
|---|---|
| 1 | 347,008 |
| 2 | 164,509 |
| 3 | 108,157 |
| 4 | 80,692 |
| 5 | 64,328 |
| 6 | 53,422 |
| 7 | 45,468 |
| 8 | 39,507 |
| 9 | 34,784 |
| 10 | 31,108 |
Leaving a comment is a more significant action than liking a video, since the viewer must make at least a minimal effort to compose the comment, even if just to post a heart or other emoji in reply.
By this measure the number of more engaged fans is considerably more than estimated above, on the order of a hundred to three hundred thousand, or about a tenth of my estimate of the total number of fans.
I next want to create some estimates of the number of “superfans” of Thai GL series, i.e., fans who’ve shown the highest levels of engagement with those series.
There are at least three potential ways to estimate the number of superfans:
I next look at the number of views for unofficial reaction videos that feature independent creators reacting to and commenting on official videos for Thai GL series. (Typically the reaction videos are for series episodes, but they can also be reactions to other official videos, such as trailers and pilots.)
Fans must seek out these independently-created reaction videos, and they are typically relatively long (comparable to the length of the series episodes on which they comment). Thus the number of views of such videos may be a reasonably good metric for estimating the number of superfans.
In the following table I present median views of independently-created reaction videos for various series. The table is limited to the top twenty-five series as measured by such views.
| Views for Independent Reaction Videos for Thai GL Series | |
| Series | Median Views Per Independent Reaction Video |
|---|---|
| Gap | 23,232 |
| Show Me Love | 9,692 |
| Stay with Me | 9,554 |
| Enemies With Benefits | 7,320 |
| Blank | 6,971 |
| Delete Your Past | 6,450 |
| Chasing Love | 5,978 |
| The End | 5,836 |
| Wish Upon A Star | 5,679 |
| The Secret of Us | 5,012 |
| Moonshadow | 4,827 |
| Hometown Romance | 4,371 |
| Cranium | 4,261 |
| Bake Love Feeling | 3,876 |
| AI Girl | 3,617 |
| Under Her Rules | 3,090 |
| 23.5 | 3,055 |
| Poisonous Love | 3,019 |
| Is This Love? | 3,001 |
| Affair | 2,944 |
| Heart Code | 2,885 |
| The Loyal Pin | 2,820 |
| Mate | 2,692 |
| Frozen Valentine | 2,673 |
| Us | 2,572 |
The estimate of the number of superfans based on this measure is roughly consistent with the estimate based on commenting activity: Leaving aside the outlier of Gap, the number of superfans is estimated to be on the order of ten thousand or less.
Finally, I look at the number of fans commenting on independently-created reaction videos, using the same measure I employed earlier: the number of fans who’ve submitted at least one comment, the number of fans submitting at least two comments, and so on.
| Numbers of Commenters Submitting at Least N Comments for Thai GL Independent Reaction Videos | |
| Number of Comments | Number of Commenters Meeting that Threshold |
|---|---|
| 1 | 27,426 |
| 2 | 13,526 |
| 3 | 8,947 |
| 4 | 6,535 |
| 5 | 5,126 |
| 6 | 4,201 |
| 7 | 3,586 |
| 8 | 3,082 |
| 9 | 2,732 |
| 10 | 2,427 |
As with comments on series-related videos, the number of comments drops off fairly rapidly, with most people submitting relatively few comments.
This pattern continues as we look at people who’ve submitted even more comments, as shown in the following graph, which shows the number of comments submitted by more active commenters relative to less active commenters.
Again we see a highly-skewed distribution of commenting activity (power-law or log-normal distribution), with relatively few fans generating the bulk of comments.
Based on this measure it appears that the number of superfans is a few thousand at most.
Based on the estimates above, I hypothesize that the fandom for Thai GL series can be roughly categorized as follows:
In this section I attempt to measure the growth over time of the fandom for Thai GL series. Unfortunately, the YouTube public API does not provide historical data for views, likes, and subscriber counts, so I must use other ways to obtain whatever historical data is available.
There are at least three ways we can estimate the growth in the fandom:
The data obtained through the first two methods is often only approximate, since displayed counts are often rounded; for example, the number of views might be displayed as “2M” instead of an exact number between two and three million. It is also sporadic, since the Internet Archive may take a snapshot of a given page only once every month or two at best. Nevertheless the data can give at least a rough picture of historical values for views, likes, comments, and subscribers for selected videos and channels.
The dataset available for this analysis contains some historical data on subscriber counts for all channels, along with historical data on views, likes, and (sometimes) comments for the first videos (episode 1, part 1) for the popular series Gap, Blank, and The Loyal Pin.
I first look at the historical growth in views for the episode 1, part 1 videos for Gap, Blank, and The Loyal Pin. Anyone interested in these series would likely have watched at least the first part of the first episode, so this gives a good upper bound of overall fan interest.
The data for Gap shows a rapid rise in the number of views during the first months while the series was airing, then a less steep rise in views until early 2025, at which point the number of views apparently leveled off. This leveling off was likely due to three factors: rounding in the data (as discussed above), the release in February 2025 of “rerun” episode videos for Gap that were not divided into parts, and saturation of the prospective audience.
Both Blank and The Loyal Pin show similar patterns of relatively steep growth followed by slower growth. However the period of initial growth is less intense than for Gap, likely because at the time Blank and The Loyal Pin were released there were other Thai GL series competing for fans’ attention.
The next graph shows the associated growth in the number of YouTube “likes” for these three videos.
The patterns are similar to those seen for the number of views, except that episode 1, part 1, of the The Loyal Pin elicited more fan engagement (in the form of likes) relative to views than did Blank.
The number of likes for The Loyal Pin and Blank are consistent with my earlier estimate that the number of more engaged fans is on the order of a hundred thousand or more.
The next measure I look at is the growth in subscribers over time for IdolFactory (producers of Gap and The Loyal Pin) and NineStar Studios (producers of Blank).
Prior to the release of Gap in November 2022, IdolFactory had a base of about five hundred thousand subscribers, presumably fans of IdolFactory’s previous BL series. After the release of Gap IdolFactory quickly acquired over a million new subscribers, presumably GL fans attracted to Gap. Subscriber growth continued at a lesser pace over subsequent years before leveling off. The release of The Loyal Pin in August 2024 does not appear to have significantly affected that growth trajectory.
In contrast, NineStar Studios was a new production company whose YouTube channel had no subscribers prior to the release of Blank. It quickly acquired almost a million subscribers and has remained at that level ever since.
The third option for measuring the growth of the Thai GL fandom is looking at the growth in the number of people over time who have commented on series episodes and series-related videos, based on the dates on which particular commenters posted their first comment. This is especially useful as a way to gauge the growth in the number of more engaged fans.
Prior to the release of Gap in November 2022, the number of commenters was relatively small. Presumably anyone who commented during that period was likely commenting on other types of videos (e.g., BL series).
With the release of Gap in November 2022, the number of commenters grew rapidly to almost one hundred thousand while Gap was airing. It then grew more slowly during the period of 2023 and early 2024 in which almost no new Thai live-action series were released, before resuming more rapid growth once more after the release of several new GL series beginning in March 2024. (There were only 51,880 new commenters in 2023 vs. 147,239 new commenters added in 2024.)
The pace of growth slowed again somewhat after mid-2024, and growth has continued steadily since then, with 84,198 new commenters in 2025. (The most recent data may indicate another leveling off, but it’s likely too soon to tell.)
Producers of YouTube videos have access to analytics that can tell them (to a reasonable degree of assurance) the countries in which viewers of their videos are located.
In the absence of such private data there is no simple way to determine where fans of Thai GL series are located. However, we can at least infer a region or (in some cases) a country of origin for a subset of fans, namely those who leave comments on videos.
The table below shows the inferred languages of commenters on Thai GL series and related videos, based on the detected languages of their comments. Note that if a fan comments both in English and in a language other than English, their language is inferred to be the non-English language. Only languages with 1% or more of commenters are shown.
| Languages for Commenters on Thai GL Series-Related Videos | ||
| Commenter Language | Commenters | % of Commenters |
|---|---|---|
| English | 90,009 | 42 |
| Thai | 54,996 | 25 |
| Spanish | 26,852 | 12 |
| Portuguese | 20,412 | 9 |
| Vietnamese | 7,913 | 4 |
| Chinese | 2,662 | 1 |
English speakers constitute somewhat less than half of all commenters, Thai speakers about a quarter, and Spanish and Portuguese speakers about a tenth each. There’s also a significant number of Vietnamese speakers and a smattering of Chinese speakers.
Since my primary interest is in fans outside Thailand (“interfans”), I re-do the table omitting Thai speakers.
| Non-Thai Languages for Commenters on Thai GL Series-Related Videos | ||
| Commenter Language | Commenters | % of Commenters |
|---|---|---|
| English | 90,009 | 56 |
| Spanish | 26,852 | 17 |
| Portuguese | 20,412 | 13 |
| Vietnamese | 7,913 | 5 |
| Chinese | 2,662 | 2 |
| Indonesian | 1,783 | 1 |
English speakers make up over half of non-Thai fans commenting, with Spanish and Portuguese speakers about a sixth and an eighth of all non-Thai commenters respectively.
As noted above, commenters vary extremely widely in the number of comments they submit, and it’s possible that speakers of some languages comment more frequently than others. I therefore do another pair of tables showing the distribution of languages seen in comments, not commenters.
| Languages of Comments on Thai GL Series-Related Videos | ||
| Comment Language | Comments | % of Comments |
|---|---|---|
| English | 476,156 | 51 |
| Thai | 198,520 | 21 |
| Spanish | 104,679 | 11 |
| Portuguese | 90,342 | 10 |
| Vietnamese | 24,405 | 3 |
Here is the same table omitting comments in Thai.
| Non-Thai Languages of Comments on Thai GL Series-Related Videos | ||
| Comment Language | Comments | % of Comments |
|---|---|---|
| English | 476,156 | 65 |
| Spanish | 104,679 | 14 |
| Portuguese | 90,342 | 12 |
| Vietnamese | 24,405 | 3 |
When judged by the number of comments, English is even more dominant, accounting for nearly two-thirds of all comments.
Finally, one relevant feature of the YouTube comment system is that it allows viewers to easily translate comments in another languages into their own language. This allows commenters to participate in comment threads even when most of the comments in the thread are in a language or languages they do not understand.
The following table attempts to judge how prevalent this behavior is, by looking at the number of comment threads in which comments are in two or more languages.
| Multi-language Comment Threads on Thai GL Series-Related Videos | ||
| # of Languages | Comment Threads | % of Comment Threads |
|---|---|---|
| 1 | 76,647 | 66 |
| 2 | 33,653 | 29 |
| 3 | 4,583 | 4 |
| 4 | 875 | 1 |
Fully a third of all comment threads feature comments in two or more languages, highlighting the fact that the fandom for Thai GL series is truly an international one in which fans can relatively easily interact across language barriers, at least in the context of YouTube.
As the number of fans of Thai GL grew after the release and subsequent success of Gap, other Thai production companies began releasing GL series on YouTube and other services. In this section I look at quantitative data relating to YouTube releases.
The following graph shows the number of Thai GL series episodes and other series-related videos released in each month since November 2022 (when Gap was released). To avoid double-counting, this graph counts only the first part of multi-part videos (e.g., a single episode split into four parts on YouTube).
The number of series-related videos roughly tracks the number of episodes released, since many of the series-related videos are directly related to episodes, including cast reaction videos, behind-the-scenes videos, and next episode previews.
New fans of Thai GL series have access to an increasing amount of video material, including episodes of older and newer series and related videos. The following graph shows the cumulative number of hours of official Thai GL videos available on YouTube.
This overstates the number of video hours to some extent, since some series (most notably Gap) have released episodes initially in parts and then later re-released them as single videos. However it remains apparent that a new fan could spend multiple weeks or months just watching Thai GL series already available on YouTube.
As the number of Thai GL series distributed on YouTube has grown, this growth has opened up opportunities for independent YouTube creators to try to build audiences by creating their own reaction videos to those series’ episodes.
The following graph shows the cumulative number of independent reaction videos available on YouTube over time.
Most independent reaction videos are approximately as long as the series episodes they’re reacting to. Comparing this to the previous graph, it’s clear that the number of hours of reaction videos is an order of magnitude larger than than number of hours of series episodes. Even a superfan could watch only a fraction of the available reaction videos.
As noted above, producers of Thai GL series have access to private YouTube data that can tell them which countries viewers are located in. One way producers can use that data is to inform decisions on which languages to provide subtitles for with their videos.
In the table below I look at the subtitles available for 381 episodes of Thai GL series that have subtitles for at least one language or language variant, to see the languages for which producers most often provide subtitles. I ignore languages with subtitles in less than twenty percent of episodes.
| Top Subtitle Language Variants for Thai GL Series Episodes | |
| Language | % Episodes Subtitled in Language |
|---|---|
| English | 74 |
| Thai | 63 |
| Spanish | 38 |
| Vietnamese | 38 |
| Korean | 36 |
| Indonesian | 33 |
| French | 33 |
| English (United States) | 33 |
| Russian | 30 |
| Portuguese | 29 |
| Japanese | 28 |
| German | 27 |
| Portuguese (Brazil) | 26 |
| Filipino | 24 |
| Italian | 24 |
| Burmese | 23 |
| Chinese | 22 |
| Chinese (Traditional) | 22 |
| Ukrainian | 20 |
Some of these languages are substantially identical as far as the intended audience is concerned, such as “English” vs. “English (United States)” or “Portuguese” vs. “Portuguese (Brazil).” Others represent distinct audiences, such as “Chinese (Traditional)” for Taiwan and “Chinese (Simplified)” for China.
In the next table I collapse together substantially identical language variants while retaining those addressing distinct audiences. In particular, for Chinese subtitles I collapse “Chinese” (“zh”), “Chinese (Simplified)” (“zh-Hans”), and “Chinese (China)” (“zh-CN”) into “Chinese,” while keeping the other Chinese variants separate.
| Top Subtitle Languages for Thai GL Series Episodes | |
| Language | % Episodes Subtitled in Language |
|---|---|
| English | 99 |
| Thai | 63 |
| Portuguese | 44 |
| Spanish | 40 |
| Vietnamese | 38 |
| Korean | 36 |
| Chinese | 35 |
| Indonesian | 33 |
| French | 33 |
| Russian | 30 |
| Japanese | 28 |
| German | 27 |
| Filipino | 24 |
| Italian | 24 |
| Burmese | 23 |
| Chinese (Traditional) | 22 |
| Ukrainian | 20 |
The top five languages for subtitles match the top five languages used by commenters, with Thai GL series almost always published with English subtitles. Other languages beyond the top five address major markets for Thai GL series in East Asia, Southeast Asia, and Europe.
When producers of Thai GL series publish videos to YouTube, they can associate lists of keywords with each video. These keywords can then help surface those videos when viewers enter YouTube search terms containing those keywords—a form of search engine optimization (SEO) as applied to YouTube.
The following table shows the top twenty-five keywords associated with Thai GL series episodes and related videos, along with the percentage of all videos for which each keyword is used. Keywords in English have been converted to lower-case.
num_series <- series_keywords |> distinct(video_id) |> nrow()
series_keywords |>
mutate(video_keyword = str_to_lower(video_keyword)) |>
summarize(keyword_pct = (100 * n()) / num_series, .by = video_keyword) |>
arrange(desc(keyword_pct)) |>
head(25) |>
apa(title = "Top 25 Keywords for Thai GL Series-Related Videos") |>
cols_label(
video_keyword = "Keyword",
keyword_pct = "% Videos with Keyword",
) |>
cols_align(align = "left", video_keyword) |>
cols_align(align = "right", keyword_pct) |>
fmt_integer(columns = keyword_pct)
| Top 25 Keywords for Thai GL Series-Related Videos | |
| Keyword | % Videos with Keyword |
|---|---|
| yuri | 36 |
| หญิงรักหญิง | 27 |
| gl series | 24 |
| gmmtv | 23 |
| ยูริ | 22 |
| gl | 20 |
| คู่จิ้น | 20 |
| lesbian | 19 |
| sapphic | 18 |
| gmm | 18 |
| lgbt | 17 |
| เลสเบี้ยน | 17 |
| freenbecky | 16 |
| ฟรีนเบค | 15 |
| wlw | 13 |
| gmm grammy | 13 |
| thai gl series | 13 |
| change | 13 |
| change2561 | 13 |
| เช้นจ์ 2561 | 13 |
| ฉอด change2561 | 13 |
| ช่อง gmm ออนไลน์ | 13 |
| พี่ฉอด | 13 |
| พี่ฉอด สายทิพย์ | 13 |
| จีเอ็มเอ็ม ทีวี | 13 |
The most commonly-used keywords fall into three general classes:
It’s also worth noting some keywords not commonly used for Thai GL series. The first is “Series Y”, a blanket term for both BL (“yaoi”) and GL (“yuri”) content. It is likely not commonly used because it is more closely associated with BL series.
The others are “tom” (for “tomboy”) and “dee” (for “lady”), traditional Thai terms very roughly equivalent to “butch” and “femme” respectively.12 These terms are likely not commonly used as keywords for Thai GL series for two reasons: First, the terms are not well-known in the international Thai GL fandom. Second, they are likely not associated with Thai GL series by Thai fans themselves, since the pairings in almost all Thai GL series do not correspond to the traditional tom and dee categories.
I used the r/GirlsLove wiki on Reddit to compile two lists, of
full-length Thai GL series and of short Thai GL series, for which videos
were available on YouTube; I omitted series that featured GL pairs only
as side couples and not as the main protagonists. This produced the
files series.csv and short_series.csv.
I used the YouTube URLs from the resulting lists of series and short
series to programmatically retrieve the producer handles for the videos
and expand a manually-compiled list of Thai GL producers to create a
more comprehensive list of producers and their associated YouTube
channel IDs, the key components of the URLs for the channels’ YouTube
pages. This produced the file producer_channels.csv.
I used the producer channel IDs to programmatically retrieve all
YouTube playlists for each producer and then filtered the results to
include only playlists associated with the series and short series
previously compiled. I then used the filtered playlist IDs (the key
components of the playlists’ YouTube pages) to programmatically retrieve
a list of all official YouTube videos associated with Thai GL series and
short series. This produced the file
series_video_info.csv.
I followed a somewhat different strategy to compile a list of
independent producers of videos reacting to Thai GL series. I started
with a manually compiled list of potential reactors, then
programmatically searched YouTube for videos whose titles contained both
the word “Reaction” (or similar words and phrases in English, Spanish,
and Portuguese) and the name of one of a set of popular Thai GL series.
That list of videos was then used to compile an updated list of
independent creators of reaction videos and their associated YouTube
channel IDs. This produced the file
reactor_channels.csv.
I then used the reactor channel IDs to programmatically look for
playlists for those reactions, retrieve videos from those playlists, and
filter the results to contain only videos relating to Thai GL series.
This produced the file reaction_video_info.csv containing
information about independently-created reaction videos for Thai GL
series.
These two master CSV files of series videos and reaction videos were
then used to programmatically retrieve further data about the videos:
additional metadata for the videos (series_video_extras.csv
and reaction_video_extras.csv), subtitle languages for the
videos (series_video_subtitles.csv and
reaction_video_subtitles.csv), and keywords associated with
the videos (series_video_keywords.csv and
reaction_video_keywords.csv).
The master CSV files were also used to produce two further sets of
files. First, I programmatically retrieved comments for all videos in
series_video_info.csv and
reaction_video_info.csv and used the resulting data to
produce the following:
series_comment_languages.csv and
reaction_comment_languages.csv)series_thread_languages.csv and
reaction_thread_languages.csv)series_commenter_languages.csv and
reaction_commenter_languages.csv)series_commenter_info.csv
and reaction_commenter_info.csv)(Identities of commenters as found in the above files were anonymized by replacing their comment handles with randomly-generated IDs.)
Separately I programmatically created two files
series_video_types.csv and
reaction_video_types.csv to store additional information
about Thai GL series videos and reaction videos. I programmatically
determined Information such as the type of each video and any associated
episode numbers and part numbers (within episodes) by extracting
information from the titles of the videos.
I then manually reviewed all entries in
series_video_types.csv to correct this information where
appropriate. This resulted in removing some series as falling outside
the scope of the analysis, including BL series with only incidental GL
content and series for which videos were available to channel members
only. I updated other CSV files to reflect these removals.
(At the time of writing I have not done a similar review for
reaction_video_types.csv, since it was not needed for the
purposes of this analysis.)
Finally, I did programmatic retrieval of archived YouTube pages for
producer channels and select series video pages to produce historical
data on numbers of subscribers, viewers, and related information. This
produced the file producer_subscribers.csv for producer
channels and the following files for the first-released videos (episode
1, part 1) of Gap, Blank, and The Loyal
Pin:
gap_1_1_snapshot_metrics.csvblank_1_1_snapshot_metrics.csvtlp_1_1_snapshot_metrics.csvproducer_channels.csvThis file contains information on Thai production companies that have distributed GL series and related videos on YouTube.
Each row represents one channel. The file contains 51 channels.
| variable | type | description | example |
|---|---|---|---|
| channel | character | YouTube channel handle including the @ prefix | @gmmtv |
| channel_id | character | YouTube channel ID: a 24-character string beginning with UC assigned by YouTube and stable across handle changes | UC8BzJM6_VbZTdiNLD4R1jxQ |
| channel_name | character | Channel display name as shown on YouTube | GMMTV OFFICIAL |
producer_subscribers.csvThis file contains current and historical data on the number of
subscribers to the YouTube channels listed in
producer_channels.csv. Current subscriber data was
retrieved using the YouTube API. Historical subscriber data was
retrieved by scraping channel web page snapshots on the Internet
Archive.
Each row represents one channel at a particular date and time. The file contains subscriber information for 741 channel/date-time pairs.
| variable | type | description | example |
|---|---|---|---|
| channel | character | YouTube channel handle including the @ prefix | @baanchanproduction |
| subscribers | integer | Subscriber count at the time of the snapshot | 6240 |
| datetime | character | Datetime of the snapshot; UTC ISO 8601 for current snapshots and local-time ISO 8601 for historical Wayback Machine snapshots | 2026-02-16T23:51:54Z |
reaction_comment_languages.csvThis file contains detected languages for individual comments on independently-created reaction videos; languages were inferred using the Python fastText module.13 (To avoid an incompatibility with the Python numpy module, I used a numpy2-compatible fastText version.14)
Each row represents one comment and its detected language. The file contains information for 151,720 comments.
| variable | type | description | example |
|---|---|---|---|
| video_id | character | YouTube video ID of the reaction video this comment was posted on | n6kLoiAHoOc |
| comment_id | character | YouTube comment ID assigned by YouTube | UgyN00XBDTddfw4mbPx4AaABAg |
| comment_language | character | ISO 639-1 language code detected by fastText for this comment | pt |
| comment_language_score | double | fastText confidence score for the detected language (0 to 1) | 0.9999141693115234 |
reaction_commenter_info.csvThis file contains information on people commenting on independently-created reaction videos to Thai GL series.
Each row represents one commenter and their associated information. The file contains information for 347,008 commenters.
| variable | type | description | example |
|---|---|---|---|
| commenter_id | character | Anonymous commenter identifier in the format C followed by a randomly-generated 9-digit number; joins to an unreleased file containing comment author handles | C844365880 |
| commenter_comments | integer | Total number of comments and replies posted by this commenter across all reaction videos | 2 |
| commenter_top_level | integer | Number of top-level comments (not replies) posted by this commenter | 2 |
| commenter_replies | integer | Number of replies posted by this commenter | 0 |
| commenter_first_date | character | Date of the commenter's earliest comment in YYYY-MM-DD format | 2025-12-02 |
| commenter_last_date | character | Date of the commenter's most recent comment in YYYY-MM-DD format | 2026-02-08 |
| commenter_likes | integer | Total number of likes received across all of this commenter's comments | 3 |
| commenter_replies_received | integer | Total number of replies received from other commenters on this commenter's top-level comments | 0 |
reaction_commenter_languages.csvThis file contains detected languages for comment authors commenting on independently-created reaction videos. Languages were inferred using the Python fastText module as applied to comments by a given commenter.
In general the language determined for a commenter was the one for which their comments’ language had the highest confidence score as calculated by the fastText module. However, non-English languages were preferred to English if the non-English languages could be determined with a reasonably high degree of confidence (fastText language score of 0.9 or greater). This accounts for the case of commmenters whose native language is not English but who know English and sometimes use it when posting comments instead of their native language.
Each row represents one commenter and their detected language. The file contains information for 26,879 commenters.
| variable | type | description | example |
|---|---|---|---|
| commenter_id | character | Anonymous commenter identifier in the format C followed by a randomly-generated 9-digit number; joins to an unreleased file containing comment author handles | C844365880 |
| commenter_language | character | ISO 639-1 language code inferred as the commenter's native language based on their comment history | pt |
| commenter_language_score | double | fastText confidence score associated with the language assignment (0 to 1) | 0.9860324859619141 |
reaction_thread_languages.csvThis file contains information on the number of distinct languages
used within comment threads for independently-created reaction videos;
for more information on detected languages in reaction video comments
see reaction_comment_languages.csv.
Each row represents one comment thread and its number of detected language(s). The file contains information for 102,402 comment threads.
| variable | type | description | example |
|---|---|---|---|
| thread_id | character | Comment ID of the top-level comment that started this thread | UgyN00XBDTddfw4mbPx4AaABAg |
| video_id | character | YouTube video ID of the reaction video this thread is on | n6kLoiAHoOc |
| thread_comments | integer | Total number of comments in the thread (top-level comment plus all replies) | 1 |
| thread_commenters | integer | Number of unique commenters in the thread | 1 |
| thread_languages | integer | Number of distinct languages detected across comments in the thread | 1 |
| thread_cross_language_replies | integer | Number of replies whose detected language differs from the top-level comment's language | 0 |
| thread_languages_per_comment | double | Ratio of distinct languages to total comments in the thread | 1.000000 |
| thread_languages_per_commenter | double | Ratio of distinct languages to unique commenters in the thread | 1.000000 |
| thread_cross_language_per_reply | double | Ratio of cross-language replies to total replies in the thread (0 for threads with no replies) | 0.000000 |
reaction_video_extras.csvThis file contains more information about the videos in
reaction_video_info.csv, including likes, views, and number
of comments. This information was retrieved using the YouTube API.
Each row represents one video. The file contains information for 3,881 videos.
| variable | type | description | example |
|---|---|---|---|
| video_id | character | YouTube video ID: an 11-character string uniquely identifying the video | ovySaTQOPxA |
| video_title | character | Video title as set by the reactor on YouTube | 23.5 องศาที่โลกเอียง ✿ EP 1 [ REACTION ] |
| video_language | character | Default audio language of the video as reported by the YouTube Data API; BCP 47 language tag | en |
| video_duration | character | Video duration in ISO 8601 duration format | PT46M18S |
| video_view_count | integer | Total view count at the time of retrieval | 15619 |
| video_like_count | integer | Total like count at the time of retrieval | 775 |
| video_comment_count | integer | Total public comment count at the time of retrieval | 21 |
reaction_video_info.csvThis file contains video IDs, titles, and other metadata for independently-created reaction videos commenting on Thai GL series and short series. This information was retrieved using the YouTube API.
Each row represents one video. The file contains information for 3,881 videos.
| variable | type | description | example |
|---|---|---|---|
| video_id | character | YouTube video ID: an 11-character string uniquely identifying the video | ovySaTQOPxA |
| channel_id | character | YouTube channel ID of the reactor channel that posted this video | UC0Q6JMcvDfcdJ6mKxzHrRPQ |
| video_title | character | Video title as set by the reactor on YouTube | 23.5 องศาที่โลกเอียง ✿ EP 1 [ REACTION ] |
| video_published_at | character | UTC datetime when the video was published on YouTube in ISO 8601 format | 2024-03-10T13:00:06Z |
| video_privacy_status | character | Video privacy status as reported by the YouTube Data API; one of: public, unlisted, private | public |
| series_name | character | Name of the GL series identified in this reaction video's title; one row per video/series combination | 23.5 |
reaction_video_keywords.csvThis file contains reactor-assigned keywords (tags) for the videos in
reaction_video_info.csv. This information was retrieved via
the YouTube API.
Each row represents one keyword for one video. The file contains information for 47,366 video/keyword combinations.
| variable | type | description | example |
|---|---|---|---|
| video_id | character | YouTube video ID: an 11-character string uniquely identifying the video | T_pkVAuGJUE |
| video_keyword | character | One producer-assigned keyword (tag) for the video; one row per video/keyword combination | Thai GL |
reaction_video_subtitles.csvThis file contains reactor-provided subtitle languages for the videos
in reaction_video_info.csv. This information was retrieved
via the YouTube API.
Each row represents one subtitle language for one video. The file contains information for 914 video/subtitle language combinations.
| variable | type | description | example |
|---|---|---|---|
| video_id | character | YouTube video ID: an 11-character string uniquely identifying the video | X6P07oykHn4 |
| language_code | character | BCP 47 language tag for the subtitle track as provided by the reactor | es |
| language_name | character | Human-readable name of the subtitle language | Spanish |
reaction_video_types.csvThis file contains classification of the videos in
reaction_video_info.csv` to specify the type of video
(always “reaction” for these videos) and the series and series
episode(s) (if any) with which they’re associated. This information was
programmatically inferred from the video titles; it has not been
manually reviewed and edited at the time of writing.
Each row represents one video. The file contains information for 3,881 videos.
| variable | type | description | example |
|---|---|---|---|
| video_id | character | YouTube video ID: an 11-character string uniquely identifying the video | ovySaTQOPxA |
| video_type | character | Classification of the video; reaction for a reaction video | reaction |
| video_episode | integer | Episode number of the series episode being reacted to (empty if unknown or not applicable) | 2 |
| video_total_episodes | integer | Total number of episodes in the season (empty for reaction videos) | |
| video_part_num | integer | Part number when a reaction spans multiple videos (1 if not split) | 2 |
| video_total_parts | integer | Total number of parts for this reaction (1 if not split) | 4 |
| video_duration_seconds | integer | Video duration in seconds | 2778 |
| video_orientation | character | Aspect ratio orientation of the video; one of: landscape, portrait, square | landscape |
| series_name | character | Name of the GL series being reacted to | 23.5 |
| season | integer | Season number of the series episode being reacted to (1 for single-season series) | 2 |
| referenced_video_id | character | Video ID of the series video this reaction refers to (empty if linked to an episode) |
reactor_channels.csvThis file contains YouTube channel handles, IDs, and names for independent people creating reaction videos for Thai GL series.
Each row represents one channel. The file contains 39 channels.
| variable | type | description | example |
|---|---|---|---|
| channel | character | YouTube channel handle including the @ prefix | @AlyssaDanielleYT |
| channel_id | character | YouTube channel ID: a 24-character string beginning with UC assigned by YouTube and stable across handle changes | UC0Q6JMcvDfcdJ6mKxzHrRPQ |
| channel_name | character | Channel display name as shown on YouTube | Alyssa Danielle |
reactor_subscribers.csvThis file contains current and historical data on the number of
subscribers to the YouTube channels listed in
reactor_channels.csv. Current subscriber data was retrieved
using the YouTube API. Historical subscriber data was retrieved by
scraping channel web page snapshots on the Internet Archive.
Each row represents one channel at a particular date and time. The file contains subscriber information for 172 channel/date-time pairs.
| variable | type | description | example |
|---|---|---|---|
| channel | character | YouTube channel handle including the @ prefix | @AlyssaDanielleYT |
| subscribers | integer | Subscriber count at the time of the snapshot | 21000 |
| datetime | character | Datetime of the snapshot; UTC ISO 8601 for current snapshots and local-time ISO 8601 for historical Wayback Machine snapshots | 2022-12-24T04:08:49 |
series.csvThis file contains Thai GL series names, alternate names, and YouTube URLs. These are taken from the r/GirlsLove subreddit wiki,15 except for the information about the series Blank, which for some reason has been deleted from the wiki. (Its information was added separately.)
Each row represents one series. The file contains information for 76 series.
| variable | type | description | example |
|---|---|---|---|
| series_name | character | Primary series name as listed on the r/GirlsLove subreddit wiki | 23.5 |
| alternate_name | character | Alternative title used for matching (empty if none) | 7 Project: Remember |
| youtube_url | character | YouTube URL for the series (playlist or individual video) | https://youtube.com/playlist?list=PLY8VvVUr35kKIhBj_1y3fwQS6YMgc0bjt |
series_comment_languages.csvThis file contains detected languages for individual comments on official series-related videos; languages were inferred using the Python fastText module.
Each row represents one comment and its detected language. The file contains information for 1,792,248 comments.
| variable | type | description | example |
|---|---|---|---|
| video_id | character | YouTube video ID of the video this comment was posted on | tQPb1Nk8qRI |
| comment_id | character | YouTube comment ID assigned by YouTube | UgwZt7YD-GapXj5k7TB4AaABAg |
| comment_language | character | ISO 639-1 language code detected by fastText for this comment | th |
| comment_language_score | double | fastText confidence score for the detected language (0 to 1) | 0.9996359944343567 |
series_commenter_info.csvThis file contains information on people commenting on official series-related videos. Each row represents one commenter and their associated information.
The file contains information for 347,008 commenters.
| variable | type | description | example |
|---|---|---|---|
| commenter_id | character | Anonymous commenter identifier in the format C followed by a randomly-generated 9-digit number; joins to an unreleased file containing comment author handles | C844365880 |
| commenter_comments | integer | Total number of comments and replies posted by this commenter across all series videos | 233 |
| commenter_top_level | integer | Number of top-level comments (not replies) posted by this commenter | 231 |
| commenter_replies | integer | Number of replies posted by this commenter | 2 |
| commenter_first_date | character | Date of the commenter's earliest comment in YYYY-MM-DD format | 2023-01-08 |
| commenter_last_date | character | Date of the commenter's most recent comment in YYYY-MM-DD format | 2026-01-17 |
| commenter_likes | integer | Total number of likes received across all of this commenter's comments | 5002 |
| commenter_replies_received | integer | Total number of replies received from other commenters on this commenter's top-level comments | 42 |
series_commenter_languages.csvThis file contains detected languages for comment authors commenting on series-related videos. Languages were inferred using the Python fastText module as applied to comments by a given commenter.
In general the language determined for a commenter was the one for which their comments’ language had the highest confidence score as calculated by the fastText module. However, non-English languages were preferred to English if the non-English languages could be determined with a reasonably high degree of confidence (fastText language score of 0.9 or greater). This accounts for the case of commmenters whose native language is not English but who know English and sometimes use it when posting comments instead of their native language.
Each row represents one commenter and their detected language. The file contains information for 324,029 commenters.
| variable | type | description | example |
|---|---|---|---|
| commenter_id | character | Anonymous commenter identifier in the format C followed by a randomly-generated 9-digit number; joins to an unreleased file containing comment author handles | C844365880 |
| commenter_language | character | ISO 639-1 language code inferred as the commenter's native language based on their comment history | th |
| commenter_language_score | double | fastText confidence score associated with the language assignment (0 to 1) | 0.9995250105857849 |
series_thread_languages.csvThis file contains information on the number of distinct languages
used within comment threads for official series-related videos; for more
information on detected languages in series-related video comments see
series_comment_languages.csv.
Each row represents one comment thread and its number of detected language(s). The file contains information for 1,518,214 comment threads.
| variable | type | description | example |
|---|---|---|---|
| thread_id | character | Comment ID of the top-level comment that started this thread | UgyWTza-ODSHJ0QOMZZ4AaABAg |
| video_id | character | YouTube video ID of the video this thread is on | Rjt-4cgSNTM |
| thread_comments | integer | Total number of comments in the thread (top-level comment plus all replies) | 1 |
| thread_commenters | integer | Number of unique commenters in the thread | 1 |
| thread_languages | integer | Number of distinct languages detected across comments in the thread | 1 |
| thread_cross_language_replies | integer | Number of replies whose detected language differs from the top-level comment's language | 0 |
| thread_languages_per_comment | double | Ratio of distinct languages to total comments in the thread | 1.000000 |
| thread_languages_per_commenter | double | Ratio of distinct languages to unique commenters in the thread | 1.000000 |
| thread_cross_language_per_reply | double | Ratio of cross-language replies to total replies in the thread (0 for threads with no replies) | 0.000000 |
series_video_extras.csvThis file contains more information about the videos in
series_video_info.csv, including likes, views, and number
of comments. This information was retrieved using the YouTube API.
Each row represents one video. The file contains information for 3,867 videos.
| variable | type | description | example |
|---|---|---|---|
| video_id | character | YouTube video ID: an 11-character string uniquely identifying the video | UHfgmfD64Zg |
| video_title | character | Video title as set by the producer on YouTube | SUB] 1440 Minutes Part1 |
| video_language | character | Default audio language of the video as reported by the YouTube Data API; BCP 47 language tag | th |
| video_duration | character | Video duration in ISO 8601 duration format | PT9M57S |
| video_view_count | integer | Total view count at the time of retrieval | 1191764 |
| video_like_count | integer | Total like count at the time of retrieval | 11899 |
| video_comment_count | integer | Total public comment count at the time of retrieval | 156 |
series_video_info.csvThis file contains video IDs, titles, and other metadata for Thai live-action series and short series, along with official videos related to those series (e.g., trailers, music videos, etc.). This information was retrieved using the YouTube API.
Each row represents one video. The file contains information for 3,867 videos.
| variable | type | description | example |
|---|---|---|---|
| video_id | character | YouTube video ID: an 11-character string uniquely identifying the video | UHfgmfD64Zg |
| playlist_id | character | YouTube playlist ID from which this video was retrieved | PLhsCXKbbbsR07w5pvlQ7pN3OGFLJ_m8TS |
| video_title | character | Video title as set by the producer on YouTube | SUB] 1440 Minutes Part1 |
| video_published_at | character | UTC datetime when the video was published on YouTube in ISO 8601 format | 2024-11-11T11:00:14Z |
| video_privacy_status | character | Video privacy status as reported by the YouTube Data API; one of: public, unlisted, private | public |
series_video_keywords.csvThis file contains producer-assigned keywords (tags) for the videos
in series_video_info.csv. This information was retrieved
via the YouTube API.
Each row represents one keyword for one video. The file contains information for 77,291 video/keyword combinations.
| variable | type | description | example |
|---|---|---|---|
| video_id | character | YouTube video ID: an 11-character string uniquely identifying the video | 1ke8CPKV9v4 |
| video_keyword | character | One producer-assigned keyword (tag) for the video; one row per video/keyword combination | gl drama |
series_video_subtitles.csvThis file contains producer-provided subtitle languages for the
videos in series_video_info.csv. This information was
retrieved via the YouTube API.
Each row represents one subtitle language for one video. The file contains information for 8,177 video/subtitle language combinations.
| variable | type | description | example |
|---|---|---|---|
| video_id | character | YouTube video ID: an 11-character string uniquely identifying the video | QoI3f44_LuE |
| language_code | character | BCP 47 language tag for the subtitle track as provided by the producer | es-419 |
| language_name | character | Human-readable name of the subtitle language | Spanish (Latin America) |
series_video_types.csvThis file contains classification of the videos in
series_video_info.csv to determine the type of video (e.g.,
“episode” or “trailer”) and the series episode(s) (if any) with which
it’s associated. This information was programmatically inferred from the
video titles and then manually reviewed and edited to correct errors in
classification.
Each row represents one video. The file contains information for 3,867 videos.
| variable | type | description | example |
|---|---|---|---|
| video_id | character | YouTube video ID: an 11-character string uniquely identifying the video | UHfgmfD64Zg |
| video_type | character | Classification of the video; one of: episode, compilation, reaction, clip, trailer, bts, music video, other | episode |
| video_episode | integer | Episode number within the series or season (empty for non-episode types) | 2 |
| video_total_episodes | integer | Total number of episodes in the season (empty if unknown or not applicable) | 6 |
| video_part_num | integer | Part number when an episode is split across multiple videos (1 if not split) | 3 |
| video_total_parts | integer | Total number of parts for this episode (1 if not split) | 4 |
| video_duration_seconds | integer | Video duration in seconds | 597 |
| video_orientation | character | Aspect ratio orientation of the video; one of: landscape, portrait, square | landscape |
| series_name | character | Name of the GL series this video belongs to | 1440 Minutes |
| season | integer | Season number (1 for single-season series) | 2 |
| referenced_video_id | character | Video ID of the episode that secondary content (highlight/reaction/etc.) refers to (empty for episodes) |
short_series.csvThis file contains similar data to series.csv except for
short series (total runtime less than 120 minutes). These are also taken
from the r/GirlsLove subreddit wiki.16
Each row represents one short series. The file contains information for 81 short series.
| variable | type | description | example |
|---|---|---|---|
| series_name | character | Primary short series name as listed on the r/GirlsLove subreddit wiki | 1440 Minutes |
| alternate_name | character | Alternative title used for matching (empty if none) | 21 days Closer Step |
| youtube_url | character | YouTube URL for the series (playlist or individual video) | https://www.youtube.com/playlist?list=PLhsCXKbbbsR07w5pvlQ7pN3OGFLJ_m8TS |
blank_1_1_snapshot_metrics.csv,
gap_1_1_snapshot_metrics.csv,
tlp_1_1_snapshot_metrics.csvThese files contain historical snapshots of metrics for the first videos (episode 1, part 1) of the series Blank, Gap, and The Loyal Pin respectively.
Each row represents one snapshot of video metrics for a given date
and time. The file blank_1_1_snapshot_metrics.csv contains
65 rows. The file gap_1_1_snapshot_metrics.csv contains 67
rows. The file tlp_1_1_snapshot_metrics.csv contains 58
rows.
| variable | type | description | example |
|---|---|---|---|
| video_id | character | YouTube video ID of the video for which snapshots were collected | iZ0uHlR7muw |
| video_snapshot_time | character | Local datetime of the Wayback Machine snapshot in ISO 8601 format (no timezone suffix) | 2024-03-30T13:33:07 |
| video_view_count | integer | View count extracted from the Wayback Machine snapshot of the video page | 1567540 |
| video_like_count | integer | Like count extracted from the Wayback Machine snapshot of the video page | 46000 |
| video_comment_count | integer | Comment count extracted from the Wayback Machine snapshot of the video page | 1200 |
I used the following R environment in doing the analysis above:
## R version 4.6.0 (2026-04-24)
## Platform: aarch64-apple-darwin24.6.0
## Running under: macOS Sequoia 15.7.4
##
## Matrix products: default
## BLAS: /opt/homebrew/Cellar/openblas/0.3.33/lib/libopenblasp-r0.3.33.dylib
## LAPACK: /opt/homebrew/Cellar/r/4.6.0/lib/R/lib/libRlapack.dylib; LAPACK version 3.12.1
##
## locale:
## [1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
##
## time zone: America/New_York
## tzcode source: internal
##
## attached base packages:
## [1] tools stats graphics grDevices utils datasets methods
## [8] base
##
## other attached packages:
## [1] ISOcodes_2026.03.28 gt_1.3.0 lubridate_1.9.5
## [4] forcats_1.0.1 stringr_1.6.0 dplyr_1.2.1
## [7] purrr_1.2.2 readr_2.2.0 tidyr_1.3.2
## [10] tibble_3.3.1 ggplot2_4.0.3 tidyverse_2.0.0
##
## loaded via a namespace (and not attached):
## [1] sass_0.4.10 generics_0.1.4 xml2_1.5.2 stringi_1.8.7
## [5] hms_1.1.4 digest_0.6.39 magrittr_2.0.5 evaluate_1.0.5
## [9] grid_4.6.0 timechange_0.4.0 RColorBrewer_1.1-3 fastmap_1.2.0
## [13] jsonlite_2.0.0 scales_1.4.0 jquerylib_0.1.4 cli_3.6.6
## [17] rlang_1.2.0 crayon_1.5.3 bit64_4.8.0 withr_3.0.2
## [21] cachem_1.1.0 yaml_2.3.12 parallel_4.6.0 tzdb_0.5.0
## [25] vctrs_0.7.3 R6_2.6.1 lifecycle_1.0.5 fs_2.1.0
## [29] bit_4.6.0 vroom_1.7.1 pkgconfig_2.0.3 pillar_1.11.1
## [33] bslib_0.10.0 gtable_0.3.6 glue_1.8.1 xfun_0.57
## [37] tidyselect_1.2.1 rstudioapi_0.18.0 knitr_1.51 farver_2.1.2
## [41] htmltools_0.5.9 rmarkdown_2.31 labeling_0.4.3 compiler_4.6.0
## [45] S7_0.2.2
The source code and data for this analysis can be found in the public code repository https://codeberg.org/frankhecker/yt-gl-fandom.
This document and its source code are available for unrestricted use, distribution and modification under the terms of the Creative Commons CC0 1.0 Universal (CC0 1.0) Public Domain Dedication.17 Stated more simply, you’re free to do whatever you’d like with it.
“GL” (from “girls’ love”) and “Yuri” (from the Japanese word for “lily”) are roughly interchangeable terms referring to works (typically produced in East or Southeast Asia) depicting romantic relationships between women. “Yuri” is a creator and fan-coined term typically used in relation to Japanese media (manga, anime, light novels, visual novels, etc.). “GL” (coined as a parallel term to “BL” or “boys’ love”) is more commonly used in commercial contexts and in connection with works created outside Japan. For the history of the term “Yuri” see Erica Friedman, “Why We Call It ‘Yuri,’” Anime Feminist, August 9, 2017, https://www.animefeminist.com/history-why-call-yuri/.↩︎
Jessica Lau, “14 YouTube metrics you should focus on in 2026,” Zapier website, December 19, 2025, https://zapier.com/blog/youtube-metrics/.↩︎
R Foundation, The R Project for Statistical Computing, https://www.r-project.org/.↩︎
Posit Software, Tidyverse, https://www.tidyverse.org/.↩︎
R. Iannone, J. Cheng, B. Schloerke, S. Haughton, E. Hughes, A. Lauer, R. François, J. Seo, K. Brevoort, and O. Roy, gt: Easily Create Presentation-Ready Display Tables, R package version 1.3.0.9000, https://gt.rstudio.com.↩︎
Christian Buchta and Kurt Hornik, ISOcodes: Selected ISO Codes, https://cran.r-project.org/web/packages/ISOcodes/index.html.↩︎
R Core Team, Tools for Package Development, https://cran.r-project.org/doc/manuals/r-release/packages/tools/refman/tools.html.↩︎
Google, YouTube > Data API, https://developers.google.com/youtube/v3/docs/.↩︎
BuzzVoice, “What Counts as a View on YouTube? Simple Guide,” https://buzzvoice.com/blog/what-counts-as-a-view-on-youtube/, accessed April 18, 2026.↩︎
Lau, “14 YouTube metrics.”↩︎
Thomas Baudinette, Boys Love Media in Thailand: Celebrity, Fans, and Transnational Asian Queer Popular Culture (Bloomsbury Academic, London, 2004), 44–5.↩︎
Megan Sinnott, “The Romance of the Queer: The Sexual and Gender Norms of Tom and Dee in Thailand,” in AsiaPacifiQueer: Rethinking Genders and Sexualities (University of Illinois Press, Urbana and Chicago, 2008), 131–48.↩︎
Facebook, fastText: Library for efficient text classification and representation learning, https://fasttext.cc/.↩︎
Simon Ging, fasttext-numpy2 0.10.4, https://pypi.org/project/fasttext-numpy2/↩︎
r/GirlsLove > Wiki > glseries, Reddit, https://www.reddit.com/r/GirlsLove/wiki/index/glseries/.↩︎
r/GirlsLove > Wiki > shortseries, Reddit, https://www.reddit.com/r/GirlsLove/wiki/index/shortseries/.↩︎
Creative Commons, CC0 1.0 Universal Deed, https://creativecommons.org/publicdomain/zero/1.0/.↩︎