Yes, finally after nearly 3 years of development and work, The Snail Tales project is finished. I had actually finished it late last year but decided to get christmas and new year out of the way before releasing to Snail Tales.
Here’s the finished film:
I will be collating all the character and background files and creating a public repository for them
On paper it seems an awful long time to make a piece of animation. But as well as the games I made as part of my job I moved house, got engaged, had to learn hot to use Synfig, and get S-Cargo and the continuous integration system working.
I recorded my presentation at OggCamp late last year – I will upload that shortly. In the meantime, here’s the presentation I did the year before, detailing how Synfig Stage and continuous integration will work:
OK heres where we bust out some more shots from the smail tales project. At the moment there are less that 10 scenes of animation left to do, mainly groups shots.
the arems a broken in this one, but i am happy with the rest of the animation
in this shot, The Dragon makes his appearance, the narration said the knights went off to get help, I decided it would be funny to have them run off terrified
in the next shot we see the Cat Detective face off against the HUGE dragon!
Here’s the shot inside the safe of the Queen reacting all shocked. I will add some eyes to her
I have been working on the Java code for uploading a video to YouTube, and I have the following video demonstrating it in action
Previously I have been working on using Jenkins to build a video file, and decided that I would need to investigate the ability to push the resulting video file from the build process to YouTube, allowing the continuous build process to make the results available for viewing. A quick trip to the Google Developer Console led to a page, detailing the YouTube Data API. Looking at the opening paragraph – it certainly seems to offer the ability we’re after.
Add YouTube features to your application, including the ability to upload videos, create and manage playlists, and more.
So – let’s go through uploading a video by a script. A page discussing the upload video functionality can be found here, and the code can be downloaded from Github. My first thoughts were to implement this as a python script – after all it’s the same mechanism that we use to build the film in the first instance – so let’s give it a whirl.
Installing the Client Library
I’m developing on Ubuntu, so I’ve become accustomed to apt-get installing most of my applications, and I’ve written in the past about the benefits of something like software centre. So I was a bit disappointed to see nothing in the instructions that there was no option to install the library from software centre – especially considering that Ubuntu is/was Google’s desktop of choice. Anyway, the preferred option was to use Pip so I’d better install pip.
sudo apt-get python-pip
With that installed I was able to carry on looking at the python samples, but to do that I’d need to satisfy the other dependencies for the Client Library – primarily a google account, and setting up a project. I already had a google account – in fact I had a couple of accounts, so the first part of those requirements were already fulfilled, and to be honest I don’t think that creating a google account requires a write up here but if you need to there’s a video here.
Creating a Google Account / Application
The sample code page says that the samples use the Google APIs Client Library for Python, so these samples needed that. Creating a project or script that interacts with a Google API requires a developer to create a credential for that application within the Google Developers Console. This means that google have the opportunity to see what application is sending the request to Google Services, and to provide a monetization capability. Requests to the Google Services are limited, and large-scale users will end up burning through their daily allowance. This allowance is not unsubstantial – the YouTube API allows 50,000,000 units/day and limit that to 3000 requests/second/users. Not All requests are priced equally:
- Simple read operation costs 1 unit
- Write operation has a cost of approx 50 units
- Video upload has a cost of approx 1600 units
these charges are approximate as the pricing is based on the number of ‘units’ returned – a search results could return a number of units per item.
Google suggest that the following operations would be achievable within the 50,000,000 units/day threshold.
- 1,000,000 read operations that each return two resource parts.
- 50,000 write operations and 450,000 additional read operations that each retrieve two resource parts.
- 2000 video uploads, 7000 write operations, and 200,000 read operations that each retrieve three resource parts.
Google support a number of different types of authentication styles and there are 2 main types supported Public API and oAuth. On the face of if the best option seems to be Public API as it allows a service to communicate with the server without user interaction, but Service accounts are not permitted to log into YouTube – so I’ll have to use an oAuth account. The way that oAuth accounts work is as follows :
- Application loads data from client_secrets.json – which allows the client application to identify itself against the google authentication services – Google now knows which application is being called.
- User is presented with a browser -either directly by launching a URL, or through instructing the user through the command line to visit a particular site.
- User then confirms that the application is allowed to access their youtube account
- Google send back an authorisation token
This is all well and good for services that have a user front end – what I need is to do this in a system that runs on a back end, and then on a system that isn’t necessarily the system that runs the code (for example – through a client web browser). There are difficulties related to storing and distributing these secrets based on the current scargo project. Putting the clients_secret into the project would be difficult, as any application would be able to masquerade as the Jenkins Video Upload application. Storing the oAuth token would also be an issue, as anyone would theoretically be able to upload to my YouTube account. Ideally I would have place holders into which your YouTube oAuth files could be copied – but that could prove problematic. Pulling the latest code from GitHub would build, but wouldn’t deploy to the YouTube server without replacing these place holders with real data. If the upload returned a fail status code, then the jobs would always fail. If the placeholders were replaced from GitHub (and they might) then it would make setting up a new project more difficult.
What needs to happen is that the deployment needs to be separated from the build process. This could be accomplished through creating a separate build job – a deployment job and running that on the basis of a successful build – however I made the decision that it might be better to create a Jenkins plugin.
You can find my current efforts here.
For those of you in the know, for the past couple of years I have been working on an animated short film. It’s a long process to make a short animation and with lots of assets to keep track of. I use a production chart to keep tabs on everything. here is a snapshot of the production chart as it stands:
Now the eagle-eyed amongst you will notice that it’s a spreadsheet In the past I have tutted and rolled my eyes when people have complained that when they use a spreadsheet to catalog their DVD collection, they couldn’t per pixel scroll, it would snap to the nearest cell. And then a patiently explain that a spreadsheet is not designed to catalog a collection of DVD’s, A spreadsheet is really good a totaling columns of numbers and/or applying formulae on them. A DVD catalog is best done with a database.
Yes I know I should use a Database to store the production chart. It is a more effective way to store this information. Each scene is a record that can have a series of fields applied to them. we could poll the database for complete scenes and get an accurate percentage of how much of the film is animated or rendered or needs work(etc)
thing is I am, to my own surprise, a little bit old school. I learnt to breakdown sound using a mixing desk, and large sheets of paper, jogging through soundtracks, listening for the pops and whistles and decoding them into the phonemes that made up the characters speech. and this is a digital equivalent of the old school way of creating a production chart – It’s a digital analogue of an Analogue er.. analogue
today , kids examine wave forms or use software tools to provide easier breakdowns, and whilst I like them and do use them a fair bit, sometimes , I think that younger animators, fresh into the field, are lacking some of these old school skills.
part of my old school curmudgeon-ness is the creation of dope sheets and production charts. there was something exciting about transferring your sound breakdown to a dopesheet ready to animate, it was a prelude to the storm of creation that leads to the initial pencil tests. I loved the way the Production charts would fill up with checks and notes becoming more full as the deadline approached.
working on this project has been great fun. the biggest problem has been scheduling the time to make the animation and learning to use the software. Part of that has been learning some of the limitations of the software and the creation of new software tools to allow me to work with the software the way I want to work with it. I was using synfig stage last night and it struck me I have talked a lot about it at Oggcamp and other tech shows without really showing it. I started using it and it worked straight away (more or less) and so showing it working didn’t feel important because it actually was working. I suppose I should make a video demonstrating the tool and the problem it solves.
Priority though is on the film. Right now with about 16 scenes left to animate there’s a definite feeling its starting to come together as a film and part of me will be glad to get it finished, to move on to the next thing. part of me also misses my old school beginnings. and I hope maybe one day in the future, I will do a proper old school 2D short using an actual pencil on real paper.
I have been working for a long time on a short piece of animation. It’s been made longer by my insistence on using purely Open source software to make the animation with.
I decided to use Synfig Studio and set about creating characters over a year ago.
Of course real life got in the way of this. There was a house move, and of course there’s been my work on Elite Dangerous and Zoo Tycoon as well as the work I continue to do for Hoo on Who. but here are some early tests and work in progress shots for the short.
In the original story board the opening shot was much shorter and it was static but I have decided to make it a longer shot to better establish the kingdom in this early test, there are no peasants, I will add a couple of peasants to the fields and village.
the scarecrow I added on a whim. I had watched the Wizard of Oz a couple of days previous and trying to think what i could put in the environment to help set the scene, I thought it would be fun to animate a scarcrow. I built and rigged a scarecrow and animated him making a little wave and turning his head to look to camera.
A lot of his animation is masked by the tree currently. I might put the tree on the first hill so it is well out of the way .
In this shot, the Cat detective is being telephoned by the Queen to come find her stolen money. I wanted to give some contrast to the cat detective’s office, so I designed it to look more Noir-ish and forced the perspective. I always though it could be funny to have the cat play with a ball of wool while taking the call, the idea to put the framed picture of a ball of wool happened as I was designing the background. Originally there was going to be a newtons cradle in the foreground, but the scene was busy enough and I didn’t want to pull focus from the cat.
In this shot, the cat detective is looking through his magnifying glass. I used two copies of the cat detective, and used the shape of the magnifying glass to mask out the larger cat
this shot is tricky and is in the process of being re animated. The cat detective is climbing up a spirtal staircase, following the dragon prints. The Background was a 3d model I rigged and animated in 3DS Max- still frames were rendered out and the cat detective was then animated to look like he is climbing the stairs. I changed the camera angle to better show the dragon prints. so the cat Detective needs reanimating.
Using open source software has not been easy. There are certain thing I like to do when animating that Synfig forces to you abandon. In order to combat this, Mike and I wrote Synfig Stage, This software will allow us to compile new scenes with copies of the existing characters in the production. expect a video of it in action soon.
Synfig also has a very steep learning curve, but as with all things, the first time you try anything it will always be hard. Subsequent attempts are quicker and some of the newer chacters have taken less time to rig and in some cases these rigs are more complex than others. I hope to have a few more shots done soon. in which case ther might be other posts about this (which is why its optimistically called part 1).