VineFeeder is a dynamic Python-based application and **framework** that presents a graphical user interface (GUI) to act as a front-end for Devine (https://github.com/devine-dl/devine) or envied (https://github.com/envied-dl/envied) - each a video-downloader, envied being a fork of devine.
Vinefeeder enables users to more easily interact with Devine's streaming services. The project allows users to browse and select media content from multiple services, each of which is dynamically loaded as a separate module. Each service has a configuration which will work out of the box, but Devine download options may be set on a service by service basis.
Features:
*Dynamic Service Loading*: Services are loaded dynamically from a predefined folder.
Each service has its own configuration and logic, allowing flexible media handling.
*Service-Specific Parsing*: Each service can define its own method of parsing media
content, making the platform adaptable to different service architectures.
Additionally each service may store a string of download options for devine such as
video resolution or subtitle format.
*Alphabetical Service Listing*: Services are displayed as clickable buttons in
alphabetical order, enhancing the user experience.
*GUI Interface*: The interface is built using PyQt6, offering a user-friendly experience
for selecting media content.
*Category Browsing*: Services support browsing by category, allowing users to explore
content within specific genres or collections.
*Video Download*: Once media content is selected, videos can be downloaded directly
from the service using predefined tools (e.g., devine).
*Ultra-High-definition*: Videos in UHD are automatically requested from sites that provide such quality.
hlg_status in config.yaml may be set to False to not do this.
*Precision Episode Selection*: Vinefeeder handles the selection of episodes and 'feeds'
Devine one-by-one, making Devine's -w switch defunct.
**Installation**
Requirements
**python 3.12**
Python 3.12 or higher Note: PyQT6 needs PyQt6.QtWidgets
Required Python modules (install via pip):
beaupy
devine
httpx
jmespath
PyQt6
PyQt6_sip
PyYAML
rich
Scrapy
You can install the necessary VineFeeder packages with bash or a Window's Terminal. Make sure to install python modules to the same python environment (env) as Devine
First be sure to follow Devine or envied's install and set-up procedure and ensure it all works correctly to your liking.
**If you have installed Devine using Poetry and you run Devine by 'poetry run devine' then install devine again using pip, keeping the poetry install for when you use the command line directly. The pip installed version is the developer's recommended way. If you go off-piste you may break something! Both versions sit happily together**
**If you have installed Devine by any other way than via poetry or by 'pip install devine' then remove it and re-install using the correct method before running VineFeeder! The re-install should pick-up the last configuration. if not re-configure Devine. Make absolutely sure devine can be called from any folder on your system.**
**If you are using envied make sure you have installed the tool version that runs from the command envied.See https://github.com/envied-dl/envied for installation details**
if you've installed Devine or envied , via pip or uv, in a specific python environment (virtual environment - venv) , first start that environment before installing VineFeeder to the same environment.
will install a VineFeeder folder with all files. Change directory, move into VineFeeder
**Usage**
From the VineFeeder folder run the application by executing the main script:
With bash or a Window's Terminal
python vinefeeder.py
or
python vinefeeder.py -help
As set-up on start it will run with zero modification if Devine is correctly installed. There are six UK services and TVNZ active.
Regard TVNZ as experimental for the time being. For one thing Devine's TVNZ service fails on some
Sports titles and the VineFeeder service is still in testing. If Devine fails use the URL with Ozivine -
there are reports it works. This Ozivine fork has a downloader https://github.com/liam8888999/ozivine
It is recommended to use PowerShell or Terminal in Windows and a Unix-like terminal in Linux - but select, via
preferences, a dark background for better contrast with the colours used in Vinefeeder.
Note: envied has an issue releasing screen control back to VineFeeder when a download is finished. There is an option in the top-level config.yaml to reset the terminal after a download. As delivered the tetrminal-reset option is off. I don't think the issue appears with Windows; it has not been tested.
The reset clears screen history - which you may not want. So use batch mode. Select as many downloads as you need and the run the batch download. Download history will remain on the screen until all dowloads are finished.
**Interacting with Services**
Once the GUI is launched, you may interact with various streaming services by clicking on their corresponding buttons.
The 'URL or search' box MAY be used for an immediate search entry or direct-download URL or it may be left empty.
If left empty a menu is offered.
A search for a series-name will usually end with a list of episodes to select from.
If a series-url is pasted in the text-box then Vinefeeder will immediatly pass the url to the downloader. And being a series-url the downloader will download the complete series. So if you wish to select episodes use a search term.
**Help**
Starting VineFeeder with python vinefeeder.py --help will show options to set a service congfiguration - if required.
In the top level folder is config.yaml. Open the file in a text editor and set your preferred DOWNLOAD_ORCHESTRATOR to devine or envied.
**Service Configuration**
Most users will not need alter any configuration to download videos!
However, if you have, in your past use of Devine resorted to setting Devine-download options other than -w etc.
You may continue to do with VineFeeder only you do so just once, in the config.yaml for each service.
Each service's config.yaml has an 'options:' entry just add the string you would use with devine e.g -q 720 to
Again the process is much the same as in fetch_videos() a web site has its html harvested,
a script is extracted from which json is pulled using the facility methods in BaseLoader and parsing _utils.
FETCH_VIDEO_BY_CATEGORY
Displays the media_dict from congig.yaml - so put any category heading and links in the new service config.
Once a category is selected, again parse the json and follow an existing service for a model answer, adjusting to suit the syntax required by our new service.
Potentially, you may not implement this if the site does not provide a worthwhile browse by category list,
or the data cannot be parsed readily. The service U falls into this category.
VineFeeder will dynamically detect and load the new services on the next start.
**Special Devine Commands**
If your use requirements are such that each video you download using Devine needs many different parameters to be passed
to the downloader, and set different each time, this tool may not meet your needs:
see https://github.com/billybanana80/DevineGUI
If however you are happy to set your download parameters once, variable for each service, the service's config.yaml,
then this project may work well for you, and provide the front-end Devine has always lacked.
**Contributing**
Contributors are welcomed to add services to front-end those services provided by Devine - see above.
Presently six UK services and New Zealand's TVNZ are fully configured; contributions for other services welcome.