From BlenderWiki

Jump to: navigation, search
Note: This is an archived version of the Blender Developer Wiki. The current and active wiki is available on wiki.blender.org.

Google Summer of Code 2007 Proposal

This proposal deals mainly with the creation of a brand new online system for the management and distribution of python scripts for Blender, and also includes an optional (but strived for) script (that will, probably, have limited functionality) for use within Blender to interface with the online system. The advantages to this approach (over an alternative proposal) include:

  • easy for authors to use
  • heightened visibility (an online system is much more accessible, indexed by search engines, etc.)
  • greater potential for expansion
  • easier to casually browse (better meta-data, pictures, descriptions, hyperlinks, etc.)

Project Title

Online Blender python script management system

Synopsis

The goal of this project will be the creation of an online repository and management system for Blender python scripts. It will be similar in concept to the Python Cheese Shop/Python Package Index (pypi) [1]. It will provide an interface for users to browse scripts within the repository, as well as allow registered authors to upload their scripts to the repository. Additionally, it will provide an interface for external scripts or programs to query the script database for scripts and script updates.

Benefits to the Blender Community

The online script repository will attempt to address the following problems currently found in the python-scripting community:

  1. Disarray. Currently, Python scripts created for Blender are scattered across forums, authors' websites, and other web (and non-web) locations. There is no central location for retrieving even half of these scripts. This leads to...
  2. Circulation of out-of-date versions. Often, links to certain scripts from web sites will be out of date, or will be hosting a version of a script that has since been updated by the author.
  3. Duplication of effort. Without an organized system, many scripts are created "twice" because one of the authors was not aware that a script had already been created to fulfill a particular need.
  4. Fragmented authorship. Very few scripts have been created as a "team effort." Most script authors work (and struggle) on small, fragmented scripts, or are working on scripts that could be benefited by a multi-person team.
  5. Limited script inclusion with the Blender releases. The official Blender release cannot and should not include every single script. The download would be too large, and the maintenance overwhelming. Not only that, but it is often hard for the authors to "perfect" their scripts for release status.
  6. Lack of synchronization. There have been some efforts to help users keep their "official release scripts" up to date. However, there is no real mechanism in place to help users stay up to date with any of the other scripts they might have chose to add to their collection.

Deliverables

1. An online system for storing and downloading scripts, with the following characteristics:

  • Allow registered authors to upload new scripts and update existing scripts within the repository
  • Allow public users to search, browse, and download the scripts residing in the repository
  • Provide a data interface for external systems (such as a script within Blender) to query the script database for scripts and script updates.

2. (optional; only as time allows) The creation of a script for use within Blender to allow the user to install and update their scripts locally.

Project Details

The project's goal will be to create an online repository for Blender python script management and distribution. It will be functionally similar to other repositories such as: The Python Cheese Shop [1], PEAR [2], Firefox Extensions [3], and, a preliminary prototype, the BPyC [4]. However, it will be tailored to best suit the needs and environment of Blender and the Blender community.

It's primary goal will be to create a web interface for authors to upload and distribute their scripts and for users to browse and locate necessary scripts. Another goal will be a data interface that will allow other scripts, programs, or systems to query the repository for script information and updates, and an associated script within Blender that will utilize this interface to allow a user to download and update their scripts locally.

Feature Details

Some main features of the system will be as follows:

  • A simple, but secure, registration and login process.
  • Registered authors can upload scripts to the repository via a web-based interface.
  • Public users can browse the repository online, and download scripts in an easy-to-install form.
  • Administrators will be given the tools necessary to manage scripts and users.
  • An author can update a script previously uploaded, the old version will be saved, and the update will be noted and recorded by the system.
  • A search function
  • Scripts can be tagged with helpful meta-data such as version numbers, screenshots, categories, descriptions, and keywords.
  • Scripts reviewed by administrators can be assigned a security level (users will be warned if the script has not been reviewed or designated as safe).
  • A public data interface to allow external systems to query the repository for script information, updates, and downloads.

Some additional features that will be researched:

  • Utilizing an underlying versioning system (such as CVS or SVN)
  • Registering users to support stored preferences, download history, notification of updates, and other special web site features.
  • Per-script user ratings, comments, or even a mini-bug tracking system
  • Script packages (multiple, independent scripts bundled as a single download)
  • A script to allow users to browse, download, install, and update scripts from the repository, all from within Blender.

I am willing to initially provide my own web host and address for this project, but would be interested in integrating this with blender.org. Ideally, the final web host for this project should be determined before any work begins to ensure compatible technologies and to minimize the work spent on transferring the system from one host to another. I am tentatively planning on a PHP/MySQL backend, but am able to work with a variety of technologies.

User Experience

A few use-case scenarios for reference:

1. An author wishes to make a script publicly available.

Online, he logs in (or signs up for an account if he has none), navigates to his "control panel," and selects an option to add a new script. He then fills in the necessary descriptive information, uploads the files, and submits the information. The script is then accessible for editing and updating from his control panel, and other users can download and view it in the catalog.

2. An author wishes to update an existing script with a new version.

Online, he logs in, navigates to his "control panel," and selects the desired script from a list of scripts he is in charge of. From here, he can choose an option to add a new version to the script. He then fills in the necessary descriptive information, uploads the new files, and submits the information. Although the older versions are still available for download, the new version is presented foremost to the users browsing the catalog, and external/internal tracking systems (such as the script installer within Blender) will recognize that there is a new version available.

3. A user would like to install a script from the catalog from within Blender.

The user invokes the script manager from a menu, and is presented with a list of all installed scripts. They skip over all of this and locate and click on a "download" button towards the bottom of the window. Following this, a new screen is presented, the user selects the catalog to use, and the screen is updated with information regarding the connection status ("Connecting...", "Loading script lists...", etc.). Upon a successful connection, the user is then presented with a list of scripts in the catalog with options and information for browsing, filtering, and searching through them. As the user browses the scripts, visual cues and options will indicate whether the script in the catalog is currently installed, is installed but has an update available, or is not installed at all. After finding and selecting the scripts they wish to download and install, the user clicks on the "install" button located toward the bottom of the screen, and is presented with a download wait screen. After the download completes, the user will be given the opportunity to correct any installation conflicts. After the user is confident that everything is correct, they click on the "continue" button located toward the bottom of the window, are presented with a brief "Installing your script..." message, followed by an "Updating the script menus..." message, and, finally, are presented with the list of all installed scripts. Scripts that are installed from an online catalog will be presented with visual differences from scripts added using other means, and will be listed with an update option when an update is available.

Project Schedule

Work can begin as soon as this application is accepted, and I am available full-time this summer. I have already created a functional prototype [4], and I should be able to transfer most of the concepts from there to a functional, base system in about a month's time. The second month will be spent in adding additional features not found in the original prototype (such as a search option), and developing and refining the public data interface. The third month will be spent refining the code, refining the user interface, and, if time allows, developing a script that will utilize the public data interface from within Blender. I will be available after the deadline for final bug fixes, integration, and, perhaps, additional development.

Bio

I am a 21 year old computer science student wrapping up my Baccelors degree from Excelsior College [5] and looking to pursue a graduate degree (in an unrelated field). I live in Abilene, KS (USA), and have been working with Blender since the summer of 2000, focusing mainly on python scripting (mesh tools), modelling (often technical), and game development (UV-mapping and texturing).

I have been programming for 6 years, with main experience in C/C++, Python, Java, and PHP. Projects have included 4 separate Blender-Python scripts (including a python script installer/manager [6]), a basic web content management system, the BPyC [4], and other course-related OpenGL projects such as display techniques (including interaction and animation), light baking, and image/pixel manipulation/filters.

I have a passion for serving and working with the Blender python community, and thoroughly enjoy web programming and design.

References:

[1] http://cheeseshop.python.org/pypi

[2] http://pear.php.net/

[3] https://addons.mozilla.org/firefox/extensions/

[4] http://hhofministries.org/bpyc/

[5] http://www.excelsior.edu/

[6] http://blenderartists.org/forum/showthread.php?t=81748