Skip to content

Instantly share code, notes, and snippets.

@aforsythe
Last active August 29, 2023 18:11
Show Gist options
  • Save aforsythe/d02ce361543ddc63730d8998e2120ba9 to your computer and use it in GitHub Desktop.
Save aforsythe/d02ce361543ddc63730d8998e2120ba9 to your computer and use it in GitHub Desktop.
AMF Pseudocode for discussion on "Work Location" implementations
<!--
Approach uses attribute to denote location of work.
Pros - simple, can require attribute
Cons - need seperate AMFs for each use case, can't validate only one true attribute with XSD 1.0
-->
<?xml version="1.0" encoding="UTF-8"?>
<aces:acesMetadataFile version="1.0" xmlns:aces="urn:ampas:aces:amf:v1.0">
<!-- AMF Info -->
<aces:amfInfo>
<aces:description>Sample ACES Metadata File</aces:description>
<aces:dateTime>
<aces:creationDateTime>2023-08-28T12:34:56Z</aces:creationDateTime>
<aces:modificationDateTime>2023-08-28T12:34:56Z</aces:modificationDateTime>
</aces:dateTime>
</aces:amfInfo>
<aces:pipeline>
<!-- Pipeline Info -->
<aces:pipelineInfo>
<aces:systemVersion>
<aces:majorVersion>1</aces:majorVersion>
<aces:minorVersion>0</aces:minorVersion>
<aces:patchVersion>0</aces:patchVersion>
</aces:systemVersion>
<aces:dateTime>
<aces:creationDateTime>2023-08-28T12:34:56Z</aces:creationDateTime>
<aces:modificationDateTime>2023-08-28T12:34:56Z</aces:modificationDateTime>
</aces:dateTime>
</aces:pipelineInfo>
<!-- Input Device Transform (IDT) -->
<aces:inputTransform applied="false" workAfterThisOperation='true'>
<aces:transformId>urn:ampas:aces:transformId:v1.5:IDT.VendorName.CameraModel.a1.v1</aces:transformId>
</aces:inputTransform>
<!-- Reference Gamut Compression as a Look Transform -->
<aces:lookTransform applied="false" workAfterThisOperation='false'>
<aces:transformId>urn:ampas:aces:transformId:v1.5:LMT.Academy.RefGamutCompression.a1.v1</aces:transformId>
</aces:lookTransform>
<!-- Technical Grade Look Transform -->
<aces:lookTransform applied="false" workAfterThisOperation='false'>
<aces:transformId>urn:ampas:aces:transformId:v1.5:LMT.Academy.TechnicalGrade.a1.v1</aces:transformId>
</aces:lookTransform>
<!-- Show Look Transform -->
<aces:lookTransform applied="false" workAfterThisOperation='false'>
<aces:transformId>urn:ampas:aces:transformId:v1.5:LMT.Academy.ShowLook.a1.v1</aces:transformId>
</aces:lookTransform>
<!-- Output Transform (OT) -->
<aces:outputTransform applied="false" workAfterThisOperation='false'>
<aces:transformId>urn:ampas:aces:transformId:v1.5:RRTODT.Academy.Rec2020_1000nits_15nits_ST2084.a1.1.0</aces:transformId>
</aces:outputTransform>
</aces:pipeline>
</aces:acesMetadataFile>
<!--
Approach uses tag to denote location of work.
Pros - simple, can enfoce tag is only used once in pipeline tag
Cons - need seperate AMFs for each use case
-->
<?xml version="1.0" encoding="UTF-8"?>
<aces:acesMetadataFile version="1.0" xmlns:aces="urn:ampas:aces:amf:v1.0">
<!-- AMF Info -->
<aces:amfInfo>
<aces:description>Sample ACES Metadata File</aces:description>
<aces:dateTime>
<aces:creationDateTime>2023-08-28T12:34:56Z</aces:creationDateTime>
<aces:modificationDateTime>2023-08-28T12:34:56Z</aces:modificationDateTime>
</aces:dateTime>
</aces:amfInfo>
<aces:pipeline>
<!-- Pipeline Info -->
<aces:pipelineInfo>
<aces:systemVersion>
<aces:majorVersion>1</aces:majorVersion>
<aces:minorVersion>0</aces:minorVersion>
<aces:patchVersion>0</aces:patchVersion>
</aces:systemVersion>
<aces:dateTime>
<aces:creationDateTime>2023-08-28T12:34:56Z</aces:creationDateTime>
<aces:modificationDateTime>2023-08-28T12:34:56Z</aces:modificationDateTime>
</aces:dateTime>
</aces:pipelineInfo>
<!-- Input Device Transform (IDT) -->
<aces:inputTransform applied="false">
<aces:transformId>urn:ampas:aces:transformId:v1.5:IDT.VendorName.CameraModel.a1.v1</aces:transformId>
</aces:inputTransform>
<!-- Reference Gamut Compression as a Look Transform -->
<aces:lookTransform applied="false">
<aces:transformId>urn:ampas:aces:transformId:v1.5:LMT.Academy.RefGamutCompression.a1.v1</aces:transformId>
</aces:lookTransform>
<aces:workHere/>
<!-- Technical Grade Look Transform -->
<aces:lookTransform applied="false">
<aces:transformId>urn:ampas:aces:transformId:v1.5:LMT.Academy.TechnicalGrade.a1.v1</aces:transformId>
</aces:lookTransform>
<!-- Show Look Transform -->
<aces:lookTransform applied="false">
<aces:transformId>urn:ampas:aces:transformId:v1.5:LMT.Academy.ShowLook.a1.v1</aces:transformId>
</aces:lookTransform>
<!-- Output Transform (OT) -->
<aces:outputTransform applied="false">
<aces:transformId>urn:ampas:aces:transformId:v1.5:RRTODT.Academy.Rec2020_1000nits_15nits_ST2084.a1.1.0</aces:transformId>
</aces:outputTransform>
</aces:pipeline>
</aces:acesMetadataFile>
<!--
Approach uses tag wiht an attrivute to denote location of work and use case of work.
Pros - fairly simple, no need for seperate AMFs for each use case
Cons - can't validate use case isn't used more than once with XSD 1.0
-->
<?xml version="1.0" encoding="UTF-8"?>
<aces:acesMetadataFile version="1.0" xmlns:aces="urn:ampas:aces:amf:v1.0">
<!-- AMF Info -->
<aces:amfInfo>
<aces:description>Sample ACES Metadata File</aces:description>
<aces:dateTime>
<aces:creationDateTime>2023-08-28T12:34:56Z</aces:creationDateTime>
<aces:modificationDateTime>2023-08-28T12:34:56Z</aces:modificationDateTime>
</aces:dateTime>
</aces:amfInfo>
<aces:pipeline>
<!-- Pipeline Info -->
<aces:pipelineInfo>
<aces:systemVersion>
<aces:majorVersion>1</aces:majorVersion>
<aces:minorVersion>0</aces:minorVersion>
<aces:patchVersion>0</aces:patchVersion>
</aces:systemVersion>
<aces:dateTime>
<aces:creationDateTime>2023-08-28T12:34:56Z</aces:creationDateTime>
<aces:modificationDateTime>2023-08-28T12:34:56Z</aces:modificationDateTime>
</aces:dateTime>
</aces:pipelineInfo>
<!-- Input Device Transform (IDT) -->
<aces:inputTransform applied="false">
<aces:transformId>urn:ampas:aces:transformId:v1.5:IDT.VendorName.CameraModel.a1.v1</aces:transformId>
</aces:inputTransform>
<!-- Reference Gamut Compression as a Look Transform -->
<aces:lookTransform applied="false">
<aces:transformId>urn:ampas:aces:transformId:v1.5:LMT.Academy.RefGamutCompression.a1.v1</aces:transformId>
</aces:lookTransform>
<aces:workHere useCase='vfx'/>
<!-- Technical Grade Look Transform -->
<aces:lookTransform applied="false">
<aces:transformId>urn:ampas:aces:transformId:v1.5:LMT.Academy.TechnicalGrade.a1.v1</aces:transformId>
</aces:lookTransform>
<aces:workHere useCase='grading'/>
<!-- Show Look Transform -->
<aces:lookTransform applied="false">
<aces:transformId>urn:ampas:aces:transformId:v1.5:LMT.Academy.ShowLook.a1.v1</aces:transformId>
</aces:lookTransform>
<!-- Output Transform (OT) -->
<aces:outputTransform applied="false">
<aces:transformId>urn:ampas:aces:transformId:v1.5:RRTODT.Academy.Rec2020_1000nits_15nits_ST2084.a1.1.0</aces:transformId>
</aces:outputTransform>
</aces:pipeline>
</aces:acesMetadataFile>
<!--
Approach specified id tag for each pipeline element and uses it to specify where operations happen in pipeline info block.
Pros - may be more explicit and less prone to some validation bypasses
Cons - complex, XSD may still not validate perfectly (e.g. id tags are incorrect or used multiple times)
-->
<?xml version="1.0" encoding="UTF-8"?>
<aces:acesMetadataFile version="1.0" xmlns:aces="urn:ampas:aces:amf:v1.0">
<!-- AMF Info -->
<aces:amfInfo>
<aces:description>Sample ACES Metadata File</aces:description>
<aces:dateTime>
<aces:creationDateTime>2023-08-28T12:34:56Z</aces:creationDateTime>
<aces:modificationDateTime>2023-08-28T12:34:56Z</aces:modificationDateTime>
</aces:dateTime>
</aces:amfInfo>
<aces:pipeline>
<!-- Pipeline Info -->
<aces:pipelineInfo>
<aces:systemVersion>
<aces:majorVersion>1</aces:majorVersion>
<aces:minorVersion>0</aces:minorVersion>
<aces:patchVersion>0</aces:patchVersion>
</aces:systemVersion>
<aces:dateTime>
<aces:creationDateTime>2023-08-28T12:34:56Z</aces:creationDateTime>
<aces:modificationDateTime>2023-08-28T12:34:56Z</aces:modificationDateTime>
</aces:dateTime>
<aces:workLocations>
<aces:vfxWorkLocation workAfterNode="4858F70A-D770-4DAC-B079-81086B0757D6">
<aces:gradingWorkLocation workAfterNode="3F792C09-6D65-42DF-AA8C-EA470A1D1BC8">
</aces:workLocations>
</aces:pipelineInfo>
<!-- Input Device Transform (IDT) -->
<aces:inputTransform id="3F6E91C9-E357-46C8-AA4E-34E42E753348" applied="false">
<aces:transformId>urn:ampas:aces:transformId:v1.5:IDT.VendorName.CameraModel.a1.v1</aces:transformId>
</aces:inputTransform>
<!-- Reference Gamut Compression as a Look Transform -->
<aces:lookTransform id="4858F70A-D770-4DAC-B079-81086B0757D6" applied="false">
<aces:transformId>urn:ampas:aces:transformId:v1.5:LMT.Academy.RefGamutCompression.a1.v1</aces:transformId>
</aces:lookTransform>
<!-- Technical Grade Look Transform -->
<aces:lookTransform id="3F792C09-6D65-42DF-AA8C-EA470A1D1BC8" applied="false">
<aces:transformId>urn:ampas:aces:transformId:v1.5:LMT.Academy.TechnicalGrade.a1.v1</aces:transformId>
</aces:lookTransform>
<!-- Show Look Transform -->
<aces:lookTransform id="03D4010D-B228-4CE1-A828-7C40218E0A27" applied="false">
<aces:transformId>urn:ampas:aces:transformId:v1.5:LMT.Academy.ShowLook.a1.v1</aces:transformId>
</aces:lookTransform>
<!-- Output Transform (OT) -->
<aces:outputTransform id="18A152DC-0E21-4A02-B82C-E59DCC06B8F9" applied="false">
<aces:transformId>urn:ampas:aces:transformId:v1.5:RRTODT.Academy.Rec2020_1000nits_15nits_ST2084.a1.1.0</aces:transformId>
</aces:outputTransform>
</aces:pipeline>
</aces:acesMetadataFile>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment