This is our blog

Stay up-to-date.



Not too long ago I wrote an article about how to create hierarchical metadata fields using Cantemo’s REST API. Given that this was really more of a “how to” and not a real world use case, I decided that I’d try and tackle a commonly asked for hierarchical field – worldwide location.

The goal here would be to take data about all the continents, countries, and states in the world and put them into a single hierarchical field for easy manual location tagging. First thing I had to do was find my data set. I searched all over and couldn’t fine exactly what I wanted, but I was able to find an entire list of countries/continents with ISO codes, and another list that had all of the states and countries tied to ISO codes. I did a little data munging and built a relatively simple JSON file that has everything we need to move forward. That file can be downloaded here.

This data set is pretty simple. Here is a quick sample:

{ 
  "locations":[
    {
      "continent": "Europe",
      "country": "Albania",
      "state": "Berat"
    }
  ]
}

Obviously my list is much larger than this, but you get the idea. I have a location, and each location has a continent, country, and state. Works just like I want my field to work. So lets get into the script and break it down.

This top section is just setting up our arguments. I could have hard coded all this, but while I was testing I realized that maybe people would want to work with different subsets of data and everyone would have different fields. So built it to share. What we’ve done here is simply imported the libraries we will need in Python and created a CLI argument parser. Now you can run the script with a “-h” and get back all the inputs you are supposed to put in.

import requests
import os
import sys
import json
import argparse
 
#CLI Options
parser = argparse.ArgumentParser(description='Create Location Tree Structure')
parser.add_argument('-a','--ip-address',dest='portal_ip',metavar="IPADDR",type=str,help="IP Address of Portal Server",required=True)
parser.add_argument('-u','--username',dest='portal_user',metavar="USERNAME",type=str,help="Username of Portal Admin",required=True)
parser.add_argument('-p','--password',dest='portal_pass',metavar="PASSWORD",type=str,help="Password of Portal Admin",required=True)
parser.add_argument('-f','--metadata-field',dest='target_field',metavar="FIELD",type=str,help="Metadata Field To Add Items To",required=True)
parser.add_argument('-i','--input-file',dest='infile',metavar="FILE",type=str,help="Path of JSON File to Parse",required=True)
args = parser.parse_args()
 
portal_user = args.portal_user
portal_pass = args.portal_pass
portal_ip = args.portal_ip
target_field = args.target_field
db = args.infile

All I am doing here is making sure our data file (given the handle “db”) exists and is readable by our script.

# check inputs for validity
if not os.path.isfile(db):
  print db + " Is not a valid file path"
  exit(1)
 
#try to parse input
fp = open(db,'r')
 
try:
  locations = json.load(fp)
except ValueError:
  print ValueError
  exit(3)

This section just set up some globals that get re-used in our functions and procedural stuff below. Why type the same thing over and over?

# set up some shortcuts for later
headers = {'accept': 'application/json','content-type':'application/json'}
api_url = 'http://' + portal_ip + '/API/v2/'

This is our function to actually create a node. It takes 3 arguments – parent, name, label. Parent is which hierarchical parent you want to put this particular node into, name is what it should be called, and label is what class it is in. This is all the same as the metadata group editor UI information, so if you haven’t taken the time to build a hierarchical field by hand first and understand how it works, now would be the time.

def create_node(parent,name,label):
  # function to create new nodes quickly
  print "Creating new node for item " + name + " with parent ID " + str(parent)
  url = api_url + 'metadata-schema/fields/' + target_field + '/hierarchy/'
  this_node = {"name": name,"label":label,"parent_id":parent} 
  w = requests.post(url,auth=(portal_user,portal_pass),headers=headers,data=json.dumps(this_node))
  w.raise_for_status()
  return w.json()

This little block just checks to see what our actual parent root is. You would think this is always zero, but you’d be wrong. We need this so we can assign all our first children to it (in this example, continents).

# get root id for our field
url = api_url + 'metadata-schema/fields/' + target_field + '/hierarchy/'
r = requests.get(url,auth=(portal_user,portal_pass),headers=headers)
r.raise_for_status()
for object in r.json()['objects']:
  if object['parent_id'] == None and object['level'] == 0:
    root = object['id']

This is the meat and potatoes of the script. It opens the JSON file, looks at every single location and indexes the node it is creating into “roots”. It then checks each node to see if its parent is already created by looking in the “roots” dict. Admittedly, this method WILL break if you have children with the same exact name as parents in some classes as it isn’t comparing to the actual data set, but instead to a local unique index. Luckily, there aren’t any states in the world that are named the same as countries or continents so it works here.

# build a dict for parents to look up their ids (so we don't have to keep making REST calls)
roots = {}
 
# start processing our records one at a time from our input file
i = 1
for location in locations['locations']:
  print "Working on location " + str(i) + " of " + str(len(locations['locations']))
  i+=1
  # check if our continent exists
  url = api_url + 'metadata-schema/fields/' + target_field + '/hierarchy/' + str(root) + '/children'
  r = requests.get(url,auth=(portal_user,portal_pass),headers=headers)
  r.raise_for_status()
 
  # create our new child continent  - if it is empty create, or if we come across a new continent that doesn't exist yet
  if len(r.json()['objects']) == 0:
    result = create_node(root,location['continent'],"Country")
    roots[location['continent']] = result['id']
  else:
    for object in r.json()['objects']:
      if object['name'] != location['continent']:
        if not roots.get(location['continent']):
          result = create_node(root,location['continent'],"Country")      
          roots[location['continent']] = result['id'] 
 
  # create our new child country if the continent exists  
  if not roots.get(location['country']):
    result = create_node(roots[location['continent']],location['country'],"State/Provice")
    roots[location['country']] = result['id'] 
  # create our new child state if the country exists
  if not roots.get(location['state']):
    result = create_node(roots[location['country']],location['state'],None)
    roots[location['state']] = result['id']

So to run this script, first make sure you have the appropriate libraries installed (if not, time to google pip or better yet virtualenv). Then you can get sample output simply:

$> python create_location_field.py -h
usage: create_location_field.py [-h] -a IPADDR -u USERNAME -p PASSWORD -f
                                FIELD -i FILE
 
Create Location Tree Structure
 
optional arguments:
  -h, --help            show this help message and exit
  -a IPADDR, --ip-address IPADDR
                        IP Address of Portal Server
  -u USERNAME, --username USERNAME
                        Username of Portal Admin
  -p PASSWORD, --password PASSWORD
                        Password of Portal Admin
  -f FIELD, --metadata-field FIELD
                        Metadata Field To Add Items To
  -i FILE, --input-file FILE
                        Path of JSON File to Parse

So a proper run would look like this:

$> python create_location_field.py -u admin -p admin -a cantemo.provideotech.lan -f portal_mf847484 -i ./continent_country_state.json

If all is working, you’ll get a fun rolling list walking through all the records. The full script can be downloaded here.


NAB and SATIS logos

November was a busy month for me, with not one, but two exhibitions to prepare for, attend, give demonstrations at, and follow-up.

Firstly, I headed to NAB in New York, which is always a pleasure. We also have a number of customers in the city, so it was great to catch up with those at their offices and on the show floor. The show itself is of course much smaller than its counterpart in Las Vegas, with much more modest stands. However, I was impressed with the quality of visitors coming to the booth, which is in part due to the fact that New York homes a large community of people working with creative tools, videos, and images.

NAB New York

I also met a number of potential new technology partners. Partners are extremely important for us, especially as Cantemo Portal is a modular system that can be integrated with other technology to give users a complete workflow solution. Therefore, we always welcome the opportunity to meet new partners and explore new integrations. We were also sharing a booth with a number of our existing partners (Archiware, Pro Video Tech, and Tools On Air) so it was great to see what they were demonstrating and generally catch up with them.

SATIS Paris

The following week, it was straight to Paris to practice “mon français”. SATIS was quite a different experience, being a small show but with some big budget booths. The booth was again really busy and I found myself doing a constant stream of demos to a mostly francophone audience. I was therefore extremely grateful for the support of our French distributor, Ivory France. It was great to once again be sharing a booth with a number of other partners, including Automate-IT, Object Matrix, and Root 6 Technology.

Since returning from SATIS, I have been busy working on the next updates to Portal, so watch this space for more details.


NMR User Meeting

The beginning of December can mean only one thing – a return to ITV, an integrated producer broadcaster, operating the largest commercial family of channels in the UK, for the annual NMR User Meeting. It was great to see so many people brave the cold British weather and give up their evenings to see what is new in Cantemo Portal, as well as some of our partner’s solutions. The provision of beer naturally helps with the motivation but I like to think they also learnt something new. Indeed, Vidispine’s Isak Jonsson, commented “no-one gets the roadmap as detailed as this, except at this event.”

There were a number of recurring trends throughout the evening. Firstly, many of the companies presenting have grown over the past year, with the majority either in new offices or in the process of moving. In case you aren’t aware, we moved back into our new office earlier this year. It is of course a really positive sign for the industry and for video management and the associated features and applications. With so many different organisations now producing large quantities of video, it really shouldn’t be surprising that the need to manage those videos is also growing.

The other major recurring theme was hybrid cloud. Neil Anderson of NMR mentioned it in his introduction, citing a growing trend for companies looking to adopt a hybrid approach, rather than having everything on premise or everything in the cloud. ITV talked us through its Project Phoenix and why it adopted a hybrid cloud approach, enabling easy sharing of content through the cloud, whilst not sucking up too much bandwidth with the hi-res content, which is still kept on premise. Alistair Geer from ITV did also note that this particular project only involves short form content, therefore some of the usual cloud concerns are not relevant. Project Phoenix itself is extremely impressive, as a purpose-built system for all the short form content, such as promos. Thanks to our flexible platform, ITV was able to quickly adapt is software platform to meet rapidly changing business requirements and is now fully operational with its new system. The user interface has been kept clean and simple and users can add the actions and features they need on an individual level to keep it uncluttered.

NMR User Meeting

As always, the evening also covered recent developments and upcoming features in various solutions. From our side, our CTO, Jimmy Engelbrecht, talked through the recently launched Cantemo Portal 3.0. He also gave a little preview of some of the things in our roadmap, including a Windows agent for all those customers not using Macs, more archive methods, and a number of innovations around metadata and item relations.

Vidispine’s Isak Jonsson also gave an update on the latest version of Vidispine, followed by a detailed overview of the Vidispine roadmap, which includes a number of enhancements, such as IMF creation, API request caching for faster APIs, and DIVA partial file restore, amongst others.

Another partner, Automate-IT was introduced by Julien Gachot. Started as a part of his other company, Ivory, Automate-IT is now a fully fledged separate company providing simple solutions to sophisticated workflows. As Julien pointed out, Automate-IT is there for users who want to automate sophisticated After Effects workflows, leverage their infrastructure better and deliver faster, or connect their creative team with their MAM or BPM.

NMR User Meeting

MediaSmiths is another growing company. Its easy-to-use Profile Panel does some really sophisticated work in the background and enables Adobe Prelude users to connect it with Portal. This means you get Portal templates available for shots selection. It also enables offline working, crucial for on location with no connection.

Last, but by no means least, we heard about an EU funded project to develop a platform for automatic metadata extraction and transcoding for live content. The project, ReCAP, is being driven by NMR, together with ToolsOnAir, Nablet, and Joanneum Research.


It is nearly the end of September and that means the post IBC mayhem is starting to calm down a little. IBC is of course one of the biggest shows on our calendar, and also one of the most enjoyable and worthwhile.

Our booth was busier than ever this year, which was fantastic. It was also a real mix of existing partners, existing customers, and also some potential customers, with some interesting and exciting projects. It is always useful to use the opportunity to show our latest version of Portal live to the industry and this year we had a number of exciting updates, some of which are included in Portal 3.0 and others are planned for future versions. The native integration with Archiware P5 and Elemental transcoders is something I’m particularly pleased about and the response was very positive at the show.

Cantemo Partner event at IBC 2016

This year, we also hosted a partner event direct on our booth, with presentations from Automate-IT, Mediasmiths, NMR and Woody Technology. It was great to see some really innovative integrations to enhance the Portal workflow. It was also of course great to drink beer and chat to partners and customers at the end of the show. However, we did have one major problem and that was the space, or lack of it for the amount of people who attended. Next year we may have to look at taking it off site, so any suggestions of where we should go, let me know!

Despite all of those things happening right on our booth, I did manage to find some time to sneak off and have a look around some of IBC. It is getting increasingly difficult to do that, but it is still really important to see the new trends emerging in this industry. Looking around IBC this year, one of the biggest topics was, as expected, Virtual Reality (VR). Every few stands there seemed to be some form of VR demo showing different aspects of how this technology can be used in different ways, for differnet types of content, and in different spaces. I would love to see some mainstream content being produced, however, as with other high end technology in the past, the stumbling block will undoubtedly be consumer adoption, especially as VR headsets are still fairly expensive. Indeed, it seems that sales of VR units are grounding to a halt.

That said, VR does offer amazing possibilities for a much more immersive experience, but the real game changer is not about broadcast content, it is about the B2B world. The largest architect firms, for example, are already using it to collaborate with colleagues, regardless of geographic location. It is easy to see why when you consider being able to search and explore 3D models in a media asset management system, drag and dropping them into a virtual world and using the assets to design and plan. This makes visualising, amending, and approving final designs a whole lot simpler, for architects and their clients. I believe over the coming years, we will see this technology become mainstream, not just for the largest vendors, but for the smaller firms too.

I am actually pretty excited about the potential of VR in this type of scenario and think it will have massive benefits in a number of different industries. Our work with Cantemo Portal will of course be a natural fit to support future workflows, such as this.


At Cantemo, we take a great deal of pride in making Portal look great, with an easy-to-use, intuitive, and attractive User Interface. However, just like the builder who never finishes his own house, we realised that our website was desperately in need of a touch of that same magic. So, here it is the new look Cantemo website designed to do a number of things.

Cantemo New Website

Firstly, we wanted it to better reflect us as a company – an innovative company, leading the revolution for next generation media management, made possible thanks to a passionate, dedicated, and determined team. We are also a pretty fun place to work!

Secondly we want to make it easy for you to understand how Cantemo Portal can help you, whether you are a small company using video to engage with your marketing channels, or an international broadcaster delivering thousands of videos every day, or anything in-between.

We hope you like the new site as much as we do!


Last week the Cantemo team headed once again to NAB in Las Vegas. NAB is always a busy show for us, however this year it seemed busier than ever before, and we have got the sore feet to prove it!

If you read our blog ahead of the show, then you may know we had a number of announcements with our partners, as well as some exciting new customers, including AOL and WNMU TV-13. It was great getting out to NAB and catching up with many of those partners and customers and we were especially appreciative of the support we received from many of our partners. We had support on our booth from many of them, including NMR, ASG, Ivory, and XPlatform Consulting. CineSys even ran a demonstration of Portal in its suite. Not to mention the overwhelming support at our partners event on Sunday, where we were joined by partners from every corner of the world, all the way from Australia, to South Africa, Europe and North America!

On our booth we had a great deal of interest for our updated Cantemo Portal 2.3, especially around the new generation of Rules Engine and hierarchical metadata. It was also encouraging to see the amount of interest around Adobe integrations, both with our updated Windows® panel for Adobe® Premiere® Pro CC and the PROFILE panel for Adobe® Prelude® CC launched by Mediasmith and demonstrated on our booth.

And throughout NAB we had some really good conversations with both existing and new contacts. We are really noticing a shift in the perception of MAM, especially for those next generation video applications where there has until recently been little concept of what a MAM system is and how it can revolutionise video management. That is starting to shift, with a much better understanding emerging, and we had a number of innovative and creative dialogues, which are already sparking new ideas.

With NAB over for another year, we can now use all that input collected and build some exciting updates into our product lifecycle.


The Cantemo team is looking forward to heading to Las Vegas for another NAB show. It is always a fantastic event for catching up with our partners and customers and meeting new faces.

This year, we will be demonstrating the latest version of Cantemo Portal (2.3). Hot off the development cycle, it features a number of exciting updates:

  • New generation of our Rules Engine App, allowing for custom automations and the creation of more advanced rules and workflows.
  • Hierarchical metadata. This is a long-awaited feature offering a relation-based way of handling metadata, which enables filtering based on the previous value.
  • Support for Oracle DIVArchive using the Cantemo Archive Framework. Users can now, manually, or based on pre-defined rules in Rules Engine, archive or restore from DIVArchive.
  • Direct connection to your SAN via the Cantemo Agent, so you can upload directly via file transfer wherever possible.

We are also officially launching our latest Adobe® Premiere® Pro CC for Windows, delivering new levels of integration for Windows users and getting the functionality more in line with the panel for Mac. The panel enables a more streamlined content and metadata exchange between Cantemo Portal and Adobe Premiere Pro CC.

So, if you are in Las Vegas, make sure you pop by our stand (#SL8726) to find out more!


It is that time of year again, with many of us making the trip to London for BVE. This year, Cantemo Portal will once again feature on the NMR stand (Q44), and visitors will get a sneak peek at the next version due to launch in the coming days. More details will follow soon about the new version, but it will include integration with Oracle DIVA and a new generation of the Rules Engine! We have some pretty exciting Metadata updates too.

So, if you are making the long trek to Excel London, make sure you pop by the NMR stand (Q44) to find out more and get a sneaky first demo of the new updates. If you can’t make it, stay tuned as we will have full updates on Cantemo Portal 2.3 shortly!


At Cantemo, we are proud to work in a very fast paced industry, with new technology continually changing the way we watch videos. At Cantemo, we have an important role to play. We enable the companies that deliver that great content stay in control of it. This ultimately ensures that we, the consumers, can get the videos we want, when and where we want them.

We have already redefined digital med and video management for the modern media landscape and worked with some major names across the globe, including UNICEF, Nike, NASA, Disney, The Guardian, and many more.

We are very aware that we owe a major part of that success to our excellent team, which we are expanding.

So, get in touch if you want to be part of a small, flexible, but highly focused team. You will be working at the forefront of technology to enable consumers to access an even bigger choice of video content, across multiple devices. Plus, you get to work with some major and exciting international brands!

The Cantemo vision is based on the idea that autonomy, in combination with freedom and responsibility, breed innovation. We believe that when talented people work in a flexible and positively challenging environment in the midst of having fun, that’s when the magic happens.

If that sounds attractive, we have a couple of open positions, which you can view here:

JavaScript Engineer

Support & Automation Engineer

If they don’t quite match your skills, but you think you have something to offer, we still want to hear from you. Get in touch with us!