View Single Post
Old 6th August 2007, 16:17   #1  |  Link
check
phjbdpcrjlj2sb3h
 
check's Avatar
 
Join Date: Sep 2005
Location: Western Australia
Posts: 1,691
Centralised avisynth plugin repository

Hi all, just wondering if there are any opinions on an idea for an avisynth utility I've been mulling over for the past few weeks. I've also actually built a functioning prototype in python too, it's linked at the end of this message.

In a nutshell, the program will be a specialised repository tool for avisynth, along the lines of programs such as apt-get and yum on linux.

So far, this is what my prototype can do. It provides five functions:
o update: download a fresh copy of the repository metadata file
Code:
C:\>avup.py update
Downloading latest repository file now...
Successfully downloaded an updated repository file!
o info: print info (ie, all the metadata) on a given plugin
Code:
C:\>avup.py info limitedsharpenfaster
Name: LimitedSharpenFaster
Version: 29 Oct 2005
Author: didee
Homepage: forum.doom9.org/showthread.php?t=84196
Description: None
Functions implemented: limitedsharpen
Requires Plugins: masktools2, removegrain, warpsharp
o list: glob match for package names (this is currently folded into the info command, if no exact match of the given name is found, it assumes the input was a glob pattern and filters it against the list of packages).
Code:
C:\>avup.py info removegrain*
No exact matches, checking for glob matches now...
Matches: removegrain, removegrain-SSE3, removegrain-SSE2
o whatprovides: given an avisynth function name (ie 'xsharpen'), search the repository for a package that provides that function.
Code:
C:\>avup.py whatprovides *sharp*
Matches:
  removegrain: denoisesharpen, rsharpen
  limitedsharpenfaster: limitedsharpen
  warpsharp: warpsharp, xsharpen, unsharpmask
  removegrain-SSE3: denoisesharpen, rsharpen
  removegrain-SSE2: denoisesharpen, rsharpen
o download: download the given package.
Code:
C:\>avup.py download limitedsharpenfaster
Downloading limitedsharpenfaster now...
Successfully downloaded the plugin.
Successfully downloaded limitedsharpenfaster!

I was originally driven to write this program to help for two cases in particular:
o know a function, don't know the plugin it's part of. Useful when searching back through the doom9 archives and looking at ancient scripts in particular, but would be also useful for the many who won't remember that warpsharp contains xsharpen.
o know a plugin, don't know the latest version. Some plugins, like limitedsharpen, mvbob, removegrain are perenially asked after for the latest version, and different people have different versions. Some sort of central version control / download system would make much of this problem dissappear.

I am less interested in creating a high level package management system, which handles installation, package tracking and dependancies. Installing avisynth plugins is easy enough to do by hand, I just want a tool to make it easier to *get* these files. The true strength of a program like this would be in the above two cases.

Some issues that this program will run into:
o needs maintainers! Package management tools need people to create the packages. This is almost certainly the biggest potential problem, so I've tried to create a system which is extremely easy to use. The YAML repository metadata file is dead simple to manually edit, and the zip files just need a standardised name and that's it. The only hard part is needing to keep the repository in sync with multiple people changing it, but a basic system like svn + patches would be fine.
o needs servers & bandwidth! Probably not a real problem. I couldn't see this utility using more than 50gb/month for a long time, and I can happily donate that myself. A mirror system would be easy to implement though, and I'm sure volunteers could be found.
o People need python installed! Lies, you can pack up the script and the interpreter w/ required modules into a single executable as per AvsP. The only catch is that the interpreter + modules add up to around 2mb, which is a lot compared to the 2kb script.
o People need a GUI! That's not a problem to create at all, it would be trivial to adapt the current prototype to run with a GUI.
o ???




Sorry for the longpost, Here is the prototype, written in pure python. It works on windows and unix (whyever you'd want to run it on that..., but that's what I developed it on), and requires python 2.5 to be installed (should run with earlier versions, just with peculiar exception handling (such as keyboard interrupts not working)) along with PyYAML. Note that the repository and packages currently in there (all 5ish of them) are samples, but should be complete (apart from fft3dfilter, which is missing the library it requires).

Feedback welcome and requested
check is offline   Reply With Quote