The documentation on this server is used by several locations. When adding or editing content, please do not include specific station names, channel numbers, etc. These are the master documents. Station specific instructions can be added before or after the om_localize_documentation function.
All changes to documentation made at om.civicpixel.com are automatically propagated to all stations using OM Handbooks. In order to create a new page to for a handbook, the page must be added to om.civicpixel.com and the same child page must be created on the station's website with some specific PHP code.
At om.civicpixel.com.
Navigate to Handbooks.
Create a child page, add a title and content, save content.
Please take note of page's URL.
At station's website.
Navigate to Handbooks.
Create a child page, add a title.
Add <?php om_localize_documentation('PAGE_URL'); ?> to page body.
Example of body text for handbook page on station's website;
<?php om_localize_documentation('http://om.civicpixel.com/handbooks/content-administration-guide/importing-equipment'); ?>
Images need to be uploaded into a common directory so that each location can eventually download that directory and 'delocalize' the documentation. When uploading images using IMCE, select the handbooks directory before uploading.

Scale images inserted into Handbook pages to approximately 75% so they aren't confused with actual HTML.
When adding documentation that only applies to a specific version of a module, wrap the documentation in the following code.
<div class="v2"><div>
This does x,y, and z.
</div></div>
Until the new version becomes the supported version, it will appear formatted like this.
There is also a series of checkboxes for versions. Items marked as Version 2 show up in this View.
This section will explain how to go about installing the Open Media Project modules without using the install profile. You should consider using the install profile if you are starting with a new Drupal installation.
Managing access to equipment is a large part of public access. Using Drupal for managing video workflow, classes and equipment checkout allows integration that saves staff time while ensuring users and abusing the access to equipment.
Because nothing existed that did everything the initial Open Media Project partners wanted well, a new module was developed from scratch borrowing the best ideas from Facil, Manhattan Neighbor Network's Drupal 4.7 solution, phpLabMan, and ORS. While every solution we looked at other than Facil was already open source, they didn't leverage the latest features of Drupal. That module was named MERCI which stands for Manage Equipment Reservations, Checkout and Inventory.
MERCI relies heavily on Content Construction Kit (CCK) and Date API allowing every location to customize their workflow and generate reports leveraging standard Drupal interfaces that are already well documented. MERCI also relies on several submodules to add functionality. This not only makes it easier to get started without being overwhelmed with options, but makes it easier for developers to contribute. While MERCI was developed with the public access workflow in mind, it was designed to be usable outside the Open Media System so that groups with similar checkout needs (Univerisities, Computer Technology Centers, etc) might contribute to developing new features. MERCI is also designed to support commercial rentals. A great source of revenue for stations struggling to pay staff, but sitting on hundreds of thousands of dollars of equipment.
This page is In Progress. Please check back later for this page of the handbooks.
Resource - Individual items that are unique. Example: Studio A vs. Studio B
Bucket - Items that are identical or so similar that users don't care which one they get. Example: DV Cameras
Accessories - Items that you don't track other than to ensure that if someone takes one or more with other equipment, it is returned. Examples: Batteries, lens cap, usb cable.
Hybrid CCK Module Development - Building a dependency on CCK fucntionality with a module. MERCI adds merci_date to Reservations which leverages all the effort put into Date API.
Locked CCK Fields - Because MERCI includes queries that expect merci_date to be a specific format, the field is locked so it cannot be manipulated by the CCK UI.
Skills
There are no additional system administration skills required to configure the Equipment features of the Open Media System. Equipment Installation and Configuration documentation assumes a basic understanding of Drupal content types, permissions, and Views.
MERCI
content
date
date_api
date_popup
date_timezone
views
taxonomy (in Drupal 6 core)
MERCI Inventory
Node
MERCI Permissions
Node
MERCI Role Rule Override
Node
MERCI Template
None
After enabling the MERCI module, the first thing you need to do is set the hours of operation for your checkout. You will find a link to MERCI's settings in the Site configuration are of your Administer area.
MERCI consists of the main MERCI module and several submodules. The reason for submodules is to break functionality up into more manageable parts. Everything necessary to operate an equipment checkout is included in the main MERCI module.
MERCI Inventory - Makes it easier to manage custom CCK fields between content types. Using MERCI Inventory to directly add common fields to the all of the content types managed in MERCI, creating custom reports in Views is much easier.
MERCI Permissions - Makes it much easier to understand MERCI's permissions. Instead of manually editing the Edit Own and Delete own settings in Drupal default permission grid, users are only click one checkbox for each role they want to have access to the equipment. Users in that role then see the equipment while making a Reservation and are by limited to the content type's default settings for max hours, cost, weekends, etc. After giving a role access to the equipment, MERCI Role/Rule Override can be used to customize the rules for that role.

MERCI Role/Rule Override - Adds a role to rule relation that will allow different rates or max durations for users in different roles. An obvious use for that would be charging users in the member role a lower rate. A less obvious would be to have a role called "Active Projects" that is populated in the background similar to how User Karma works. Users who are listed as contributing members of a project that has added new video in the last 3 weeks (or whatever duration is appropriate at your location) are kept in the Active Project role. If the project isn't contributing video back to the station, the user would either have to pay the commercial rate or convince a staff member to temporarily add them back to the Active Project role to get the lower rate.
MERCI Template - Groups to prepopulate a Reservation form. An example is reserving a studio or an entire computer lab for a class. Reporting is more accurate because each items is actually reserved, but it saves time for the person teaching the class. It is also helpful to know for an instructor to learn a camera or edit station is unavailable because it is reserved or temporarily unavailable while being repaired.
This page is In Progress. Please check back later for this page of the handbooks.
After enabling MERCI you must create content types for the equipment that will be managed. MERCI extends the core content type settings with additional settings. Depending on the modules you have installed, you will find MERCI's settings with Location, Organic Groups, Fivestar, Workflow, and others under the content type description.

Clicking on MERCI expends all of MERCI's options.

Reservable item type allows users to define a content type as a Bucket or a Resource. This is an important decision because it cannot be changed once nodes have been added to the content type. If you are having trouble determining whether something should be a Resource or a Bucket, please refer to the Resource or Bucket section of the documentation.
For checkout MERCI allows equipment to be configured 3 ways on the content type using Automatic Checkout, Automatic Checkin and/or Self Checkout.

If none of these items are checked, the default "initial status" is used for the item when a reservation is first created.

If the Reservation is set to Unconfirmed, staff will need to review those Reservations and confirm them. Unconfirmed reservations still prevent other users from making a conflicting Reservation. To review the list of Reservations that require staff review, [??navigate to path of View http://YOURSITE/admin/merci/reservations/today]

MERCI has it's own import feature to create MERCI enabled content types and basic items. More advanced imports require Node Import or Feed API/Feed Element Mapper/CSV Parser.
To use MERCI's basic import, first copy the merci_import.php, content_types.csv, and items.csv found in the Import directory to the root level of your Drupal install. Then open http://<YOUR-SITE>/merci_import.php in a browser.
MERCI is designed to be very flexible. There is no single right or wrong way to configure the content types. You want to find the configuration that works best for your workflow. Here are some tips for determining how many content types to create and whether to configure those content types as Buckets or Resources.
STILL NEED TO ADD TIPS
Reservations Made to Individual Resources

Same Number of Reservations made to Items in Buckets

While buckets are more complicated to configure, they enable MERCI to provide users who need to make longer reservations the space to do that.


You can sync roles between CiviCRM and Drupal to share useful information. Using the setup detailed below, you could for instance create a group of all your members in CiviCRM that you synced to a Member role in Drupal. You would then easily be able to set permissions in Drupal for all members based on the information updated automatically from CiviCRM.
The civicrm_group_roles and civicrm_member_roles modules are included with the CiviCRM module.


IMPORTANT NOTE: The New, Current, and Grace setting do not override Expired and Pending. There is another status of Canceled that can be used to when a user with one type membership let it expire and rather than renew, creates a new membership that's a different kind. If there is one expired membership, it will remove the user from the role.
While you can manually and automatically sync CiviMember_roles there is no option to do so for CiviGroup_roles which will only sync when a user logs into their Drupal account.
Defining permissions for your MERCI installation is an important step is getting your online equipment reservation system up and running. To begin, you will need to create Roles in the Drupal interface. Consider Drupal Roles for your MERCI configuration the same as certifications at your organization (i.e., studio certification, field certification and editing certification). To create roles in Drupal, navigate to Administer > User Management > Roles and add the Roles appropriate for your organization's needs. Now you will need to give each role access to specific pieces of equipment. These permission are based on the Content Types you previously created. To define the access permissions for each role, navigate to Administer > Site Configuration > MERCI > MERCI Permissions. Once on the MERCI Permissions pages, check the appropriate box in the grid to provide access for user to create reservations for the items listed.
create reservations - This is the most basic permission level. This alone is not enough to reserve equipment. Without Adding Edit Own and Delete Own permissions to specific content types, users will see empty select lists of the equipment available to them.
create confirmed reservations - This permission sets the status to Confirmed by default when users to submit the initial reservation as confirmed. This skips the Uncofirmed and Pending statuses. In most cases this permission would be given to staff.
membership discount - This permission indicates that the user gets the membership discount when charging for a rental.
suspend MERCI access - This permission blocks users for creating new reservations or altering existing reservations.
administer MERCI - This permission allows users to book any item managed by MERCI at any time and
Portland Community Media hired raSANTIAGO (a consultancy in Portland, Oregon that does a lot of work with CiviCRM) to develop this process for migrating their membership data from Facil to CiviCRM.
That code is available from GitHub at http://github.com/rasantiago/Portland-Community-Media/
In addition to the SQL, raSANTIAGO recommended ??? to move data from Microsoft Access to MySQL. Once the tables are in MySQL, using the Table Wizard + Migrate apporach Brad Bowman outlines here will save a lot of time moving your inventory between systems.
Reservation are associated to a Project so first navigate to the Project page. The easiest way to do this is clicking on the My Projects menu item on the right under My Member Tools. You should see a list of projects that looks like this.

If you are not a member of any Projects, that needs to be corrected before you will be able to reserve any equipment. Under Member Tools you should see *CREATE A PROJECT. Click on it and fill out the form about your project. If you need information about filling out the form click here.
*If you do not see CREATE A PROJECT, please complete the Report a Problem form at the bottom of the site.
Once you are on your Project's page, you will see an additional menu of tools on the right under My Project Tools.

This menu will list the types of content you can create for this Project. In addition to Reservations, many Projects allow Shows, Blogs, Events and Wikis.
Click Create Reservation to start the reservation process.
Enter the From date and To date for the Reservation

The next step is to click the Check the Availability button to check the availability of the equipment during that time period. If the equipment is not available it will not show up in the drop-down lists.
Next, select the actual equipment you'd like to reserve. These list are limited based on each users membership level and certifications.

Errors could be generated for a number of reasons including:
IF YOU DON NOT CLICK THE CHECK AVAILABILITY BUTTON FIRST AND YOU SELECT AN ITEM THAT IS NOT AVAILABLE YOU WILL SEE A GRID LIKE THIS:

Correct any errors in the reservation and check the availability again. If the Reservation doesn't return any error, click submit.
It should look something like this:

That's it. Your Reservation has been made. If you'd like to update or cancel your Reservation, you'll find all your Reservations listed by clicking the My Reservations link under the My Member Tools menu.
Members can modify or delete their own Reservation up until the start of the Reservation. To view your upcoming Resevations, simply click the My Reservation link under your My Member Tools.

After a Reservation start time, the reservation can only be changed by Staff.
For configuring the workflow for checking out and in equipment refer to adding equipment to MERCI.
Once a reservation is made it will be in one of the following states depending upon the configuration.
Unconfirmed - In this state the equipment items are held and can not be booked by others. Staff will then need to edit the reservation and select the specific bucket items to be reserved. Staff can then change the status to Pending.
Pending - A reservation can only be in this state if specific bucket items have been chosen. A reservation in this state is ready for check out.
Checked Out - To check out a reservation, edit the reservation and change the status to Checked Out. A reservation with status Unconfirmed can be changed to Checked Out without the intermediate Pending status by making sure you choose specific bucket items for the reservation. After saving you can print out the "Printable Contract" and have them sign it.
Checked In - To check in a reservation, edit the reservation and change the status to Checked In.
Canceled - Edit the reservation and change the status to Canceled.
No Show - Edit the reservation and change the status to No Show.
This page is In Progress. Please check back later for this page of the handbooks.
The MERCI Inventory sub module pushes shared fields from the MERCI Inventory Master content type to other content types managed by MERCI. The MERCI Inventory Master comes with several common fields, but you can add/edit the fields you need. Once you have the fields you want added to the Master, go to the main MERCI admin menu.
STILL NEED MORE INSTRUCTIONS
This page is In Progress. Please check back later for this page of the handbooks.
Denver Open Media uses MERCI combined with CiviCRM to manage a self service checkout. Leveraging CiviGroup Roles Sync and CiviMember Roles Sync modules to add and remove the members from roles in Drupal as the pay for memberships online or complete a class frees up staff time for other projects.
Membership Levels

Certifications Levels

Creative Commons Requirement - Denver uses a customized version of the Creative Commons Lite module. At DOM, members who use the station's equipment are required to submit Shows with a Attribution, Noncommercial, Share-Alike license. I've added to 2 permission settings; restrict to default cc license and override cc license restriction. Members in roles that have access to check out field equipment or use our studios through MERCI are also given the restrict to default cc license. That should really use the creativecommons_lite_default_license variable, but I just hard coded the Attribution, Noncommercial, Share-Alike license as the default. Members can opt to pay the commercial rate for equipment and then be added to a role called cc override. The cc override role is given the override cc license restriction permission. So even if that member is in a role that normally restricts their licenses, they have access to all the enabled licenses because a staff member approved the override.
View a related screencast at:
http://www.screencast.com/users/JohnMontgomery/folders/Jing/media/aa154b...
Required Modules
Enable Modules. Be sure to enable the Content and Content Copy. This will allow the Open Media Project module to create its related content types without errors.
Navigate to Administer > Site Building > Modules and enable Open Media Project.
Review Content Types. Check and make sure that the Open Media Project module has created the Project, Project Type, Timeslot Theme content types. Project will be set as Organic Group's group node.
Navigate to Administer > Content Management > Content Types to do this review.
and
);
return;
On the website, navigate to Administer > Content Management > Content Types > Import. Set the content type to <Create>, paste the content just copied from om_project_content_type.inc into the Import Data field and hit the Import button.
Set Permissions. Enable 'create om_project content' for the approriate role(s).
Navigate to Administer > User Management > Permissions to manage user permissions.
Configure String Overrides. Import "stringoverride-import".
On the web server, navigate to sites > all > modules > om_project > installs > stringoverride_import. Save this file locally.
Navigate to Administer > Site Configuration > String Overrides > Import to import the stringoverride_import file.
Additional Content Type. Create additional content types for other items we you like posted to a project, i.e., blogs, events, wikis. On each newly created content type, select Standard Post or Wiki Post in the Organic Group area.
The Open Media Project module includes the option creating a "personal project" for each new user that signs up for an account. By default those projects are not listed in the project directory and named <username>'s Videos. Navigating to a personal project will redirect to the project owner's profile page. This solves the problem of user who aren't working on a series and just want to quickly upload a few videos.

In addition to the access to create, delete, and edit both any and nodes the user authored, CCK's Content Permissions module takes this a step further and defines view and edit permissions on every field. By default, no role has access to new fields.

When logged in to the site look under your user name for FIND A CREW and click on it:

When you get to the page you will see sliders that allow you to look for the exact type of crew you need. Set each slider at the level of experience you need in a crew member. Remember the higher you set it the less results you will get.

You will see a list of members who have indicated that they want to volunteer for other members' shows. Click on the various members to view their profile and see their skills and interests.

If the member is someone who seems to be a fit for your show you can click on the contact tab to the right of the view tab along the top of the profile.

Then you can send an email to each person to let them know what your project is about and to see if they'd be interested in volunteering for your show. This method allows us to protect your personal information.
1. Log in on the website
2. Click on MY PROFILE
3. Click on the NOTIFICATIONS tab
4. Then click on GROUPS:
| Groups |
| Content type in group |
| Thread |
| Content type |
| Author |
5. A list of all the "groups" (projects) you are involved in will appear. Decide which, if any updates you want:
| Type | Send interval | Send method | |
|---|---|---|---|
| All posts in this group |
|
|
|
| om_show posts in this group |
|
|
|
| project_blog posts in this group |
|
|
|
| project_event posts in this group |
|
|
|
| project_wiki posts in this group |
|
|
6. Click Save
7. If there are any other nodes you are subscribed to (the number to the right indicates the number of subscriptions you have for each type):
| Groups | 4 |
| Content type in group | 3 |
| Thread | 133 |
| Content type | 1 |
| Author |
Click on each of them and decide if you want to be subcribed to those notifications.
8. Save.
The process of adding other members to your Project is easy and allows your group to collaborate in a number of ways. To add an existing member to an existing Project, first navigate to the Project's page. You can find the Project by searching the project listing or clicking on My Projects under Member Tools on the right.
Once you are on the Project page, Project managers or admins will see an additional Project Tools menu for managing. Clicking on the link on the right that indicates the current number of Members in the project will initially take you to a view of the profile images of the Project's members. Project managers or admins will see a tab to Add Members.
Add one or more usernames in order to associate users with this project. Multiple usernames should be separated by a comma.
If you are unsure of a member's username, Search by User.
In order to take advantage of most of the member-specific features on our site, users will need to create projects, which are associated with their work. Projects can be thought of as over-encompassing folders that hold related content or video. For instance, if you produce a weekly cooking show, you would have one project (perhaps named the same as your show) and then all of the various episodes would be associated with this project.
These projects allow members to reserve equipment, upload content, create project blogs, wikis and event, as well as request a crew.
Here are the steps in order to do this:
1. Log-into your account on the Denver Open Media homepage.
2. Under My Member Tools (in the upper right-hand side) select Create Project.
3. You will now be directed to the Create Project page.
4. Under Title, type the title of your project.
5. Under Description, type a short description of your project.
6. Choose the appropriate project type from the drop-down menu.
7. Enter a Full Description of your project.
8. Add a project icon/image if desired.
9. Add a public email and website address if desired (this info will be displayed to the public on your project page.)
10. IGNORE the Vocabularies box (i.e. PBCORE Genre 05.01; Open Media Genre DRAFT; and News Type.)
11. Choose how you would like members to be added to your project.
12. Select the default Language and Audience for all of the shows in this project (Please note: You can always tweak this and the following information on all individual show pages, but for now you are just choosing the default.)
13. Check whether or not the default for the shows in this project will be Safe for all ages (if a show is submitted and this box is not checked, the show will only air after 10pm local time.)
14. Choose the default Primary Theme Block for shows in this project.
15. Choose the default Secondary Theme Block for shows in this project.
16. Check whether or not you would like to share this project with other stations participating in the Open Media project.
17. Ignore the questions regarding estimated episodes and frequency for now.
18. Press Save.
19. This will now bring you to your newly created Project page (Please note: This page is under development and looks somewhat confusing.)
For information on how to create a reservation, please click here. If you would like to upload content, please click here.
When a Project is created, the Project's Manager has the option of setting the Project as Open, Moderated, Invite only, or Closed.

The status of each Project is listed on the Projects page.

Users can either instantly Join Projects configured to be Open or Request Membership to Projects configured to be Moderated. Projects that are Open, Moderated, or Invite Only will see a menu item named Invite friend.

The Project Managers can invite users with their email address or username with a customize message. The message users recieve will include a URL that links them directly to Project's subscription page. If the user doesn't have an account, they will need to sign up. Access to a Project DOES NOT automatically give users the ability to add Shows or make Reservations.

Your Project page can help users understand more about your project as well as search for your show or join a crew for your show through the Crew Connect tool. On the Create Project page you have various options to personalize your Project.
If there is a Show that you don't want to appear on the website for some reason, you can change the default Public setting under the Show's Project settings. The show will still be available to members of the Project, but will be hidden from other users. It is still possible to schedule this Show to air.

The Public option is available for all Project related posts including blogs, wikis, and events.
If you want to run a short videos such as PSAs or Promos you should always create a new project for them to be in if they are a part of a regular series. The reason for this is that when the autoscheduler looks for a new show in your project it can't distinguish between what you want to air in that timeslot based on length. So your 2-minute promo may get scheduled instead of your full-length show. For this reason it would be best to create a new project with the same title + promos. In the future you will also be able to add trailers and leaders from this new project.
You now also have the option when creating a Project Page to select the program type as PSA or Promo. Promos are for things promoting some event or show that is likely to have a limited airtime. A PSA is a short program that could be an ongoing announcement or campaign.

When creating one of these types of programs that will have an expiration date you should be sure to edit the SCHEDULING OPTIONS and set it to UNPUBLISH using this DATE/TIME FORMAT: 2009-03-10 20:56:25.

When you set up your your project, you will be prompted choose from four options regarding how other members can interact with your show.

Once you set up the membership permissions, this action will define how users can interact with your project from here on out until you change it again.
The process of adding other members to your Project is easy and allows your group to collaborate in a number of ways. To add an existing member to an existing Project, first navigate to the Project's page. You can find the Project by searching the project listing or clicking on My Projects under Member Tools on the right.
Once you are on the Project page, Project managers or admins will see an additional Project Tools menu for managing. Clicking on the link on the right that indicates the current number of Members in the project will initially take you to a view of the profile images of the Project's members. Project managers or admins will see a tab to Add Members.

Add one or more usernames in order to associate users with this project. Multiple usernames should be separated by a comma.
Multiple Projects are created for a number of reasons; the user forgets a Project already exists, the user needs to add a video to a Project they aren't a member of, etc.
Merging Projects can be used to move all of the Shows, Reservations, Blogs, Wiki and any other content you've enabled to be managed by Orgnaic Groups to another group. The author, post date, and all other information about the posts remain the same, but the group of users with permission to modify the project changes.
To merge a project, while logged in a user with Content Administration privledges, navigate to the Project you'd like to merge. Click the Edit tab. Click Delete at the bottom of the page. You will then be presented with 4 options for dealing with the posts in that group...

Do nothing - Do not use this option. It will eventually be removed. Nodes will be orphaned.
Delete all group posts which don't also belong to another group. - Only use this option if the Project's Producer requests it and the stations has approved it. Since most content is licensed with a Creative Commons Share-alike license, a station is under no legal obligation to remove it.
Move all group posts to the group listed below. - This moves the content and the information about who authored it, but the author won't necessarily have access to the group.
Move all group posts and memberships to the group listed below. - This moves all content and adds authors of the nodes being moved as members of the Project the nodes are merged into.
This chapter covers video file management, including video ingest, metadata collection and archive management.
When fully configured the Open Media System provides a user-driven video ingest and distribution workflow designed to meet the needs of most public access and community media centers. This includes taking raw content in the form of MPEG2 (or any format supported by FFMPEG) via a local network share or online upload, collecting metadata associated with the video, encoding the video into multiple formats for both online and television broadcast, and archive management.
This page is In Progress. Please check back later for this page of the handbooks.
This page is In Progress. Please check back later for this page of the handbooks.
Before attempting enable video encoding using the Open Media modules, you will need a basic understanding of following system administration skills:
The Video Installation and Configuration documentation assumes at least basic competency in these areas.
First:
Show will manage creating all of the necessary content types and fields. After show is installed, a few more modules need to be enabled:
That's it for the installation. On to configuration.
This page is In Progress. Please check back later for this page of the handbooks.
This page is In Progress. Please check back later for this page of the handbooks.
The Open Media System uses Public Broadcasting Metadata Dictionary (PBCore) when exchanging content between locations, but allows each location to customized the items and disable items to meet their local needs. Currently items are activated, weighted, and customized using phpMyAdmin until an interface is added to the PBCore module.
At the moment, all operational Open Media System installs are using FFmpeg for encoding. Setting up FFmpeg will vary based on what operating system you are running. Ubuntu is the current recommended linux distribution for the Open Media project due to the large user base and generous documentation available. For those who are using Ubuntu and FFmpeg, this thread is frequently updated and includes instructions for compiling FFmpeg on the most common versions: http://ubuntuforums.org/showthread.php?t=786095
Some stations are planning on using third party encoders -- as solutions are developed for these alternatives, documentation should be posted here.
Using a server other than your local web server to encode video is supported by the ffmpeg_remote module included with the Open Media System. For more information on setting up remote encoding, please see the relevant handbook page in this chapter.
The om_show module has an option to set an alternative directory for the flv and thumbnail. Using an rysnc command like...
rsync -avz --stats --exclude "*.mpg, *.mpeg, *.m2p" /mnt/[YOUR MOUNT]/archive /var/www/[PATH TO SITE]/files/archive_local
will create a local copy of directory structure of all the project directories in /archive along with the .flv and .jpg, but ignores the large MPEGs.
If the remote webhost does not provide the option of adding a smb mount but does provide ssh access you can set up the rsync command as follows:
On the local machine create a public/private key if you don't already have one:
ssh-keygen -t dsa
It will ask for a pass phrase but just hit enter.
Once you have the key pair. Copy the public key over to the remote host and add it to the authorized key file.
scp .ssh/id_dsa.pub remoteusername@remoterhost:
#login to the remote machine
ssh remoteusername@remotehost
#add the public key to the list of authorized keys
mkdir .ssh
cat id_dsa.pub >> .ssh/authorized_keys
#Return to the localhost
exit
Now use the following command to sync your files:
rsync -avz --stats --exclude "*.mpg, *.mpeg, *.m2p" /var/www/[PATH TO SITE]/files/archive_local/ remoteusername@remoterhost:/[PATH TO ARCHIVED FILES]/
The closing slashes matter. Don't leave them out.
Tips:
Use the -n option to rsync for testing. (-n means do a dry-run).
Read man rsync to learn what the other options do.
Remove the -v option and copy the command into your crontab. Run it every night at 3am.
Media Mover allows significant flexibility in regards to your video work flow through the use of user defined 'Configurations'. Configurations are managed in the Media Mover administration area, accessible in the general administration area under Site Building. If you have been following the installation guide up to this point, you should have no configurations -- so the first step is to add at least one (and probably more). You can add them manually in the Media Mover administration area by clicking "Add Config" and then working through the configuration screen. Each Media Mover configuration is broken down into four phases:
Harvest: defines where the system should look for new media files to be processed (ex: the "...Or Upload a new video" filefield on the show content type)
Process: configures how new media files should be processed, this is where you choose the encoding type (ex: MP2), set audio and video bitrate, and manipulate other command line options available from FFMPEG or your encoder of choice.
Storage: tells media mover where to store the newly encoded file (ex: the "Archival MPEG2" filefield on the show content type)
Complete:any operation that you would like run after the media file has been encoded and stored. (ex: MM Remove, remove harvest and processed files leaving only the final stored MPEG2)
There are numerous choices to make in this process, and far too many possible combinations too document here. In order to provide an example of a working configuration, I have included exports of Denver Open Media's Media Mover configurations below. At Denver Open Media three configurations are defined and run in this order:
WARNING REGARDING USING THE EXPORTS: While Media Mover will import most of the information properly, it does not pick up the proper storage location on each import. For the MPEG2 import the storage step regarding "Save the file to this CCK field" needs to be changed to store the file in the "Archival MPEG2" field. For the Flash import, adjust the same setting to store on the "Flash" field. For the Screen Capture import, adjust it to store on the "Screen Capture" field.
Where the media files are stored (when originally uploaded, as well as after they are encoded) is set on the relevant filefields on the om_show content type. Navigate to the content types via the administration area, then click manage fields on the Show content type to get to the appropriate area.
There are three fields inside of the Video group you can adjust, plus a fifth field at top "...or upload a new video" which controls where newly uploaded files or files selected from your local ingest folder are stored. To set the storage path, configure each field and look for the collapsed fieldset titled "Path settings". Expanding this fieldset will show the default path set by the show module, something like "archive_new/[ogname-raw]". Thanks to the filefield paths module, this setting allows for tokens. At Denver Open Media, and most of the Access stations using the Open Media suite, this default setting is in use. Basically it stores all files inside of the sites/default/files/archive_new folder, inside of a subfolder with the name of its associated project (organic group). This allows a station to browse media files by project. You could easily adjust this to whatever storage scheme you prefer. For instance, if you wanted to store files organized by user accounts you could adjust it to "archive_new/[user]", or you could use any of the other dozens of tokens available listed under the fieldset.
$configuration = new stdClass;
$configuration->required = array('mm_cck', 'mm_ffmpeg', 'mm_cck', 'mm_remove');
$configuration->name = 'Archival MPEG2';
$configuration->cid = '4';
$configuration->description = 'Archival MPEG2';
$configuration->start_time = '1239988773';
$configuration->last_start_time = '1239988473';
$configuration->status = 'stopped';
$configuration->settings->mma_file_perm = '0';
$configuration->settings->mma_file_mask = '0644';
$configuration->settings->mma_node_edit_item_show = '0';
$configuration->settings->mma_node_item_delete = '1';
$configuration->settings->mma_node_config_rss = '0';
$configuration->settings->mma_cron_notify = '0';
$configuration->settings->mma_cron_notify_email = '';
$configuration->settings->mma_cron_notify_time = '10';
$configuration->settings->mma_process_num = '1';
$configuration->settings->mma_storage_num = '1';
$configuration->settings->mma_complete_num = '1';
$configuration->storage->module = 'mm_cck';
$configuration->storage->action = '2';
$configuration->storage->configuration = array(
'mm_cck_field_save_2' => 'field_om_show_mpeg2',
'field_cck_file_path' => 'archive_new/[ogname-raw]',
'field_cck_file_transliterate' => '1',
'field_save_list' => '0',
'cid' => '4',
'module' => 'mm_cck',
'action' => '2',
'verb' => 'storage'
);
$configuration->storage->cid = '4';
$configuration->complete->module = 'mm_remove';
$configuration->complete->action = '3';
$configuration->complete->configuration = array(
'mm_remove_files' => array(
'harvest' => 'harvest',
'process' => 'process'
),
'cid' => '4',
'module' => 'mm_remove',
'action' => '3',
'verb' => 'complete'
);
$configuration->complete->cid = '4';
$configuration->process->module = 'mm_ffmpeg';
$configuration->process->action = '1';
$configuration->process->configuration = array(
'ffmpeg_output_type' => 'mp2',
'ffmpeg_audio_advanced' => '0',
'ffmpeg_audio_ab' => '64k',
'ffmpeg_audio_ar' => '44100',
'ffmpeg_audio_acodec' => '0',
'ffmpeg_video_advanced' => '0',
'ffmpeg_video_size' => '128x96',
'ffmpeg_video_size_other' => '',
'ffmpeg_video_fps' => '25',
'ffmpeg_video_br' => '250k',
'ffmpeg_video_br_other' => '',
'ffmpeg_video_vcodec' => '0',
'ffmpeg_time_advanced' => '0',
'ffmpeg_time' => '30',
'ffmpeg_video_custom' => '1',
'ffmpeg_video_custom_command' => '-i %in_file -acodec ac3 -ar 48000 -ab 448k -vcodec mpeg2video -f dvd -copyts -s 720x480 -g 18 -b 8000000 -maxrate 9000000 -minrate 0 -bufsize 835008 -packetsize 2048 -muxrate 10080000 %out_file',
'ffmpeg_output_perms' => '0644',
'cid' => '4',
'module' => 'mm_ffmpeg',
'action' => '1',
'verb' => 'process'
);
$configuration->process->cid = '4';
$configuration->harvest->module = 'mm_cck';
$configuration->harvest->action = '1';
$configuration->harvest->configuration = array(
'mm_config_harvest_field' => array(
'field_om_show_original' => 'field_om_show_original'
),
'file_types' => 'avi mov wmv mpeg mp4 mpeg2 dv 3gp 3g2 mpeg4 mp2 m2p mpeg',
'cid' => '4',
'module' => 'mm_cck',
'action' => '1',
'verb' => 'harvest'
);
$configuration->harvest->cid = '4';
$configuration->hierarchy->parent = '0';
$configuration = new stdClass;
$configuration->required = array('mm_cck', 'mm_ffmpeg', 'mm_cck', 'mm_remove');
$configuration->name = 'Flash';
$configuration->cid = '5';
$configuration->description = 'Flash';
$configuration->start_time = '1239988773';
$configuration->last_start_time = '1239988473';
$configuration->status = 'stopped';
$configuration->settings->mma_file_perm = '0';
$configuration->settings->mma_file_mask = '0644';
$configuration->settings->mma_node_edit_item_show = '0';
$configuration->settings->mma_node_item_delete = '1';
$configuration->settings->mma_node_config_rss = '1';
$configuration->settings->mma_cron_notify = '0';
$configuration->settings->mma_cron_notify_email = '';
$configuration->settings->mma_cron_notify_time = '10';
$configuration->settings->mma_process_num = '1';
$configuration->settings->mma_storage_num = '1';
$configuration->settings->mma_complete_num = '1';
$configuration->storage->module = 'mm_cck';
$configuration->storage->action = '2';
$configuration->storage->configuration = array(
'mm_cck_field_save_2' => 'field_om_show_flash',
'field_save_list' => '0',
'cid' => '5',
'module' => 'mm_cck',
'action' => '2',
'verb' => 'storage'
);
$configuration->storage->cid = '5';
$configuration->complete->module = 'mm_remove';
$configuration->complete->action = '3';
$configuration->complete->configuration = array(
'mm_remove_files' => array(
'process' => 'process'
),
'cid' => '5',
'module' => 'mm_remove',
'action' => '3',
'verb' => 'complete'
);
$configuration->complete->cid = '5';
$configuration->process->module = 'mm_ffmpeg';
$configuration->process->action = '1';
$configuration->process->configuration = array(
'ffmpeg_output_type' => 'flv',
'ffmpeg_audio_advanced' => '1',
'ffmpeg_audio_ab' => '64k',
'ffmpeg_audio_ar' => '22050',
'ffmpeg_audio_acodec' => 'libmp3lame',
'ffmpeg_video_advanced' => '1',
'ffmpeg_video_size' => '320x240',
'ffmpeg_video_size_other' => '',
'ffmpeg_video_fps' => '25',
'ffmpeg_video_br' => '750k',
'ffmpeg_video_br_other' => '',
'ffmpeg_video_vcodec' => 'flv',
'ffmpeg_time_advanced' => '0',
'ffmpeg_time' => '30',
'ffmpeg_video_custom' => '0',
'ffmpeg_video_custom_command' => '-i %in_file %out_file',
'ffmpeg_output_perms' => '0644',
'cid' => '5',
'module' => 'mm_ffmpeg',
'action' => '1',
'verb' => 'process'
);
$configuration->process->cid = '5';
$configuration->harvest->module = 'mm_cck';
$configuration->harvest->action = '1';
$configuration->harvest->configuration = array(
'mm_config_harvest_field' => array(
'field_om_show_mpeg2' => 'field_om_show_mpeg2'
),
'file_types' => 'avi mov wmv mpeg mp4 mpeg2 dv 3gp 3g2 mpeg4 mp2 m2p',
'cid' => '5',
'module' => 'mm_cck',
'action' => '1',
'verb' => 'harvest'
);
$configuration->harvest->cid = '5';
$configuration->hierarchy->parent = '0';
$configuration = new stdClass;
$configuration->required = array('mm_cck', 'mm_ffmpeg', 'mm_cck', 'mm_remove');
$configuration->name = 'Screen Capture';
$configuration->cid = '6';
$configuration->description = 'Screen Capture';
$configuration->start_time = '1239988773';
$configuration->last_start_time = '1239988473';
$configuration->status = 'stopped';
$configuration->settings->mma_file_perm = '0';
$configuration->settings->mma_file_mask = '0644';
$configuration->settings->mma_node_edit_item_show = '0';
$configuration->settings->mma_node_item_delete = '1';
$configuration->settings->mma_node_config_rss = '0';
$configuration->settings->mma_cron_notify = '0';
$configuration->settings->mma_cron_notify_email = '';
$configuration->settings->mma_cron_notify_time = '10';
$configuration->settings->mma_process_num = '10';
$configuration->settings->mma_storage_num = '10';
$configuration->settings->mma_complete_num = '10';
$configuration->storage->module = 'mm_cck';
$configuration->storage->action = '2';
$configuration->storage->configuration = array(
'mm_cck_field_save_2' => 'field_om_show_capture',
'field_cck_file_path' => 'archive_new/[ogname-raw]',
'field_cck_file_transliterate' => '1',
'field_save_list' => '0',
'cid' => '6',
'module' => 'mm_cck',
'action' => '2',
'verb' => 'storage'
);
$configuration->storage->cid = '6';
$configuration->harvest->module = 'mm_cck';
$configuration->harvest->action = '1';
$configuration->harvest->configuration = array(
'mm_config_harvest_field' => array(
'field_om_show_mpeg2' => 'field_om_show_mpeg2'
),
'file_types' => 'avi mov wmv mpeg mp4 mpeg2 dv 3gp 3g2 mpeg4 mp2 m2p',
'cid' => '6',
'module' => 'mm_cck',
'action' => '1',
'verb' => 'harvest'
);
$configuration->harvest->cid = '6';
$configuration->process->module = 'mm_ffmpeg';
$configuration->process->action = '2';
$configuration->process->configuration = array(
'thumb_dimensions' => '704x576',
'thumb_dimensions_other' => '',
'thumb_time' => '00:00:02',
'thumb_format' => 'jpg',
'cid' => '6',
'module' => 'mm_ffmpeg',
'action' => '2',
'verb' => 'process'
);
$configuration->process->cid = '6';
$configuration->complete->module = 'mm_remove';
$configuration->complete->action = '3';
$configuration->complete->configuration = array(
'mm_remove_files' => array(
'process' => 'process'
),
'cid' => '6',
'module' => 'mm_remove',
'action' => '3',
'verb' => 'complete'
);
$configuration->complete->cid = '6';
$configuration->hierarchy->parent = '0';
Encoding on an external LAMP server setup with FFmpeg can be accommodated via the FFmpeg Wrapper Remote module. Steps are as follows:

If your server doesn't have a graphic interface and/or browser, you can check this from the commandline using wget http://[YOURSERVER]/encode.php

This page is In Progress. Please check back later for this page of the handbooks.
If you are submitting a video to your local open media station, the open media system makes it easy for a producer to create a project for their show and schedule their show for its appropriate theme block. If you want to learn how to successfully air your show for the world to see, continue reading this section.
Creating a Profile
The Open Media system was created to allow an administrator to easily manage different types of users with minimal oversight. Once a person decides to become a member of an Open Media organization, they will need to create a profile. Based on the membership types that each organization offers, a member will be able to log in and follow through with specific actions on their profile page and with their member tools. With a member profile, you can:
About
In order to streamline the process for producers who are submitting content for a series and station managers who want to effectively manage their station's schedule, the Open Media System requires that all shows belong to a Project. This allows multiple producers to collaborate on a show and web viewers can also easily watch a series from beginning to end. With this Project-based user system you can:
What is a Project?
A project uses the available information submitted by a member when they create their profile to group together all relevant information associated with that member's content.
The Open Media tool set uses a Drupal Module called Organic Groups to make it easy for producers and members of public access stations to manage their projects.
Steps for creating a new Project:
This process will likely be station specific.
Download the GUI version of Handbrake from http://handbrake.fr/?article=download
GUI stands for Graphic User Interface. The commandline version is only for advanced users.

Select the source you want to convert. In most case this will be a DVD.
For DVD's you can select the specific chapters you'd like to convert.
This Tutorial is to help you find, download, and install Mpeg StreamClip onto your Mac or PC to allow you to ingest at home.
MAC TUTORIAL for downloading MPEG Streamclip 1.9.1
1. Go to www.apple.com/downloads/macosx/video/mpegstreamclip.html
2. Make sure your Mac has all of the necessary system requirements

3. Then at the bottom of the page hit the download button:

4. A window opens that asks you to save the file. Hit the Save file button

5. A window opens and shows the downloading progress. Once downloaded There will be an icon labeled MPEG_Streamclip_1.9.1dmg. Double click that icon.

6. Your Mac will launch MPEG and will open a window that resembles your finder. This is where you can access your MPEG software icon that you can drag from the open window, down to your dock to display MPEG Streamclip.

7. Once the icon is in your dock you can drag the MPEG icon that resembles a hard drive to the trash. It may appear again once you open MPEG Streamclip but can be dragged to the trash after exiting MPEG each time.

You now have MPEG streamclip for your at home use.
PC TUTORIAL for downloading MPEG Streamclip (the only versions available for PC are MPEG Streamclip versions 1.1 and 1.2)
1. Go to www.squared5.com/svideo/mpeg-streamclip-win.html
2. Review the requirments needed to download MPEG Streamclip by scrolling to the bottom of the page and read REQUIREMENTS listing.
3. Once you have fulfilled the requirements to download MPEG streamclip, choose the version which best suits your PC. The download for PC's come with a tutorial that is included in the zip folder which appears after you click on one of the colored arrows that is pointing down next to the version name. (Note that if you choose to download MPEG streamclip 1.2b2 beta you will have to refer to the previous versions tutorial).
4. If you want to skip reading the tutorial hit the green downward arrow and a window appears that asks you if you want to save or run the program.
5. Click save and that opens another window where you will choose where your program will be saved.
6. It will then download the program to where ever you have saved it. Click the open button once the download is complete.
7. When the window opens which shows all of your MPEG files, click on the icon that is intitled MPED_Streamclip. If you recieve any warnings after clicking on that icon just hit run.
8. This takes you into MPEG Streamclip where a window appears that asks for license agreement. Hit Agree and you have MPEG Streamclip! Congratulations!
Getting Started
IMPORTANT:
When ingesting content ALWAYS log on to the editing system as DOM INGEST ONLY, the password is DOM
![]() |
*Double-click the "START HERE" icon in the center of the screen before you begin * |
You should see both the "ingest" server and the DOM site should load the user guide directory:
|
|
http://www.denveropenmedia.org/handbooks/user-guides/uploading-content |
|
|
Go ahead and log in to your account on our website. |
Import
| 1. Insert your DVD into the editing station. (if it starts autoplay, Stop and Quit DVD Player) |
| 2. Open Mpeg Streamclip from the dock or applications folder. |
| Next you will want to open your media files in Mpeg Streamclip. You can do this one of two ways: a) The fastest way is to simply click and drag your DVD icon from the desktop to the center of Mpeg Streamclip. If you have more than one video on the DVD it will ask you which one you want to open. Once finished with this step skip down to step 5. |
<-- Drag DVD icon to the center box in MPEG Streamclip -->![]() |
|
Or b) From Mpeg Streamclip choose File>Open Files and select the DVD. (You may need to wait a minute or so for the DVD to be recognized). |
|
c) Select the VIDEO_TS folder. You may see many VIDEO_XX.VOB files. Click on each one starting from the top most until you find the largest first file that is greater than 1000MB (1Gig) in size, then select OPEN. |
| If there is no file greater than 1GB, choose the file with the largest size. If a message “Would you like to open all files of the stream together?” appears, select OPEN ALL FILES. |


Trim & QC
|
6. You can now play the video by either touching the space bar or “L” key. You can also drag the play head using the mouse. Verify that there are no color bars and that the program begins and ends with NO MORE THAN a frame or two of black or begins or ends on the first or last frame of the program. If no trimming is needed go to step 8. |
| 7. Trimming the beginning and end of the program is simple: Set the IN POINT by pressing "I" and set the OUT POINT by pressing "O". |
|
Starting from the beginning of the program either play or move the playhead to the location where the program should start, then press the “I” key for IN. Then move the playhead to where the program should end and press the “O” key for OUT. For Fine Tuning: go frame by frame and use the right and left arrow keys on the keyboard. |
|
Press Command and "T" or go to EDIT< TRIM in the Menu bar. ***Make sure that you have cut out (trimmed) all black, bars or anything else that is not part of your actual show. |
Export & QC
|
8. Now export the program by going to File>Convert to MPEG with MP2 Audio.
|
|
| Save As: Should be the name of the program and episode number (if applicable) VERY IMPORTANT: Do not use any symbols when naming your program. |

Where: From the drop down menu, select the edit station you are at (ie DOMEDIT1) then select INGEST. Click Save.
9. A small window with a progress indicator should pop up. When completed, quit MPEG Streamclip and eject your DVD.

10. QC!!! Quality Control! Please check your video file after you ingest, no one will do this but you! If it doesn't look right you don't want it to go on air.
**Please note your show will be under whatever it is you named it when you saved**

Open the INGEST folder on your desktop< find your file< Hold down CTRL Key and click on your file< select OPEN with MPEG STREAMCLIP. This will reopen Mpeg Streamclip and allow you to scan through the audio and video of your file. Make sure the whole video is there, it looks and sounds good and that there with no black or color bars before or after it (less a frame or two of black).
YOU ARE NOT DONE YET!!! You still need to create a show and attach your video to a show page.
Uploading your Video onto the Website
Log on the main website (denveropenmedia.org), click onto "my projects." which is on the right hand column.
Click on the project/video that you want to be uploaded on to the website.
Once you click on your project, the right hand column will have a "create a show" option.
Click on "create a show" and it will lead you to the form that you must fill out when creating or uploading the show on to the website. It is is simple and easy, just follow the directions and fill out the form.
Step by Step:
Select the video that you uploaded or you also have the option to upload one at that moment.
Create a title and the epsiode number
Write a full description about the show and maybe some exciting tidbits.
Choose the specific theme/category that your video falls into.
Choose the timeslot. For example, Latino or General Youth timeslot.
Make sure you choose the right audience and whether it is suitable for all ages.
After filling out the entire form, click on save and your video will be uploaded onto the website in the next 4-8 hours.
SUCCESS you are finished!! Its easy, its simple, and you have now completed uploading your video!!!
In order to upload a new show, you will need to go to the Project Page.
Timeslot Theme: Pick a theme block that best applies to your show. All scheduling is determined by themeblocks.

Also, you can select a specific Location for your program. The Location field allows you to geotag your content. Be specific as possible, but all fields are not required. This feature can be useful for stations that wish to focus on regional topics, issues or content.

Once you have filled out the form completely, click the Save button. If there is a problem, you will see a description of the problem at the top of the page.
If necessary, correct any errors in your form and click Save again. If you continue to have problem, please complete the Report a Problem form.
Aftering clicking save, your show will be processed through the system. A thumbnail, web quality version (Flash video) and broadcast quality verison (MPEG) of you show will be generate and placed in the appropriate repositories.
This page is In Progress. Please check back later for this page of the handbooks.
This page is In Progress. Please check back later for this page of the handbooks.
This page is In Progress. Please check back later for this page of the handbooks.
This page is In Progress. Please check back later for this page of the handbooks.
External Resources are playback server specific resources that can be attached to a om_show instead of a video or used on their own.
Currently the Open Media modules don't contain the code necessary to attach External Resources to a Show. The content type was structured based solely on the options available to schedule switches, overlays, and interstitial on Telvue Princeton servers.
Most External Resources will have to be created by staff members who understand the settings. By making a producer the author of an External Resource, that producer could schedule a switch event for a live show at a specific time based on their Project's Timeslot Events.
These are all the option available on a Princeton:
Output,Date,Time,Type,Source ID,Source Name,Offset,Duration,Output Name,Program Code,Episode Code,Program,Title,Episode,Description,Preroll,Postroll,OSD,OSD Path,OSD File,Include In Guide,Track Content Attributes,Overlay Alpha Blend,Overlay Chroma Key,Overlay X Coordinate,Overlay Y Coordinate,Overlay Width,Overlay Height,Program Number,Switch Command
This page is In Progress. Please check back later for this page of the handbooks.
This page is In Progress. Please check back later for this page of the handbooks.
This page is In Progress. Please check back later for this page of the handbooks.
This page is In Progress. Please check back later for this page of the handbooks.
This page is In Progress. Please check back later for this page of the handbooks.
This page is In Progress. Please check back later for this page of the handbooks.
This page is In Progress. Please check back later for this page of the handbooks.
This page is In Progress. Please check back later for this page of the handbooks.
This page is In Progress. Please check back later for this page of the handbooks.
Timeslot Scheduler is designed to generalize scheduling so the same workflow can be used with any playback server. Functions for specific playback servers are handled by submodules that are included with Timeslot Scheduler. Currently Timeslot Scheduler only includes support for Telvue Princeton and Tightrope Cablecast servers.
To register a playback server go to Create content > Playback Server
Server Name: This is a human readable name.
Server Type:Currently Scheduling is only supported on Telvue Princeton or Tightrope Cablecast servers. This requires the appropriate submodule be enabled.
Channel: This lists displays the channels registered in your Channel vocabulary. Playback servers are NOT required to be registered to a Channel. Multiple servers can be registered to the same channel. If you register multiple servers to a channel, any scheduling activity will happen on both servers. This is helpful when transitioning to a new playback server. Playback servers DO NOT need to be the same type to be registered on the same channel. Similarly, a single server can be registered to multiple channels.
URI: This is the URL or IP address of the server. The playback server specific submodules are configured to use the correct port. So if you access a Princeton using http://123.ourchannel.org:3000, you'd enter 123.ourchannel.org.
Mount: These are mounted shares directly from a playback server or to another server the playback server is connected to. Mounts are created as part of the Video Configuration.
Username: If the playback server requires a username to access its status or add scheduling information. This is not the connection information for the Mount. That information should be stored in the web server's fstab file.
Password: Password for the Username entered above. WARNING: This is currently stored in cleartext.
Database Settings: These settings are optional. Only use them if your playback server allows direct connectivity to the database.
A Timeslot Event can be scheduled to occur every Wednesday or with a pattern like the first Friday of every month. A Timeslot Event requires a Title. The Title only appears on calendars used by the scheduling staff so it should be something useful to them to refer to like Sunday Morning International Issues Timeslot. Timeslots are normally tied to a specific Channel or a Timeslot could be shared between multiple Channels.
Timeslot Theme
Timeslot Themes are used to group similar content. Users select from the Timeslot Themes when creating new Project and Shows. The shows that are selected for Timeslot Event are based on the rules applied to the Autoscheduler and whether the Timeslot Event is user schedulable. User-schedulable timeslots can be filled on a first come, first served basis when users add a new Show as that Show's first run. Once the first run has been scheduled, the Airing date and time will appear on the Show and Project pages.

Administering Your Timeslot Events
When logged under an administration account, one can create a Timeslot event. When you are on the webpage (shown exactly above) you can enter your desired timeslot name, theme, date and time. You can always refer back to the main calendar in order to see whether your timeslots and themes are correct and if you are entering them correctly. It is helpful to keep a separate tab open that shows your updated calendar and that you can continously refresh as you go through the scheduling process. This helps avoid mistakes and overlooked details.
When entering a Themeslot name, it is easier to organize your timeslots by their specific time of day in which they are being aired and the subject it is under. For example, Monday Early Am International Issues Timeslot or Friday Evening Music Timeslot. This helps organize scheduled programs according to the time of day and it's theme. You then have the choice of placing it under a specific channel and specific theme. For example, Moday Early Am International Issues Timeslot can be placed under channel 57 and under the theme "International Issues." This helps out with the scheduling and organization of the calendar and the shows.
You then must fill out what exact time the Timeslot will be scheduled to air and it's date. Timeslot Events use the 24 hour time format for their From date and To date. The Timeslot Event will likely start at an hour like 14:00:00 and end at 14:29:59. The allows the next Timeslot to start the following second at 14:30:00. Becareful with placing your timeslot in the correct time, it is crucial when scheduling out your events in your calendar.
A Timeslot Event can be scheduled to occur every Wednesday or with a pattern like the first Friday of every month. An Until time must be added for repeating Timeslot Events. For example, if one of your timeslot events happen to occur every Monday, Tuesday, and Wednesday, you can highlight those days in the "Advanced" section, so that you do not have to manually schedule it in each time. It makes life easier when organizing a large schedule and is easy to use. Make sure you fill in the section that asks you until what date you want this program to run in the course of the year.
It is always good to keep open several tabs, so that you can go back and forth when checking the schedule. These tips only help make the process less tedious and quick!

Under Scheduling, a Timeslot can be configure as User Scheduled AND Auto Scheduled OR tied to a specific Project. The Rules for which Show airs when a Timeslot is tied to a specific Project are configured on the Project.

access scheduling options of aired shows - This permission will allow user to schedule a show that has already aired.
manage scheduling - This permission allows user access to administrative views of scheduling information to view Timeslot Events. In addition to this permission, user need to be given permission to create and edit Timeslot Events to effectively manage scheduling.
administer scheduling - This permission allows user to change the administrative scheduling settings like Default Airing on Channel, Number of Airing options producers are shown, Minimum hours between Airing options, Maximum Minutes Since Cron, and the Cron error shown to Producers.
administer Open Media System -
Timeslot Themes enable the audience of the station to maintain some level of consistency and predictability in programming, while allowing for diverse content to always have a place on Public Access. Viewers will not always know exactly which show will be on at a given time, but they can always know what thematic category is on. This also enables us to send consistent info to TV Guide and other Electronic Programming Guides such that the EPG does not simply read "Public Access Programming".
The duration of each themed Timeslot Event should relate, in-part, to the total number of hours of content submitted in that category, which ensures that shows in popular categories have as much repeat airings as shows in categories/themes with minimal submissions. Because the amount of content in a given theme/category can vary significantly over relatively short periods of time, Timeslot Themes can be grouped in pairs using the Timeslot Pairing submodule, which ensures more consistency in the daily schedule. In this manner, the total time allocated for the pair is consistent, while the distribution between the two paired themes can change.
Pairs are set up with a minimum of 2 hours, and the switch from the first to the second category in each pair must take place on the hour or half-hour, to improve the viewer experience. With the Open Media system, this information can be exported for Electronic Programming Guides and for dynamic interstitial content that announces the beginning and end of each theme/category slot.
FOLLOWING IS STILL DOM SPECIFIC
Following is the logic of the code which distributes time within each theme block pair.
-Calculate the total duration of content in each category annually.
The category with the most combined duration (most hours of content, not most shows) becomes "category1" and is paired with the shortest category (in DOM's case, "Category 12")
On the Premium Channel, blocks are divvyd up as such:
Because we are on the premium channel, and we only want to show videos above average for that category, we ask.
-what is the ratio of
"the combined duration of all content in category 1 with a Score/rating above "R"(The variable defined in the bayesian equasion below)"
to
"the combined duration of all content in category 12 with a score/rating above R"?
Being that this is a 2-hour slot, shared between the two categories, if the ratio is less than .25, the slot is split up 25/75 with (in this case) 30 mins allotted to Cat1 and 90mins allotted to cat2. If the ratio is between .25 and .75, the slot is split in half, 60-mins each. If the ratio is over .75, the slot is split up with 90mins allotted to cat1 and 30mins allotted to cat b.
Then, in scheduling the "Featured" day for that group/pair, we take the top-rated show in cat 1.
Is it marked for late-night airing? If yes, place it first in the 11pm slot for that day.
If no, determine the remaining time allotted for cat1 in the first time slot (taking into account anything that is already programmed in the princeton server). Is the available time is greater than show's duration?
If yes, schedule the show at the first available slot.
If no, skip the show.
Do the same for the second rated show in that category, and so on.
In filling a block, the system should not stray from the selected category, and can be set to use shows listing the category as a "secondary" category, or based on other metadata, repeat shows, or even switch to continuity files.
Any open time on the basic channel 56 can be autoscheduled following the same rules, but without the requirement that the rating is above "R", so whereas on 57 we start repeating shows once we hit shows with a rating below the average for the category, on 56 we don't start repeating until we run out of shows.
The Princeton submodule enables the transfer of video files, show metadata, and scheduling information to Telvue's Princeton playback servers. The Princeton submodule also includes a status check feature. This feature disables scheduling when a playback server is unresponsive or at capacity.
The Princeton status check in run on cron. Once the problem is resolved, you may need to manually refresh the status of that check in Princeton (http://YOURSERVER:3000/system_health/index) and then rerun Drupal's cron or refresh Admin > Open Media System > Princeton Server Status.
DEVELOPMENT IN PROGRESS: The current release of om_timeslot_princeton set status variables for each server, but lack a UI to override those settings. The server status variables are found in Drupal variable table and formatted as om_timeslot_server_[nid]_status. The value of that variable will be i:1; if the status is good. i:0; if the server has an issue.
First, mount the playback server in a way that allows the account used by the Apache service to read and write files. It is unlikely that this can be done on an shared web host. In most cases you will need complete control of a web server that is on the same network as the Princeton.
On Ubuntu, the mount command for our Princeton looks like this...
sudo mount -t cifs //INTERNTAL_PRINCETON_IP/vol1 /mnt/DOM57 -o username=smbuser,gid=www-data,uid=www-data
Other operating systems will require slightly different syntax for creating mounts. Consult the documentation for the operating system you are using.
The internal IP address is used in most cases because the SMB protocol is not normally routed between subnets.
Once the volume is mounted manually, add that mount command to your server's fstab file so the mount is recreated if the server is rebooted. Again, consult the documentation for the specific operating system you are using.


The Open Media Project Timeslot Scheduler Module is designed to simplify or democratize the scheduling process for any noncommercial media operation. The system is flexible enough to enable the station director to apply any mix of rules (from freshness to popularity to theme) to automatically generate the programming schedule.
One of the most innovative and democratic variables stations can use to drive the program schedule is viewer ratings. Votes or ratings can be generated on the website or via phone or SMS, then applied together with other variables set by the station to determine the programming schedule. Because the options and variables are so extensive, we'll explain one way this system can work by explaining the structure in one station, Denver Open Media.
Denver Open Media's Rule-Based Scheduling:
To give viewers a more stable and predictable viewing experience, all scheduling is done within theme-blocks. In Denver, when a producer submits a show the producer selects the theme block (also known as category or Daypart), along with all other metadata.
Denver has 12 theme blocks, though we recommend 10 categories, which is easier to distribute fairly across weekdays. Themes are paired, with the theme block containing the most hours of content paired with the theme block containing the fewest hours of content, and so on.

On our basic channel, theme blocks are distributed such that they appear 4 times during the weekedays (one early morning, one late morning, one early afternoon, and one late-night) and one weekend slot. Every show is guaranteed to air once on this basic channel, with producers free to select an open time-slot for the theme block they've selected for the initial airing. On the day when the theme block does not appear on our basic Channel, that theme pair is "featured" on our premium channel 57, with the morning and evening prime-time, and late-night slot (which has proven to be the most popular viewing time for Public Access) filled with that theme pair.

Time within the theme pair is split between the two theme categories based on the compared amount of total content in each category. The slot is divided into 30-minute blocks, with the blocks being distributed in a ratio matching the ratio of content for each category in the pair. A more detailed description of this 30-minute chunk distribution can be found in the Developer Notes.
Scheduling Within ThemeBlocks:
When desiging a user-driven scheduling system, it was important to us that the viewers have as much control as possible. At the same time, we want to ensure that there is room for everything on the channel. So, while we wanted viewer votes/ratings to drive the scheduling on our "premium" channel 57, we designed the system such that videos are only competing within their theme-block, and thus a video about child abuse need not compete with a rock video. This approach has ensured that there is room available for the different types of content that may be less popular, but deemed significant to the community. The theme-blocks are to be reviewed by a community board each year.
While many video sites use a straight-average rating system, this results in misleading ratings, where a show with a single perect review has a higher average than a show with hundreds of perfect ratings and one low rating. Thus, instead of a straight average, we use what is called a "Bayesian Estimate". The equasion is borrowed from IMBD's rating system.
Show Score= (v / (v+m)) * R + (m / (v+m)) * C
where:
R = average for the show (mean) = (Rating)
v = number of votes for the show= (votes)
m = minimum votes required to be listed in top 25 (currently 6)
C = the mean for that Theme/category
This formula normalizes scores, that is it pulls a particular score (R) to the mean (C) if the number of votes is not well above m. In other words, if a particular design has only a few votes above the minimum required votes to be listed in top 25 (m), the average score is decreased a little if it is above the mean, or increased a little if it is below the mean in accordance with the normal distribution rule of statistics.
Improvements to this system include series or producer scores, which are averaged with show scores to ensure that new shows from producers or series with a strong track-record have preference. We also hope to date votes, where in scheduling for the premium channel, recent votes carry more weight than older votes.
Timeslot Rules fall somewhere between normal SQL and Views. After the list of the shows that could potentially be scheduled is generated, additional processing is done to rule shows out from the list to be scheduled based on other settings like it aired since the Days Since Last Airing setting, a show from the same project had already been scheduled, or this show is rated Adult and being scheduled within a block that airs at a time adult content isn't allowed.
Before reading the rest of this page, it would be helpful to read Wikipedia article about JOINS.
Many of the example queries use the {tablename} syntax. This isn't required. The reason is for compatibility with Drupal's Database Abstraction Layer. If you want to preview the query using a tool like phpmyadmin, you would need to remove the {} before running the query.
POST SQL PROCESSING OPTIONS:
Days Since Last Airing - This eliminates shows as candidates to be scheduled based on the latest om_airing nodes. This will eliminate both shows that have aired X days ago as well as shows scheduled to air in the future.
Do Not Air Shows from the Same Project Concurrently - This prevents shows form the same project from running back to back. Useful when ordering by the date the show was added. If a member adds 10 shows at once, only the one show would air each time the Rule was processed. If another member added show after the first 5, the 6th show from the first project would air as well.
Adult Content - The hours adult content is removed from the pool of schedulable shows isn't configured on Timeslot Rule or Events, but is processed if hours are set in the Admin > Open Media > Scheduling Configuration.
If the Limit Pool by Rating, this must be included in the SQL result. Add this join to your SQL...
JOIN content_field_om_rating ON content_field_om_rating.vid = <vid of original table>
Do Not Air Shows from the Same Project in Rule - This is a more restrictive configuration and should only be used by stations with a large archive.
If the Limit Rules to Scheduling by Project the Organic Group must be included in the SQL result. Add this join to your SQL...
JOIN {og_ancestry} ON og_ancestry.nid = <nid of original table>
Custom Variables:
Anyone familiar with Views will recognize this syntax. While the longer term goal is to generate Rule from Views, this release of om_timeslot_scheduler lays the foundation for that development.
***CURRENT_THEME*** - When the Rule is processed, this code is replaced by the nid of the Theme (or Paired Theme when using om_timeslot_pairings) Attempting to Preview a Rule that utilizes this variable directly will return this error...
This Rule utilizes a Theme. Results can only be previewed from a Timeslot Theme or Event.
It will also return a list of Timeslot Themes that can be used to preview the Rule's results.
***NOW_-7_DAYS*** - This variable will be converted to a time using PHP's strtotime function. Any string PHP can process can be used; -1_Week, Last_Monday, ect.
SQL to Order by Alternative Ratings:
Rules using the Bayesian score provided by alternative_ratings module should add this SQL...
JOIN {alternative_rating} ON alternative_rating.nid = node.nid
and...
ORDER BY score
SQL to Order by Voting API averages:
This SQL will return the shows rated 5 of 5 if you are using five stars or thumbs up/like with that configuration where the vote was made in the last 7 days. This creates a nearly immediate feedback for viewers who rate shows. If they rate a show, it will very likely be scheduled the next time Rule is processed.
WHERE field_om_show_theme_nid = ***CURRENT_THEME*** AND value = 100 AND votingapi_vote.timestamp > ***NOW_-7_DAYS*** GROUP BY nid ORDER BY total_votes
SQL for Limits:
Limiting the number of results is important for performance. The number of shows that should be returned in a query varies based on the duration of the Timeslot Event, number of Rules applied to an Event, and amount of content matching that criteria that will be ruled out based on post SQL processing. The SQL for a limit is...
LIMIT 0, 100
SQL for Random:
When getting started with Rule based scheduling, Random is useful option to add variety to a small amount of content. To randomize the results, simply add this ORDER BY statement to your query...
ORDER BY RAND()
SAMPLE RULES:
Locally Produced - Top-rated by Alternative Rating
SELECT * FROM {content_field_om_locally_produced}
JOIN {node} ON content_field_om_locally_produced.vid = node.vid
JOIN {og_ancestry} ON og_ancestry.nid = node.nid
JOIN {alternative_rating} ON alternative_rating.nid = node.nid
WHERE field_om_locally_produced_value = 1 AND status = 1
ORDER BY score DESC
LIMIT 0, 100
Because that Rule doesn't rely on a theme, it is standard SQL. A more complicated Rule would be...
Most Popular for Theme That Hasn't Aired in 14 Days
SELECT * FROM {content_field_om_theme}
JOIN {node} ON content_field_om_theme.vid = node.vid
JOIN {og_ancestry} ON og_ancestry.nid = node.nid
JOIN {alternative_rating} ON alternative_rating.nid = node.nid
WHERE field_om_theme_nid = ***CURRENT_THEME*** AND status = 1
ORDER BY score DESC
LIMIT 0, 100
This Rule utilizes both the Days Since Last Airing option and the ***CURRENT_THEME*** variable in the SQL. The same SQL could be used with a higher Days Since Last Airing number and run after the 14 day version. Because using the Days Since Last Airing option rules out shows based on both past and future airings, shows scheduled in the first rule would not be scheduled by the 21 or 30 day version of the Rule.
Random Shows in Theme
SELECT * FROM {content_type_om_show}
JOIN {node} ON node.vid = content_type_om_show.vid
JOIN {content_field_om_theme} ON content_field_om_theme.vid = content_type_om_show.vid
WHERE field_om_show_mpeg2_fid IS NOT NULL AND node.status = 1 AND field_om_theme_nid = ***CURRENT_THEME***
ORDER BY RAND()
Timeslot Pairings are an attempt to give equal access to the channel to all types of content. Popular Themes are "paired" with less popular themes.


Users who have permission to self schedule see a Scheduling Options tab on Shows they are the author of. Users with administer scheduling permissions see that tab on all shows.

If a show has already aired, non-admin users see a message telling them only admins can schedule the show again.

If the show hasn't aired or the user is an admin, the published Timeslot Events for both the matching Project and Theme are displayed.

Current Limitations:
When a Rule is applied to a Timeslot Event, the schedule link appears next to the Lead Theme and the Paired Theme. The Rule is processed separately with the start and end time of each theme. The start and end time or the lead and pair is adjusted based on the amount of content for that theme.

Clicking schedule will preview the results of that Rule. Shows that are ruled out in post SQL processing appear crossed off with the reason in parentheses next to the show's title. Shows that are not ruled out are prepared for TRANSFER and CSV export.

The TRANSFER option can take several minutes to complete depending on how many shows are already on the server, the size of the MPEG, and the speed of the connection between the archive and the playback server.

Once the shows have been transferred, you are ready to generate the CSV. Clicking the CSV icon will display a page that looks like this...

Save that files as a .csv. IMPORTANT! Do not save the file as HTML. That will fail to import into the Princeton. Once the file has been saved, go to the Princeton Progamming Tab. Use the Browse to file and Import. If everything works, you should see a message like this...

This section provides a curriculum outline for training staff and others about the Open Media Project tools. This is a draft in development.
Goal: This training curriculum is directed toward the staff of community television stations. The goal is to provide staff with knowledge about the Open Media Project tool sets from the perspective of end users as well as a staff administrators.
Part A: Open Media Project Introduction
Part B: Getting Into The Site
Part C: Using The Tools
Part D: Administering The Tools
Part E: Maintaining & Developing The Tools
Part F: Expanding the Open Media Project