From 9468448a5441c06ef1d8bfa38eadced931c29cb8 Mon Sep 17 00:00:00 2001 From: Roland Date: Tue, 14 Apr 2026 15:00:49 -0600 Subject: [PATCH] Modifying Video/Channel/RSS Downloaders so that they can download videos, but audio only. These audio files are grouped under their channel directories. --- app/src/App.css | 16 ++++ app/src/components/Download.js | 131 ++++++++++++++++++++++++------ app/src/components/Vars.js | 13 +++ app/src/components/VideoPlayer.js | 68 ++++++++++++++-- modules/videos/__init__.py | 11 ++- modules/videos/conftest.py | 49 +++++++++++ modules/videos/downloader.py | 91 ++++++++++++++------- modules/videos/lib.py | 27 +++++- modules/videos/models.py | 4 + modules/videos/test/test_api.py | 34 ++++++++ modules/videos/video/lib.py | 4 +- test/big_buck_bunny.mp3 | Bin 0 -> 129295 bytes wrolpi/files/lib.py | 2 + wrolpi/files/models.py | 4 + wrolpi/schema.py | 9 +- 15 files changed, 392 insertions(+), 71 deletions(-) create mode 100644 test/big_buck_bunny.mp3 diff --git a/app/src/App.css b/app/src/App.css index 2529efbf..f6ee8494 100644 --- a/app/src/App.css +++ b/app/src/App.css @@ -272,6 +272,22 @@ textarea.otp { margin: 0 auto; /* Center the video horizontally */ } +.audio-poster-container { + position: relative; + display: block; + text-align: center; +} + +.audio-poster-overlay { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + color: rgba(255, 255, 255, 0.85); + text-shadow: 0 0 20px rgba(0, 0, 0, 0.6); + pointer-events: none; +} + table.ratio-table td.equal-width { width: 48%; } diff --git a/app/src/components/Download.js b/app/src/components/Download.js index 53ff272d..63175306 100644 --- a/app/src/components/Download.js +++ b/app/src/components/Download.js @@ -28,8 +28,10 @@ import { import { channelFrequencyOptions, days30Option, + defaultAudioFormatOption, defaultVideoFormatOption, defaultVideoResolutionOptions, + downloadAudioFormatOptions, Downloaders, downloadFormatOptions, downloadOrderOptions, @@ -320,6 +322,39 @@ export function VideoFormatSelectorForm({form, name = 'video_format', path = 'se } +export function AudioOnlyToggle({form, onChange}) { + return +} + +export function AudioFormatSelectorForm({form, name = 'audio_format', path = 'settings.audio_format'}) { + const [inputProps, inputAttrs] = form.getSelectionProps({ + name, + path, + defaultValue: defaultAudioFormatOption, + }); + + return <> + + + +} + function VideoDurationLimit({form, name, path, label, helpContent, placeholder, helpPosition}) { return - - - setUserChangedResolutions(true)} - /> - - - + + + + {form.formData?.settings?.audio_only + ? + + + + + : + + setUserChangedResolutions(true)} + /> + + + + + + } @@ -768,6 +817,8 @@ export function ChannelDownloadForm({ video_count_limit: null, video_format: defaultVideoFormat, video_resolutions: configResolutions, + audio_only: false, + audio_format: defaultAudioFormatOption, writesubtitles: false, writeautomaticsub: false, writethumbnail: false, @@ -886,17 +937,29 @@ export function ChannelDownloadForm({ - - - setUserChangedResolutions(true)} - /> - - - + + + + {form.formData?.settings?.audio_only + ? + + + + + : + + setUserChangedResolutions(true)} + /> + + + + + + } @@ -1110,6 +1173,8 @@ export function RSSDownloadForm({download, submitter, onDelete, onCancel, action title_include: null, video_resolutions: configResolutions, video_format: defaultVideoFormat, + audio_only: false, + audio_format: defaultAudioFormatOption, writesubtitles: false, writeautomaticsub: false, writethumbnail: false, @@ -1196,17 +1261,29 @@ export function RSSDownloadForm({download, submitter, onDelete, onCancel, action - - - setUserChangedResolutions(true)} - /> - - - + + + + {form.formData?.settings?.audio_only + ? + + + + + : + + setUserChangedResolutions(true)} + /> + + + + + + } diff --git a/app/src/components/Vars.js b/app/src/components/Vars.js index 6c895a4e..61a41e6a 100644 --- a/app/src/components/Vars.js +++ b/app/src/components/Vars.js @@ -120,10 +120,23 @@ export const defaultVideoResolutionOptions = ['1080p', '720p', '480p', 'maximum' export const downloadFormatOptions = [ {key: 'mp4', text: '.mp4', value: 'mp4'}, {key: 'mkv', text: '.mkv', value: 'mkv'}, + {key: 'ogg', text: '.ogg', value: 'ogg'}, + {key: 'webm', text: '.webm', value: 'webm'}, ] export const defaultVideoFormatOption = 'mp4'; +export const downloadAudioFormatOptions = [ + {key: 'mp3', text: '.mp3', value: 'mp3'}, + {key: 'opus', text: '.opus', value: 'opus'}, + {key: 'm4a', text: '.m4a', value: 'm4a'}, + {key: 'flac', text: '.flac', value: 'flac'}, + {key: 'vorbis', text: '.ogg', value: 'vorbis'}, + {key: 'wav', text: '.wav', value: 'wav'}, +]; + +export const defaultAudioFormatOption = 'mp3'; + export const Downloaders = { Archive: 'archive', File: 'file', diff --git a/app/src/components/VideoPlayer.js b/app/src/components/VideoPlayer.js index c4ba63ef..24616867 100644 --- a/app/src/components/VideoPlayer.js +++ b/app/src/components/VideoPlayer.js @@ -1,4 +1,4 @@ -import React, {useContext, useState} from 'react'; +import React, {useContext, useEffect, useState} from 'react'; import {useHotkeys} from 'react-hotkeys-hook'; import {deleteVideos, downloadVideoMetadata, tagFileGroup, untagFileGroup} from "../api"; import {Link, useNavigate, useParams} from "react-router"; @@ -25,7 +25,7 @@ import {ThemeContext} from "../contexts/contexts"; import {Button, darkTheme, Header, Icon, Loader, Segment, Tab} from "./Theme"; import {VideoCard} from "./Videos"; import {TagsSelector} from "../Tags"; -import {Comment, CommentGroup, Input, Label} from "semantic-ui-react"; +import {Comment, CommentGroup, Input, Label, Transition} from "semantic-ui-react"; const MEDIA_PATH = '/media'; @@ -249,6 +249,26 @@ function VideoPage({videoFile, prevFile, nextFile, fetchVideo, ...props}) { } }, {enableOnFormTags: false}); + const isAudioFile = videoFile?.mimetype?.startsWith('audio/'); + const [showAudioOverlay, setShowAudioOverlay] = useState(!!isAudioFile); + const [audioPosterHover, setAudioPosterHover] = useState(false); + const [audioPlaying, setAudioPlaying] = useState(false); + useEffect(() => { + if (!isAudioFile) return; + setShowAudioOverlay(true); + const timer = setTimeout(() => setShowAudioOverlay(false), 3000); + return () => clearTimeout(timer); + }, [isAudioFile]); + useEffect(() => { + const el = videoRef.current; + if (!isAudioFile || !el) return; + const onPlay = () => setAudioPlaying(true); + const onPause = () => setAudioPlaying(false); + el.addEventListener('play', onPlay); + el.addEventListener('pause', onPause); + return () => { el.removeEventListener('play', onPlay); el.removeEventListener('pause', onPause); }; + }, [isAudioFile]); + if (videoFile === null) { return ; } @@ -313,10 +333,10 @@ function VideoPage({videoFile, prevFile, nextFile, fetchVideo, ...props}) { - +
Video File{isAudio ? 'Audio File' : 'Video File'} {video['video_path'] - ? <> + ? <> {video['video_path']} {fileSize(videoPathFile)} : 'Unknown'} @@ -434,6 +454,7 @@ function VideoPage({videoFile, prevFile, nextFile, fetchVideo, ...props}) { } let videoSource = ; + const isAudio = videoFile.mimetype && videoFile.mimetype.startsWith('audio/'); let prevNextVideosSegment =

No related videos found.

; if (prevFile || nextFile) { @@ -463,7 +484,42 @@ function VideoPage({videoFile, prevFile, nextFile, fetchVideo, ...props}) { - } diff --git a/modules/videos/__init__.py b/modules/videos/__init__.py index 3318dade..e41904e9 100644 --- a/modules/videos/__init__.py +++ b/modules/videos/__init__.py @@ -1,6 +1,7 @@ import asyncio from typing import Callable, List, Tuple +from sqlalchemy import or_ from sqlalchemy.orm import Session from modules.videos.models import Video @@ -24,7 +25,7 @@ async def video_modeler(progress_callback: Callable[[int], None] = None): with get_db_session(commit=True) as session: file_groups = session.query(FileGroup, Video).filter( FileGroup.indexed != True, - FileGroup.mimetype.like('video/%'), + or_(FileGroup.mimetype.like('video/%'), FileGroup.mimetype.like('audio/%')), ).outerjoin(Video, Video.file_group_id == FileGroup.id) \ .limit(VIDEO_PROCESSING_LIMIT) file_groups: List[Tuple[FileGroup, Video]] = list(file_groups) @@ -79,10 +80,14 @@ async def video_modeler(progress_callback: Callable[[int], None] = None): def video_cleanup(): logger.info('Claiming Videos for their Channels') with get_db_curs(commit=True) as curs: - # Delete all Videos if the FileModel no longer contains a video. + # Delete all Videos if the FileModel no longer contains a video or audio file. curs.execute(''' WITH deleted AS - (UPDATE file_group SET model = null WHERE model = 'video' AND mimetype NOT LIKE 'video/%' RETURNING id) + (UPDATE file_group SET model = null + WHERE model = 'video' + AND mimetype NOT LIKE 'video/%%' + AND mimetype NOT LIKE 'audio/%%' + RETURNING id) DELETE FROM video WHERE file_group_id = ANY (select id from deleted) diff --git a/modules/videos/conftest.py b/modules/videos/conftest.py index 27eec02c..2a0774ea 100644 --- a/modules/videos/conftest.py +++ b/modules/videos/conftest.py @@ -192,6 +192,55 @@ def video_factory(test_session, test_directory): return factory +@pytest.fixture +def audio_factory(test_session, test_directory): + """Creates audio-only Video records for testing.""" + + def factory(channel_id: int = None, title: str = None, upload_date=None, + with_info_json: dict = None, with_poster_ext: str = None, + source_id: str = None, tag_names: List[str] = None) -> Video: + title = title or str(uuid4()) + tag_names = tag_names or list() + + if channel_id: + channel = Channel.find_by_id(test_session, channel_id) + path = (channel.directory or test_directory) / f'{title}.mp3' + path.parent.mkdir(exist_ok=True, parents=True) + else: + (test_directory / 'videos/NO CHANNEL').mkdir(exist_ok=True, parents=True) + path = test_directory / f'videos/NO CHANNEL/{title}.mp3' + + assert str(path).startswith(str(test_directory)), 'Audio must be in the test directory' + + shutil.copy(PROJECT_DIR / 'test/big_buck_bunny.mp3', path) + + info_json_path = None + if with_info_json: + with_info_json = {'duration': 5, 'epoch': 12345678} if with_info_json is True else with_info_json + info_json_path = path.with_suffix('.info.json') + info_json_path.write_text(json.dumps(with_info_json)) + + poster_path = None + if with_poster_ext: + poster_path = path.with_suffix(f'.{with_poster_ext.lstrip(".")}') + Image.new('RGB', (25, 25)).save(poster_path) + + paths = list(filter(None, (path, info_json_path, poster_path))) + + video = Video.from_paths(test_session, *paths) + video.channel_id = channel_id + video.source_id = source_id or title + video.file_group.published_datetime = upload_date + video.validate(test_session) + + for tag_name in tag_names: + video.add_tag(test_session, tag_name) + + return video + + return factory + + @pytest.fixture def video_download_manager(test_download_manager) -> DownloadManager: """Get a DownloadManager ready to download Videos and Channels.""" diff --git a/modules/videos/downloader.py b/modules/videos/downloader.py index f7ae73d4..9d1c8770 100755 --- a/modules/videos/downloader.py +++ b/modules/videos/downloader.py @@ -91,6 +91,17 @@ def _log_ytdlp_versions(): logger.info(f'yt-dlp={ytdlp_version} yt-dlp-ejs={ejs_version}') +# yt-dlp codec names that differ from their output file extension. +AUDIO_CODEC_EXTENSION_MAP = { + 'vorbis': 'ogg', +} + + +def audio_output_extension(audio_format: str) -> str: + """Map a yt-dlp audio codec name to the file extension it actually produces.""" + return AUDIO_CODEC_EXTENSION_MAP.get(audio_format, audio_format) + + VIDEO_RESOLUTION_MAP = { '360p': [ '134+bestaudio', '230+bestaudio', 'mp4-360p', 'res:360', @@ -639,6 +650,8 @@ class VideoDownloader(Downloader, ABC): logger.debug(f'Downloading {url} with {tag_names=}') effective = get_effective_video_settings(settings) + audio_only = effective.get('audio_only', False) + audio_format = effective.get('audio_format', 'mp3') logs = None # noqa try: @@ -647,29 +660,34 @@ class VideoDownloader(Downloader, ABC): video_resolutions_str = ','.join(j for i in video_resolutions for j in VIDEO_RESOLUTION_MAP[i]) video_format = effective['video_format'] - video_path, entry = self.prepare_filename(url, out_dir, video_resolutions_str, video_format) + video_path, entry = self.prepare_filename(url, out_dir, video_resolutions_str, video_format, + audio_only=audio_only, audio_format=audio_format) if settings.get('download_metadata_only'): # User has requested refresh of video metadata, skip the rest of the video downloader. return await self.download_info_json(download, video_path) + # Common yt-dlp flags shared by both video and audio-only downloads. cmd = ( str(YT_DLP_BIN), - '-f', video_resolutions_str, - '--match-filter', '!is_live', # Do not attempt to download Live videos. + '--match-filter', '!is_live', '--sub-format', DEFAULT_CAPTION_FORMAT, '--convert-subs', DEFAULT_CAPTION_FORMAT, '--convert-thumbnails', DEFAULT_POSTER_FORMAT, - '--merge-output-format', video_format, '--no-cache-dir', '--newline', '--compat-options', 'no-live-chat', - # Get top 20 comments, 10 replies per parent. '--write-comments', '--extractor-args', 'youtube:max_comments=all,20,all,10;comment_sort=top', - # Use experimental feature to merge files. - '--ppa', 'Merger+ffmpeg_o1:-strict -2', ) + if audio_only: + cmd = (*cmd, '-f', 'bestaudio', '-x', '--audio-format', audio_format) + else: + cmd = (*cmd, + '-f', video_resolutions_str, + '--merge-output-format', video_format, + '--ppa', 'Merger+ffmpeg_o1:-strict -2', + ) if effective['continue_dl']: cmd = (*cmd, '--continue') if effective['writesubtitles']: @@ -717,19 +735,20 @@ class VideoDownloader(Downloader, ABC): location=location, ) - preferred_path = video_path.with_suffix(f'.{video_format}') + output_format = audio_output_extension(audio_format) if audio_only else video_format + preferred_path = video_path.with_suffix(f'.{output_format}') if not video_path.is_file() and preferred_path.is_file(): - # Prepared filename does not exist, but video with preferred video extension does, it was probably - # remuxed by yt-dlp. + # Prepared filename does not exist, but file with preferred extension does, it was probably + # remuxed/converted by yt-dlp. video_path = preferred_path - logger.info(f'Using preferred video file which exists: {preferred_path}') + logger.info(f'Using preferred file which exists: {preferred_path}') if not video_path.is_file(): # yt-dlp may have appended the real extension to a bogus one (e.g. .NA.mp4 from a playlist entry). - appended_path = video_path.parent / f'{video_path.name}.{video_format}' + appended_path = video_path.parent / f'{video_path.name}.{output_format}' if appended_path.is_file(): video_path = appended_path - logger.info(f'Using video file with appended extension: {appended_path}') + logger.info(f'Using file with appended extension: {appended_path}') if video_path.suffix == '.part': return DownloadResult( @@ -754,7 +773,7 @@ class VideoDownloader(Downloader, ABC): retry_seconds=retry_seconds, ) - if not ffmpeg_video_complete(video_path): + if not audio_only and not ffmpeg_video_complete(video_path): return DownloadResult( success=False, error='Video was incomplete', @@ -806,8 +825,8 @@ class VideoDownloader(Downloader, ABC): await video.get_ffprobe_json() - # Check that video has both audio and video streams. - if not video.get_streams_by_codec_type('video'): + # Check that the download has the expected streams. + if not audio_only and not video.get_streams_by_codec_type('video'): return DownloadResult( success=False, error='Video was downloaded but did not contain video stream', @@ -816,7 +835,7 @@ class VideoDownloader(Downloader, ABC): if not video.get_streams_by_codec_type('audio'): return DownloadResult( success=False, - error='Video was downloaded but did not contain audio stream', + error='Download did not contain audio stream', location=location, ) logger.info(f'Successfully downloaded video {url} {video}') @@ -918,34 +937,48 @@ class VideoDownloader(Downloader, ABC): return None @staticmethod - def prepare_filename(url: str, out_dir: pathlib.Path, video_resolutions: str, video_format: str) \ + def prepare_filename(url: str, out_dir: pathlib.Path, video_resolutions: str, video_format: str, + audio_only: bool = False, audio_format: str = 'mp3') \ -> Tuple[pathlib.Path, dict]: - """Get the full path of a video file from its URL using yt-dlp.""" + """Get the full path of a video/audio file from its URL using yt-dlp.""" if not out_dir.is_dir(): raise ValueError(f'Output directory does not exist! {out_dir=}') - # YoutubeDL expects specific options, add onto the default options + # YoutubeDL expects specific options, add onto the default options. + # Deep copy to avoid mutating the shared singleton config dict. config = get_videos_downloader_config() - options = config.yt_dlp_options + options = copy.deepcopy(config.yt_dlp_options) + + if audio_only: + options['format'] = 'bestaudio' + options['postprocessors'] = [{ + 'key': 'FFmpegExtractAudio', + 'preferredcodec': audio_format, + }] + # merge_output_format is not used for audio-only. + options.pop('merge_output_format', None) + else: + options['merge_output_format'] = video_format + options['format'] = video_resolutions + # Convert WROLPi-specific variables to yt-dlp syntax converted_format = convert_wrolpi_filename_format(config.file_name_format) # yt-dlp expects the absolute path. options['outtmpl'] = f'{out_dir}/{converted_format}' - options['merge_output_format'] = video_format - # options['remuxvideo'] = video_format - options['format'] = video_resolutions options['cachdir'] = YTDLP_CACHE_DIR + output_ext = audio_output_extension(audio_format) if audio_only else video_format + # Create a new YoutubeDL for the output directory. ydl = YoutubeDL(copy.deepcopy(options)) ydl.params['logger'] = ydl_logger ydl.add_default_info_extractors() - # Get the path where the video will be saved. + # Get the path where the file will be saved. try: entry = extract_info(url, ydl=ydl, process=True) # If the entry is a playlist (e.g. Twitter/X post with multiple videos), - # use the first video entry for filename preparation. + # use the first entry for filename preparation. if entry.get('entries'): entries = list(entry['entries']) if not isinstance(entry['entries'], list) else entry['entries'] if entries: @@ -967,11 +1000,11 @@ class VideoDownloader(Downloader, ABC): parent = full_path.parent filename, _ = split_path_stem_and_suffix(full_path.name) - # Trim long filename, add video suffix, add back into parent directory. + # Trim long filename, add output suffix, add back into parent directory. filename = escape_file_name(filename) - final_filename = parent / f'{filename}.{video_format}' + final_filename = parent / f'{filename}.{output_ext}' final_filename = trim_file_name(final_filename) - logger.debug(f'Video file name was too long. Trimmed to: {final_filename.name}') + logger.debug(f'File name was too long. Trimmed to: {final_filename.name}') # Get entry info json. options['outtmpl'] = str(final_filename) diff --git a/modules/videos/lib.py b/modules/videos/lib.py index 1d97e9cf..06b4cad0 100644 --- a/modules/videos/lib.py +++ b/modules/videos/lib.py @@ -144,7 +144,8 @@ def validate_video(session: Session, video: Video, channel_generate_poster: bool video.file_group.published_datetime = json_published_datetime or published_date video.source_id = video.source_id or source_id - if channel_generate_poster: + is_audio = video.file_group.mimetype and video.file_group.mimetype.startswith('audio/') + if channel_generate_poster and not is_audio: # Try to convert/generate, but keep the old poster if those fail. new_poster_path, duration = convert_or_generate_poster(video) or video.poster_path if new_poster_path: @@ -565,6 +566,8 @@ class VideoDownloaderConfigValidator: download_missing_video_comments: bool = False user_agent: str = '' sleep_requests: float = 0.75 + audio_only: bool = False + audio_format: str = 'mp3' def __post_init__(self): allowed_fields = {i.name for i in dataclasses.fields(VideoDownloaderConfigYtDlpOptionsValidator)} @@ -594,6 +597,8 @@ class VideoDownloaderConfig(ConfigFile): download_missing_video_comments=False, user_agent='', sleep_requests=0.75, + audio_only=False, + audio_format='mp3', ) validator = VideoDownloaderConfigValidator @@ -690,6 +695,22 @@ class VideoDownloaderConfig(ConfigFile): def sleep_requests(self, value: float): self.update({**self._config, 'sleep_requests': value}) + @property + def audio_only(self) -> bool: + return self._config.get('audio_only', False) + + @audio_only.setter + def audio_only(self, value: bool): + self.update({**self._config, 'audio_only': value}) + + @property + def audio_format(self) -> str: + return self._config.get('audio_format', 'mp3') + + @audio_format.setter + def audio_format(self, value: str): + self.update({**self._config, 'audio_format': value}) + def import_config(self, file: pathlib.Path = None, send_events=False): super().import_config(file, send_events) self.successful_import = True @@ -718,7 +739,7 @@ def set_test_downloader_config(enabled: bool): INHERITABLE_VIDEO_SETTINGS = { 'video_resolutions', 'video_format', 'writesubtitles', 'writeautomaticsub', 'writethumbnail', 'writeinfojson', 'yt_dlp_extra_args', 'sleep_requests', - 'user_agent', 'continue_dl', 'nooverwrites', + 'user_agent', 'continue_dl', 'nooverwrites', 'audio_only', 'audio_format', } # Subset of inheritable settings allowed at channel/RSS level. @@ -740,6 +761,8 @@ def _extract_global_inheritable(config: VideoDownloaderConfig) -> dict: 'user_agent': config.user_agent, 'continue_dl': config.continue_dl, 'nooverwrites': config.nooverwrites, + 'audio_only': config.audio_only, + 'audio_format': config.audio_format, } diff --git a/modules/videos/models.py b/modules/videos/models.py index 5991c16e..2371074e 100644 --- a/modules/videos/models.py +++ b/modules/videos/models.py @@ -301,6 +301,10 @@ class Video(ModelHelper, Base): for file_group in self.file_group.my_video_files(): return file_group['path'] + # Or the first audio file (for audio-only downloads). + for file_group in self.file_group.my_audio_files(): + return file_group['path'] + @property def poster_file(self) -> Optional[dict]: for file_group in self.file_group.my_poster_files(): diff --git a/modules/videos/test/test_api.py b/modules/videos/test/test_api.py index 145304b1..e88ca711 100644 --- a/modules/videos/test/test_api.py +++ b/modules/videos/test/test_api.py @@ -264,6 +264,40 @@ async def test_search_videos(test_session, video_factory, assert_video_search, s await assert_video_search(order_by=order_by) +@pytest.mark.asyncio +async def test_search_audio_only(test_session, audio_factory, assert_video_search): + """Audio-only files should be searchable alongside videos.""" + audio1 = audio_factory(title='podcast episode one', upload_date='2025-01-01', with_info_json=True) + audio2 = audio_factory(title='podcast episode two', upload_date='2025-01-02', with_info_json=True) + test_session.commit() + + assert audio1.file_group.mimetype == 'audio/mpeg' + assert audio1.file_group.model == 'video' + + # Both audio files are returned. + await assert_video_search(assert_total=2, order_by='published_datetime') + + # Search by title. + await assert_video_search(search_str='podcast', assert_total=2) + await assert_video_search(search_str='episode one', assert_total=1, assert_ids=[audio1.id]) + + +@pytest.mark.asyncio +async def test_search_mixed_video_and_audio(test_session, video_factory, audio_factory, assert_video_search): + """Audio and video files should both appear in search results.""" + video = video_factory(title='tutorial video', upload_date='2025-01-01', with_video_file=True) + audio = audio_factory(title='tutorial audio', upload_date='2025-01-02', with_info_json=True) + test_session.commit() + + # Both appear when searching. + await assert_video_search(assert_total=2, order_by='published_datetime') + await assert_video_search(search_str='tutorial', assert_total=2) + + # Each can be found individually. + await assert_video_search(search_str='video', assert_total=1, assert_ids=[video.id]) + await assert_video_search(search_str='audio', assert_total=1, assert_ids=[audio.id]) + + @pytest.mark.asyncio async def test_delete_video(async_client, test_session, video_factory, test_download_manager): """When a Video record is deleted, the FileGroup should be deleted. The URL is added to the diff --git a/modules/videos/video/lib.py b/modules/videos/video/lib.py index f479729e..00d50cf7 100644 --- a/modules/videos/video/lib.py +++ b/modules/videos/video/lib.py @@ -95,8 +95,8 @@ def search_videos( headline: bool = False, ) -> Tuple[List[dict], int]: tag_names = tag_names or [] - # Only search videos. - wheres = ["fg.mimetype LIKE 'video/%%'"] + # Search videos and audio-only files. + wheres = ["(fg.mimetype LIKE 'video/%%' OR fg.mimetype LIKE 'audio/%%')"] joins = list() join_video = False diff --git a/test/big_buck_bunny.mp3 b/test/big_buck_bunny.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..dee502f9db32893a2b20d4c5cab1e05d5e242df9 GIT binary patch literal 129295 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%0AGUZ_Y_x(BXO~M8W>HlI^3&Y2ruJN| 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ÐgK$N!+T&(iXN!;w{)udi@%Tzkm3C+_LrP() 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 literal 0 HcmV?d00001 diff --git a/wrolpi/files/lib.py b/wrolpi/files/lib.py index b512ba96..b2583443 100644 --- a/wrolpi/files/lib.py +++ b/wrolpi/files/lib.py @@ -537,6 +537,8 @@ def get_primary_file(files: Union[Tuple[pathlib.Path], Iterable[pathlib.Path]]) return file if mimetype.startswith('video/'): return file + if mimetype.startswith('audio/'): + return file if mimetype.startswith('application/epub'): return file if mimetype.startswith('application/pdf') and not has_epub: diff --git a/wrolpi/files/models.py b/wrolpi/files/models.py index 1285ff8b..9cb93686 100644 --- a/wrolpi/files/models.py +++ b/wrolpi/files/models.py @@ -326,6 +326,10 @@ class FileGroup(ModelHelper, Base): """Return all my Files that are videos.""" return self.my_files('video/') + def my_audio_files(self): + """Return all my Files that are audio.""" + return self.my_files('audio/') + def my_json_files(self): """Return all my Files that are JSON.""" return self.my_files('application/json') diff --git a/wrolpi/schema.py b/wrolpi/schema.py index 26da03aa..a60f954b 100644 --- a/wrolpi/schema.py +++ b/wrolpi/schema.py @@ -252,6 +252,8 @@ class DownloadSettings: user_agent: Optional[str] = None continue_dl: Optional[bool] = None nooverwrites: Optional[bool] = None + audio_only: Optional[bool] = None + audio_format: Optional[str] = None def __post_init__(self): if self.excluded_urls and self.excluded_urls.endswith(','): @@ -269,8 +271,11 @@ class DownloadSettings: if self.download_order not in (None, 'newest', 'oldest', 'views'): raise ValidationError(f'Download order must be one of newest, oldest, views, or null.') - if self.video_format not in (None, 'mp4', 'mkv'): - raise ValidationError(f'Download order must be one of mp4, mkv, or null.') + if self.video_format not in (None, 'mp4', 'mkv', 'ogg', 'webm'): + raise ValidationError(f'Video format must be one of mp4, mkv, ogg, webm, or null.') + + if self.audio_format not in (None, 'mp3', 'opus', 'm4a', 'flac', 'vorbis', 'wav'): + raise ValidationError(f'Audio format must be one of mp3, opus, m4a, flac, vorbis, wav, or null.') valid_resolutions = ('360p', '480p', '720p', '1080p', '1440p', '2160p', 'maximum') if not all(i in valid_resolutions for i in self.video_resolutions):