OER·harvester

← Back to the library
arXiv HTML resource

Making AI-Enhanced Videos: Analyzing Generative AI Use Cases in YouTube Content Creation

Generative AI (GenAI) tools enhance social media video creation by streamlining tasks such as scriptwriting, visual and audio generation, and editing. These tools enable the creation of new content, including text, images, audio, and video, with platforms like ChatGPT and MidJourney becoming increasingly popular among YouTube creators. Despite their growing adoption, knowledge of their specific use cases across the …

Licence
OPEN_NC CC-BY-NC-SA-4.0
Authors
Torin Anderson, Shuo Niu
Published
2025-03-05 · arXiv
Language
en
Length
6060 words
Type
narrative text

Cites 22 works

inferred
Open original ↗

Making AI-Enhanced Videos: Analyzing Generative AI Use Cases in YouTube Content Creation

Source: Making AI-Enhanced Videos: Analyzing Generative AI Use Cases in YouTube Content Creation · arXiv Authors: Torin Anderson, Shuo Niu Licence: CC-BY-NC-SA-4.0 — http://creativecommons.org/licenses/by-nc-sa/4.0/

Conference: Extended Abstracts of the CHI Conference on Human Factors in Computing Systems; April 26-May 1, 2025; Yokohama, JapanExtended Abstracts of the CHI Conference on Human Factors in Computing Systems (CHI EA ’25), April 26-May 1, 2025, Yokohama, JapanDOI: 10.1145/3706599.3719991ISBN: 979-8-4007-1395-8/2025/04CCS: Human-centered computing Empirical studies in collaborative and social computingCCS: Human-centered computing Collaborative and social computing theory, concepts and paradigms

Abstract

Generative AI (GenAI) tools enhance social media video creation by streamlining tasks such as scriptwriting, visual and audio generation, and editing. These tools enable the creation of new content, including text, images, audio, and video, with platforms like ChatGPT and MidJourney becoming increasingly popular among YouTube creators. Despite their growing adoption, knowledge of their specific use cases across the video production process remains limited. This study analyzes 274 YouTube how-to videos to explore GenAI’s role in planning, production, editing, and uploading. The findings reveal that YouTubers use GenAI to identify topics, generate scripts, create prompts, and produce visual and audio materials. Additionally, GenAI supports editing tasks like upscaling visuals and reformatting content while also suggesting titles and subtitles. Based on these findings, we discuss future directions for incorporating GenAI to support various video creation tasks.

Keywords:

Generative AI; YouTube; video; content creator

1. Introduction

Generative AI (GenAI) is “artificial intelligence systems that can create new content, such as text, images, audio, or video, rather than just analyzing or acting on existing data” (Gozalo-Brizuela and Garrido-Merchan, 2023). Over the years, the applications of these tools have significantly expanded, including crafting digital content such as creative writing (Lee et al., 2024), short videos (Wang et al., 2024), AI-generated images (Mahdavi Goloujeh et al., 2024), and music composition (Louie et al., 2020). With the emergence of tools like ChatGPT, Sora, MidJourney, and Leonardo.AI, many YouTube content creators have begun incorporating these tools into their video production. On video-sharing platforms (Bartolome and Niu, 2023), creators are leveraging GenAI tools to streamline traditionally time-consuming steps, such as writing scripts or creating visual and audio materials (Hoose and Rosenbohm, 2024; Fancourt et al., 2020). For instance, researchers have observed that YouTubers utilize GenAI tools to create videos on artistic, marketing, knowledge-sharing, and entertainment topics (Lyu et al., 2024). Despite the rapid adoption of GenAI tools, there remains limited understanding of the specific use cases of these tools in video creation.

Recent research on video creation has explored the challenges inherent in common creative practices and the potential solutions offered by AI-driven approaches (Choi et al., 2023; Kim and Kim, 2024). During the Planning Phase, YouTubers often struggle with finding inspiration and selecting relevant topics. In the Performance Phase, creators must dedicate time to recording videos and narrations. Subsequently, the Editing Phase requires them to refine their video materials to enhance the overall viewing experience. Finally, during the Uploading Phase, creators craft video titles and descriptions aimed at optimizing viewer engagement. These tasks are frequently accompanied by challenges such as generating new ideas, fine-tuning video content, and managing the pressure to produce high-quality, engaging material that attracts audiences and garners popularity (Kim and Kim, 2024; Choi et al., 2023). While GenAI has demonstrated potential in addressing these challenges (Lyu et al., 2024), a comprehensive understanding of its use cases within this context remains limited.

To bridge this gap, we conduct a preliminary analysis of YouTube how-to videos. How-to videos feature amateur narrators explaining knowledge or teaching skills (Utz and Wolfers, 2022). These videos exemplify YouTube’s participatory culture, where peers share skills and enable others to learn, thereby advancing collective knowledge within the community (Chau, 2010). Analyzing how-to videos allows us to uncover methods, tips, explanations, descriptions, and conclusions regarding YouTubers’ experiences and knowledge of using GenAI tools (Yang et al., 2023). Our analysis includes the development of a conceptual framework (Figure 1) that illustrates the applications of GenAI in the video creation process. Specifically, we propose a categorization of key GenAI use cases to highlight its roles across various stages of video production, thereby inspiring future designs and the development of GenAI-powered tools to support content creators.

We collected and analyzed 274 videos where creators demonstrated the use cases of GenAI tools in video production. Through thematic analysis, we annotated the use cases of GenAI across the planning, production, editing, and uploading phases. As illustrated in Figure 1, our findings reveal that during the planning phase, YouTubers use GenAI to identify topics and generate video scripts. In the production phase, GenAI is employed to create prompts and produce visual and audio materials. During editing, GenAI tools are used to upscale visuals, resolve video issues, and reformat content. Finally, in the uploading phase, creators rely on GenAI to suggest titles and add subtitles. These applications illustrate how the creator community is leveraging GenAI in practice to streamline video production workflows and reduce the creative labor (Hoose and Rosenbohm, 2024).

Figure 1. A conceptual framework illustrating GenAI use at different phases of video creation.

2. Method

The YouTube videos included in our study were retrieved using the YouTube Data API[1] on March 26, 2024. The search uses the query “How to (edit OR generate OR create OR make OR use) AI (text OR image OR audio OR video OR animation OR content)”, which incorporates multiple operations referencing the use of AI and various types of content. This query was set to search videos posted between September 1, 2023, and February 29, 2024, yielding six months of data. The YouTube search process resulted in a total of 3,854 videos. Subsequently, videos were programmatically excluded if they did not have closed captions, were not in English, or had a duration shorter than 470 seconds or longer than 1,372 seconds (considered outliers in duration). After applying these filters, 1,046 videos remained.

To identify GenAI use cases, we randomly selected 200 videos to analyze overall themes. However, we observed that some videos were not how-to videos (e.g., advertisement or news about GenAI), did not involve GenAI, or were unrelated to GenAI in video creation. To ensure relevance, three researchers manually reviewed all videos using three criteria: (1) the video must demonstrate clear steps for using GenAI tools, (2) the tools featured must have generative AI capabilities (e.g., ChatGPT, MidJourney), excluding those focused solely on clipping or editing, and (3) the final output must be a video. A video was kept if at least two of the three annotators agreed on its inclusion. This process resulted in a final dataset of 274 videos for analysis.

To facilitate annotation, we used ChatGPT to segment video transcripts into small clips. The clip is examined individually to mark GenAI use cases. The prompt to segment videos was: “Split the closed captions into video segments based on coherence between consecutive texts in the closed captions. Each YouTube video segment should include timestamps in the format of ‘HH:MM:SS ’.”</em> This process resulted in a total of 2,829 video clips for all the videos.</p> <p>We conducted a thematic analysis (Vaismoradi et al., 2016) to identify GenAI use cases across the planning, production, editing, and uploading phases of video creation. A total of 150 clips were randomly selected and evenly assigned to three researchers. During the initialization phase, each researcher reviewed the video content and took notes on how GenAI was utilized. To construct use case themes, the researchers compiled all notes and used an affinity diagram to group them around emerging themes. Each identified use case was subsequently categorized into the respective video creation phases. In the rectification phase, two researchers conducted two rounds of annotations for clips of 30 video using the concluded codebook. After each round, the researchers discussed and resolved any disagreements in the annotations.</p> <p>Finally, two researchers annotated all video clips, selecting all applicable use cases for each clip. The annotations across the four dimensions achieved moderate to substantial agreement (Cohen’s kappa can be found in Table 1). To consolidate the annotations, a clip was marked as mentioning a use case only if both researchers selected the use case. Subsequently, the annotations of clips belonging to the same videos were merged to determine whether each video contained a specific use case.</p> <table> <thead> <tr> <th>Stages</th> <th>Planning</th> <th>Production</th> <th>Editing</th> <th>Uploading</th> </tr> </thead> <tbody> <tr> <td>$\kappa$</td> <td>0.64</td> <td>0.64</td> <td>0.60</td> <td>0.51</td> </tr> </tbody> </table> <p><em>Table 1. Cohen’s cappa of annotation.</em></p> <h2 id="3-result">3. Result</h2> <p>In this section, we present the use cases along with example videos and the corresponding number of videos introducing each use case. Figure 2 illustrates the distribution of videos featuring GenAI use cases. We categorize the use cases into four phases, primarily based on (Choi et al., 2023). When classifying, we use the following rules. In the <em>Planning Phase</em>, content is not yet being created; rather, this phase focuses solely on gathering ideas or topics before taking any further actions. The <em>Production</em> and <em>Editing</em> phases are distinguished based on whether the use case involves generating entirely new content or modifying existing material. The <em>Production Phase</em> encompasses the actualization of video materials, meaning the creation of content for the first time. In contrast, the <em>Editing Phase</em> involves utilizing GenAI to modify or update pre-existing content. Finally, the <em>Uploading Phase</em> does not involve altering the content itself but instead focuses on generating supplementary information, such as subtitles or titles.</p> <p><em>Figure 2. The distribution of videos mentioning each GenAI tool use case across the four stages of video creation.</em></p> <h3 id="31-planning-phase">3.1. Planning Phase</h3> <p><strong>Scripting and Storytelling.</strong> A common use case of GenAI in these how-to videos is to create video scripts, as observed in 85 videos (N=85, 31%). These videos often demonstrate the use of GenAI to generate scripts, video narratives, or storylines. For example, 3(a) shows a YouTuber using Google Gemini to create a video script for a laptop advertisement. In this case, Gemini generates narration scripts and suggests ideas for the visual design.</p> <p><strong>Identifying Niches and Topics for Videos.</strong> YouTubers demonstrate the use case of GenAI tools to identify niches or topics for video creation (N=15, 5.5%). They ask GenAI to suggest a list of topics from which they can choose to create a video. For example, 3(b) illustrates a YouTuber using ChatGPT to generate a table of guided meditation topics, which they later use to create a short-form video.</p> <p><img src="/library/84cf3b224aaf/assets/img-01-scripting.png" alt="(a) a. Use Google Gemini to create a script for a laptop ads." /></p> <p><em>(a) a. Use Google Gemini to create a script for a laptop ads.</em></p> <p><img src="/library/84cf3b224aaf/assets/img-02-Niche.png" alt="(b) b. Use ChatGPT to explores ideas for meditation videos" /></p> <p><em>(b) b. Use ChatGPT to explores ideas for meditation videos</em></p> <p><em>(a) a. Use Google Gemini to create a script for a laptop ads.</em></p> <h3 id="32-production-phase">3.2. Production Phase</h3> <p><strong>Refining Prompts with LLM.</strong> A method for obtaining GenAI prompts is by directly asking GenAI tools to refine the prompt (N=16, 5.8%). To improve prompts and generate high-quality AI materials, YouTubers recommend using LLM tools, such as ChatGPT, to create prompts tailored to specific video content, such as image generation or voiceover production. For instance, 4(a) illustrates a YouTuber using ChatGPT to craft detailed prompts for an AI image-generation tool. These prompts include specific scenes and detailed descriptions designed to produce high-quality images suitable for a children’s YouTube video.</p> <p><strong>Exploring Community-Created Prompts.</strong> In how-to videos, YouTubers recommend use and customize the community-created AI prompts (N=10, 3.6%). These videos suggest reviewing successful prompts for AI image or video generation tools to learn how to craft them. For example, 4(b) showcases a YouTuber analyzing an image generated by MidJourney along with its corresponding prompt. The YouTuber highlights the keywords used in the prompt to create ideal AI images.</p> <p><strong>Prompting for Images/Videos.</strong> In our videos, YouTubers commonly showcase how to use GenAI tools to generate AI images and videos (N=167, 60.9%). Creators often use tools such as Leonardo.AI, Midjourney, and Canva to produce images or short video clips, which are video materials to be integrated into their videos. For instance, as shown in 4(c), a YouTuber utilizes Leonardo.AI to create a portrait image of a young, dark-skinned woman. In this case, the YouTuber uses the generated image as an avatar for their video.</p> <p><strong>Animating Static Images to Videos.</strong> To obtain video clips, YouTubers demonstrate the use case of GenAI tools to animate static images into videos (N=49, 17.9%). These videos leverage GenAI tools to transform an image into short-form videos that can used as standalone video content or be combined into a longer video. For instance, 4(d) highlights a YouTuber using Leiapix to create a short video from a cartoon-style image of a group of friends. This short video is then incorporated into a longer video featuring several such short AI video clips.</p> <p><strong>Creating AI Avatars.</strong> To create videos featuring talking heads, YouTubers introduce various tools to generate human-like avatars that can read a video script (N=49, 17.9%). For example, 4(e) shows a YouTuber using KreadoAI to select an avatar from a list of options. The YouTuber chooses a professionally dressed avatar for use in a news video.</p> <p><strong>Suggesting AI Stock Footage.</strong> The GenAI community use video AI tools to look for and select stock footage based on the texts in their video scripts (N=19, 6.9%). These videos utilize visual editing tools, such as Invideo AI, to replace sections of the video with AI-selected stock images and videos. For instance, 4(f) features a YouTuber using Invideo AI to identify various stock footages of almonds to be presented in a video.</p> <p><img src="/library/84cf3b224aaf/assets/img-03-prompt.png" alt="(a) a. Use ChatGPT to create image generation prompts for a fantasy story" /></p> <p><em>(a) a. Use ChatGPT to create image generation prompts for a fantasy story</em></p> <p><img src="/library/84cf3b224aaf/assets/img-04-Community.png" alt="(b) b. Cinemtic samurai still generated through Midjourney" /></p> <p><em>(b) b. Cinemtic samurai still generated through Midjourney</em></p> <p><img src="/library/84cf3b224aaf/assets/img-05-image.png" alt="(c) c. Leonardo.AI image generation of young dark skinned woman" /></p> <p><em>(c) c. Leonardo.AI image generation of young dark skinned woman</em></p> <p><img src="/library/84cf3b224aaf/assets/img-06-animate.png" alt="(d) d. Leiapix transforming image of friends to short form video" /></p> <p><em>(d) d. Leiapix transforming image of friends to short form video</em></p> <p><img src="/library/84cf3b224aaf/assets/img-07-avatar.png" alt="(e) e. KreadoAI avatar creation for news presentation style video" /></p> <p><em>(e) e. KreadoAI avatar creation for news presentation style video</em></p> <p><img src="/library/84cf3b224aaf/assets/img-08-stock.png" alt="(f) f. Invideo AI suggesting generated images of almonds." /></p> <p><em>(f) f. Invideo AI suggesting generated images of almonds.</em></p> <p><img src="/library/84cf3b224aaf/assets/img-09-voiceover.png" alt="(g) g. ElevenLabs voiceover generation of female voice for routine video script" /></p> <p><em>(g) g. ElevenLabs voiceover generation of female voice for routine video script</em></p> <p><img src="/library/84cf3b224aaf/assets/img-10-music.png" alt="(h) h. Suno AI music generation to create a pop song" /></p> <p><em>(h) h. Suno AI music generation to create a pop song</em></p> <p><em>(a) a. Use ChatGPT to create image generation prompts for a fantasy story</em></p> <p><strong>Creating AI Voiceover.</strong> To create soundtracks, YouTubers recommend using AI voiceovers for video narration (N=93, 33.9%). These videos use text-to-speech tools to generate audio that narrates the given text script. For example, 4(g) illustrates a YouTuber using ElevenLabs to produce a female voiceover for a script outlining healthy morning routines.</p> <p><strong>Generating AI BGM/Sound Effects.</strong> GenAI tools are also used to create music/sound effects (N=14, 5.1%). For example, in 4(h), a YouTuber demonstrates using Suno AI to create a pop song based on the YouTuber-provided lyrics.</p> <h3 id="33-editing-phase">3.3. Editing Phase.</h3> <p><strong>Lip-Syncing.</strong> YouTubers also demonstrate how to use GenAI for lip-syncing AI avatars or photos of real persons (N=33.0, 12.0%). These videos show using GenAI tools to sync the avatar’s lips with the speech from an uploaded script. For example, 5(a) shows a YouTuber utilizing Vidnoz AI to create a news-style video with an AI news presenter. Vidnoz automatically lip-syncs the avatar with the uploaded script.</p> <p><strong>Restyling Images/Videos.</strong> GenAI tools are used to restyle images and videos (N=26, 9.5%). The how-to Youtubers utilize image GenAI tools to transform image styles or alter the atmosphere of visual content. For example, 5(b) features a YouTuber using DomoAI to restyle a video, showcasing the conversion of a movie clip into flat color, Japanese, and live anime styles.</p> <p><strong>Increasing Resolution.</strong> The YouTubers that specialize in GenAI how-tos also use GenAI tools to enhance the resolution of videos and images (N=17, 9.5%). For instance, 5(c) shows a YouTuber using ComfyUI to upscale an animated video by improving its resolution.</p> <p><strong>Clipping a Long Video to Short Videos.</strong> GenAI tools are also used to automatically clip long videos and create short-form videos (N=5, 1.8%). These short-form clips can then be uploaded to platforms like TikTok. For example, in 5(d), a YouTuber using Autopod to automatically break up a podcast video. The YouTuber break down the podcast into parts of similar length that can be posted separately. The tool automatically identifies important sections based on a “virality score.”</p> <p><strong>Applying Visual Effects.</strong> Some how-to videos use GenAI tools to add visual effects or modify image backgrounds to better align with the video theme (N=4, 1.5%). These creators upload figures and instruct GenAI tools to alter the backgrounds or apply video filter effects. For instance, 5(e) features a YouTuber using Lut to add an orange tint to a photo of friends.</p> <p><strong>Filling Images/Videos.</strong> YouTubers recommend using GenAI to fill areas of images (N=2, 0.7%). These videos utilize AI visual editing tools to expand or fill empty spaces within an image. For instance, 5(f) shows a YouTuber using Canva to generate an animation-style image and then expand and fill the sides to create a wider picture to fit the video’s aspect ratio.</p> <p><strong>Translating Language.</strong> YouTubers in their how-to videos leverage GenAI tools to translate the languages of their videos (N=8, 2.9%). These videos often feature avatars, and YouTubers aim to convert speech from one language to another. For instance, in 5(g), a YouTuber demonstrates Wondershare Virbo, showing how a translation from English to Chinese works by using a desired script. This newly translated script is automatically lip-synced afterwards.</p> <p><strong>Correcting Speech.</strong> In the how to videos, YouTubers demonstrate the use case of GenAI to correct speech errors in videos (N=2, 0.7%). They upload an audio or video recording and utilize GenAI tools to eliminate pauses in their speech. As shown in 5(h), a YouTuber demonstrates how Descript removes unnecessary script sections. These sections are also seamlessly edited out from the video.</p> <p><img src="/library/84cf3b224aaf/assets/img-11-lip-sync.png" alt="(a) a. Vidnoz AI lip syncing news broadcaster avatar lip’s to audio recording" /></p> <p><em>(a) a. Vidnoz AI lip syncing news broadcaster avatar lip’s to audio recording</em></p> <p><img src="/library/84cf3b224aaf/assets/img-12-restyle.png" alt="(b) b. DomoAI restyling a video into multiple different styles" /></p> <p><em>(b) b. DomoAI restyling a video into multiple different styles</em></p> <p><img src="/library/84cf3b224aaf/assets/img-13-upscale.png" alt="(c) c. ComfyUI upscaling an animated portrait video of a woman" /></p> <p><em>(c) c. ComfyUI upscaling an animated portrait video of a woman</em></p> <p><img src="/library/84cf3b224aaf/assets/img-14-clipping.png" alt="(d) d. Autopod breaking a podcast into shorter clips" /></p> <p><em>(d) d. Autopod breaking a podcast into shorter clips</em></p> <p><img src="/library/84cf3b224aaf/assets/img-15-background.png" alt="(e) e. Lut adding a filter over an image taken by a pool" /></p> <p><em>(e) e. Lut adding a filter over an image taken by a pool</em></p> <p><img src="/library/84cf3b224aaf/assets/img-16-fill.png" alt="(f) f. Canva AI filling an image on the sides" /></p> <p><em>(f) f. Canva AI filling an image on the sides</em></p> <p><img src="/library/84cf3b224aaf/assets/img-17-translate.png" alt="(g) g. Wondershare Virbo translating a script into Chinese" /></p> <p><em>(g) g. Wondershare Virbo translating a script into Chinese</em></p> <p><img src="/library/84cf3b224aaf/assets/img-18-enhance.png" alt="(h) f. Descript cutting unnessary script from a demo style video" /></p> <p><em>(h) f. Descript cutting unnessary script from a demo style video</em></p> <p><em>(a) a. Vidnoz AI lip syncing news broadcaster avatar lip’s to audio recording</em></p> <h3 id="34-uploading-phase">3.4. Uploading Phase</h3> <p><strong>Adding Subtitles.</strong> In the final phase, how-to videos use GenAI to help with video subtitles (N=28, 10.2%). These videos often utilize GenAI to process video content and create captions. For example, 6(a) shows a YouTuber using wave.video to transcribe and automatically add subtitles to a video.</p> <p><strong>Generating Titles.</strong> Some how-to videos also use GenAI tools to suggest video titles (N=6, 2.2%). They use ChatGPT to create video titles or channel names before publishing the videos. For example, 6(b) shows a YouTuber using ChatGPT to generate names for a TikTok account focused on motivational content.</p> <p><img src="/library/84cf3b224aaf/assets/img-19-subtitle.png" alt="(a) a. Using wave.video to transcribe and create subtitles for mindfullness video" /></p> <p><em>(a) a. Using wave.video to transcribe and create subtitles for mindfullness video</em></p> <p><img src="/library/84cf3b224aaf/assets/img-20-name.png" alt="(b) b. Use ChatGPT to generate different names for a motivation Tiktok page" /></p> <p><em>(b) b. Use ChatGPT to generate different names for a motivation Tiktok page</em></p> <p><em>(a) a. Using wave.video to transcribe and create subtitles for mindfullness video</em></p> <h2 id="4-discussion">4. Discussion</h2> <p>Based on our results, the use cases can be summarized within a conceptual framework, as presented in Figure 1. While these use cases were derived from an analysis of YouTube how-to videos on generative AI, the identified stages can be broadly applied to creative processes for video creation on other platforms, such as TikTok and Instagram. In the following sections, we discuss future directions for enhancing and supporting the use of GenAI by video content creators. Based on these GenAI usage patterns, we outline key questions to be considered and examined in HCI research.</p> <h3 id="41-a-support-or-hindrance-to-ideation-and-creativity">4.1. A Support or Hindrance to Ideation and Creativity</h3> <p>When planning video content, YouTubers leverage GenAI to identify topics and generate scripts and storylines. The use of GenAI introduces key considerations regarding its impact on creative labor. Prior research has highlighted that sustaining creative labor is a significant challenge for YouTube content creators (Hoose and Rosenbohm, 2024). In the content creation industry, demonstrating creativity and active participation has traditionally been essential for user engagement (Burgess et al., 2006). Our findings suggest that GenAI can play a role in this process, potentially blurring the boundary between human and AI-generated creativity.</p> <p>The HCI community must critically examine the role of generative AI in ideation and creative tasks, focusing on its support mechanisms, challenges, and strategies for mitigating its limitations. Future research should explore legitimate and organic approaches to integrating GenAI tools in ways that inspire creators while preventing over-reliance on AI, as excessive AI-generated content may undermine originality and limit creativity. Assessing users’ perceptions of GenAI-identified video topics and scripts is essential for developing practical guidelines on effectively incorporating GenAI into scriptwriting and narration, thereby enhancing its role in video creativity. Given GenAI’s tendency to produce repetitive or similar content (Hwang et al., 2023), it is crucial to investigate strategies that enable YouTubers to leverage GenAI effectively while maintaining distinctiveness and engagement.</p> <h3 id="42-prompt-creation-as-a-critical-skill">4.2. Prompt Creation as a Critical Skill</h3> <p>Our analysis of GenAI in the production and editing phases highlights its diverse utility across various types of AI-generated content. YouTubers refine community-shared GenAI prompts and use LLMs to generate high-quality visual and audio materials. These use cases suggest that the design of GenAI tools should consider the need for prompt support and the evolving role of prompts in future user-generated videos.</p> <p>With the growing use of GenAI, prompting skills may become a critical component of content creation. Similar to other skills in video production (Chau, 2010), tips and knowledge on effective prompting may emerge as a new form of expertise exchanged within the content creator community. Reflecting on this trend, there is an opportunity to design scaffolding mechanisms for content creation using GenAI tools. To support video production, designers could integrate GenAI functions into video editing tools, facilitating access to community-shared prompts and leveraging LLM tools to enhance prompt effectiveness. Such designs should ensure that the generated content aligns with the creator’s video concept. Another design opportunity is to support creators with disabilities (Borgos-Rodriguez et al., 2019; Niu et al., 2024). Future research should explore effective GenAI-based support mechanisms that enable creators with diverse disabilities to overcome challenges in producing digital content. For instance, creators experiencing conditions such as anxiety or depression often face barriers to video production (Fancourt et al., 2020). GenAI applications can be designed to assist these creators by streamlining video editing processes or correcting speech glitches (Arriagada and Ibáñez, 2020; Yu et al., 2024).</p> <h3 id="43-originality-and-authenticity-of-multimodal-ai-content">4.3. Originality and Authenticity of Multimodal AI Content</h3> <p>In our data, we noticed the multimodality use of GenAI materials being integrated together. For visuals, GenAI creates AI images, videos, animations, talking avatars, and suggests stock footage. For audio, it generates voiceovers, music, and sound effects. In editing, GenAI upscales content, enhances resolution, applies effects, fills in details, enables lip-syncing, and converts long-form videos into short clips. It also improves audio by correcting speech and translating languages. These use cases suggest that the design of GenAI tools should account for the diversity of styles and the impact on the authenticity of the content.</p> <p>The multimodal content produced by GenAI, encompassing visual and audio elements, raises new research questions regarding the effective use and integration of content generated by different GenAI tools. There is still a lack of practical guidelines on how different AI-generated content affects video outcomes. For example, should creators use an AI avatar or their own face? Should they rely on generative AI to fill or fix images, or should they replace them with AI-generated stock footage? Does using AI voiceovers impact audience engagement? Therefore, it is essential to explore the factors influencing creators’ adoption of various GenAI tools, the specific tasks they use them for, and the perceived value of GenAI-generated content. Additionally, it is critical to examine users’ acceptance and rejection of different AI applications.</p> <p>In the content creation industry, certain tasks have traditionally been time-consuming, such as producing high-quality video visuals, recording talk-to-camera footage, or creating engaging background music. However, it remains unclear whether GenAI-generated content, when prompted or edited by creators, is still considered original. Prior studies indicate that human-created art is often preferred over AI-generated art (Bellaiche et al., 2023). A central question in this context is the originality and authenticity of AI-generated content in representing the creator. While GenAI-generated video and audio content may convey a sense of being “made by AI,” it is essential to assess whether such content leads to a loss of connection with the audience and diminishes organic social interaction within the community.</p> <h3 id="44-visibility-and-transparency-of-genai-generated-content">4.4. Visibility and Transparency of GenAI-Generated Content</h3> <p>Before uploading, YouTubers use GenAI to automatically generate subtitles and create video titles. Adding subtitles is crucial for enhancing the viewer experience (Gernsbacher, 2015), while effective video titles can increase a video’s visibility on social media platforms (Jiang et al., 2014). The use of GenAI for these video completion tasks suggests that future designs could integrate GenAI tools to streamline these processes for creators.</p> <p>On video-sharing platforms, recommendation algorithms play a critical role in determining creators’ visibility (Bartolome and Niu, 2023). Creators are also deeply concerned about their algorithmic visibility on these platforms (Bishop, 2019). When YouTubers adopt AI-generated content to ‘‘improve’’ aspects such as presentation and meta-information (e.g., titles and descriptions), they must consider whether such content may be shadow-banned or demonetized by the platform in accordance with community guidelines regarding AI content<sup class="footnote-ref"><a href="#fn2" id="fnref2">[2]</a></sup>. Researchers should investigate how AI-generated or AI-modified content must be labeled and disclosed, as well as examine the impact of these factors on the algorithm’s ability to promote or demote videos.</p> <h2 id="5-future-work">5. Future Work</h2> <p>The follow-up to this work will focus on two key directions. First, as highlighted by the significant use cases identified in our data, it is essential to examine and evaluate the design of new GenAI tools to support these video creation activities, including scriptwriting, creating voiceovers, and facilitating prompt formation. Additionally, HCI research should explore the practices and acceptance of AI-enhanced videos among creators and viewers to gain a deeper understanding of potential ethical concerns and their impact on the quality of YouTube videos.</p> <h2 id="references">References</h2> <ul> <li>Arturo Arriagada and Francisco Ibáñez. 2020. “You Need At Least One Picture Daily, if Not, You’re Dead”: Content Creators and Platform Evolution in the Social Media Ecology. <em>Social Media + Society</em> 6, 3 (2020), 2056305120944624. <a href="https://doi.org/10.1177/2056305120944624">doi:10.1177/2056305120944624</a> arXiv:https://doi.org/10.1177/2056305120944624</li> <li>Ava Bartolome and Shuo Niu. 2023. A Literature Review of Video-Sharing Platform Research in HCI. In <em>Proceedings of the 2023 CHI Conference on Human Factors in Computing Systems</em> <em>(CHI ’23)</em>. Association for Computing Machinery, New York, NY, USA. <a href="https://doi.org/10.1145/3544548.3581107">doi:10.1145/3544548.3581107</a></li> <li>Lucas Bellaiche, Rohin Shahi, Martin Harry Turpin, Anya Ragnhildstveit, Shawn Sprockett, Nathaniel Barr, Alexander Christensen, and Paul Seli. 2023. Humans versus AI: Whether and why we prefer human-created compared to AI-created artwork - cognitive research: Principles and implications. https://cognitiveresearchjournal.springeropen.com/articles/10.1186/s41235-023-00499-6#citeas</li> <li>Sophie Bishop. 2019. Managing visibility on YouTube through algorithmic gossip. <em>New Media & Society</em> 21, 11-12 (6 2019), 2589–2606. <a href="https://doi.org/10.1177/1461444819854731">doi:10.1177/1461444819854731</a></li> <li>Katya Borgos-Rodriguez, Kathryn E Ringland, and Anne Marie Piper. 2019. MyAutsomeFamilyLife: Analyzing Parents of Children with Developmental Disabilities on YouTube. <em>Proc. ACM Hum.-Comput. Interact.</em> 3, CSCW (11 2019). <a href="https://doi.org/10.1145/3359196">doi:10.1145/3359196</a></li> <li>Jean E Burgess, Marcus Foth, and Helen G Klaebe. 2006. Everyday creativity as civic engagement: A cultural citizenship view of new media. (2006).</li> <li>Clement Chau. 2010. YouTube as a participatory culture. <em>New Directions for Youth Development</em> 2010, 128 (2010), 65–74. <a href="https://doi.org/10.1002/yd.376">doi:10.1002/yd.376</a></li> <li>Yoonseo Choi, Eun Jeong Kang, Min Kyung Lee, and Juho Kim. 2023. Creator-Friendly Algorithms: Behaviors, Challenges, and Design Opportunities in Algorithmic Platforms. In <em>Proceedings of the 2023 CHI Conference on Human Factors in Computing Systems</em> <em>(CHI ’23)</em>. Association for Computing Machinery, New York, NY, USA. <a href="https://doi.org/10.1145/3544548.3581386">doi:10.1145/3544548.3581386</a></li> <li>Daisy Fancourt, Louise Baxter, and Fabiana Lorencatto. 2020. Barriers and enablers to engagement in participatory arts activities amongst individuals with depression and anxiety: Quantitative analyses using a behaviour change framework - BMC Public Health. https://bmcpublichealth.biomedcentral.com/articles/10.1186/s12889-020-8337-1#citeas</li> <li>Morton Ann Gernsbacher. 2015. Video Captions Benefit Everyone. <em>Policy Insights from the Behavioral and Brain Sciences</em> 2, 1 (10 2015), 195–202. <a href="https://doi.org/10.1177/2372732215602130">doi:10.1177/2372732215602130</a></li> <li>Roberto Gozalo-Brizuela and Eduardo C Garrido-Merchan. 2023. ChatGPT is not all you need. A State of the Art Review of large Generative AI models. <em>arXiv preprint arXiv:2301.04655</em> (2023).</li> <li>Fabian Hoose and Sophie Rosenbohm. 2024. Self-representation as platform work: Stories about working as social media content creators. <em>Convergence</em> 30, 1 (2024), 625–641. <a href="https://doi.org/10.1177/13548565231185863">doi:10.1177/13548565231185863</a> arXiv:https://doi.org/10.1177/13548565231185863</li> <li>EunJeong Hwang, Bodhisattwa Prasad Majumder, and Niket Tandon. 2023. Aligning Language Models to User Opinions. arXiv:2305.14929 [cs.CL] https://arxiv.org/abs/2305.14929</li> <li>Lu Jiang, Yajie Miao, Yi Yang, Zhenzhong Lan, and Alexander G Hauptmann. 2014. Viral Video Style: A Closer Look at Viral Videos on YouTube. In <em>Proceedings of International Conference on Multimedia Retrieval</em> <em>(ICMR ’14)</em>. Association for Computing Machinery, New York, NY, USA, 193–200. <a href="https://doi.org/10.1145/2578726.2578754">doi:10.1145/2578726.2578754</a></li> <li>Jini Kim and Hajun Kim. 2024. Unlocking Creator-AI Synergy: Challenges, Requirements, and Design Opportunities in AI-Powered Short-Form Video Production. In <em>Proceedings of the 2024 CHI Conference on Human Factors in Computing Systems</em> <em>(CHI ’24)</em>. Association for Computing Machinery, New York, NY, USA. <a href="https://doi.org/10.1145/3613904.3642476">doi:10.1145/3613904.3642476</a></li> <li>Mina Lee, Katy Ilonka Gero, John Joon Young Chung, Simon Buckingham Shum, Vipul Raheja, Hua Shen, Subhashini Venugopalan, Thiemo Wambsganss, David Zhou, Emad A Alghamdi, Tal August, Avinash Bhat, Madiha Zahrah Choksi, Senjuti Dutta, Jin L C Guo, Md Naimul Hoque, Yewon Kim, Simon Knight, Seyed Parsa Neshaei, Antonette Shibani, Disha Shrivastava, Lila Shroff, Agnia Sergeyuk, Jessi Stark, Sarah Sterman, Sitong Wang, Antoine Bosselut, Daniel Buschek, Joseph Chee Chang, Sherol Chen, Max Kreminski, Joonsuk Park, Roy Pea, Eugenia Ha Rim Rho, Zejiang Shen, and Pao Siangliulue. 2024. A Design Space for Intelligent and Interactive Writing Assistants. In <em>Proceedings of the 2024 CHI Conference on Human Factors in Computing Systems</em> <em>(CHI ’24)</em>. Association for Computing Machinery, New York, NY, USA. <a href="https://doi.org/10.1145/3613904.3642697">doi:10.1145/3613904.3642697</a></li> <li>Ryan Louie, Andy Coenen, Cheng Zhi Huang, Michael Terry, and Carrie J Cai. 2020. Novice-AI Music Co-Creation via AI-Steering Tools for Deep Generative Models. In <em>Proceedings of the 2020 CHI Conference on Human Factors in Computing Systems</em> <em>(CHI ’20)</em>. Association for Computing Machinery, New York, NY, USA, 1–13. <a href="https://doi.org/10.1145/3313831.3376739">doi:10.1145/3313831.3376739</a></li> <li>Yao Lyu, He Zhang, Shuo Niu, and Jie Cai. 2024. A Preliminary Exploration of YouTubers’ Use of Generative-AI in Content Creation. In <em>Extended Abstracts of the 2024 CHI Conference on Human Factors in Computing Systems</em> <em>(CHI EA ’24)</em>. Association for Computing Machinery, New York, NY, USA. <a href="https://doi.org/10.1145/3613905.3651057">doi:10.1145/3613905.3651057</a></li> <li>Atefeh Mahdavi Goloujeh, Anne Sullivan, and Brian Magerko. 2024. Is It AI or Is It Me? Understanding Users’ Prompt Journey with Text-to-Image Generative AI Tools. In <em>Proceedings of the 2024 CHI Conference on Human Factors in Computing Systems</em> <em>(CHI ’24)</em>. Association for Computing Machinery, New York, NY, USA. <a href="https://doi.org/10.1145/3613904.3642861">doi:10.1145/3613904.3642861</a></li> <li>Shuo Niu, Li Liu, and Yali Bian. 2024. Please Understand My Disability: An Analysis of YouTubers’ Discourse on Disability Challenges. 6, CSCW2 (11 2024).</li> <li>Sonja Utz and Lara N Wolfers. 2022. How-to videos on YouTube: the role of the instructor. <em>Information, Communication & Society</em> 25, 7 (5 2022), 959–974. <a href="https://doi.org/10.1080/1369118X.2020.1804984">doi:10.1080/1369118X.2020.1804984</a></li> <li>Mojtaba Vaismoradi, Jacqueline Jones, Hannele Turunen, and Sherrill Snelgrove. 2016. Theme development in qualitative content analysis and thematic analysis. (2016).</li> <li>Sitong Wang, Samia Menon, Tao Long, Keren Henderson, Dingzeyu Li, Kevin Crowston, Mark Hansen, Jeffrey V Nickerson, and Lydia B Chilton. 2024. ReelFramer: Human-AI Co-Creation for News-to-Video Translation. In <em>Proceedings of the 2024 CHI Conference on Human Factors in Computing Systems</em> <em>(CHI ’24)</em>. Association for Computing Machinery, New York, NY, USA. <a href="https://doi.org/10.1145/3613904.3642868">doi:10.1145/3613904.3642868</a></li> <li>Saelyne Yang, Sangkyung Kwak, Juhoon Lee, and Juho Kim. 2023. Beyond Instructions: A Taxonomy of Information Types in How-to Videos. In <em>Proceedings of the 2023 CHI Conference on Human Factors in Computing Systems</em> <em>(CHI ’23)</em>. Association for Computing Machinery, New York, NY, USA. <a href="https://doi.org/10.1145/3544548.3581126">doi:10.1145/3544548.3581126</a></li> <li>Tao Yu, Wei Yang, Junping Xu, and Younghwan Pan. 2024. Barriers to Industry Adoption of AI Video Generation Tools: A Study Based on the Perspectives of Video Production Professionals in China. <em>Applied Sciences</em> 14, 13 (2024). <a href="https://doi.org/10.3390/app14135770">doi:10.3390/app14135770</a></li> </ul> <hr class="footnotes-sep" /> <section class="footnotes"> <ol class="footnotes-list"> <li id="fn1" class="footnote-item"><p>https://developers.google.com/youtube/v3 <a href="#fnref1" class="footnote-backref">↩︎</a></p> </li> <li id="fn2" class="footnote-item"><p>https://blog.youtube/inside-youtube/our-approach-to-responsible-ai-innovation/ <a href="#fnref2" class="footnote-backref">↩︎</a></p> </li> </ol> </section> </article> <div class="source-view-panel record-view" id="record-view-panel" role="tabpanel" aria-labelledby="record-view-tab" data-source-panel="record" hidden> <header class="record-head"> <div> <span class="info-section-kicker">Metadata record</span> <h2>One description, two standard projections</h2> <p>Built from what the sources declared and what the gates observed. Nothing absent has been filled in here. 1 value read out of the text by the enrichment rules and 22 links to or from other resources — a lab's files, the pages it links, the works it cites stand under their elements, marked inferred, and are kept apart in the exports.</p> </div> <span class="badge b-meta">Valid</span> </header> <div class="record-facts"> <dl> <div><dt>Profile</dt> <dd><strong><code>aimpro-oer-profile/1</code></strong> <small>built 2026-10-09</small></dd></div> <div><dt>Content language</dt> <dd><strong>en</strong> <small>declared English</small></dd></div> </dl> <div class="record-downloads"> <span>Export</span> <a class="btn" href="/library/84cf3b224aaf/metadata/dublin-core.json" target="_blank" rel="noopener">Dublin Core</a> <a class="btn" href="/library/84cf3b224aaf/metadata/lom.json" target="_blank" rel="noopener">LOM</a> <a class="btn btn-quiet" href="/library/84cf3b224aaf/metadata/record.json" target="_blank" rel="noopener">Internal record</a> </div> </div> <label class="record-empty-toggle"> <input type="checkbox" data-record-show-empty> Show empty elements </label> <div class="record-switch" role="tablist" aria-label="Metadata scheme"> <button type="button" class="record-switch-tab active" id="record-scheme-dublin-core-tab" role="tab" aria-selected="true" aria-controls="record-scheme-dublin-core" data-record-scheme="dublin-core"> <span class="record-switch-name">Dublin Core</span> <span class="record-switch-count">15<small>/34</small></span> <span class="record-meter"><span style="width:44%"></span></span> <small>DCMI Metadata Terms</small> </button> <button type="button" class="record-switch-tab" id="record-scheme-lom-tab" role="tab" aria-selected="false" aria-controls="record-scheme-lom" data-record-scheme="lom"> <span class="record-switch-name">LOM</span> <span class="record-switch-count">20<small>/45</small></span> <span class="record-meter"><span style="width:44%"></span></span> <small>IEEE 1484.12.1 Learning Object Metadata</small> </button> </div> <div class="record-scheme" id="record-scheme-dublin-core" role="tabpanel" aria-labelledby="record-scheme-dublin-core-tab" data-record-panel="dublin-core"> <p class="metadata-loss"><strong>DCMI Metadata Terms.</strong> Dublin Core has no element that separates the original file from the text extracted out of it, and none for LOM's educational characterisation. Both survive here as provenance statements and in the record itself, not in the projection. <a href="https://www.dublincore.org/specifications/dublin-core/dcmi-terms/" target="_blank" rel="noopener">the standard ↗</a></p> <p class="metadata-loss">The groups below are this library's, for reading. DCMI Terms itself has no categories; each term keeps its standard name.</p> <section class="record-group"> <h3>Identity <span class="record-group-fill"> <span class="record-group-meter" role="img" aria-label="3 of 3 elements filled"> <span class="is-filled" data-tip="dcterms:identifier Identifier — filled"></span><span class="is-filled" data-tip="dcterms:title Title — filled"></span><span class="is-filled" data-tip="dcterms:type Type — filled"></span> </span> <span class="pill">3/3</span> </span> </h3> <dl class="metadata-elements"> <div class="metadata-element"> <dt> <span>Identifier</span> <code>dcterms:identifier</code> <ul class="metadata-source"> <li class="from-derived"> <abbr data-tip="Assigned here — an identifier, or the search string that surfaced the resource. Nothing about the resource itself.">this engine</abbr> <span>resource_id</span> </li> <li class="from-declared"> <abbr data-tip="The source published this in its own metadata. It is kept as written, and nothing here verified it — declared is not the same as true.">source</abbr> <a href="/library/84cf3b224aaf/metadata/record.json" target="_blank" rel="noopener" data-tip="This element has 2 assertions behind it; the record lists each one" >2 assertions</a> </li> </ul> </dt> <dd> <ul class="metadata-values"> <li>tag:aim-pro.eu,2026:oer/84cf3b224aaf</li><li>https://arxiv.org/abs/2503.03134</li><li>arxiv:2503.03134</li><li>doi:10.1145/3706599.3719991</li> </ul> <p class="metadata-note">This engine's id, the source URI, and any persistent identifier the source published.</p> </dd> </div> <div class="metadata-element"> <dt> <span>Title</span> <code>dcterms:title</code> <ul class="metadata-source"> <li class="from-declared"> <abbr data-tip="The source published this in its own metadata. It is kept as written, and nothing here verified it — declared is not the same as true.">source</abbr> <a href="/library/84cf3b224aaf/metadata/record.json" target="_blank" rel="noopener" data-tip="Inspect the assertion this was read from: resource/title" >resource/title</a> </li> </ul> </dt> <dd> <ul class="metadata-values"> <li>Making AI-Enhanced Videos: Analyzing Generative AI Use Cases in YouTube Content Creation</li> </ul> <p class="metadata-note">The title of this resource, not of the record or repository it came from.</p> </dd> </div> <div class="metadata-element"> <dt> <span>Type</span> <code>dcterms:type</code> <ul class="metadata-source"> <li class="from-declared"> <abbr data-tip="The source published this in its own metadata. It is kept as written, and nothing here verified it — declared is not the same as true.">source</abbr> <a href="/library/84cf3b224aaf/metadata/record.json" target="_blank" rel="noopener" data-tip="Inspect the assertion this was read from: resource" >resource</a> </li> </ul> </dt> <dd> <ul class="metadata-values"> <li>dcmitype:Text</li><li>preprint</li> </ul> <p class="metadata-note">A DCMI Type term for the form held, plus the source's own genre label as declared.</p> </dd> </div> </dl> </section> <section class="record-group"> <h3>Responsibility <span class="record-group-fill"> <span class="record-group-meter" role="img" aria-label="1 of 3 elements filled"> <span class="is-filled" data-tip="dcterms:creator Creator — filled"></span><span class="is-none-found" data-tip="dcterms:contributor Contributor — none found — the source did not declare it"></span><span class="is-none-found" data-tip="dcterms:publisher Publisher — none found — the source did not declare it"></span> </span> <span class="pill">1/3</span> </span> </h3> <dl class="metadata-elements"> <div class="metadata-element"> <dt> <span>Creator</span> <code>dcterms:creator</code> <ul class="metadata-source"> <li class="from-declared"> <abbr data-tip="The source published this in its own metadata. It is kept as written, and nothing here verified it — declared is not the same as true.">source</abbr> <a href="/library/84cf3b224aaf/metadata/record.json" target="_blank" rel="noopener" data-tip="This element has 2 assertions behind it; the record lists each one" >2 assertions</a> </li> </ul> </dt> <dd> <ul class="metadata-values"> <li>Torin Anderson</li><li>Shuo Niu</li> </ul> <p class="metadata-note">Only agents the source named as creators. A repository owner is not made an author by default.</p> </dd> </div> <div class="metadata-element metadata-element-empty"> <dt> <span>Contributor</span> <code>dcterms:contributor</code> <ul class="metadata-source"> <li class="from-declared"> <abbr data-tip="The source published this in its own metadata. It is kept as written, and nothing here verified it — declared is not the same as true.">source</abbr> <a href="/library/84cf3b224aaf/metadata/record.json" target="_blank" rel="noopener" data-tip="This element has 2 assertions behind it; the record lists each one" >2 assertions</a> </li> </ul> </dt> <dd> <p class="metadata-absent metadata-absent-none-found">none found — the source did not declare it</p> <p class="metadata-note">Everyone else named, with the role as declared and the scope they were declared at.</p> </dd> </div> <div class="metadata-element metadata-element-empty"> <dt> <span>Publisher</span> <code>dcterms:publisher</code> </dt> <dd> <p class="metadata-absent metadata-absent-none-found">none found — the source did not declare it</p> <p class="metadata-note">Only when the source names a publisher of the work. The platform it was collected from is recorded as provenance instead.</p> </dd> </div> </dl> </section> <section class="record-group"> <h3>Content <span class="record-group-fill"> <span class="record-group-meter" role="img" aria-label="3 of 5 elements filled"> <span class="is-filled" data-tip="dcterms:description Description — filled"></span><span class="is-filled" data-tip="dcterms:subject Subject — filled"></span><span class="is-filled" data-tip="dcterms:language Language — filled"></span><span class="is-none-found" data-tip="dcterms:audience Audience — none found — the source did not declare it"></span><span class="is-none-found" data-tip="dcterms:educationLevel Education level — none found — the source did not declare it"></span> </span> <span class="pill">3/5</span> </span> </h3> <dl class="metadata-elements"> <div class="metadata-element"> <dt> <span>Description</span> <code>dcterms:description</code> <ul class="metadata-source"> <li class="from-declared"> <abbr data-tip="The source published this in its own metadata. It is kept as written, and nothing here verified it — declared is not the same as true.">source</abbr> <a href="/library/84cf3b224aaf/metadata/record.json" target="_blank" rel="noopener" data-tip="Inspect the assertion this was read from: resource/summary" >resource/summary</a> </li> </ul> </dt> <dd> <ul class="metadata-values"> <li>Generative AI (GenAI) tools enhance social media video creation by streamlining tasks such as scriptwriting, visual and audio generation, and editing. These tools enable the creation of new content, including text, images, audio, and video, with platforms like ChatGPT and MidJourney becoming increasingly popular among YouTube creators. Despite their growing adoption, knowledge of their specific use cases across the video production process remains limited. This study analyzes 274 YouTube how-to videos to explore GenAI's role in planning, production, editing, and uploading. The findings reveal that YouTubers use GenAI to identify topics, generate scripts, create prompts, and produce visual and audio materials. Additionally, GenAI supports editing tasks like upscaling visuals and reformatting content while also suggesting titles and subtitles. Based on these findings, we discuss future directions for incorporating GenAI to support various video creation tasks.</li> </ul> <p class="metadata-note">The abstract, and the depositor's additional notes after it when the source has a field for them.</p> </dd> </div> <div class="metadata-element"> <dt> <span>Subject</span> <code>dcterms:subject</code> <ul class="metadata-source"> <li class="from-declared"> <abbr data-tip="The source published this in its own metadata. It is kept as written, and nothing here verified it — declared is not the same as true.">source</abbr> <a href="/library/84cf3b224aaf/metadata/record.json" target="_blank" rel="noopener" data-tip="Inspect the assertion this was read from: resource/categories/0" >resource/categories/0</a> </li> </ul> </dt> <dd> <ul class="metadata-values metadata-terms"> <li>cs.HC (arxiv)</li> </ul> <p class="metadata-note">Declared keywords and taxonomy terms, each carrying its scheme.</p> </dd> </div> <div class="metadata-element"> <dt> <span>Language</span> <code>dcterms:language</code> <ul class="metadata-source"> <li class="from-observed"> <abbr data-tip="Checked during the harvest that the resource is in English, from the declared language or the converted text.">language gate</abbr> <i data-tip="The source's metadata named the language, and the gate took that at its word instead of measuring the text.">read the declared field</i> </li> </ul> </dt> <dd> <ul class="metadata-values"> <li>en</li> </ul> <p class="metadata-note">The language of the content as the language gate read it.</p> </dd> </div> <div class="metadata-element metadata-element-empty"> <dt> <span>Audience</span> <code>dcterms:audience</code> <ul class="metadata-source"> <li class="from-derived"> <abbr data-tip="Mapped from the type the source declared, through the table in the exporter. Only mappings that are a reading of what the declared term means are made; the rest are reported as unmapped.">mapped</abbr> <span>learning_resource_type/preprint</span> </li> </ul> </dt> <dd> <p class="metadata-absent metadata-absent-none-found">none found — the source did not declare it</p> <p class="metadata-note">Imported when the source declares an intended audience. Never inferred.</p> </dd> </div> <div class="metadata-element metadata-element-empty"> <dt> <span>Education level</span> <code>dcterms:educationLevel</code> <ul class="metadata-source"> <li class="from-derived"> <abbr data-tip="Mapped from the type the source declared, through the table in the exporter. Only mappings that are a reading of what the declared term means are made; the rest are reported as unmapped.">mapped</abbr> <span>learning_resource_type/preprint</span> </li> </ul> </dt> <dd> <p class="metadata-absent metadata-absent-none-found">none found — the source did not declare it</p> <p class="metadata-note">Imported when the source declares an educational context.</p> </dd> </div> </dl> </section> <section class="record-group"> <h3>Rights <span class="record-group-fill"> <span class="record-group-meter" role="img" aria-label="3 of 4 elements filled"> <span class="is-filled" data-tip="dcterms:license Licence — filled"></span><span class="is-filled" data-tip="dcterms:rights Rights — filled"></span><span class="is-none-found" data-tip="dcterms:rightsHolder Rights holder — none found — the source did not declare it"></span><span class="is-filled" data-tip="dcterms:accessRights Access rights — filled"></span> </span> <span class="pill">3/4</span> </span> </h3> <dl class="metadata-elements"> <div class="metadata-element"> <dt> <span>Licence</span> <code>dcterms:license</code> <ul class="metadata-source"> <li class="from-observed"> <abbr data-tip="Decided during the harvest from the licence the source declared, before any content was downloaded. Anything it could not establish as open was refused.">licence gate</abbr> <a href="https://oaipmh.arxiv.org/oai?verb=GetRecord&identifier=oai:arXiv.org:2503.03134&metadataPrefix=arXiv" target="_blank" rel="noopener" data-tip="Inspect the assertion this was read from: arXiv:arXiv/arXiv:license" >arXiv:arXiv/arXiv:license</a> </li> </ul> </dt> <dd> <ul class="metadata-values"> <li>http://creativecommons.org/licenses/by-nc-sa/4.0/</li> </ul> <p class="metadata-note">The licence document, as a URI where the gate resolved one.</p> </dd> </div> <div class="metadata-element"> <dt> <span>Rights</span> <code>dcterms:rights</code> <ul class="metadata-source"> <li class="from-observed"> <abbr data-tip="Decided during the harvest from the licence the source declared, before any content was downloaded. Anything it could not establish as open was refused.">licence gate</abbr> <a href="https://oaipmh.arxiv.org/oai?verb=GetRecord&identifier=oai:arXiv.org:2503.03134&metadataPrefix=arXiv" target="_blank" rel="noopener" data-tip="Inspect the assertion this was read from: arXiv:arXiv/arXiv:license" >arXiv:arXiv/arXiv:license</a> </li> </ul> </dt> <dd> <ul class="metadata-values"> <li>CC-BY-NC-SA-4.0 — assessed as OPEN_NC by the harvester's licence gate. Conditions: attribution required, non-commercial use only, adaptations must carry the same licence. open but Non-Commercial — SME/commercial reuse needs care</li> </ul> <p class="metadata-note">The verdict and the conditions, in words.</p> </dd> </div> <div class="metadata-element metadata-element-empty"> <dt> <span>Rights holder</span> <code>dcterms:rightsHolder</code> </dt> <dd> <p class="metadata-absent metadata-absent-none-found">none found — the source did not declare it</p> <p class="metadata-note">Only when named at source.</p> </dd> </div> <div class="metadata-element"> <dt> <span>Access rights</span> <code>dcterms:accessRights</code> <ul class="metadata-source"> <li class="from-declared"> <abbr data-tip="The source published this in its own metadata. It is kept as written, and nothing here verified it — declared is not the same as true.">source</abbr> <a href="/library/84cf3b224aaf/metadata/record.json" target="_blank" rel="noopener" data-tip="Inspect the assertion this was read from: resource" >resource</a> </li> </ul> </dt> <dd> <ul class="metadata-values"> <li>open</li> </ul> <p class="metadata-note">The access condition the source declared. Not the licence.</p> </dd> </div> </dl> </section> <section class="record-group"> <h3>Form and dates <span class="record-group-fill"> <span class="record-group-meter" role="img" aria-label="4 of 10 elements filled"> <span class="is-filled" data-tip="dcterms:format Format — filled"></span><span class="is-filled" data-tip="dcterms:extent Extent — filled"></span><span class="is-filled" data-tip="dcterms:issued Issued — filled"></span><span class="is-none-found" data-tip="dcterms:modified Modified — none found — the source did not declare it"></span><span class="is-none-found" data-tip="dcterms:created Created — none found — the source did not declare it"></span><span class="is-none-found" data-tip="dcterms:dateAccepted Accepted — none found — the source did not declare it"></span><span class="is-none-found" data-tip="dcterms:dateSubmitted Submitted — none found — the source did not declare it"></span><span class="is-none-found" data-tip="dcterms:available Available — none found — the source did not declare it"></span><span class="is-none-found" data-tip="dcterms:valid Valid — none found — the source did not declare it"></span><span class="is-filled" data-tip="dcterms:bibliographicCitation Bibliographic citation — filled"></span> </span> <span class="pill">4/10</span> </span> </h3> <dl class="metadata-elements"> <div class="metadata-element"> <dt> <span>Format</span> <code>dcterms:format</code> <ul class="metadata-source"> <li class="from-derived"> <abbr data-tip="Recorded while turning the original into Markdown: the format it came from and the converter that read it.">conversion</abbr> <span>latexml-html</span> </li> </ul> </dt> <dd> <ul class="metadata-values"> <li>text/markdown</li> </ul> <p class="metadata-note">One value per form held — the original and the extracted text.</p> </dd> </div> <div class="metadata-element"> <dt> <span>Extent</span> <code>dcterms:extent</code> <ul class="metadata-source"> <li class="from-derived"> <abbr data-tip="Recorded while turning the original into Markdown: the format it came from and the converter that read it.">conversion</abbr> <span>latexml-html</span> </li> </ul> </dt> <dd> <ul class="metadata-values"> <li>39069 bytes (extracted text)</li> </ul> <p class="metadata-note">Sizes in bytes, each saying which form it measures.</p> </dd> </div> <div class="metadata-element"> <dt> <span>Issued</span> <code>dcterms:issued</code> <ul class="metadata-source"> <li class="from-declared"> <abbr data-tip="The source published this in its own metadata. It is kept as written, and nothing here verified it — declared is not the same as true.">source</abbr> <a href="/library/84cf3b224aaf/metadata/record.json" target="_blank" rel="noopener" data-tip="Inspect the assertion this was read from: resource" >resource</a> </li> </ul> </dt> <dd> <ul class="metadata-values"> <li>2025-03-05</li> </ul> <p class="metadata-note">When the resource was published. Not when it was collected.</p> </dd> </div> <div class="metadata-element metadata-element-empty"> <dt> <span>Modified</span> <code>dcterms:modified</code> <ul class="metadata-source"> <li class="from-declared"> <abbr data-tip="The source published this in its own metadata. It is kept as written, and nothing here verified it — declared is not the same as true.">source</abbr> <a href="/library/84cf3b224aaf/metadata/record.json" target="_blank" rel="noopener" data-tip="Inspect the assertion this was read from: resource" >resource</a> </li> </ul> </dt> <dd> <p class="metadata-absent metadata-absent-none-found">none found — the source did not declare it</p> <p class="metadata-note">When the source's own record was last changed.</p> </dd> </div> <div class="metadata-element metadata-element-empty"> <dt> <span>Created</span> <code>dcterms:created</code> <ul class="metadata-source"> <li class="from-declared"> <abbr data-tip="The source published this in its own metadata. It is kept as written, and nothing here verified it — declared is not the same as true.">source</abbr> <a href="/library/84cf3b224aaf/metadata/record.json" target="_blank" rel="noopener" data-tip="Inspect the assertion this was read from: resource" >resource</a> </li> </ul> </dt> <dd> <p class="metadata-absent metadata-absent-none-found">none found — the source did not declare it</p> </dd> </div> <div class="metadata-element metadata-element-empty"> <dt> <span>Accepted</span> <code>dcterms:dateAccepted</code> <ul class="metadata-source"> <li class="from-declared"> <abbr data-tip="The source published this in its own metadata. It is kept as written, and nothing here verified it — declared is not the same as true.">source</abbr> <a href="/library/84cf3b224aaf/metadata/record.json" target="_blank" rel="noopener" data-tip="Inspect the assertion this was read from: resource" >resource</a> </li> </ul> </dt> <dd> <p class="metadata-absent metadata-absent-none-found">none found — the source did not declare it</p> <p class="metadata-note">When a publisher accepted the work, where the source records it.</p> </dd> </div> <div class="metadata-element metadata-element-empty"> <dt> <span>Submitted</span> <code>dcterms:dateSubmitted</code> <ul class="metadata-source"> <li class="from-declared"> <abbr data-tip="The source published this in its own metadata. It is kept as written, and nothing here verified it — declared is not the same as true.">source</abbr> <a href="/library/84cf3b224aaf/metadata/record.json" target="_blank" rel="noopener" data-tip="Inspect the assertion this was read from: resource" >resource</a> </li> </ul> </dt> <dd> <p class="metadata-absent metadata-absent-none-found">none found — the source did not declare it</p> <p class="metadata-note">When the work was submitted, where the source records it.</p> </dd> </div> <div class="metadata-element metadata-element-empty"> <dt> <span>Available</span> <code>dcterms:available</code> <ul class="metadata-source"> <li class="from-declared"> <abbr data-tip="The source published this in its own metadata. It is kept as written, and nothing here verified it — declared is not the same as true.">source</abbr> <a href="/library/84cf3b224aaf/metadata/record.json" target="_blank" rel="noopener" data-tip="Inspect the assertion this was read from: resource" >resource</a> </li> </ul> </dt> <dd> <p class="metadata-absent metadata-absent-none-found">none found — the source did not declare it</p> </dd> </div> <div class="metadata-element metadata-element-empty"> <dt> <span>Valid</span> <code>dcterms:valid</code> <ul class="metadata-source"> <li class="from-declared"> <abbr data-tip="The source published this in its own metadata. It is kept as written, and nothing here verified it — declared is not the same as true.">source</abbr> <a href="/library/84cf3b224aaf/metadata/record.json" target="_blank" rel="noopener" data-tip="Inspect the assertion this was read from: resource" >resource</a> </li> </ul> </dt> <dd> <p class="metadata-absent metadata-absent-none-found">none found — the source did not declare it</p> </dd> </div> <div class="metadata-element"> <dt> <span>Bibliographic citation</span> <code>dcterms:bibliographicCitation</code> <ul class="metadata-source"> <li class="from-declared"> <abbr data-tip="The source published this in its own metadata. It is kept as written, and nothing here verified it — declared is not the same as true.">source</abbr> <a href="/library/84cf3b224aaf/metadata/record.json" target="_blank" rel="noopener" data-tip="Inspect the assertion this was read from: resource/journal_ref" >resource/journal_ref</a> </li> </ul> </dt> <dd> <ul class="metadata-values"> <li>Extended Abstracts of the CHI Conference on Human Factors in Computing Systems (CHI EA 2025)</li> </ul> <p class="metadata-note">Where the work was published, in the source's own words: a journal with its volume and pages, a conference, an imprint.</p> </dd> </div> </dl> </section> <section class="record-group"> <h3>Relations and custody <span class="record-group-fill"> <span class="record-group-meter" role="img" aria-label="1 of 9 elements filled"> <span class="is-none-found" data-tip="dcterms:isPartOf Is part of — none found — the source did not declare it"></span><span class="is-none-found" data-tip="dcterms:hasPart Has part — none found — the source did not declare it"></span><span class="is-none-found" data-tip="dcterms:isVersionOf Is version of — none found — the source did not declare it"></span><span class="is-none-found" data-tip="dcterms:hasVersion Has version — none found — the source did not declare it"></span><span class="is-inferred" data-tip="dcterms:references References — inferred, not declared"></span><span class="is-none-found" data-tip="dcterms:isReferencedBy Is referenced by — none found — the source did not declare it"></span><span class="is-none-found" data-tip="dcterms:requires Requires — none found — the source did not declare it"></span><span class="is-none-found" data-tip="dcterms:isRequiredBy Is required by — none found — the source did not declare it"></span><span class="is-filled" data-tip="dcterms:provenance Provenance — filled"></span> </span> <span class="pill">1/9</span> </span> </h3> <dl class="metadata-elements"> <div class="metadata-element metadata-element-empty"> <dt> <span>Is part of</span> <code>dcterms:isPartOf</code> </dt> <dd> <p class="metadata-absent metadata-absent-none-found">none found — the source did not declare it</p> <p class="metadata-note">The repository, book or record this resource was found inside.</p> </dd> </div> <div class="metadata-element metadata-element-empty"> <dt> <span>Has part</span> <code>dcterms:hasPart</code> </dt> <dd> <p class="metadata-absent metadata-absent-none-found">none found — the source did not declare it</p> <p class="metadata-note">What this resource is made of, when the source lists its parts.</p> </dd> </div> <div class="metadata-element metadata-element-empty"> <dt> <span>Is version of</span> <code>dcterms:isVersionOf</code> </dt> <dd> <p class="metadata-absent metadata-absent-none-found">none found — the source did not declare it</p> </dd> </div> <div class="metadata-element metadata-element-empty"> <dt> <span>Has version</span> <code>dcterms:hasVersion</code> </dt> <dd> <p class="metadata-absent metadata-absent-none-found">none found — the source did not declare it</p> </dd> </div> <div class="metadata-element"> <dt> <span>References</span> <code>dcterms:references</code> <ul class="metadata-source"> <li class="from-inferred"> <abbr data-tip="Nobody declared this. The component rules drew it from the repository: the folder the file sits in, or the line of the lab's text that names it, which is said beside it. Rule citation, version links/1.">inferred</abbr> <i>read its reference list, line 225</i> <span>citation</span> </li> </ul> </dt> <dd> <ul class="metadata-values metadata-inferred"> <li>doi:10.1177/2056305120944624</li><li>doi:10.1145/3544548.3581107</li><li>doi:10.1186/s41235-023-00499-6#citeas</li><li>doi:10.1177/1461444819854731</li><li>doi:10.1145/3359196</li><li>doi:10.1002/yd.376</li><li>doi:10.1145/3544548.3581386</li><li>doi:10.1186/s12889-020-8337-1#citeas</li><li>doi:10.1177/2372732215602130</li><li>arXiv:2301.04655</li><li>doi:10.1177/13548565231185863</li><li>arXiv:2305.14929</li><li>and 10 more, every one of them in the export</li> </ul> <p class="metadata-note">Works this one cites, when the source declares them as relations. What its text links to and its reference list cites is inferred, and stands under it apart.</p> </dd> </div> <div class="metadata-element metadata-element-empty"> <dt> <span>Is referenced by</span> <code>dcterms:isReferencedBy</code> </dt> <dd> <p class="metadata-absent metadata-absent-none-found">none found — the source did not declare it</p> <p class="metadata-note">What links to or cites this one, when a source declares it; inferred from the texts held otherwise, and set apart.</p> </dd> </div> <div class="metadata-element metadata-element-empty"> <dt> <span>Requires</span> <code>dcterms:requires</code> </dt> <dd> <p class="metadata-absent metadata-absent-none-found">none found — the source did not declare it</p> <p class="metadata-note">What this resource needs in order to be used, when a source declares it. The files a lab works on are inferred, and stand under it apart.</p> </dd> </div> <div class="metadata-element metadata-element-empty"> <dt> <span>Is required by</span> <code>dcterms:isRequiredBy</code> </dt> <dd> <p class="metadata-absent metadata-absent-none-found">none found — the source did not declare it</p> <p class="metadata-note">What needs this resource, when a source declares it. The lab a component belongs to is inferred, and stands under it apart.</p> </dd> </div> <div class="metadata-element"> <dt> <span>Provenance</span> <code>dcterms:provenance</code> <ul class="metadata-source"> <li class="from-derived"> <abbr data-tip="Assigned here — an identifier, or the search string that surfaced the resource. Nothing about the resource itself.">this engine</abbr> <span>source</span> </li> <li class="from-derived"> <abbr data-tip="Recorded while turning the original into Markdown: the format it came from and the converter that read it.">conversion</abbr> <span>latexml-html</span> </li> </ul> </dt> <dd> <ul class="metadata-values"> <li>Retrieved from arXiv on 2026-10-09 in response to the search string “(all:"artificial intelligence" OR all:"machine learning" OR all:"generative AI" OR all:"deep learning" OR all:"reinforcement learning" OR all:"large language model") AND (all:"AI concepts" OR all:"types of AI" OR all:"AI fundamentals" OR all:"recognizing AI" OR all:"recognising AI" OR all:"general versus narrow AI" OR all:"narrow AI" OR all:"general AI" OR all:"machine intelligence" OR all:"AI strengths and weaknesses" OR all:"traditional software" OR all:"rule-based systems" OR all:"introduction to AI" OR all:"introduction to artificial intelligence" OR all:"artificial intelligence introduction" OR all:"AI primer" OR all:"foundations of artificial intelligence" OR all:"overview of AI" OR all:"understanding AI" OR all:"history of AI" OR all:"AI essentials" OR all:"AI terminology" OR all:"metaphors for AI" OR all:"AI fundamental concepts" OR all:"AI key concepts" OR all:"philosophy of AI" OR all:"critical AI literacy")”. arXiv served the resource and is not asserted to be its publisher or author.</li><li>Text extracted from latexml-html to Markdown by arxiv-html; the original is retained unchanged beside it.</li> </ul> <p class="metadata-note">Where it was collected from, what was converted, and what container it came out of — the custody statements that would otherwise be mistaken for authorship.</p> </dd> </div> </dl> </section> </div> <div class="record-scheme" id="record-scheme-lom" role="tabpanel" aria-labelledby="record-scheme-lom-tab" data-record-panel="lom" hidden> <p class="metadata-loss"><strong>IEEE 1484.12.1 Learning Object Metadata.</strong> LOM has no element for an SPDX identifier or a licence URI, so both are written into 6.3 Rights.Description. Flattening this record into simple Dublin Core would lose more again, which is why the two projections exist side by side rather than one being generated from the other. <a href="https://www.imsglobal.org/metadata/index.html" target="_blank" rel="noopener">the standard ↗</a></p> <section class="record-group"> <h3>1 General <span class="record-group-fill"> <span class="record-group-meter" role="img" aria-label="5 of 8 elements filled"> <span class="is-filled" data-tip="1.1 Identifier — filled"></span><span class="is-filled" data-tip="1.2 Title — filled"></span><span class="is-filled" data-tip="1.3 Language — filled"></span><span class="is-filled" data-tip="1.4 Description — filled"></span><span class="is-filled" data-tip="1.5 Keyword — filled"></span><span class="is-not-collected" data-tip="1.6 Coverage — not collected — this library does not fill it"></span><span class="is-not-collected" data-tip="1.7 Structure — not collected — this library does not fill it"></span><span class="is-not-collected" data-tip="1.8 Aggregation level — not collected — this library does not fill it"></span> </span> <span class="pill">5/8</span> </span> </h3> <dl class="metadata-elements"> <div class="metadata-element"> <dt> <span>Identifier</span> <code>1.1</code> <ul class="metadata-source"> <li class="from-derived"> <abbr data-tip="Assigned here — an identifier, or the search string that surfaced the resource. Nothing about the resource itself.">this engine</abbr> <span>resource_id</span> </li> <li class="from-declared"> <abbr data-tip="The source published this in its own metadata. It is kept as written, and nothing here verified it — declared is not the same as true.">source</abbr> <a href="/library/84cf3b224aaf/metadata/record.json" target="_blank" rel="noopener" data-tip="This element has 2 assertions behind it; the record lists each one" >2 assertions</a> </li> </ul> </dt> <dd> <ul class="metadata-values"> <li>URI: tag:aim-pro.eu,2026:oer/84cf3b224aaf</li><li>URI: https://arxiv.org/abs/2503.03134</li><li>ARXIV: 2503.03134</li><li>DOI: 10.1145/3706599.3719991</li> </ul> <p class="metadata-note">This engine's identifier for the resource, the source URI, and any persistent identifier the source published.</p> </dd> </div> <div class="metadata-element"> <dt> <span>Title</span> <code>1.2</code> <ul class="metadata-source"> <li class="from-declared"> <abbr data-tip="The source published this in its own metadata. It is kept as written, and nothing here verified it — declared is not the same as true.">source</abbr> <a href="/library/84cf3b224aaf/metadata/record.json" target="_blank" rel="noopener" data-tip="Inspect the assertion this was read from: resource/title" >resource/title</a> </li> </ul> </dt> <dd> <ul class="metadata-values"> <li>Making AI-Enhanced Videos: Analyzing Generative AI Use Cases in YouTube Content Creation</li> </ul> </dd> </div> <div class="metadata-element"> <dt> <span>Language</span> <code>1.3</code> <ul class="metadata-source"> <li class="from-observed"> <abbr data-tip="Checked during the harvest that the resource is in English, from the declared language or the converted text.">language gate</abbr> <i data-tip="The source's metadata named the language, and the gate took that at its word instead of measuring the text.">read the declared field</i> </li> </ul> </dt> <dd> <ul class="metadata-values"> <li>en</li> </ul> <p class="metadata-note">The language of the content, as the language gate read it off the converted text. The language the source declared is kept separately.</p> </dd> </div> <div class="metadata-element"> <dt> <span>Description</span> <code>1.4</code> <ul class="metadata-source"> <li class="from-declared"> <abbr data-tip="The source published this in its own metadata. It is kept as written, and nothing here verified it — declared is not the same as true.">source</abbr> <a href="/library/84cf3b224aaf/metadata/record.json" target="_blank" rel="noopener" data-tip="Inspect the assertion this was read from: resource/summary" >resource/summary</a> </li> </ul> </dt> <dd> <ul class="metadata-values"> <li>Generative AI (GenAI) tools enhance social media video creation by streamlining tasks such as scriptwriting, visual and audio generation, and editing. These tools enable the creation of new content, including text, images, audio, and video, with platforms like ChatGPT and MidJourney becoming increasingly popular among YouTube creators. Despite their growing adoption, knowledge of their specific use cases across the video production process remains limited. This study analyzes 274 YouTube how-to videos to explore GenAI's role in planning, production, editing, and uploading. The findings reveal that YouTubers use GenAI to identify topics, generate scripts, create prompts, and produce visual and audio materials. Additionally, GenAI supports editing tasks like upscaling visuals and reformatting content while also suggesting titles and subtitles. Based on these findings, we discuss future directions for incorporating GenAI to support various video creation tasks.</li> </ul> <p class="metadata-note">The abstract, and the depositor's additional notes after it as a second LangString when the source has a field for them.</p> </dd> </div> <div class="metadata-element"> <dt> <span>Keyword</span> <code>1.5</code> <ul class="metadata-source"> <li class="from-declared"> <abbr data-tip="The source published this in its own metadata. It is kept as written, and nothing here verified it — declared is not the same as true.">source</abbr> <a href="/library/84cf3b224aaf/metadata/record.json" target="_blank" rel="noopener" data-tip="Inspect the assertion this was read from: resource/categories/0" >resource/categories/0</a> </li> </ul> </dt> <dd> <ul class="metadata-values metadata-terms"> <li>cs.HC</li> </ul> </dd> </div> <div class="metadata-element metadata-element-empty"> <dt> <span>Coverage</span> <code>1.6</code> </dt> <dd> <p class="metadata-absent metadata-absent-not-collected">not collected — this library does not fill it</p> <p class="metadata-note">The time, place or culture the resource applies to. No source declares it.</p> </dd> </div> <div class="metadata-element metadata-element-empty"> <dt> <span>Structure</span> <code>1.7</code> </dt> <dd> <p class="metadata-absent metadata-absent-not-collected">not collected — this library does not fill it</p> <p class="metadata-note">Not declared by any of the three sources, and not estimated here.</p> </dd> </div> <div class="metadata-element metadata-element-empty"> <dt> <span>Aggregation level</span> <code>1.8</code> </dt> <dd> <p class="metadata-absent metadata-absent-not-collected">not collected — this library does not fill it</p> <p class="metadata-note">Not declared by any of the three sources, and not estimated here.</p> </dd> </div> </dl> </section> <section class="record-group"> <h3>2 Life cycle <span class="record-group-fill"> <span class="record-group-meter" role="img" aria-label="2 of 3 elements filled"> <span class="is-filled" data-tip="2.1 Version — filled"></span><span class="is-none-found" data-tip="2.2 Status — none found — the source did not declare it"></span><span class="is-filled" data-tip="2.3 Contribute — filled"></span> </span> <span class="pill">2/3</span> </span> </h3> <dl class="metadata-elements"> <div class="metadata-element"> <dt> <span>Version</span> <code>2.1</code> <ul class="metadata-source"> <li class="from-declared"> <abbr data-tip="The source published this in its own metadata. It is kept as written, and nothing here verified it — declared is not the same as true.">source</abbr> <a href="/library/84cf3b224aaf/metadata/record.json" target="_blank" rel="noopener" data-tip="Inspect the assertion this was read from: resource" >resource</a> </li> </ul> </dt> <dd> <ul class="metadata-values"> <li>v1</li> </ul> </dd> </div> <div class="metadata-element metadata-element-empty"> <dt> <span>Status</span> <code>2.2</code> </dt> <dd> <p class="metadata-absent metadata-absent-none-found">none found — the source did not declare it</p> <p class="metadata-note">Draft, final, revised or unavailable, and only when the source says so. A first version is not thereby final.</p> </dd> </div> <div class="metadata-element"> <dt> <span>Contribute</span> <code>2.3</code> <ul class="metadata-source"> <li class="from-declared"> <abbr data-tip="The source published this in its own metadata. It is kept as written, and nothing here verified it — declared is not the same as true.">source</abbr> <a href="/library/84cf3b224aaf/metadata/record.json" target="_blank" rel="noopener" data-tip="This element has 2 assertions behind it; the record lists each one" >2 assertions</a> </li> </ul> </dt> <dd> <ul class="metadata-values"> <li>Torin Anderson — author</li><li>Shuo Niu — author</li> </ul> <p class="metadata-note">Role, entity and date per declared contribution. A role outside LOM's vocabulary is reported in the entry's description instead.</p> </dd> </div> </dl> </section> <section class="record-group"> <h3>3 Meta-metadata <span class="record-group-fill"> <span class="record-group-meter" role="img" aria-label="4 of 4 elements filled"> <span class="is-filled" data-tip="3.1 Identifier — filled"></span><span class="is-filled" data-tip="3.2 Contribute — filled"></span><span class="is-filled" data-tip="3.3 Metadata schema — filled"></span><span class="is-filled" data-tip="3.4 Language — filled"></span> </span> <span class="pill">4/4</span> </span> </h3> <dl class="metadata-elements"> <div class="metadata-element"> <dt> <span>Identifier</span> <code>3.1</code> <ul class="metadata-source"> <li class="from-derived"> <abbr data-tip="Assigned here — an identifier, or the search string that surfaced the resource. Nothing about the resource itself.">this engine</abbr> <span>resource_id</span> </li> </ul> </dt> <dd> <ul class="metadata-values"> <li>URI: tag:aim-pro.eu,2026:oer/84cf3b224aaf/record</li> </ul> <p class="metadata-note">The identifier of this metadata record — the resource's own, with /record after it, because the record is a description of the resource and not the resource.</p> </dd> </div> <div class="metadata-element"> <dt> <span>Contribute</span> <code>3.2</code> <ul class="metadata-source"> <li class="from-derived"> <abbr data-tip="Assigned here — an identifier, or the search string that surfaced the resource. Nothing about the resource itself.">this engine</abbr> <span>source</span> </li> </ul> </dt> <dd> <ul class="metadata-values"> <li>AIM-PRO WP3 OER harvester (arXiv) — creator</li> </ul> <p class="metadata-note">Who generated this record and when — a statement about the record, not about the resource.</p> </dd> </div> <div class="metadata-element"> <dt> <span>Metadata schema</span> <code>3.3</code> </dt> <dd> <ul class="metadata-values"> <li>LOMv1.0</li><li>aimpro-oer-profile/1</li> </ul> <p class="metadata-note">LOMv1.0, and the profile this was built against.</p> </dd> </div> <div class="metadata-element"> <dt> <span>Language</span> <code>3.4</code> <ul class="metadata-source"> <li class="from-observed"> <abbr data-tip="Checked during the harvest that the resource is in English, from the declared language or the converted text.">language gate</abbr> <i data-tip="The source's metadata named the language, and the gate took that at its word instead of measuring the text.">read the declared field</i> </li> </ul> </dt> <dd> <ul class="metadata-values"> <li>en</li> </ul> </dd> </div> </dl> </section> <section class="record-group"> <h3>4 Technical <span class="record-group-fill"> <span class="record-group-meter" role="img" aria-label="3 of 7 elements filled"> <span class="is-filled" data-tip="4.1 Format — filled"></span><span class="is-filled" data-tip="4.2 Size — filled"></span><span class="is-filled" data-tip="4.3 Location — filled"></span><span class="is-not-collected" data-tip="4.4 Requirement — not collected — this library does not fill it"></span><span class="is-not-collected" data-tip="4.5 Installation remarks — not collected — this library does not fill it"></span><span class="is-not-collected" data-tip="4.6 Other platform requirements — not collected — this library does not fill it"></span><span class="is-not-collected" data-tip="4.7 Duration — not collected — this library does not fill it"></span> </span> <span class="pill">3/7</span> </span> </h3> <dl class="metadata-elements"> <div class="metadata-element"> <dt> <span>Format</span> <code>4.1</code> <ul class="metadata-source"> <li class="from-derived"> <abbr data-tip="Recorded while turning the original into Markdown: the format it came from and the converter that read it.">conversion</abbr> <span>latexml-html</span> </li> </ul> </dt> <dd> <ul class="metadata-values"> <li>text/markdown</li> </ul> <p class="metadata-note">One value per form held: the original as the source published it, and the Markdown this engine extracted.</p> </dd> </div> <div class="metadata-element"> <dt> <span>Size</span> <code>4.2</code> <ul class="metadata-source"> <li class="from-derived"> <abbr data-tip="Recorded while turning the original into Markdown: the format it came from and the converter that read it.">conversion</abbr> <span>latexml-html</span> </li> </ul> </dt> <dd> <ul class="metadata-values"> <li>39069</li> </ul> <p class="metadata-note">Bytes. The original's, because the resource is the file and not our conversion of it.</p> </dd> </div> <div class="metadata-element"> <dt> <span>Location</span> <code>4.3</code> <ul class="metadata-source"> <li class="from-derived"> <abbr data-tip="Assigned here — an identifier, or the search string that surfaced the resource. Nothing about the resource itself.">this engine</abbr> <span>resource_id</span> </li> </ul> </dt> <dd> <ul class="metadata-values"> <li>https://arxiv.org/abs/2503.03134</li> </ul> <p class="metadata-note">Where the source serves it.</p> </dd> </div> <div class="metadata-element metadata-element-empty"> <dt> <span>Requirement</span> <code>4.4</code> </dt> <dd> <p class="metadata-absent metadata-absent-not-collected">not collected — this library does not fill it</p> <p class="metadata-note">Software or hardware needed to use it. No source declares it.</p> </dd> </div> <div class="metadata-element metadata-element-empty"> <dt> <span>Installation remarks</span> <code>4.5</code> </dt> <dd> <p class="metadata-absent metadata-absent-not-collected">not collected — this library does not fill it</p> <p class="metadata-note">No source declares it.</p> </dd> </div> <div class="metadata-element metadata-element-empty"> <dt> <span>Other platform requirements</span> <code>4.6</code> </dt> <dd> <p class="metadata-absent metadata-absent-not-collected">not collected — this library does not fill it</p> <p class="metadata-note">No source declares it.</p> </dd> </div> <div class="metadata-element metadata-element-empty"> <dt> <span>Duration</span> <code>4.7</code> </dt> <dd> <p class="metadata-absent metadata-absent-not-collected">not collected — this library does not fill it</p> <p class="metadata-note">Playing time, for audio and video. The corpus holds neither.</p> </dd> </div> </dl> </section> <section class="record-group"> <h3>5 Educational <span class="record-group-fill"> <span class="record-group-meter" role="img" aria-label="1 of 11 elements filled"> <span class="is-not-collected" data-tip="5.1 Interactivity type — not collected — this library does not fill it"></span><span class="is-filled" data-tip="5.2 Learning resource type — filled"></span><span class="is-not-collected" data-tip="5.3 Interactivity level — not collected — this library does not fill it"></span><span class="is-not-collected" data-tip="5.4 Semantic density — not collected — this library does not fill it"></span><span class="is-none-found" data-tip="5.5 Intended end user role — none found — the source did not declare it"></span><span class="is-none-found" data-tip="5.6 Context — none found — the source did not declare it"></span><span class="is-not-collected" data-tip="5.7 Typical age range — not collected — this library does not fill it"></span><span class="is-none-found" data-tip="5.8 Difficulty — none found — the source did not declare it"></span><span class="is-none-found" data-tip="5.9 Typical learning time — none found — the source did not declare it"></span><span class="is-none-found" data-tip="5.10 Description — none found — the source did not declare it"></span><span class="is-not-collected" data-tip="5.11 Language — not collected — this library does not fill it"></span> </span> <span class="pill">1/11</span> </span> </h3> <dl class="metadata-elements"> <div class="metadata-element metadata-element-empty"> <dt> <span>Interactivity type</span> <code>5.1</code> </dt> <dd> <p class="metadata-absent metadata-absent-not-collected">not collected — this library does not fill it</p> <p class="metadata-note">Active, expositive or mixed. A judgement about how the resource is used; no source declares it.</p> </dd> </div> <div class="metadata-element"> <dt> <span>Learning resource type</span> <code>5.2</code> <ul class="metadata-source"> <li class="from-declared"> <abbr data-tip="The source published this in its own metadata. It is kept as written, and nothing here verified it — declared is not the same as true.">source</abbr> <a href="/library/84cf3b224aaf/metadata/record.json" target="_blank" rel="noopener" data-tip="Inspect the assertion this was read from: resource" >resource</a> </li> <li class="from-derived"> <abbr data-tip="Mapped from the type the source declared, through the table in the exporter. Only mappings that are a reading of what the declared term means are made; the rest are reported as unmapped.">mapped</abbr> <span>learning_resource_type/preprint</span> </li> </ul> </dt> <dd> <ul class="metadata-values"> <li>narrative text</li> </ul> <p class="metadata-note">Only from a declaration that maps onto LOM's vocabulary. A file format is not a declaration.</p> </dd> </div> <div class="metadata-element metadata-element-empty"> <dt> <span>Interactivity level</span> <code>5.3</code> </dt> <dd> <p class="metadata-absent metadata-absent-not-collected">not collected — this library does not fill it</p> <p class="metadata-note">No source declares it, and nothing here reads the resource to judge it.</p> </dd> </div> <div class="metadata-element metadata-element-empty"> <dt> <span>Semantic density</span> <code>5.4</code> </dt> <dd> <p class="metadata-absent metadata-absent-not-collected">not collected — this library does not fill it</p> <p class="metadata-note">No source declares it, and nothing here reads the resource to judge it.</p> </dd> </div> <div class="metadata-element metadata-element-empty"> <dt> <span>Intended end user role</span> <code>5.5</code> <ul class="metadata-source"> <li class="from-derived"> <abbr data-tip="Mapped from the type the source declared, through the table in the exporter. Only mappings that are a reading of what the declared term means are made; the rest are reported as unmapped.">mapped</abbr> <span>learning_resource_type/preprint</span> </li> </ul> </dt> <dd> <p class="metadata-absent metadata-absent-none-found">none found — the source did not declare it</p> <p class="metadata-note">Imported when declared.</p> </dd> </div> <div class="metadata-element metadata-element-empty"> <dt> <span>Context</span> <code>5.6</code> <ul class="metadata-source"> <li class="from-derived"> <abbr data-tip="Mapped from the type the source declared, through the table in the exporter. Only mappings that are a reading of what the declared term means are made; the rest are reported as unmapped.">mapped</abbr> <span>learning_resource_type/preprint</span> </li> </ul> </dt> <dd> <p class="metadata-absent metadata-absent-none-found">none found — the source did not declare it</p> <p class="metadata-note">Imported when declared.</p> </dd> </div> <div class="metadata-element metadata-element-empty"> <dt> <span>Typical age range</span> <code>5.7</code> </dt> <dd> <p class="metadata-absent metadata-absent-not-collected">not collected — this library does not fill it</p> <p class="metadata-note">No source declares it.</p> </dd> </div> <div class="metadata-element metadata-element-empty"> <dt> <span>Difficulty</span> <code>5.8</code> <ul class="metadata-source"> <li class="from-derived"> <abbr data-tip="Mapped from the type the source declared, through the table in the exporter. Only mappings that are a reading of what the declared term means are made; the rest are reported as unmapped.">mapped</abbr> <span>learning_resource_type/preprint</span> </li> </ul> </dt> <dd> <p class="metadata-absent metadata-absent-none-found">none found — the source did not declare it</p> <p class="metadata-note">Imported when declared and never estimated.</p> </dd> </div> <div class="metadata-element metadata-element-empty"> <dt> <span>Typical learning time</span> <code>5.9</code> <ul class="metadata-source"> <li class="from-derived"> <abbr data-tip="Mapped from the type the source declared, through the table in the exporter. Only mappings that are a reading of what the declared term means are made; the rest are reported as unmapped.">mapped</abbr> <span>learning_resource_type/preprint</span> </li> </ul> </dt> <dd> <p class="metadata-absent metadata-absent-none-found">none found — the source did not declare it</p> <p class="metadata-note">Imported when declared. Never computed from a word count.</p> </dd> </div> <div class="metadata-element metadata-element-empty"> <dt> <span>Description</span> <code>5.10</code> <ul class="metadata-source"> <li class="from-derived"> <abbr data-tip="Mapped from the type the source declared, through the table in the exporter. Only mappings that are a reading of what the declared term means are made; the rest are reported as unmapped.">mapped</abbr> <span>learning_resource_type/preprint</span> </li> </ul> </dt> <dd> <p class="metadata-absent metadata-absent-none-found">none found — the source did not declare it</p> <p class="metadata-note">An explicit statement about educational use, when the source makes one.</p> </dd> </div> <div class="metadata-element metadata-element-empty"> <dt> <span>Language</span> <code>5.11</code> </dt> <dd> <p class="metadata-absent metadata-absent-not-collected">not collected — this library does not fill it</p> <p class="metadata-note">The language of the intended learner. Not assumed to be the content's: a lesson in English may be written for learners of it.</p> </dd> </div> </dl> </section> <section class="record-group"> <h3>6 Rights <span class="record-group-fill"> <span class="record-group-meter" role="img" aria-label="3 of 3 elements filled"> <span class="is-filled" data-tip="6.1 Cost — filled"></span><span class="is-filled" data-tip="6.2 Copyright and other restrictions — filled"></span><span class="is-filled" data-tip="6.3 Description — filled"></span> </span> <span class="pill">3/3</span> </span> </h3> <dl class="metadata-elements"> <div class="metadata-element"> <dt> <span>Cost</span> <code>6.1</code> <ul class="metadata-source"> <li class="from-observed"> <abbr data-tip="Decided during the harvest from the licence the source declared, before any content was downloaded. Anything it could not establish as open was refused.">licence gate</abbr> <a href="https://oaipmh.arxiv.org/oai?verb=GetRecord&identifier=oai:arXiv.org:2503.03134&metadataPrefix=arXiv" target="_blank" rel="noopener" data-tip="Inspect the assertion this was read from: arXiv:arXiv/arXiv:license" >arXiv:arXiv/arXiv:license</a> </li> </ul> </dt> <dd> <ul class="metadata-values"> <li>no — free to use</li> </ul> <p class="metadata-note">No: the licence gate refuses anything it cannot establish open reuse terms for, before the bytes are requested.</p> </dd> </div> <div class="metadata-element"> <dt> <span>Copyright and other restrictions</span> <code>6.2</code> <ul class="metadata-source"> <li class="from-observed"> <abbr data-tip="Decided during the harvest from the licence the source declared, before any content was downloaded. Anything it could not establish as open was refused.">licence gate</abbr> <a href="https://oaipmh.arxiv.org/oai?verb=GetRecord&identifier=oai:arXiv.org:2503.03134&metadataPrefix=arXiv" target="_blank" rel="noopener" data-tip="Inspect the assertion this was read from: arXiv:arXiv/arXiv:license" >arXiv:arXiv/arXiv:license</a> </li> </ul> </dt> <dd> <ul class="metadata-values"> <li>yes — attribution required, share-alike, non-commercial only (CC-BY-NC-SA-4.0)</li> </ul> <p class="metadata-note">Yes unless the licence reserves nothing — attribution is a restriction. The conditions after the dash are the licence gate's reading; the export carries LOM's bare term.</p> </dd> </div> <div class="metadata-element"> <dt> <span>Description</span> <code>6.3</code> <ul class="metadata-source"> <li class="from-observed"> <abbr data-tip="Decided during the harvest from the licence the source declared, before any content was downloaded. Anything it could not establish as open was refused.">licence gate</abbr> <a href="https://oaipmh.arxiv.org/oai?verb=GetRecord&identifier=oai:arXiv.org:2503.03134&metadataPrefix=arXiv" target="_blank" rel="noopener" data-tip="Inspect the assertion this was read from: arXiv:arXiv/arXiv:license" >arXiv:arXiv/arXiv:license</a> </li> </ul> </dt> <dd> <ul class="metadata-values"> <li>CC-BY-NC-SA-4.0 · http://creativecommons.org/licenses/by-nc-sa/4.0/. Conditions: adaptation permitted, non-commercial use only, adaptations must carry the same licence, attribution required.</li> </ul> <p class="metadata-note">The SPDX id, the licence URI and the conditions. LOM has no element for any of the three, so this is where they survive.</p> </dd> </div> </dl> </section> <section class="record-group"> <h3>7 Relation <span class="record-group-fill"> <span class="record-group-meter" role="img" aria-label="2 of 2 elements filled"> <span class="is-filled" data-tip="7.1 Kind — filled"></span><span class="is-filled" data-tip="7.2 Resource — filled"></span> </span> <span class="pill">2/2</span> </span> </h3> <dl class="metadata-elements"> <div class="metadata-element"> <dt> <span>Kind</span> <code>7.1</code> </dt> <dd> <ul class="metadata-values"> <li>ispartof</li> </ul> </dd> </div> <div class="metadata-element"> <dt> <span>Resource</span> <code>7.2</code> <ul class="metadata-source"> <li class="from-inferred"> <abbr data-tip="Nobody declared this. The component rules drew it from the repository: the folder the file sits in, or the line of the lab's text that names it, which is said beside it. Rule citation, version links/1.">inferred</abbr> <i>read its reference list, line 225</i> <span>citation</span> </li> </ul> </dt> <dd> <ul class="metadata-values"> <li>Extended Abstracts of the CHI Conference on Human Factors in Computing Systems (CHI EA 2025)</li> </ul> <ul class="metadata-values metadata-inferred"> <li>references: doi:10.1177/2056305120944624</li><li>references: doi:10.1145/3544548.3581107</li><li>references: doi:10.1186/s41235-023-00499-6#citeas</li><li>references: doi:10.1177/1461444819854731</li><li>references: doi:10.1145/3359196</li><li>references: doi:10.1002/yd.376</li><li>references: doi:10.1145/3544548.3581386</li><li>references: doi:10.1186/s12889-020-8337-1#citeas</li><li>references: doi:10.1177/2372732215602130</li><li>references: arXiv:2301.04655</li><li>references: doi:10.1177/13548565231185863</li><li>references: arXiv:2305.14929</li><li>and 10 more, every one of them in the export</li> </ul> <p class="metadata-note">The container a file was found inside, and the Markdown extracted from the original. What a lab requires, and the lab a component belongs to, are inferred and stand apart.</p> </dd> </div> </dl> </section> <section class="record-group record-group-empty"> <h3>8 Annotation <span class="record-group-fill"> <span class="record-group-meter" role="img" aria-label="0 of 3 elements filled"> <span class="is-not-collected" data-tip="8.1 Entity — not collected — this library does not fill it"></span><span class="is-not-collected" data-tip="8.2 Date — not collected — this library does not fill it"></span><span class="is-not-collected" data-tip="8.3 Description — not collected — this library does not fill it"></span> </span> <span class="pill">0/3</span> </span> </h3> <dl class="metadata-elements"> <div class="metadata-element metadata-element-empty"> <dt> <span>Entity</span> <code>8.1</code> </dt> <dd> <p class="metadata-absent metadata-absent-not-collected">not collected — this library does not fill it</p> <p class="metadata-note">Comments on the resource's educational use, by whoever made them. The platform's review grades competencies, which are classification (9), and writes no comment here.</p> </dd> </div> <div class="metadata-element metadata-element-empty"> <dt> <span>Date</span> <code>8.2</code> </dt> <dd> <p class="metadata-absent metadata-absent-not-collected">not collected — this library does not fill it</p> </dd> </div> <div class="metadata-element metadata-element-empty"> <dt> <span>Description</span> <code>8.3</code> </dt> <dd> <p class="metadata-absent metadata-absent-not-collected">not collected — this library does not fill it</p> </dd> </div> </dl> </section> <section class="record-group record-group-empty"> <h3>9 Classification <span class="record-group-fill"> <span class="record-group-meter" role="img" aria-label="0 of 4 elements filled"> <span class="is-not-collected" data-tip="9.1 Purpose — not collected — this library does not fill it"></span><span class="is-not-collected" data-tip="9.2 Taxon path — not collected — this library does not fill it"></span><span class="is-not-collected" data-tip="9.3 Description — not collected — this library does not fill it"></span><span class="is-not-collected" data-tip="9.4 Keyword — not collected — this library does not fill it"></span> </span> <span class="pill">0/4</span> </span> </h3> <dl class="metadata-elements"> <div class="metadata-element metadata-element-empty"> <dt> <span>Purpose</span> <code>9.1</code> </dt> <dd> <p class="metadata-absent metadata-absent-not-collected">not collected — this library does not fill it</p> <p class="metadata-note">Empty in the record: no source declares a competency. The alignment reads the resource for them and stands beside the record, never in it, and a taxon path derived from the search string that found it would be a claim about the query.</p> </dd> </div> <div class="metadata-element metadata-element-empty"> <dt> <span>Taxon path</span> <code>9.2</code> </dt> <dd> <p class="metadata-absent metadata-absent-not-collected">not collected — this library does not fill it</p> <p class="metadata-note">Where the competency framework goes. Empty in the record for the reason above.</p> </dd> </div> <div class="metadata-element metadata-element-empty"> <dt> <span>Description</span> <code>9.3</code> </dt> <dd> <p class="metadata-absent metadata-absent-not-collected">not collected — this library does not fill it</p> </dd> </div> <div class="metadata-element metadata-element-empty"> <dt> <span>Keyword</span> <code>9.4</code> </dt> <dd> <p class="metadata-absent metadata-absent-not-collected">not collected — this library does not fill it</p> </dd> </div> </dl> </section> </div> <section class="record-group record-incidents"> <h3>What could not be established<span class="pill">3</span></h3> <p class="metadata-note">Where the source's metadata could not be carried over as it was — missing, contradictory, with no matching term in the standard, restructured, or taken from the repository — and what was done instead. Without these notes, an empty element would look like something the harvester missed.</p> <table class="incident-table"> <thead> <tr><th scope="col">Status</th><th scope="col">Field</th> <th scope="col">Why</th></tr> </thead> <tbody> <tr class="i-absent"> <td><span class="incident-code">Not available</span></td> <td><code>rights_holder</code></td> <td>no rights holder is named at source; the licence is recorded without one rather than attributed to the platform that served it</td> </tr> <tr class="i-absent"> <td><span class="incident-code">Not available</span></td> <td><code>publisher</code></td> <td>the source named no publisher of the work; where it was collected from is recorded as collection provenance instead, which is a different claim</td> </tr> <tr class="i-absent"> <td><span class="incident-code">Not available</span></td> <td><code>educational</code></td> <td>the source declared no educational metadata — no resource type, audience, context, difficulty or learning time. Nothing here estimates them</td> </tr> </tbody> </table> </section> </div> </section> </div> <aside class="resource-info-rail" id="resource-info-rail" aria-labelledby="resource-info-title"> <div class="resource-info-shell"> <header class="resource-info-head"> <div> <span class="resource-info-kicker">Reuse and provenance</span> <h2 id="resource-info-title">Resource information</h2> <p>Check the licence and where this came from without losing your place in the resource.</p> </div> </header> <nav class="resource-info-tabs" role="tablist" aria-label="Resource information sections"> <button type="button" class="resource-info-tab active" id="resource-info-licence-tab" role="tab" aria-selected="true" aria-controls="resource-info-licence" data-resource-info-tab="licence">Licence</button> <button type="button" class="resource-info-tab" id="resource-info-origin-tab" role="tab" tabindex="-1" aria-selected="false" aria-controls="resource-info-origin" data-resource-info-tab="origin">Origin</button> <button type="button" class="resource-info-tab" id="resource-info-files-tab" role="tab" tabindex="-1" aria-selected="false" aria-controls="resource-info-files" data-resource-info-tab="files">Files <span class="badge">1</span></button> <button type="button" class="resource-info-tab" id="resource-info-record-tab" role="tab" tabindex="-1" aria-selected="false" aria-controls="resource-info-record" data-resource-info-tab="record">Record</button> <button type="button" class="resource-info-tab" id="resource-info-related-tab" role="tab" tabindex="-1" aria-selected="false" aria-controls="resource-info-related" data-resource-info-tab="related">Related</button> </nav> <div class="resource-info-panel" id="resource-info-licence" role="tabpanel" aria-labelledby="resource-info-licence-tab" data-resource-info-panel="licence"> <section class="card"> <header class="info-section-head"> <div> <span class="info-section-kicker">Licence</span> <h2>May we reuse it?</h2> <p>Decided before the content was downloaded, from what the source declared.</p> </div> </header> <div class="license-identity"> <div> <span>Recorded licence</span> <strong>CC-BY-NC-SA-4.0</strong> </div> <a href="http://creativecommons.org/licenses/by-nc-sa/4.0/" target="_blank" rel="license noopener">Read licence terms ↗</a> </div> <div class="lic-plain"> <div> <strong>You may</strong> <div class="ok">use it in teaching</div> <div class="ok">adapt / translate it</div> <div class="no">use it commercially (NC)</div> </div> <div> <strong>You must</strong> <div class="must">keep the attribution (embedded in the document)</div> <div class="must">share adaptations under this same licence</div> </div> </div> <details class="license-evidence-disclosure"> <summary> <span><strong>Recorded licence evidence</strong> <small>Exactly what the source declared at harvest time</small></span> <span class="license-proof captured">captured</span> </summary> <div class="license-evidence captured"> <div class="license-observed"> <span class="dim">Observed declaration</span> <code>http://creativecommons.org/licenses/by-nc-sa/4.0/</code> </div> <dl class="evidence-facts"> <dt>Declared by</dt><dd>arXiv submitter</dd> <dt>Field</dt><dd><code>arXiv:arXiv/arXiv:license</code></dd> <dt>Claimed scope</dt><dd>this submitted version of the paper</dd> <dt>Captured</dt><dd>2026-10-09T09:48:48 UTC</dd> </dl> <p class="evidence-responsibility">The submitter chooses the article-version licence and certifies the right to grant it.</p> <div class="evidence-links"> <a href="https://oaipmh.arxiv.org/oai?verb=GetRecord&identifier=oai:arXiv.org:2503.03134&metadataPrefix=arXiv" target="_blank" rel="noopener">inspect exact evidence ↗</a> <a href="https://info.arxiv.org/help/oa/index.html" target="_blank" rel="noopener">arXiv OAI-PMH metadata documentation ↗</a> </div> <details class="evidence-method"><summary>Technical capture details</summary> <p>arXiv OAI-PMH GetRecord (metadataPrefix=arXiv)</p> </details> </div> </details> <p class="license-caveat"><strong>Recorded assertion, not legal certification.</strong> This proves what the source exposed at capture time. It does not guarantee that the declarant owned every embedded third-party element.</p> </section> </div> <div class="resource-info-panel" id="resource-info-origin" role="tabpanel" aria-labelledby="resource-info-origin-tab" data-resource-info-panel="origin" hidden> <section class="card"> <header class="info-section-head"> <div> <span class="info-section-kicker">Source lineage</span> <h2>Where did it come from?</h2> <p>Enough to answer "why is this in the corpus" by clicking.</p> </div> </header> <dl> <dt>Source</dt><dd>arXiv</dd> <dt>Original</dt> <dd><a href="https://arxiv.org/abs/2503.03134" target="_blank" rel="noopener">https://arxiv.org/abs/2503.03134 ↗</a></dd> <dt>Found by</dt> <dd><code class="found-by">(all:"artificial intelligence" OR all:"machine learning" OR all:"generative AI" OR all:"deep learning" OR all:"reinforcement learning" OR all:"large …</code></dd> <dt>Harvest</dt> <dd><a href="/runs/b2dd55a87e60/"><code>b2dd55a87e60</code></a> · 2026-10-09 09:48</dd> <dt>Conversion</dt> <dd>latexml-html → markdown <span class="dim">(arxiv-html)</span></dd> <dt>Content hash</dt><dd><code>6ef736734248445a</code></dd> </dl> <details class="source-queries"> <summary>The query that found it</summary> <div class="source-query-grid"><div><code>(all:"artificial intelligence" OR all:"machine learning" OR all:"generative AI" OR all:"deep learning" OR all:"reinforcement learning" OR all:"large language model") AND (all:"AI concepts" OR all:"types of AI" OR all:"AI fundamentals" OR all:"recognizing AI" OR all:"recognising AI" OR all:"general versus narrow AI" OR all:"narrow AI" OR all:"general AI" OR all:"machine intelligence" OR all:"AI strengths and weaknesses" OR all:"traditional software" OR all:"rule-based systems" OR all:"introduction to AI" OR all:"introduction to artificial intelligence" OR all:"artificial intelligence introduction" OR all:"AI primer" OR all:"foundations of artificial intelligence" OR all:"overview of AI" OR all:"understanding AI" OR all:"history of AI" OR all:"AI essentials" OR all:"AI terminology" OR all:"metaphors for AI" OR all:"AI fundamental concepts" OR all:"AI key concepts" OR all:"philosophy of AI" OR all:"critical AI literacy")</code></div></div> </details> </section> </div> <div class="resource-info-panel" id="resource-info-files" role="tabpanel" aria-labelledby="resource-info-files-tab" data-resource-info-panel="files" hidden> <section class="card"> <header class="info-section-head"> <div> <span class="info-section-kicker">Forms held</span> <h2>What is actually stored</h2> <p>The file as the source published it, and the text extracted out of it.</p> </div> </header> <ul class="bundled-file-list"> <li> <span class="file-kind">MD</span> <div> <strong>extracted.md</strong> <small>Extracted by this engine · <code>text/markdown</code> · 38.2 KB · latexml-html → markdown (arxiv-html)</small> </div> </li> </ul> </section> </div> <div class="resource-info-panel" id="resource-info-related" role="tabpanel" aria-labelledby="resource-info-related-tab" data-resource-info-panel="related" hidden> <section class="card"> <header class="info-section-head"> <div> <span class="info-section-kicker">Related · inferred</span> <h2>How is it tied to the rest?</h2> <p>Nobody declared these. They are drawn from the repository and the texts the library holds: where a file sits, a link, a line of a reference list.</p> </div> </header> <div class="related-group"> <h3>Cites 22 works</h3> <ul class="bundled-file-list"> <li> <span class="file-kind">arXiv</span> <div> <strong><a href="https://arxiv.org/abs/2301.04655" target="_blank" rel="noopener">arXiv:2301.04655 ↗</a></strong> <small>Line 235 of its reference list · not in the library</small> </div> </li> <li> <span class="file-kind">arXiv</span> <div> <strong><a href="https://arxiv.org/abs/2305.14929" target="_blank" rel="noopener">arXiv:2305.14929 ↗</a></strong> <small>Line 237 of its reference list · not in the library</small> </div> </li> <li> <span class="file-kind">DOI</span> <div> <strong><a href="https://doi.org/10.1002/yd.376" target="_blank" rel="noopener">doi:10.1002/yd.376 ↗</a></strong> <small>Line 231 of its reference list · not in the library</small> </div> </li> <li> <span class="file-kind">DOI</span> <div> <strong><a href="https://doi.org/10.1080/1369118x.2020.1804984" target="_blank" rel="noopener">doi:10.1080/1369118x.2020.1804984 ↗</a></strong> <small>Line 245 of its reference list · not in the library</small> </div> </li> <li> <span class="file-kind">DOI</span> <div> <strong><a href="https://doi.org/10.1145/2578726.2578754" target="_blank" rel="noopener">doi:10.1145/2578726.2578754 ↗</a></strong> <small>Line 238 of its reference list · not in the library</small> </div> </li> <li> <span class="file-kind">DOI</span> <div> <strong><a href="https://doi.org/10.1145/3313831.3376739" target="_blank" rel="noopener">doi:10.1145/3313831.3376739 ↗</a></strong> <small>Line 241 of its reference list · not in the library</small> </div> </li> <li> <span class="file-kind">DOI</span> <div> <strong><a href="https://doi.org/10.1145/3359196" target="_blank" rel="noopener">doi:10.1145/3359196 ↗</a></strong> <small>Line 229 of its reference list · not in the library</small> </div> </li> <li> <span class="file-kind">DOI</span> <div> <strong><a href="https://doi.org/10.1145/3544548.3581107" target="_blank" rel="noopener">doi:10.1145/3544548.3581107 ↗</a></strong> <small>Line 226 of its reference list · not in the library</small> </div> </li> </ul> <details class="related-more"> <summary>The other 14</summary> <ul class="bundled-file-list"> <li> <span class="file-kind">DOI</span> <div> <strong><a href="https://doi.org/10.1145/3544548.3581126" target="_blank" rel="noopener">doi:10.1145/3544548.3581126 ↗</a></strong> <small>Line 248 of its reference list · not in the library</small> </div> </li> <li> <span class="file-kind">DOI</span> <div> <strong><a href="https://doi.org/10.1145/3544548.3581386" target="_blank" rel="noopener">doi:10.1145/3544548.3581386 ↗</a></strong> <small>Line 232 of its reference list · not in the library</small> </div> </li> <li> <span class="file-kind">DOI</span> <div> <strong><a href="https://doi.org/10.1145/3613904.3642476" target="_blank" rel="noopener">doi:10.1145/3613904.3642476 ↗</a></strong> <small>Line 239 of its reference list · not in the library</small> </div> </li> <li> <span class="file-kind">DOI</span> <div> <strong><a href="https://doi.org/10.1145/3613904.3642697" target="_blank" rel="noopener">doi:10.1145/3613904.3642697 ↗</a></strong> <small>Line 240 of its reference list · not in the library</small> </div> </li> <li> <span class="file-kind">DOI</span> <div> <strong><a href="https://doi.org/10.1145/3613904.3642861" target="_blank" rel="noopener">doi:10.1145/3613904.3642861 ↗</a></strong> <small>Line 243 of its reference list · not in the library</small> </div> </li> <li> <span class="file-kind">DOI</span> <div> <strong><a href="https://doi.org/10.1145/3613904.3642868" target="_blank" rel="noopener">doi:10.1145/3613904.3642868 ↗</a></strong> <small>Line 247 of its reference list · not in the library</small> </div> </li> <li> <span class="file-kind">DOI</span> <div> <strong><a href="https://doi.org/10.1145/3613905.3651057" target="_blank" rel="noopener">doi:10.1145/3613905.3651057 ↗</a></strong> <small>Line 242 of its reference list · not in the library</small> </div> </li> <li> <span class="file-kind">DOI</span> <div> <strong><a href="https://doi.org/10.1177/13548565231185863" target="_blank" rel="noopener">doi:10.1177/13548565231185863 ↗</a></strong> <small>Line 236 of its reference list · not in the library</small> </div> </li> <li> <span class="file-kind">DOI</span> <div> <strong><a href="https://doi.org/10.1177/1461444819854731" target="_blank" rel="noopener">doi:10.1177/1461444819854731 ↗</a></strong> <small>Line 228 of its reference list · not in the library</small> </div> </li> <li> <span class="file-kind">DOI</span> <div> <strong><a href="https://doi.org/10.1177/2056305120944624" target="_blank" rel="noopener">doi:10.1177/2056305120944624 ↗</a></strong> <small>Line 225 of its reference list · not in the library</small> </div> </li> <li> <span class="file-kind">DOI</span> <div> <strong><a href="https://doi.org/10.1177/2372732215602130" target="_blank" rel="noopener">doi:10.1177/2372732215602130 ↗</a></strong> <small>Line 234 of its reference list · not in the library</small> </div> </li> <li> <span class="file-kind">DOI</span> <div> <strong><a href="https://doi.org/10.1186/s12889-020-8337-1#citeas" target="_blank" rel="noopener">doi:10.1186/s12889-020-8337-1#citeas ↗</a></strong> <small>Line 233 of its reference list · not in the library</small> </div> </li> <li> <span class="file-kind">DOI</span> <div> <strong><a href="https://doi.org/10.1186/s41235-023-00499-6#citeas" target="_blank" rel="noopener">doi:10.1186/s41235-023-00499-6#citeas ↗</a></strong> <small>Line 227 of its reference list · not in the library</small> </div> </li> <li> <span class="file-kind">DOI</span> <div> <strong><a href="https://doi.org/10.3390/app14135770" target="_blank" rel="noopener">doi:10.3390/app14135770 ↗</a></strong> <small>Line 249 of its reference list · not in the library</small> </div> </li> </ul> </details> </div> </section> </div> <div class="resource-info-panel" id="resource-info-record" role="tabpanel" aria-labelledby="resource-info-record-tab" data-resource-info-panel="record" hidden> <section class="card"> <header class="info-section-head"> <div> <span class="info-section-kicker">Metadata record</span> <h2>How much of this do we know?</h2> <p>What the sources declared, kept and projected into Dublin Core and LOM. Anything read out of the text is kept apart and marked inferred.</p> </div> <span class="badge b-meta">Valid</span> </header> <div class="record-summary"> <div class="record-summary-scheme"> <span>Dublin Core</span> <strong>15<small>/34</small></strong> <span class="record-meter"><span style="width:44%"></span></span> </div> <div class="record-summary-scheme"> <span>LOM</span> <strong>20<small>/45</small></strong> <span class="record-meter"><span style="width:44%"></span></span> </div> </div> <dl class="record-summary-facts"> <div><dt>Observed language</dt> <dd><strong>en</strong> <small>declared English</small></dd></div> <div><dt>Declared language</dt> <dd><strong>en</strong> <small>what the source itself said</small></dd></div> </dl> <p class="record-summary-note"> <strong>3</strong> values could not be established — absences, conflicts and declarations this profile will not map without reading the resource. The record names each one with its reason.</p> <div class="metadata-actions"> <button type="button" class="btn btn-primary" data-open-view="record">Open the full record</button> <a class="btn btn-quiet" href="/library/84cf3b224aaf/metadata/record.json" target="_blank" rel="noopener">JSON</a> </div> </section> </div> </div> </aside> </div> </main> <div class="hover-tip" id="hover-tip" role="tooltip" hidden></div> <script nonce="r0lxxlZpOsmePrhGYYwJTQ"> (function() { const root = document.documentElement; const toggle = document.getElementById("theme-toggle"); if (!toggle) return; const sync = () => toggle.setAttribute( "aria-pressed", root.dataset.theme === "dark" ? "true" : "false"); sync(); toggle.addEventListener("click", () => { const next = root.dataset.theme === "dark" ? "light" : "dark"; root.dataset.theme = next; try { localStorage.setItem("oer-theme", next); } catch (error) {} sync(); }); })(); // askToConfirm({title, body, items, caveat, confirmLabel}) -> Promise<boolean> // // Resolves false on Escape and on the backdrop, so there is no way to agree to // something by dismissing it. window.askToConfirm = (function() { const dialog = document.getElementById("confirm-dialog"); if (!dialog) return () => Promise.resolve(window.confirm("Are you sure?")); const title = document.getElementById("confirm-title"); const body = document.getElementById("confirm-body"); const list = document.getElementById("confirm-list"); const caveat = document.getElementById("confirm-caveat"); const go = document.getElementById("confirm-go"); dialog.addEventListener("click", event => { // The backdrop is the dialog element itself outside its own box. const box = dialog.getBoundingClientRect(); const outside = event.clientX < box.left || event.clientX > box.right || event.clientY < box.top || event.clientY > box.bottom; if (outside) dialog.close("cancel"); }); return function askToConfirm(options) { title.textContent = options.title || "Are you sure?"; body.textContent = options.body || ""; body.hidden = !options.body; list.textContent = ""; (options.items || []).forEach(text => { const row = document.createElement("li"); row.textContent = text; list.appendChild(row); }); list.hidden = !(options.items || []).length; caveat.textContent = options.caveat || ""; caveat.hidden = !options.caveat; go.textContent = options.confirmLabel || "Confirm"; dialog.showModal(); document.getElementById("confirm-cancel").focus(); return new Promise(resolve => { dialog.addEventListener("close", () => resolve(dialog.returnValue === "confirm"), {once: true}); }); }; })(); // A form whose submission has to be agreed to first. The handler re-submits // through the element rather than the event, so it does not re-enter itself. window.confirmBeforeSubmit = function(form, build) { if (!form) return; form.addEventListener("submit", event => { if (form.dataset.confirmed === "yes") return; event.preventDefault(); window.askToConfirm(build(form)).then(agreed => { if (!agreed) return; form.dataset.confirmed = "yes"; form.submit(); }); }); }; const navigationMenus = Array.from(document.querySelectorAll(".nav-menu")); navigationMenus.forEach(menu => { menu.addEventListener("toggle", () => { if (!menu.open) return; navigationMenus.forEach(other => { if (other !== menu) other.open = false; }); }); }); document.addEventListener("pointerdown", event => { if (event.target.closest(".nav-menu")) return; navigationMenus.forEach(menu => { menu.open = false; }); }); document.addEventListener("keydown", event => { if (event.key !== "Escape") return; const menu = navigationMenus.find(item => item.open); if (!menu) return; menu.open = false; menu.querySelector("summary").focus(); }); window.oerPost = function(url, body) { return window.fetch(url, { method: "POST", headers: {"X-CSRFToken": document.querySelector('meta[name="csrf-token"]').content, "Content-Type": "application/x-www-form-urlencoded"}, body: body || "" }); }; // Tooltips: what an element with data-tip has to say, shown as soon as the // pointer rests on it or the keyboard reaches it, in one element placed beside // it. These were title attributes, which the browser shows late, unstyled and // never on touch. Delegated, so a row added after load has one too. (function() { const tip = document.getElementById("hover-tip"); if (!tip) return; const GAP = 8, EDGE = 8, SETTLE = 120; let owner = null, timer = null, hiddenAt = 0; const text = element => element.getAttribute("data-tip") || ""; // The words stay where assistive technology reads them, as title put them. const describe = element => { if (!element.hasAttribute("aria-description")) { element.setAttribute("aria-description", text(element)); } }; document.querySelectorAll("[data-tip]").forEach(describe); // Below the element, unless the window has no room there, or the element // asks to be explained from above: a label's tip placed below it covers the // control the reader is about to use (data-tip-place="above"). function place(element) { const box = element.getBoundingClientRect(); const width = tip.offsetWidth, height = tip.offsetHeight; let top = box.bottom + GAP; const above = box.top - GAP - height; if (above >= EDGE && (element.dataset.tipPlace === "above" || top + height > window.innerHeight - EDGE)) { top = above; } const left = Math.max(EDGE, Math.min(box.left + box.width / 2 - width / 2, window.innerWidth - width - EDGE)); tip.style.top = `${Math.round(top)}px`; tip.style.left = `${Math.round(left)}px`; } function show(element) { clearTimeout(timer); if (!text(element) || !element.isConnected) return; describe(element); owner = element; tip.textContent = text(element); tip.hidden = false; place(element); } function hide() { clearTimeout(timer); if (owner) hiddenAt = Date.now(); owner = null; tip.hidden = true; } document.addEventListener("pointerover", event => { if (event.pointerType === "touch") return; const element = event.target.closest("[data-tip]"); if (!element || element === owner) return; clearTimeout(timer); // Arriving cold, wait a moment, so a pointer crossing a list of badges does // not flash every one it passes; going from one tip to the next, at once. const wait = Date.now() - hiddenAt < 300 ? 0 : SETTLE; timer = setTimeout(() => show(element), wait); }); document.addEventListener("pointerout", event => { const element = event.target.closest("[data-tip]"); if (!element || (event.relatedTarget && element.contains(event.relatedTarget))) return; clearTimeout(timer); if (owner === element) hide(); }); document.addEventListener("focusin", event => { const element = event.target.closest("[data-tip]"); if (element && event.target.matches(":focus-visible")) show(element); }); document.addEventListener("focusout", event => { if (owner && owner.contains(event.target)) hide(); }); // A tap on something that does nothing else shows what it has to say; a tap // on a link or a button does what it does. document.addEventListener("click", event => { const element = event.target.closest("[data-tip]"); if (!element || event.target.closest("a, button, summary, label, input, select, textarea")) return; show(element); }); document.addEventListener("pointerdown", hide, true); document.addEventListener("keydown", event => { if (event.key === "Escape") hide(); }); window.addEventListener("scroll", hide, true); window.addEventListener("resize", hide); })(); </script> <script nonce="r0lxxlZpOsmePrhGYYwJTQ"> // Absent for a visitor: the form is only rendered for an administrator. window.confirmBeforeSubmit(document.getElementById("delete-resource-form"), () => ({ title: "Remove this resource from the corpus?", body: "Making AI\u002DEnhanced Videos: Analyzing Generative AI Use Cases in YouTu…", items: ["its extracted text and its stored originals"], caveat: "The harvest decision that admitted it is kept, so the run still " + "reports what it did.", confirmLabel: "Remove it", })); (function() { // The chapter select is a table of contents, so choosing goes there. document.querySelectorAll("[data-content-page-select]").forEach(select => { select.addEventListener("change", () => { location.href = select.value; }); }); })(); (function() { const tabs = Array.from(document.querySelectorAll("[data-source-view]")); const panels = Array.from(document.querySelectorAll("[data-source-panel]")); if (!tabs.length) return; function show(wanted) { tabs.forEach(tab => { const on = tab.dataset.sourceView === wanted; tab.classList.toggle("active", on); tab.setAttribute("aria-selected", on ? "true" : "false"); tab.tabIndex = on ? 0 : -1; }); panels.forEach(panel => { const on = panel.dataset.sourcePanel === wanted; panel.hidden = !on; // The PDF is only requested once the reader asks for it. const frame = on ? panel.querySelector("iframe[data-src]") : null; if (frame && !frame.src) frame.src = frame.dataset.src; }); } tabs.forEach(tab => tab.addEventListener("click", () => show(tab.dataset.sourceView))); // The information rail's summary links through to the full record, which is a // view of the resource rather than a panel of the rail. document.querySelectorAll("[data-open-view]").forEach(button => { button.addEventListener("click", () => { show(button.dataset.openView); document.getElementById("resource-detail-layout") .scrollIntoView({behavior: "smooth", block: "start"}); }); }); })(); (function() { // The information rail's four questions. Only one panel is in the document // flow at a time, so the licence trace is never a scroll away from the top. const tabs = Array.from(document.querySelectorAll("[data-resource-info-tab]")); const panels = Array.from(document.querySelectorAll("[data-resource-info-panel]")); if (tabs.length < 2) return; tabs.forEach(tab => tab.addEventListener("click", () => { const wanted = tab.dataset.resourceInfoTab; tabs.forEach(other => { const on = other === tab; other.classList.toggle("active", on); other.setAttribute("aria-selected", on ? "true" : "false"); other.tabIndex = on ? 0 : -1; }); panels.forEach(panel => { panel.hidden = panel.dataset.resourceInfoPanel !== wanted; }); })); // A tie in the header that points into the rail — the rest of a group — // opens that panel rather than leaving the reader to find the tab. document.querySelectorAll("[data-open-info]").forEach(button => { button.addEventListener("click", () => { const tab = tabs.find(item => item.dataset.resourceInfoTab === button.dataset.openInfo); if (tab) { tab.click(); tab.focus(); } }); }); })(); (function() { // A tie in the header whose cards do not fit steps through them a view at a // time and says which are in view. The row scrolls sideways without this — // by touch, trackpad or the keyboard's focus — so this only adds the buttons. document.querySelectorAll("[data-carousel]").forEach(carousel => { const track = carousel.querySelector("[data-carousel-track]"); const controls = carousel.querySelector("[data-carousel-controls]"); if (!track || !controls) return; const count = controls.querySelector("[data-carousel-count]"); const [back, forward] = controls.querySelectorAll("[data-carousel-step]"); const cards = Array.from(track.children); const pitch = () => cards.length > 1 ? cards[1].offsetLeft - cards[0].offsetLeft : track.clientWidth; function update() { const overflowing = track.scrollWidth > track.clientWidth + 1; controls.hidden = !overflowing; if (!overflowing) return; const box = track.getBoundingClientRect(); const shown = cards.map((card, index) => [card.getBoundingClientRect(), index]) .filter(([rect]) => rect.left >= box.left - 2 && rect.right <= box.right + 2) .map(([, index]) => index + 1); count.textContent = shown.length ? `${shown[0]}${shown.length > 1 ? "–" + shown[shown.length - 1] : ""} of ${cards.length}` : `${cards.length}`; back.disabled = track.scrollLeft <= 1; forward.disabled = track.scrollLeft + track.clientWidth >= track.scrollWidth - 1; } [back, forward].forEach(button => button.addEventListener("click", () => { const step = pitch(); const inView = Math.max(1, Math.floor((track.clientWidth + 8) / step)); track.scrollBy({left: Number(button.dataset.carouselStep) * step * inView, behavior: "smooth"}); })); let pending = false; track.addEventListener("scroll", () => { if (pending) return; pending = true; requestAnimationFrame(() => { pending = false; update(); }); }, {passive: true}); window.addEventListener("resize", update); update(); }); })(); (function() { // A button on each block of code that copies it, as GitHub has one. The // block's own text, without the button's word; where the page cannot reach // the clipboard, the code is selected for the reader to copy. document.querySelectorAll(".doc-body .highlight").forEach(block => { const code = block.querySelector("code"); if (!code) return; const button = document.createElement("button"); button.type = "button"; button.className = "btn btn-small code-copy"; button.textContent = "Copy"; button.setAttribute("aria-label", "Copy this code"); button.addEventListener("click", () => { const done = label => { button.textContent = label; button.classList.add("is-done"); setTimeout(() => { button.textContent = "Copy"; button.classList.remove("is-done"); }, 1600); }; const select = () => { const range = document.createRange(); range.selectNodeContents(code); const selection = window.getSelection(); selection.removeAllRanges(); selection.addRange(range); done("Selected"); }; if (navigator.clipboard && window.isSecureContext) { navigator.clipboard.writeText(code.innerText).then(() => done("Copied"), select); } else { select(); } }); block.appendChild(button); }); })(); (function() { // Dublin Core or LOM, inside the record. Two projections of one description, // so they are a switch rather than two separate places to go. const tabs = Array.from(document.querySelectorAll("[data-record-scheme]")); const panels = Array.from(document.querySelectorAll("[data-record-panel]")); if (tabs.length < 2) return; tabs.forEach(tab => tab.addEventListener("click", () => { const wanted = tab.dataset.recordScheme; tabs.forEach(other => { const on = other === tab; other.classList.toggle("active", on); other.setAttribute("aria-selected", on ? "true" : "false"); }); panels.forEach(panel => { panel.hidden = panel.dataset.recordPanel !== wanted; }); })); })(); (function() { // Filled elements only, unless the reader asks for the empty ones. The choice // is remembered in this browser; storage can be missing or refuse, and then // the view simply starts compact. const view = document.getElementById("record-view-panel"); const toggle = document.querySelector("[data-record-show-empty]"); if (!view || !toggle) return; let showEmpty = false; try { showEmpty = localStorage.getItem("record-show-empty") === "1"; } catch (e) {} const apply = () => view.classList.toggle("record-compact", !showEmpty); toggle.checked = showEmpty; apply(); toggle.addEventListener("change", () => { showEmpty = toggle.checked; try { localStorage.setItem("record-show-empty", showEmpty ? "1" : "0"); } catch (e) {} apply(); }); })(); </script> </body> </html>