WWDC2003 Session 206

Transcript

Kind: captions Language: en I'm Travis Browne and the graphics engine and imaging evangelist and you know I think it's a you know I'm really sort of pleased to talk to you about some of the directions of apples going on with terms of color management because one thing that's really important for Apple is getting correct color for our users and our developers because nothing is more frustrating for user when they have all these color input devices color output devices and they try to use them and they get different color on the screen they get that for a different color on their on their inkjet printer or they're you know they're someone views a different color when they send a PDF to another platform so I think it's important that you understand that Apple is very serious about color and we've delivered the pretty much the only color managed operating system that's on the market today and how we've accomplished that feat is by taking our color sync technology which has been with us for a sniffing a period of time which was essentially an opt-in technology a technology that developers had to go to extra lengths embrace and utilize and certainly that made sense and high-end publishing but now what we want to do is make sure that the whole OS at reacts to the proper way to color management image profiles and whatnot and so what we've been doing is essentially building color sink in at lower and lower levels fundamental you know integrate integration in the operating system and as you know for example one major announcement that was made I think it was yesterday was the fact that click on image importers now are going to respect color profiles which is very significant because that means that practically any application that uses QuickTime n is an importer for services is now going to do the right things with regards to profiles but in the fact that we continue to build colors think more and more in at sort of the core DNA of the operating system we wanted to make sure that we continue to innovate and Express color sink in interesting ways for both our users and our professional users in particular in addition to developers with lots of new ways to access the functionality so it's my pleasure to invite David Hayward to the stage to take you through the session hi everyone welcome to the colors in session we have a big talk topic to talk about today on a wide range of subjects let me kind of start out with a basic outline of what we'll be talking about today first of all for those of you that are new to color sync or need a color management I'll start out with a general overview and then we'll start to talk about some of the foundations upon which color sink is built such as color sink and it's device integration layers how it ties in with quartz after that we'll take a trip through some of the high-level functionality that color stink provides through color sync utility and integration with other systems like OpenGL and display calibration after all after that's over i'll be talking about something new today which is something called sips we'll save that for last the first of all an overview of color sync for those of you that are new the subject all of you are I'm sure aware that there's a wide variety of devices that we all work with now from scanners to cameras two displays big projectors printers both PostScript and inkjet and all of these devices as your all-seeing before represent colors in different spaces and with widely different behaviors and different gamuts a range of colors that they can represent and this presents a fundamental problem that makes it very difficult for content to move between one device and another and the solution of this problem is color stinking and color singh provides a complete color management system that's been designed to provide continuing our consistent color across this spectrum of devices that said in addition to doing device level color correction it can also be used to do abstract special effects such as q rotation and contrast enhancement these kind of changes that may not have may be very important to you as content creator but may not be associated with any particular device we'll come back to that throughout the presentation this is an outline of how colors think fits into the overall system on Mac OS 10 at the top we have high level applications such as the ones that user at you right and also applications such as color sync utility and other tools that we provide these are all built upon high level application frameworks such as carbon and cocoa which all in turn use our a variety of graphics technologies that we have on the system such as image capture courts QuickTime and printing the key thing about all these graphics technologies that they all now make use of color sync and this provides a core service through the rest of the system for dealing with color consistently and correctly color stink is based on three key foundations one is profile profiles are binary data files which hold the device characterization it describes the way the device responds to color in a device-independent way the other key foundation that color sink is based upon is device integration and this I'll talk about more and more detail in a bit but the basic idea is to be able to make it so that color sync and Klein applications can know what the current profile for all the devices that are connected to a computer are the other third piece of foundation that colors think is dependent upon our cmms or color management modules and these are the computational engines which are used to actually perform color transformations between one source profile and another profile so that's the basic outline of how a collar sink fits into the system let me give a brief simple example of how color sink is used in everyday practice for example we have an application that's calling color sink it's either calling it directly or it's calling it indirectly through other graphics API but the scenario is basically the same the idea is we want to be able to acquire images for example from a camera and we want to make sure that when we get the image from the camera that we also have a profile that describes the way that camera responds to color this profile can be embedded in that image so now wherever that image travels it will always be possible for color sync to know the behavior of that device and how that image represents color and how the image is supposed to look so once we have an image with an embedded profile a color sync application is going to then that want to display that on the screen for example color stain can determine the profile for the screen and now given these two profiles with source profile for the camera and the destination profile for the display colors distinct can concatenate these two data files and create what they call a color world this color will can then be used to match all the RGB values from the original color space to the display color space in a manner that creates the best possible consistent color a similar process occurs when it comes time to print in this case color sync determines what the death profile is for the current printer in its current settings and again the source data is now matched from the source color space to the destination printer profile this is a very simple example here in reality documents can be much more complicated and the life of a document can be much more long and drawn out so for example this is a very conceivable operation for example and a image can be acquired through the image capture architecture and they could then be added and edited in the carbon application after that it could be converted to a different file format using some quick time tool and then may be sent in an email to another user who opens it in preview and print it as soon as printing occurs there's a whole new set of operations that start to occur such as the data being rasterized by courts sent through the printer driver and ultimately sent as bits to the inkjet printer so this is a long chain of operations and each one of these steps color management may be involved or should be involved if you want to get the best possible output under Jaguar however there were a few places in this chain where there were potential weak links the places where applications had to go to a little extra effort in order to make sure that the correct color management occurred for example image capture architecture was hindered by the minor fact that some cameras didn't register profile this meant that when it image was first brought into the system there was no profile to describe the image which causes cause problems later similarly when QuickTime api's were invoked to modify an image apps had to go to a little extra effort in order to explicitly check for embedded profiles this created a persistent problem which was that oftentimes the same document could be opened up in different applications and depending on whether that application respected the profile or didn't you could get different results similarly there was a dilemma that occurred when it came time to print which was that not all print drivers registered profiles so one of our major objectives for for Panther was to solve these problems and then make it as easy as possible for applications to get the right output which is after all what we all want so we've made several changes in the system to solve these solve these problems one was an image capture we now associate a generic camera profile for all cameras if they don't register a profile otherwise also as we've mentioned earlier QuickTime now makes the effort to respect embedded profiles this is a very important change to the system and means that that documents will now look very consistent matter how they're opened up lastly it is now possible cut four cups PostScript and raster drivers to register profile so this is also a great story and that it completes the picture at the output side making sure that we have create profile you have the correct profile at every step in the process so as I mentioned before one of the key foundations upon which color snake is base is device integration let me speak a little bit about that in detail again as I showed in the previous diagram we have color sings which is based on one key thing which is device integration and this allows color thing to be able to know what the profiles are for devices the key feature of the device integration is for novice users in the sense that now with device proper device integration when a device is connected a profile will be automatically registered with the system on behalf of the user this means that even users who do not even know about color stinks will get good color output on their devices the way this is accomplished is by automatic registration automatic registration involves registration of devices by with their name and their ID different modes of the devices based on ID and name and a specification of a default or factory profile for each device again the objective of this is to make it so that novice users will automatically get good color results without having to do any special settings or options however we also want to make this a powerful feature that expert users can take advantage of as well and this is done by supporting overrides of profiles with device integration overrides are something that calibration applications will use in order to change the factory profile with a calibrated profile it is also something that an administrator can do to override the default profile for all users of the machine or of course users as well can change the profile they're liking lastly there is an API for device integration so your applications can become aware of profiles as they become attached to the machine through their devices let me talk a bit more detail about the automatic registration again this is the key functionality that makes it very easy for new user to get a good color output this is accomplished in three ways based on the three different device managers first of all the windows server whenever a display device is detected will automatically query the display and ask the display for its eated information from that eated information it will create a profile and register that device for image capture similar process occurs whenever a camera is plugged in the if the driver supports profiles it will tell image capture about that profile and that will be registered if it doesn't then a generic camera profile will be registered instead lastly for the print manager profiles are registered for devices whenever a print queue is created and this happens in two ways depending on what type of printer driver you have for tioga printer drivers the print driver returns to color sync a dictionary of device names and device modes and the profiles for each mode 4 cups drivers this information is specified in a postscript printer description file which I'll talk about in a little bit more detail now so now with PPD's there's a new entry that we're proposing this is very important for cups drivers both proposed script and for raster drivers because now it is possible in the PPD for the for the file to specify what the modes of a device are and what the profiles are for each mode the format for this is the new keyword cups icc profile followed by a mode specifier and a profile specifier the mode specifier is a concatenation of three fields the color model the media type and the resolution any of these fields can be admitted into the little means that that mode will apply to any of any model media resolution the profile specifier is very simple as well all it is is a standard path that's relative to the usershare cops profiles directory we recommend that if you are going to be installing profiles in this directory that you should create a subdirectory for your own driver so that you do not conflict with other drivers profiles let me show a simple example of this in practice here you have a postscript printer PPD file that is registering two modes one for 600 x 600 DPI and one for 1200 x 1200 DPI and then the profile for that so it's very simple so the best way to show all this is to show it in action so I'd like to bring up to the stage Luke Walsh will be demonstrating the device integration and speaking more on other subjects thank you David can I get the Machine number one on the screen please alright so the automatic registration of the device is really a great story that we are promoting the mac OS 10 but what I would like to start with is to show you how user can get access to the color sink device integration database and how he or she can decide what kind of profiles are going to be used with the devices known to the system so all this information is available in coloring utility under the devices tab as you see there are different types of devices listed here scanners cameras displays printers and prefers and if for example i open the cameras tab you can see that the Canon Powershot s100 my favorite camera is known to the system the information that I'm looking here for is the profile this camera or is device manager in this case image capture registered for me a default mode and it's actually profile in the same time me as a user I have an opportunity here and option given by coercing utility to override this factory profile and I could do that if I desired so by assigning any of the profiles that I can choose but in this particular case of the camera I was quite pleased with the results so I didn't need to do that the next on the list are displays same information is available here i have the same option to override the factory profile register automatically and as a curiosity we actually had to override it because we wanted to have colors look right on the display the video is the split through the splitter and the same image is displayed on the screen so in order to get the colors better as you see we overrode the original automatically registered profile with the profile that we created just a few moments before the session started and the next group of devices i would like to talk about our printer as you heard from david there are different types of printers supported in Margo's then there are cayuga roster printers which citric typically comes with OEM custom drivers there are postscript printers and last not least the cops roster printers so I selected the one represented representatives for each of those and the first on the list is canon s 450 which is controlled by the tioga driver and this driver registered one mode and one taxi profile when I was browsing through the contents of the driver package I discovered that there is a slightly newer version of the profile for this printer so i use my option here and i overrode the original one with slightly newer profile the next on the list is probably very well known for you apple laserwriter pro 6 30 this is a very old printer manufacturer at some point of time by Apple but the reason I chose this particular printer was that I was able to find a tpd which would declare a profile for this printer the way they described as a moment ago and as you see the name of this profile is laserwriter pro 6 30 profile and is located in user share cups profile as a writer but looks like we didn't do here what David was suggesting we did not create our sub folder for profiles the next on the list is style of CA T which is controlled by the cops GIMP print driver and the reason why I chose this particular printer is because I wanted to show you what is going to happen if there are no profiles in the PPD in this case printing system will find out all the color models supported by this printer and will by default to register these as the mode of operations with color sync so even though there are no sexually profiles available me as a user I have either user has an option to assign my own profile to this device for specific mode and as a matter of fact I had built two profiles for this printer CMYK and RGB and I used colors and utility of to assign these profiles in the case when there is no profile available for a given mode of operation the printing system will provide on-the-fly a default profile which will be used in the case when we need to do color conversion to this particular model color process color models give me so in conclusion of this little demonstration I would like to say that all devices color devices known to this system will be represented by a set of ICC profiles corresponding to their modes of operation and the most important use of this of these profiles is obviously to do the color matching but in the same time these profiles are available to other system components into applications and can be using a variety for variety of reasons for example as very coercive II application can figure out the device gamma or find other properties of this device or the profile can be used for device simulation soft proofing and things like that so now let's switch to slides so I can get the projector let's start with taking a look at the very typical scenario of an application which goal is to acquire the data from the color device input and reproduce it on variety of different color output devices like displays printers or export this data in the PDF format there are two main points that I would like to make using this slide first of all as you can see there is one common component for all the operations that I described and this component is color think another point is that as you see the application doesn't have to necessarily go all the way to color things but it can use other system components which handle things like color data acquisition or core data creation because color thing is integrated into those components let's take a look at the color data acquisition the component which is the closest to the input device in this case the camera the image capture device module is responsible for transferring the data from the device into the system and if the camera happens to attach a profile to each individual image then this module will take care of passing the profile through the old layers of image capture to the application but if there is no profile attached to the image image capture will consult color think device integration database and it will retrieve appropriate profile for this device when we take a look at the process of color data creation we can see that there are two components which are always present here besides color thing there is court which is the Mac os10 graphics system based on the PDF imaging model in this particular scenario color thing will be used in to full extent of its functionality will provide the profile for the destination devices but in the same time will be used for converting the data using profiles for the devices source color spaces and using the register CMMS so this slide leads me to the topic I would like to focus on today which is the integration of color single cords our high-level objective here is to integrate graphics and color management by satisfying several basic requirements first of all we will like to have a centralized color matching for consistent results another very important requirement is the ability to composite different color spaces and opacity to satisfy this requirement color thing will be used to convert the data from many different source color spaces into court compositing space this also has to be a scalable solution in the sense of working with variety with different applications on one end we may have those old legacy applications which don't know anything about color management or they don't want to participate in color management so for these court needs to provide some default settings and make sure that these applications can work seamlessly with the rest of the system which is very core management centric the most desirable model for the application is the one which in which application uses calibrated color what I mean is everything is properly tagged and so the system can easily collect this data from the application and do the right thing when the data is to send two different kind of output devices in the realm of calibrated color we may have the very high end up patience which may desire to do the color management completely on their own so course also has to work with applications like that other important requirements are color accuracy performance and PDFs compatibility for those of you who may be new to this topic let me very quickly go through the few of basic ideas pertaining to color in PDF comparison to those in icc and color think and then see how we implemented that in court as you may know the color spaces in PDFs are defined by the set of known color spaces which can be divided into three different groups there are legacy device color spaces calibrated color spaces and finally ICC base color spaces as you may know this list also reflects in some sense the history of color management where initially only device color spaces were known but as we know today they were really very bad for any kind of color management and because the color appearance is devised attendant to address this problem calibrated color was invented along with the idea of color matching through devising dependent color spaces and over the years the concept of calibrated color evolved into icc profiles which now are the de facto standard among color professionals and can be embedded in almost all known data format support in color another concept important from the color management point of view in PDF or color conversion which can be described as a function of source destination and rendering intent the similar concepts exist in colour singh and icc but the only form of the colour space that we use there is the icc profile and as i mentioned an anomaly go today this is the most general form of the color space description the colour conversions in icc and color think are some what's similar to those in PDF with the option for inserting intermediate profiles between the source and destination in court the color space in essence is represented by one or more ICC profiles this way we can preserve the original PDF concept of matching a single source to a single destination but in the same time we can build those multi stage and complex color transform which are suitable for more advanced color management like soft proofing special effects color device simulation etc etc and if the need arises to embed such a color space in the document the sequence of profiles can be concatenated by color things into a single profile in a bed in the document another important rule that courts in some sense inherited from PDF is the color space equivalent this rule says that the color conversions are necessary only is the source color space is different from the destination and Court is using this very simple rule to properly or to organize properly the flow of the color data through multiple stages of rendering so in a summary all color spaces inside cords will end up as icc profiles the easiest way to operate as you see is 3 by using ICT based color spaces because we are just simply extracting the profile from the color space definition in the case of calibrated color spaces those can be very easily repacked using their calibration record in the form of the profile and in the same time we still have to support those legacy device color spaces and in order to work with these codes is going to use some predefined default profiles there there is a wide variety of ICC base color spaces provided by court but I like to focus on those which allow you to access the coercing device integration database an example are the color spaces which allow for drawing directly to the screen examples of these color spaces more specifically our display RGB color space which is a in essence a wrapper around the primary display profile another color space like this is display gray which as you can see is composed of 2 profiles device link converting grey to RGB and then attached to the primary display profile and for more advanced uses which there are display color spaces with ID which are rappers for display by AV ID profile court also in Panther helps to solve the problem of drawing to multiple screens there are two basic choices that applications can make one as I call it a simple model in which color is matched only to the main display and the application doesn't take any or make any updates on the screen on profile change on the other end the application can use what I call a complete model in which the color will be matched to individual displays the application can register for notifications on the screen or profile change and make the proper update when necessary and obviously there is some possibilities for combining these two profiles and come up with the application specific solution to this problem a very important aspect of color management in Mac OS 10 is color management in printing many of you may already know that the printing Mac os10 consists of two main components the front end and the back end the roll the main role of the front end is to choose the printer and collect the print option through this for example through the user interface and in the same time to pull the print job into PDF the back end job is to convert the spool PDF into appropriate format for the printer that we are going to print our job lon if we take a closer look at what is happening at the printing front end we may notice that all color data in this pool PDF is tagged with profiles by definition we are not doing any printer specific color conversions at the front end but another important step is that we are consulting the color sink device integration database and extracting the profile matching a current printing condition what is happening at the back end depends on the type of the printer for the roster printers what we have to do is to convert this pool PDF into printer profile from the color management perspective and for that we extract the printer profile from the print job and if the profile is not there printing system will provide a default profile so this matching can occur for postscript we have two options the first is traditional color matching in the printer for this case all the profiles from this pool PDF are converted to postscript csa that in 10 sir we added a new option for poster printers now we can do color matching on the computer using Color sink in this case we all we need to retrieve similarly as indicates of rustler printers the profiles for the current print job from the from the print job and if there are no profiles available but we still want to do the computer color matching by color think we'll be using some default profiles in this light a new edition of drawing directly in colors in printer color space I think is also very important that comes with standard this color space is based on the printer instance and current print settings this way when the user clicks on the print button in the print dialog an application has a chance to find out what our exact printing condition in sense of the color states and make the proper adjustments if necessary another edition is printer calibration API this API allows a calibrator to submit a calibration target in the form of a PDF file through the calibration task to a specified printer it requires specific calibration target information through which the calibrator can instruct the system which color conversions have to happen and which conversion must not happen a very important subject that I would like to mention here is importing and tagged data to Mac os10 platform as you know for many years we've been evangelizing usage of the coercing default profile for document and Court is exporting these profiles in the form of user default color spaces if the application makes this first step of assigning the user profile the whole color story of Mac os10 looks much better because very often is impossible from the death of the operating system to find out where this device data is coming from and the not reassigning those profiles in the depth of courts are sometimes difficult the next very very powerful addition to Panther our court filters in a nutshell I would define the court filter as a new optional component in the courts imaging and color matching pipeline which allows to associate a sequence of imaging or color correction operation with a single drawing the courts filter can act on all drawings operations or only on the specified set can be configured to perform very specialized imaging and color operations and finally can be defined in saving XML so the applications and users can easily exchange those when we look at the ho or architecture where the court filter fit we see that our located right in the middle of this structure and this is the main reason why in Panther will make the court filters available to the end user only through the use of system build utilities and applications but we will be working on the proper ati to provide access for applications through the filters so this access is safe for both the system and the application what that like to do now is to give you a quick demo of how the filters can be used on Mac OS how those courts filters can be used in Panther let's start with a very simple example what I like to do is to print the image which I acquired with my camera and when I go to the print dialog is the system yes and as you see a new things added to printing is the automatic soft proofing the my chosen profile was a monochrome printer and what I do is I soft prove it in the print preview which is in addition to previous print previews which mostly we're concerned with the page layout I can switch between the non unmodified image and the soft probe image so this is the first example of using court filter the soft proofing is implemented using soft proofing now let's take a look at this image as you can tell is this very very dark so I wonder if there is something that I could do about that if you go and you open the print dialog one more time you will notice that on Panther we added a new pde4 coercing and this PDE allows me to first of all on the postcode printer to choose which option of color matching I'm going to exercise I can perform color matching on the computer using the printer profile or I can fall back on the traditional matching imprinting path in addition to that I can apply court filters right before the job is going to be spooled into PDF and not quite by coincidence I have a filter which I called lighter color here which I'm going to apply to this image before as being spool to PDF and as I do that and I preview my image now I can see that it's much more readable and I would print rather this image than the previous one let's make one more trip through the print dialog and look at the last option in color sync pde as you saw at the bottom of the court filter menu there is an option for adding filters to printing if I do that the document is pulled into PDF and sends with the open apple event too coercing utility which opens it along with the filter inspector as you see i have several filters existing on the system and if i want to see what they do i simply check the preview a checkbox and as you see i can convert everything to blue tone i can use the opposite of the filter i applied in the previous example which i call darker color i can convert everything to great on and so forth as you see i can add and remove filters but what i like to concentrate on are they is the usage of filters for color conversion there are many different options that i can set with defaults but i don't think we have time to go and examine all of these so let's take for now to using the filters just for color conversion the first thing which i can decide here is is I want to do all my color correction on all objects in the document the same way or I want to do different color correction on different types of objects the next thing is I can decide how to use the rendering intent if I leave it in the automatic setting the rendering tent from the original document will be used if not I can override it with my choice of the rendering intent next what I can do is to define the intermediate transform which I want to be applied to my document or the object depending on the setting and in this pop-up you will see all the profiles available on your system which are appropriate for you to be used as the intermediate transform and finally I can convert the data to a specified target and in this case the list will be populated with all the profiles that are that are suitable for destination of the color matching so as you saw coloring utility was able to open in PDF document and indeed it can open many different file formats including PDF and postscript and all I would like to do now is still show you how i can use quartz filters to color manage a PDF document so I selected this particular document which has all typical components of PDF I have text I have vector graphic than I have images in order to demonstrate that let me create some PDF oh sorry that's Rand filter and where I will put all the settings for this particular document so first thing which I would like to do is perhaps to change the appearance of the graphics what I will do I will choose the blue tone abstract profile which if I previewed it changed quite a bit of the appearance of the graphic component in this document now I don't want to leave over the the images which are really very vibrant in color so what i will do i'll choose a little bit different correction for the images and in this case i'll use the sepia as you see my original document changed very dramatically from the original but just by a few of mouse clicks so what I see now that I haven't noticed before that I have the little text in the headline in the yellow color and since I wanted to use as few colors as possible I think I can take care of this text by applying some other transform to text and the rest of the text on this page is black and white so I will use the gray tone abstract profile and as you see now i have only few colors on this stage and indeed this is what I wanted to do to it to this document so now I'm ready to apply this filter and save it when I take the last final look at my new document i think that the images perhaps a little bit too saturated so let me try to change that a little bit and i'll go and select the images one more time and i'll use a custom transform and if I lower the saturation the result is has changed even more and this is the format that i like to say and color sink utility allows me to save it in many different file formats i can save it in most of the known bitmap formats but also I can export it for example to postscript so let me do that and now I can save my document i started with by applying all the filters that i showed you but i can also just save this document for some other situation when I want to start with the original so simply reserve and whoops didn't reserve not quite because the topic is still do it on I'm sorry I must have oh no I see what's happening i was applying this filter all time ok so this document came to this original form and now if i go and look for my new document in the postcode format and I open it with colors link utility you can compare the results of applying a filter and changing quite dramatically the appearance of it looks like my demo didn't I forgot about one says that I should have saved the last adjustment of the images but you have an idea what can be done with filters and this concludes my talk on color sink and court so thank you for a much for attention and it's all yours majolica so as you know Luke was showing color sync utility and showing a new filters capability of colors ink utility we have some other changes in there as well so I'd like to use this opportunity to speak about them first of all colors ink utility is now the new home for the color stink preferences we've added the filters support which luke just demonstrated we have some administration features which allows an administrator user user to specify the profiles that can be used by default by other users on the same machine also we have profile first aid and some new 3d view options let me just take this opportunity to demonstrate these real quickly so we can go over to demo machine number two please so I'm just going to launch in the new color sync utility on pants there homie hiatus and as you can see we now the coloring preferences are now here they used to be in the system preferences and now they're here so colors York utility more than ever is now the one-stop shopping for all color stink related settings one thing to be aware of this is for example a lot of applications like to be able to provide a button in their UI to send users to the color sync preferences this is accomplished in the past via an API CM launch color sync references this API will still work on Panther instead of launching system preferences it will now launch color sync utility one of the other features that we've always evangelized is coloring profile first aid I always like to mention this because it's a great utility that developers should run on any profiles they ship with their applications or that their applications create to make sure that they are valid icc profile similarly if you ever come across any bad profiles that are not correctly flagged by coloring profile first aid feel free to send them to us and we'll add more tests in the future the last thing I wanted to show in colors colors ink utility is some new things we've added to the profile viewer this is some fun stuff that we've added to make viewing of profiles more interesting so as before we're using OpenGL in order to take all the contents of an icc profile and show it in three dimension so we can look at it and spin her around zoom in zoom out what we've added now is a new contextual menu on this so that you can add more options for example instead of just showing it in la vie space you can see it in la lu v space if that's your favorite space or you can see it in XY z yxy space which is kind of neat usually people see XY plots from above it's always trying to neat to see it from the sides to one of the other features we added was let me go back to La Vie space is the ability this has been often requested the ability to compare the gamut of 2 profiles we've accomplished that in a very simple elegant way what we do now is we have a contextual menu that allows us to hold a profile for comparison so let's say I want to take this generic RGB profile and compare it against the other profiles that are installed in the system all idea all i do is command click select hold for comparison and you can see it kind of changes slightly what that is is an indication that now as I switch to other profiles we can see how the generic RGB profile compares to it so for example I can go to the display profile and see the two of them next to each other let me zoom it in a bit and you can see the overlap between the two color spaces so here you can see all of our website profiles as points and how they compare to the outline of the other profile to see that the sepia talent profile which is kind of cool to look at in 3d so that's that's one of the key features that we've added let me go back to my slides so it's interesting that the last thing I was showing was color sync using OpenGL to show profile well there's another way that you can integrate color sneak and OpenGL together and that is to be able to do real-time color correction and image and enhancement of video real-time and this is something we showed for the first time last year at WWDC I want to refresh what we spoke about then and also tell you about some of new api's we've added to color sync to make it easier for you to do that and do this in your own applications so for a bit of review the basic idea is to be able to provide real-time color correction of video which has been a something in the past that's only been able to be accomplished on very high-end hardware and now we can do that today on desktop machines because we have very advanced hardware available on video cards modern video card some of them have support for per pixel 3d texture look up and these are available on nvidia geforce TI cards and also an ati radeon 9000 series cards and by loading into these tables color correction transformations we can actually accomplish real-time color correction the great thing about this is it actually is a great story because it shows the integration between all the graphics technologies available on Mac OS 10 because what we're doing is we're combining the advantages and powers of color sync opengl courts and quicktime all in one example the basic premise is that we want to be able to play QuickTime content onto a quartz OpenGL surface and attached to that surface will be a 3d texture that has been built from a color stink color world reference in order to make this easier for your applications to achieve this we've added some new API to color sync the first is a new API called CM make profile and this API is useful for in several ways first of all you can use it to create abstract profiles which can be used for doing Huell rotation or contrasts or other things like sepia tone you can also be used to make standard RGB profile such as profiles for ntsc standards and other standard color spaces so it's a general-purpose function for creating profiles given a CF dictionary of attributes it's a very simple function to use I'll show it a little bit later and one example the other function we've provided is an API called CW fill lookup table and what this function does is takes the color same color world reference and fills in a table that is suitable for being loaded up to a video card so let me give an example of using our cm make profile API again as I mentioned before the way to CM make profile API works is you pass in a profile to modify and a dictionary of attributes that will tell you tell colors think how to modify and create that profile in this case we want to create an abstract profile that will rotate all the colors in a color space by specific you angle so this function here that I've outlined passing a profile and you pass in a float which is the angle of rotation so what I want to do is build up a dictionary with key value pairs the first key value pair is going to be the key proc which is a callback rock and then I need to give as the value a call to the address of the function which in this case is the function my lab to lab proc well CF doesn't have core foundation does not have a way to pass and address as a CF type so what we do instead is we take that address and coerce it to an essence 64 and then create a CF integer number for that integer and put that in the dictionary the reason why we use in in 64 is so that way the same code will work unaltered under 64-bit addressing in the future similarly the other thing we need to add to the dictionary is a wreck on where we could provide a pointer to a structure of interesting parameters in this case the parameters not very interesting it's just the address of a float value for the angle to rotate but the idea is the same we take the address of the angle we coerce it to a 64-bit integer and add that to the dictionary with the key rack on once we've created a dictionary we call cmake profile and that does all the work what that API then does is it unpacks the dictionary gets the ref khan and the callback croc out of it and call that proc repeatedly for all the possible values in order to build the abstract profile this is a very very easy way to create an abstract profile and once you're done is the function does a little cleanup but perhaps what would be slightly interesting to look at is what our labs lab proc looks like this is a very simple callback proc what it takes as parameters are pointers to l.a and b values and a restaurant of course the the functions responsibility is to take those values look at the initial values and alter them and return the new values and that value will be used in the profile this function is very simple all it does is take the initial labr the initial ad coordinates and rotates them by by the angle provided the other code snippet I wanted to show was this is an example of using a new CW Phil look up texture API again this function i'm describing here is a function that will make a 3d texture given three profiles a source profile an abstract profile for example one that we created using the hubert a shin code earlier and a destination profile in order to do that first of all we need to create a color world i haven't shown that here there's other examples for how to create color worlds but i've just in place of that put in a function to create a color world once you have a color world we need to call the CW still look up texture call twice the first time we call it we're all we need to do is determine the size of the data that it's going to require given the number of grid points that we desire once we get back to size we allocate the memory of that size and then call color sync CW Phil look up texture to populate that table with the appropriate values then there's existing code snippets which we will provide in order to show you how to apply that texture to an opengl surface but it's fairly trivial so all that's good to see on the screen but perhaps the best thing to do is to let your appetite and show you a brief example of how this works in a real live demo so if i go back to demo to please so what I have here is an example called color an example application called color world excuse the pun and what I can do with this in addition to opening images is open up movies Dukey and then what i can do is i can bring up in a little inspector window which allows me to show what profiles i'm going to be applying to that window i have 4 profiles to choose from i can specify source destination a abstract and proofing profile today i'm just going to show you a little bit about the source and destination if I know that this profile would be more appropriate for an srgb profile for this movie I can just change the source profile and we can already see the difference between the left half and the right half but this is not really all that interesting let's start playing the movie and start putting an abstract profile in between and what you can see already is that we can start rotating the hue and we're all doing this real-time or are we going to adjust the saturation down so let's say we want to bring the saturation down or bring it up but so as you know this is the trailer for finding nemo and what i want to use is I want to use this application as an example for how to make it easier to find Nemo so what what we're going to do is I'm going to desaturate this image way down but then what I'm going to do is I'm going to limit it to only desaturate the colors that aren't email so let's see if I can get these colors right I've got it backwards so now you can see everything in the image is very desaturated but Nemo still looks nice and bright so now I can go and I could have been doing this live I suppose but it's hard when he's moving so now i have an example of the application showing real time color correction a video content doing selectively very complex abstract profile generation and it's all very responsive we can change Nemo to you as well I can go back and just so that gives you an idea so hopefully this inspires you guys to add 3d hardware texture support to support color management in your application so back to slides please so one of the next things I'd like to talk about is display calibration one of the features that color sink is provided in the past on Mac OS 10 is the ability for the users not only to have automatic profiles generated for the displays but also for users to calibrate their own displays in an easy to use fashion this was achieved by users going to the display preferences and the system preferences UI and clicking on the calibrate button in the past that calibrate button would simply launch the Apple calibrator third-party calibrators were supported obviously but they were not integrated into the system in the same session what I'd like to talk about today is adding support for third bowery third-party calibrators into this architecture this is very very simple to do you all you do is you build your carbon or cocoa calibrator application the same way you have before you just need to make a few small changes one is there is a key you can add to your info.plist this key is the cs display calibrator key and that tells color think that your application is in fact the display calibrator second the there is a new optional parameter that or property that's associated with the open application that your application will receive this application will be sent or this this property will be sent to tell your application what displayed to be calibrated third you need to install your calibrator or assembling to your calibrator in a standard location so that we can find it that location is library color sync calibrators and again just to get you started on this we have an example calibrator that's installed in the system that's very easy to use as a starting point let me give a quick demo of this to show you what we're talking about back to demo two please so first of all let me go and show you on the system that if you go into Panther developer examples color sync we have a new project in here called demo calibrator and we have all the sources in here and it's a good example for how to do assistant type UI and cocoa and it has all the all the basic stuff you need to do in order to support the property list entry and the info.plist entry and the custom apple event correctly we already have the calibrator already pre-built and what I've done is I've instead of to get things set up as I've actually installed a symlink to that calibrator in system library color sync calibrators so this would be what your app calibration apple didn't want to do as well what that now means is if we go to the system preference and click on the displays color settings I mean if we now click on the calibrate button there's a new dialog that appears that allows you to the user to choose which of the installed calibrators to be used so just to complete the example I can click on the demo calibrator click calibrate and it will launch it and you can see what this demo calibrator is all about it's actually a very simple calibrator all it does is take the profile that was all ready for the display and ask the user to rename it and saves it as a new profile so not much of a calibration but at a good starting point for your app so let me let me go back and quit since I'm here I'd also like to take the opportunity to show some new features we have in our calibrator because we've made some important enhancements there that I think you'd like to see so if we go and calibrate this calibrator it looks very similar at the start I might be able to tell it's built in cocoa now but if we wear the changes really show up as if we turn on expert mode because now in addition to instead of showing the three apples the red green blue apple side-by-side we now have finer more advanced controls what we have is the ability to show a single patch and the ability to adjust the brightness in the tint of those separately which allows for much better control main reason for this is it's very hard for users to adjust the blue gamma because the blue is so much less visible to the human eye so this is a bit of audience participation time so if you guys can tell me if that looks good or I think that looks pretty good to me so far and then we can adjust the tint around to make sure it looks neutral what do you guys think that look good maybe a bit there so that was the first change we made but then in addition we now allow for multiple steps instead of just adjusting the mid-tones we can now adjust the highlights the shadows in the dark shadows so you can get a really good calibration on LCD displays which have very complex gamma curves so you can go through here and step through this calibration process and i'm actually i'm wrong i should be calibrating the big screen not the small screen anyhow you got the idea was good one of the other new advanced features is we now also allow for the profile to be used by other users on the same machine so is that an admin user you can say a lot users to use this calibration and then we can save it all done so that's the new calibrator architecture for third-party calibrators in a peek at our newest calibrator so back to slides so as i said i was saving something called shifts for last and what a sips mean well actually the name is probably going to change so but for now what's it stands for is scriptable image processing system and what i want to talk about today is why we're doing something called ships and what its features are how its architected and how you can use it so what we notice is that we needed a common place to go to do perform common operations on image files in a scriptable manner this was evidenced by the fact that today we had kind of a mixed story for example we had color sink scripting which could do a lot of great color sync operations on images but it could not rotate or scale or convert images between file formats we had image capture scripting which could rotate and scale but it couldn't do color matching or convert between formats then we had the preview application which could do everything you could do rotation and conversion but it wasn't scriptable so all this was saying to us that we needed to have a single central place that would provide a tool for scripters or batch processing in order to do common operations on images so what are the features that we're going after in the first release well one of the features is going to be a good name that will come later the other name the other features will be we want to be able to read and write between common image file format jpg various variations of JPEG TIFF Jess and ping we also wanted to support basic image operations such as rotate and flip and crop and of course since this is a color sync discussion today we want to support proper color management operation embedding profiles extracting profiles and matching between color spaces we want to be able to support between common metadata tags and support reading and writing of those and also we wanted to as a general rule we wanted to presume preserve the fidelity and content of the regional document as much as possible of course this is just the beginning for this tool there's lots of places where we can go with it in the future in the subsequent releases we're considering the future adding support for more complex file formats like multi-layer multi-page formats and other more advanced image operations such as blur or sharpen or enhance also the list of metadata tags that people are using is an always increasing number so we'd like to support mode more of those in the future as well here's the basic architecture that we're working on currently it's implemented as a simple compiled tool that's installed in user bin it's called user bin tips for now and this is a tool that links against core graphics QuickTime and color can sync it links against core graphics for high quality rotation and scaling the links against quicktime for a wide variety of image file importing and exporting and it links against color sync for the best quality color management it can operate on one file or multiple files at a time it can be used to both query or modify images or profiles queries can either return properties as simple text or can also return it in XML format for Special Operations the actions can be used to modify profiles or images in place or can also be used to modify them to an output directory so next question is well how can you use this well it's a simple command-line tool so there's lots of ways to use this for example you can just go into terminal and use it however it's also going to be usable from applescript we won't be showing that today but there's going to be an apple ship applescript veneer on top of sips which will create an applescript dictionary which will be very easy to use and you expose all this functionality also it'll be available for other scripting languages any scripting language that can support command line tools and of course it's also possible for you to call this tool from your own app by using standard either CF or NS at app kit or or pathak's calls to launch executables so let me give you a demonstration of this ok so I'm going to start out in terminal and what I want to do first is just going to type dash help just to give an idea of what we have eventually we need to have a man page but for now this is a good start as you can see you can call it to basically do get properties or set properties and in addition on images there are several other actions that can be performed such as embedding profiles rotating flipping cropping you know you name it so let's say let's see that's try to think of some things we want to do here let me i'm currently in a directory that has a bunch of images in LS let's say I want to see all the information about this image Big Bend so I can do sips dash get property all on big bend it quickly returns all the information it was able to obtain so the height and width of the image the DPI the image the model of the camera that it was produced on here's another type of query I can do let's say I want to do is see which of all these images have profiles in them so i can just do snips dash yet property profile on star and this will show me the list of all the images that are in this directory some of them have profiles some of them don't but it gives you a good idea of the kind of the way that you would use sips and actual usage well let's go and look at this directory and i'll see if i can come up with another example of how to use this tool so let me go to my photos directory and you it in my cons and i got a bunch of images here and coincidentally one of them is upside down gasp so what I would like to do is use tips to fix that so what I'm going to do is I'm going to do to see which photo is it it's me this picture so I'm going to do sips dash rotate 180 and I'm going to pass in ok and I'm going to make a copy of it and i'll call it dash out too typo and we're done so now if I go back to this directory in the finder will update and we have the new image which has been rotated so those are just some very simple operations and it's quite handy however there's some more advanced things you could do as well let me go back and view this in column mode as you see we have a bunch of folder a bunch of images in this directory and what I'd like to do is to build a web page that contains thumbnails of all these images along with the information about these images so what I've done is I've created a simple script in this case in this example using Python you could done this in any number of scripts either shell scripting or eventually we'll be able to do this in applescript as well but all this is is a simple you know slightly more than one screen of text that will take a parameter from the input assume it's a directory and take all the images in that directory create thumbnails creating thumbnails is interesting does that involve several operations it involves scaling the image down to a reasonable size and in this case converting them all to JPEGs and converting them all to standard color space in this case srgb once it's done all crated all the thumbnails it will then query each image we actually start this going and produce a web page from it so I called this script build info build image info web page and I'll pass in volumes three so it goes so again as I said before it's going to build thumbnails for all these images and some of these images are pretty big so it takes a bit and then once it's done creating the thumbnails it's going to take each of those images and query them and return information about them so hopefully you can read this well enough but this is the webpage that it created and opened and you can see all the photos along with all the information about them including what camera it was created with what the amended profile is when the creation date is hopefully that will inspire you to create all sorts of other tools based on this foundation technology so that's our discussion for the day I think we have a really good story I think now more than ever we have a story where we're continuing to add new high-level functionality to color color sync as well as increase the integration with the rest of the system so that you get correct behavior by default so I think if you had any other words to wrap up that would be great you