One of the most useful features in the Final Cut Pro X/Motion 5 workflow environment is the ability to create, edit, publish, and share media content created in Motion 5. Creations like Effects, Titles, Generators, etc. can easily make their way into FCPX for widespread use. What is astonishing is these robust media tools can be created without writing a single line of code. Efficient distribution of these tools sparked my interest and lured me back into Xcode.

Before I preview my new application, let me explain the current (and kludgy) method of incorporating distributed Motion content into the necessary location(s) on the user’s system.

When you install Motion 5 a folder structure is created in the user’s ~/Movies folder. The top level folder (below “Movies”) is called Motion Templates. Below Motion Templates, 5 sub folders are created: Compositions, Effects, Generators, Titles, and Transitions. It’s important to note that each one of these folders pick up a .localized file extension. This was a very important issue that I needed to be aware of when developing the new application. More on this later …

Anyway, if a user is running both Motion 5 and FCPX, it is very easy to move Motion content to and from FCPX. This content is ultimately located and accessible in the FCPX Effects Browser. For example an Effects package can be “Published” from within Motion to FCPX and sent to a user appended “Category” located in the Effects Browser. This creates a very well organized list that makes it very easy to manage and access Motion tools while working on FCPX projects.

Here is where things get a bit confusing: As previously noted, Motion content authors can also share their creations. With this in mind I realized the user on the receiving end was forced to dig into the existing Motion Templates folder structure and manually place their acquired tools in the proper location. The minute I saw content authors including a snapshot similar to what I have inserted below, and using it to display where to place distributed content … I knew there had to be a better way.

Enter toMotion.

I won’t get into too much detail here. In fact I built a webpage, also accessible from within the application that explains the concept in full. It’s available HERE. Basically toMotion is a sophisticated folder routing tool that interacts directly with the Motion Templates sub folders and their underlying contents. You simply drag in acquired Motion content folders, set a destination with or without appending a custom Category, and fire away. The source folder is automatically moved to your targeted location. Keep in mind this is *not* a copy operation. The source input folder is in fact moved to the targeted location.

It also came to my attention that user’s who have not yet purchased and/or installed Motion 5 may still utilize distributed Motion content. The caveat here is they will not have the required folder structure in their ~/Movies folder. Without this folder structure it will be impossible for the content to be incorporated into the FCPX Effects Browser. To alleviate this I built in support for the creation of this necessary folder structure. The user can access this option from within the Application Preferences. Upon completion of this action the Motion Templates folder and it’s 5 subfolders will be in place and ready for content.

Finally I decided to add a Backup Solution. The user can select an existing folder located on their system, or create a new folder, and designate it as the backup repository. The backup action copies the the Motion Templates folder and it’s contents, appends a date, and sends it to the designated location.

I think the application turned out pretty well. I learned allot, which of course is my ultimate goal when writing these Cocoa Applications. By the way – I previously mentioned this .localized folder extension issue. I must admit this was an oversight on my part. I knew my code was working regarding folder creation and movement of folders to specific locations. I just could not send folders to the Motion Templates folder or any of it’s subfolders. I finally initiated a Get Info (⌘ + i) action on one of the folders and realized they all shared this .localized extension. I edited my code and I was good to go ..



Last eve I was sifting through the Apple App Store looking for a simple utility to quickly convert RGB color values to corresponding float values (RGB integer / 255 = float). I decided to build my own Cocoa application with a few added enhancements.

High-res Image: colorFloat

Run the standard OSX Color Picker and press the second toolBar option (Color Sliders). Select the RGB Sliders option in the popup menu. Notice each RGB value changes as you move through the color spectrum. We can divide each one of the displayed values by 255 to return float values that can be used in source code authoring. In colorFloat the user adds an input RGB value (x3), converts, and appends each conversion result to the desired color channel. The final action displays the corresponding color for confirmation.

I also built in support for what I refer to as Dynamic Floats. Notice the Dynamic Floats HUD located in the high-res image. The Float value strings change dynamically as you move around the color wheel or change the values of the RGB sliders. This feature allows the user to easily sift through the color spectrum to view corresponding floats in real time.

Lastly, I added a simple Palette that consists of five Color Wells. The user can store colors for future access.

The app. turned out pretty well. I found it interesting to take a break from QTKit and explore a few unfamiliar Cocoa Classes.


When I find the time I’ll be writing about a bunch of new stuff, mainly Adobe Audition for the Mac, Final Cut Pro X, and a new media playback application that I am finishing up with interesting support for images captured with one of my favorite iPhone apps. – Panascout. Lastly, FiRe 2 … an awesome iPhone audio recorder that supports waveform editing and audio processing.



aspectRatio: New design

I’ve consolidated the design and functionality of the aspectRatio version 1 series UI.

The main (and only) program window now consists of two individual views: Fixed and Custom Calculations. The user can select a view with the Segmented Control, located at the bottom right of the application window. Additional fixed calculation actions that were previously accessible on various “sheets” are now located in a new lower drawer.

I rewired all the application objects and edited a good amount of code. I need to test the application before I release it. I think it turned out pretty well …

Update: aspectRatio ver.1.10 has been released.


Technorati Tags:
, , ,

aspectRatio ver. 1.9 Released …

New in this Release:

• If custom calculated output dimensions are not evenly divisible by 16, the aspectRatio Custom Conversion utility will now suggest evenly divisible high/low values.

Select MPEG formats are based on 16×16 macro-blocks. Output dimensions evenly divisible by 16 will maximize encoder efficiency and yield optimum results.

• New Preferences Panel with a new option to set the font color of the calculated numerical output displays.

• The code for the Main Window formats display has been rewritten.

• New multi-view Help panel.

• A Main Application Window selection option has been added to the Window menu. If the main application window is inadvertently closed while the application is still running, this option will re-display the main window.

• Updated the Sparkle Framework to ver.1.5 b6. This includes DSA Signatures for enhanced security.



Technorati Tags:

Core Data: Credenza

Here is a glimpse of a new internal use application that I am finishing up. I’m calling it Credenza.


The inspiration for the name is based on my personal interest in Mid-Century Modern design, furniture, and architecture. A Credenza is essentially a furniture cabinet popular in the 1950’s and 1960’s that may have included space to store folders, media, barware, or anything else for that matter. Credenza the application is a custom designed storage repository or database intended to support my subjective methods of logging data relative to my work.

The pictured chart below displays the flow of data based on how I manage personal business records on a monthly basis: The sourceView contains a list of active clients who submit groups (Batches) of monthly assignments (Jobs). For example September Post Production … Program 1, Program 2, Program 3 … and so on. I’ve added a Task Manager that is linked to each individual Job, detailed contact/account information, a text editor, billing/payment records, and past due information. The only thing Credenza lacks is support for generating invoices.


Core Data

For the past year I have been studying the process of building Cocoa databases using Core Data and Bindings in Xcode.

Two specific resources sparked my interest in Core Data: The Core Data exercise in this Cocoa Programing book by Aaron Hillegas, and this Core Data tutorial movie supplied by Apple.

Credenza takes advantage of the basic Core Data principals with the addition of custom code that enhances the functionality of the application.

There were two significant challenges:

• A user option defining the state of the application at runtime

• Migration and Versioning

Credenza is a Document based application. By default a “new” blank document is displayed when launching the application. This can be a handy option, allowing the user to create multiple unique databases within the application. But what if the user uses a single dedicated database? In this case the default blank document would need to be closed, and the user must manually navigate to and open a previously saved database from the File Menu. With a bit of research I figured out how to make this behavior (blank or previously saved) a user defined option. It is now available within the application Preferences.


By default Core Data applications will not display data that was input and saved using a previously created data model. Data Models consist of Entities, Attributes, and Relationships. Using the concept of Credenza as an example: Clients would be a cumulative Entity, and a specific client’s email address would be an Attribute. Relationships create interaction between Entities.

This excellent documentation was a tremendous help. The implementation worked perfectly. The bottom line is that as application development continues to progress, I am no longer at risk of data incompatibility issues. Incidentally the database format is SQLITE, and all saved documents maintain Credenza as the default application by way of a custom file extension (.credenza).

This project is an example of designing and building a useful customized application, all made possible by taking advantage of Core Data’s robust capabilities and simplicity.


Technorati Tags:
, ,

proKeys for Mac …

Final Cut Pro, Logic, and Aperture all include searchable keyboard shortcut databases. Soundtrack Pro does not. Oddly enough I was never a keyboard shortcut power user. I find it confusing trying to remember specific shortcut banks that vary from application to application. I’m now realizing things flow much more efficiently when using various shortcuts to execute repetitive application functions.

Enter proKeys:


proKeys is a customizable shortcut repository. The left source list includes various (user defined) applications. Specific shortcuts are listed in a basic NSTableView with three columns: Function, Shortcut, and Category. This concept matches the PDF user manual implementation provided by apple. You can store what I refer to as “Quick Tags”, or tokenField strings that support drag and drop. Their purpose? Add and store keyboard shortcut symbols (⌘,⌥,⌦) for repetitive use. Keyword tagging is supported, and I’ve also included a Category Log that simplifies searching for and displaying an entire “bank” of shortcuts that are part of a specific group.

I built the application using a Core Data Model with Bindings. I also implemented a custom file extension that supports SQLITE file/data format backups. The demo dbase includes the entire group of Soundtrack Pro shortcuts.

Now I need to consider distribution. I think it’s a well designed, simple tool that many will find useful.

More news to follow …


Technorati Tags:
, ,

RGB Float Values with iPalette Pro …

Below is a snippet of Objective-C code using the NSColor Class to set the background color of a textField.


Notice the color (a shade of blue) is set with float values for Red (0.1336), Green (0.5266), and Blue (1.0000). I opened Photoshop and I didn’t have much success finding a way to return RGB float values for displayed colors. I’m sure the feature is available. I’ll dig deeper when I have some time.

A while back I purchased a copy of iPalette Pro and tucked it away. This is a nifty design tool that supports custom color management and storage. It’s very well designed and fun to use. It’s another example of a $10 Mac Shareware gem.


Take a close look at the data located at the bottom of the RGB Test window. Exactly what I’m looking for: RGB float values.

I’m glad I bought iPalette Pro. It’s worth taking a look at …


Technorati Tags:
, ,