As we said in our last post, tomorrow at 11:45 AM (Central European Time), we’ll have a talk about the status of ZeMarmot with some contents (i.e. few seconds of animation in progress) and our view on using GNOME and Free Software for media creation.
GUADEC is “the main conference for GNOME users, developers, foundation leaders, individuals, governments and businesses worldwide” and this year, it will be held in Karlsruhe, Germany from August 12 – 14.
We are all happy users of GNOME here, and this is the first time we will be in GUADEC, so this is pretty exciting. Both Aryeom, the film director, and myself, Jehan, are sponsored by the GNOME Foundation to present our film, produced with FLOSS, in room 1, on Sunday, August 14. We will talk about the movie, its current status, about our work on GIMP too, how GNOME and Free Software works in a media creation workflow, and so on. So we hope you will be many to check this out if you are around!
There are a lot of other very cool talks for the whole 3 days of conference, so if you come by, I have the feeling you won’t regret it. 🙂
Of course, if you happen to come across us in between talks, or during the hackfest days, don’t hesitate to come and say hi! Here is what we look like so you can recognize us:
So you may have heard the news: we recently released a new development version of GIMP, version 2.9.4 (as well as a bugfix release 2.8.18, but this is not as awesome).
Small edit: I realized that my blog post has been linked on many major news website. I didn’t expect this! Therefore I just want to make clear that whatever I wrote below is my view of GIMP future. It may not be shared by other developers who have their own priorities and this post has not be written with the other devs. In other word, anything here is not written as anything official from the GIMP project itself, but from me only, a single contributor to GIMP.
I am not going to rewrite all of the official news, because you may as well read it on gimp.org. Anyway I co-wrote the news with the rest of the team and provided several screenshots. So reading there is also partly same as reading here. 😉
I’ll just illustrate with this cool picture of the live preview of operations (here a gaussian blur) directly on canvas, split for comparison, implemented by Mitch, our own benevolent dictator (or are we all his dictators?). The image on canvas is by Aryeom, ZeMarmot‘s director.
Pretty cool feature, uh?
GIMP & ZeMarmot project
As you can read on gimp.org, ZeMarmot is a contributor to GIMP through my own contributions (which amounts to about 14% of commits for this specific release. Commits number is not always the most perfect metrics but as good as any).
So what did we bring to the table? Well there are the stuff which we like most first: painting. So I developed symmetry painting last year. Here are some symmetrical doodles drawn by Aryeom in just a few seconds, thanks to the symmetry modes:
I also helped on the integration of the MyPaint brushes, and in particular contributed upstream on a whole build system rework which, as a side effect improved the codebases of libmypaint and MyPaint (quote from Mypaint’s blog post):
Development of MyPaint will continue of course; in fact making this split happen has improved a lot of things in the codebases of both projects ☺ Big thanks to @Jehan for making this all work so well!
Also the fact that Aryeom is Korean, that we both lived in several countries in Europe, Asia and Oceania, that we speak English, French, Japanese, Korean (well my Korean is lacking!), and that I love languages and am a grammar geek made us good targets to notice anything wrong with GIMP’s support of non Western languages. So I have fixed some bugs and even crashes related to Input Methods and made the text tool finally compliant with input method engines (it used to have an ugly overlay box, not integrated at all in the input box, and without any standard formating).
Of course, I did several other fixes related to languages since I contribute to GIMP like each language translated in itself in the list of language in the preference, or bugs with GUI with right-to-left languages, like Arabic (did I say I was a language geek? I love all these differences and particularities).
Other than this, both Aryeom and I are trying to build a more diverse community by engaging FLOSS and GIMP enthusiasts in Japan, South Korea (some tutorial videos in Korean even) or other countries in their native languages. A hard and long job but we are trying. 🙂
Code review and code maintenance
Well I code a lot of other stuff, smaller features (like the email plugin in GIMP 2.9.4, using xdg-email, implemented a few weeks ago) and bug fixes since I like GIMP hard-rock solid and as stable as possible but that’s obviously less visible. I am also trying to step up more and more for code review and maintenance of small pieces of the software, since Mitch really needs the help (apparently the whip is not enough help! Go figure!). Well this is still work in progress and I wish I could make time to bring more cool code into GIMP, but it still allowed the action search (equivalent to the space-menu of Blender), which I think is one of the coolest feature of GIMP 2.9/2.10 and making menus so old school. This was originally contributed by Srihari, then I reviewed, rewrote and fixed parts of it to fit our high standards on code quality. Well I think that’s one of the features I am the most proud as a reviewer (instead of as the original author). This is also very rewarding to work with other coders, especially when talented and with interesting ideas.
There are more code I reviewed and integrated, like lately the cool command line’s batch processing macro or even the whole revamping of the user interface (new themes and icons). Arguably this is less “useful”. Well it depends. I met some people who claimed it will change their life, while others would hate the new design direction (though note that old icons and theme are still available in preferences). But anyway this was an idea hanging around on mailing list for years, so I took on myself to attend to new contributors willing to help on the matter (Klaus Staedtler for the icons and Benoit Touchette for the themes). This is also an interesting adventure, I think.
In the end working on all these fronts is very cool but also exhausting. Hopefully the more time goes, the more I will be able to do! 🙂
Future of GIMP
I see a lot of good things happening around GIMP. And not just from me, but from all the awesome people in GIMP team and projects around. GEGL for one is a hell of a cool project and I think it could be the future of Free and Open Source image processing. I want to imagine a future where most big graphics program integrates GEGL, where Blender for instance would have GEGL as the new implementation of nodes, with image processing graphs which can be exchanged between programs, where darktable would share buffers with GIMP so that images can be edited in one program and updated in real time in the other, and so on.
Well of course the short/mid-term improvements will be non-destructive editing with live preview on high bit depth images, and that’s already awesomely cool right?
Painting again, better UI, export and much more…
Of course we want to go further for painting features and workflow improvement, but also the UI which really needs some reworking here and there (which is also why I created the gimp-gui mailing list, meant to discuss all sort of topics UI and UX related). That also includes improving support for graphics tablet and alike.
I also have a lot of ideas, some may come to be implemented in a form or another, or not (the export process for instance is still untouched for now). Even when this happens, it’s ok: contributing to Free Software is not just adding any random feature, that’s also about discussing, discovering others’ workflow, comparing, sometimes even compromising or realizing that our ideas are not always perfect. This is part of the process and actually a pretty good mental builder. In any case we will work hard for a better GIMP. 🙂
Among the many other features we are really keen on are the ability to select many layers at once (this is often a pain for Aryeom, since she usually works with many dozens of layers when animating), macros, improving the API to be able to customize the GUI (and not only adding menu items) and the behavior of GIMP, get more communication between GIMP and plugins and in general reacting to hooks, and much much more.
Now there are stuff which are also cool, like better HiDPI support but since we don’t own a HiDPI screen anyway, this is harder to test.
Also I like GIMP for being generic. While other programs choose to be specialized, which is a valid choice, we can notice most graphics programs end up with the same features in the end anyway. Indeed brushes and other painting features are actually very useful to photographers as well. On the other hand, painters regularly use filters and transformation tools originally thought for photographers. Designers use everything as well. So I think the approach of a program which aims to do everything well is quite acceptable too.
Well you see, we have a lot of plans about GIMP, that seems nearly impossible but that’s exciting. And of course, there are the plugins for animation that I am working on, on a good pace. I think I will be able to present the main GIMP plugin for animation quite soon on this website. Stay tuned! 🙂
Help us by helping ZeMarmot?
As often, I will conclude by promoting our permanent monthly funding of ZeMarmot. I know this is very annoying! We want to make a difference, something cool: a Libre animation film together with Free Software code. And trying to make this into more than just a hobby. Right now we are barely there.
I regularly talk about the more “artistic” side here, not often enough about the “technical” coding side. So I decided to use the opportunity of GIMP 2.9.4 release to make this small (non exhaustive) report of stuff I had been doing these last months and what are our goals on the software side (GIMP in particular). If you like what you read here about my contributions, then you like what ZeMarmot is doing, because this is all the same project. And therefore if ever you can afford it, we would welcome financial help so that we can continue software development as well as the production of the animation film.
A big question when you write a scenario is: how do you time your movie?
From the scenario
You can already do so from your written script. It is usually admitted that 1 page is roughly equivalent to 1 minute of movie. Of course to reach such a standard, you have to format your file appropriately. I have searched the web to find what were these format rules. What I gathered:
Margins are 2.5 cm on every side but the left margin which is 3.5 cm.
Add 5,5 cm of margin before speaker names in dialogues.
Add 2,5 cm of margin before actual dialogue.
No justification (left-align).
No line indentation at start of paragraphs.
I won’t list more because there are dozen of resources out there which does it in details, with sometimes even examples. For instance, this page was helpful and for French-speaking reader, this one also (and it uses international metric system rather than imperial units), or even Wikipedia.
It would seem that the whole point of all these rules is to have a script with the less possible randomness. A movie script is not meant to be beautiful as an object, but to be as square as possible. Thus exits any kind of justification (which stretches or compresses spaces), as well as any line indentation (which does not happen every line) because they don’t have a behavior set in stone. They were made only so that your document “looks nice” which a script-writer cares less than in the end than being able to say how long will the movie last by just counting the pages.
Some people may have noted that 12-point Courier is a Microsoft fonts. For GNU/Linux users out there, you can get these with a package called msttcorefonts. On Debian, or Ubuntu, the real package is “ttf-mscorefonts-installer” and it does not look like it is in Fedora repositories. That’s ok because I really don’t care. I use personally Liberation Mono (Liberation is a font family created by RedHat in 2007, under a Free license). FreeMono is also another alternative, but the Liberation fonts work well for me.
You may have noticed that these are all monospace fonts, which means that every character occupy the same horizontal space, i.e. ‘i’ and ‘W’ for instance uses up the same width (adding spaces around the ‘i’ for instance), which opposes to proportional fonts (more common on the web). Once again, proportional fonts are meant to be pretty whereas monospace fonts are meant to be consistent. It all comes back to consistent text-to-timing conversion.
Not sure why Courier ever became a standard in script-writing, but I don’t think that any other font would be much of a problem. Just use any metrically-compatible monospace font.
Side note: I read 3 scenarios in the last year (other than mine) and none of them were using Courier, nor actually most of the rules here. So really I am not sure how much this rule is enforced, at least in France. Maybe in other countries, this is more an hard-on rule?
Writing with LibreOffice
Right now, I simply write with LibreOffice. Now I am not going to make a tutorial about using LibreOffice, because this will diverge too much but my one advice is: use styles! Do not “hardcode” text formatting: don’t increase indents manually, don’t use bold, nor underline your titles…
Instead create styles for “Text body” (default texts), “Dialogue speaker”, “Dialogue”, “Scene title”… Then save a template and reuse it every time you write a new scenario.
While writing this post and looking for reference, I read weird stuff like “use a dedicated software because you don’t want scene titles ending a page”. Seriously? Of course, if you make scene titles by just making your text bold, that happens. But if you use styles, this won’t (option “Keep with next paragraph” in “Text flow” tab which is a default for any Header style). So once again, use styles.
Note: dedicated software are much more than just this basic issue, and they would have a lot more features making a scenarist life easier. I was also planning on developing such a software myself, so clearly I’m not telling you not to use one! I’m just saying that for now, if you can’t afford a dedicated software, LibreOffice is just fine, and styling issues like “scenes titles should not end a page” are just lack of knowledge on how to properly use a word processing software.
So that’s it? I just follow these rules and I get my timing?
Of course, real life hits back. First of all, every language may be more or less verbose. For instance German and French are more verbose than English, which in turn is more than Japanese. So using the same formatting, your page in French would be less than a minute on screen whereas a page in Japanese would be longer than a minute.
There is also the writer’s style. Not everyone writes as concisely and you may write the same scenario with a different timing than your colleague.
As a consequence, writers evaluate their scripts. You can try to act them out for instance. Try to see how long your text really lasts. And then I guess, you can either create a custom text-to-length conversion or adapt the text formatting to end up with the “1 page = 1 minute” approximation. If your scripts are usually going faster, then you need more text in one page. Make smaller margins or use a smaller font maybe?
Of course, it may also be that you use a much too verbose style. A scenario is not a novel: you should not try to make a beautiful text with carefully crafted metaphors and imaging. You are writing a text for actors to read and understand (and in our case, for painters and animators to draw).
Moreover the 1 min = 1 page rule is not consistent in the same script either: a page with no dialogue could last several minutes (descriptions and actions are much more condensed than dialogues) whereas a page with only dialogue could be worth a few seconds of screen. But that’s ok, since this is all about average. The timing from scenario is not meant to be perfect. It gives us an approximation.
Yet ZeMarmot is particular since we have no dialogue at all. So are we going to have only 5-minute pages? That was a big question, especially since this is my first scenario. Aryeom helped a lot with her animation experience, and we tried to time several scenes by imagining them or acting them out. This is a good example which shows that no rule is ever made to be universal. And in our case, it took a longer time to accurately calibrate our own page-time rule.
This is more animation-specifics: the next step after storyboarding (or before more accurate storyboarding starts) is creating an animatic, which is basically compiling all the storyboard’s images into a single video. From there, we can have a full video, and we will try to time each “image”. Should this action be faster or last longer? This requires some imagination since we may end up with some images lasting a few seconds and we have to imagine all in-between images to get the full idea. But in the end, this is the ultimate timing. We are able to tell quite accurately how long the movie will last once we agree on an animatic.
Should timing lead the writer?
The big question: should the timing lead us? You can get a different timing than you expect, and there are 2 cases: longer or shorter.
The shorter one is easy. Unless you are really really too short (and you don’t qualify anymore as a feature-length for instance), I don’t think it is a problem to have a shorter-than-average movie. I’d prefer 100 times a short but well timed and interesting movie than a boring long movie.
Longer is more difficult because the trend nowadays seem to have longer and longer movies. Now 2h30, sometimes up to 3h, seems to be a standard for big movies (and they manage to lengthen them in the “director cut” edition!). I have seen several movies these last years which were long and boring. I am not even talking of contemplative art movie, but about hard action-packed movies. No, superhero battling for 3 hours, this is just too much.
So my advice if your movie is longer than expected, ask yourself: is it really necessary? Won’t it be boring? Of course, I am not the one to make the rule. If you work in Hollywood, well first you probably don’t read me, and second you don’t care whatever I say. You will make a 2h30 movie and people will go and watch it anyway. Why not. I’m just saying this as a viewer. And since I think this is really not enjoyable, I don’t want to have our own viewer experience be boring (well at least by movie length!).
And so that’s it for my small insight about timing a movie. Of course, as I already told, I am mostly a beginner on the topic. Everything I say here is a mix of my searches these last months, my own experiments, Aryeom’s experience… So don’t take my word as is, and don’t hesitate to react in comments if you have better knowledge or just ideas on the topic.
By the way: ZeMarmot‘s pilote (not the finale movie) has been timed to be about 8 minutes long. 🙂
If you read this, you probably know ZeMarmot. If you don’t: ZeMarmot is an animation film, in digital 2D (“old” style, i.e. with hand drawings, but done digitally directly on a computer, instead of paper and paint), which we are producing (teaser visible on the webpage).
Story in 2 words: it tells about an Alpine Marmot who travels around the world.
Artistically, Aryeom Han is the boss, film director, storyboarder, animator, designer, you name it! She is a trained animation director, graduated in Fine Arts from Samyeong university in South Korea, with animation film major. She worked several years as freelancer in Japan, Korea and New Zealand, taught and experienced with proprietary software, and now for a few years with free software.
Technically we use only Free Software, be it GIMP for all the drawing (everything digital is drawn with GIMP, which is an awesome software), Blender VSE for video editing, Ardour for sound editing, even GNOME as our desktop environment over the GNU/Linux Operating system. When we say “full-stack”, we mean it! Not easy every day, mind you, but the goal is also to improve the FOSS stack for graphics and video creation since I am myself a Free Software developer.
Right now, the team is basically Aryeom, me (Jehan) and musicians (AMMD) for original soundtracks (music also under CC by-sa/Free Art licenses).
Aryeom and I are working nearly full-time on ZeMarmot. AMMD is rather freelancing.
Originally we hoped to have more people (you can see this in our crowdfunding talks), but one of the goal of the project is to pay every contributor for their work. Now I have nothing against voluntary contribution. Hell, I do a lot myself in Free Software! And this can also be of awesome quality, sometimes better than many paid works. But for this project we really want to do a professional project in all points of view. So Aryeom and AMMD are paid. I am the only one who is not paid right now because we just don’t have the funds, and this project is dear to me.
With more funds, we wish to pay myself, better Aryeom and AMMD, and get more contributors, in particular at first probably an animator or painter to help Aryeom.
Funding the common way
Funding is the hard part. I have tried some private funding (company foundations), public ones, even a museum which has an “Art and Technology” grant. But competition is hard (hundreds of people go for the same grants), and maybe I’m just not a good pitch writer because we don’t have much success there.
Also it does take a lot of time to apply for grants, which is especially frustrating when you don’t get them.
On the other hand, several types of public grants for audiovisual and cinema works are out of reach because one of the criteria is often to be with a production company. Some things just cannot be done out of the normal process. And well actually a production company proposed us twice to discuss about funding our movie the proper way, i.e. through them. That’s good right? Well not entirely. The movie license itself, Creative Commons BY-SA, is an important piece of the project to us. And normal productions are not too fond of such “free” licensing. I know that it is possible to make quality Free/Libre Art (the kind of quality that we will go to festivals with, not only visual quality but also script and direction, i.e. all artistic qualities) and still make it professionally (paid artists and technicians). And I want to prove by doing.
This is why we are delaying any “going the usual way” change as much as possible.
Up to now, our main source of funding was the initial crowdfunding, as well as some donations from individuals (thanks everyone!), funding from the umbrella association (LILA) of the project, and personal savings.
For the last few months, we have been experimenting with periodic crowdfunding platforms, which are Patreon for USD ($) and Tipeee for EUR (€). Basically you subscribe for a monthly contribution (from which you can unsubscribe at any time). The Patreon has been stagnating at $16 a month (by 6 contributors), and the Tipeee funding is 42€ a month (by 12), which may be the answer to the Ultimate Question of Life, the Universe, and Everything, but a meme does not feed you, right? 🙂
All the money is managed by the non-profit LILA and is used for the project. But there is barely enough to pretend being paid, right now.
What we want to do… and what we need for it…
We will anyway finish the pilote, and send everyone’s rewards (from the initial crowdfunding), even if we don’t get much more funds, because we committed on it. But if we want for the experiment to be more than just an experiment, we need to make a call here: if you can spare even 1 dollar/euro or 2 a month (or 10, 20, even why not 100 if you can afford! 😉 Yet if you can’t: 1 is better than 0), it would mean the world to us!
Also the more people are sponsoring ZeMarmot, the more it supports our idea that we are going in the right direction, but also it can help us secure some public or private grants (the kinds which won’t go against our ideals by asking re-licensing). Indeed if thousands of people are behind the project, it definitely increases the project’s credibility towards grants organizations.
With your help, I could continue improving the FOSS graphics and video stack, which means continuous contribution to GIMP (already being done, but it would be great if I could get paid to do it, right?). I am also working on an absolutely cool animation plugin for GIMP. Aryeom will safely work on this awesome animation film. AMMD can compose and record more Libre/Free Music. We all definitely want more Free Art and Free Knowledge in the world with great artists being actually paid for doing the right thing.
And we want more people joining us. Maybe some day, we could have a big animation studio doing big jobs under Free License and with Free Software! Who knows?!
This is what you helping us could accomplish!
Help us fund ZeMarmot continuously!
So we need you! You can help us achieve all this by contributing a little and showing that you care for what we do. Do you? 🙂
If so, you can click one of the logos below, whether you prefer to contribute in euro or dollar ↴
We made the choice from the start about ZeMarmot animation film to not show too much during production process because we don’t want to totally spoil the fun. By the past, I already had the case where I saw a movie animatic before the finale movie, and it really spoiled some fun out of the finale artworks.
But since we realize that you’d all would like to see some of what is happening “behind the stage”, here is a small excerpt of our animatic for the pilote (about 30 secs off the first scene). As usually, whatever is digitally-drawn (some parts were pencil-drawn) was done with GIMP.
What is the animatic
So I think I may have already vaguely told about it. The animatic is basically the next step after the storyboard: you take all the images from the storyboard, and chain them with the right rhythm, as well as basic effects (pans, zooms…) to get a “feeling” of what your finale movie will look like. It still requires some imagination because that’s basically a few static image every second or so. Not enough to be called a proper animation yet!
But with the right mindset, this is enough to get an idea and also time your movie!
In animation-making, this is also the moment when you freeze your story, the script, the scene and many direction choice. Whereas feature films allow for last second camera or script changes, it would be much more costly in animation films, unless you feel OK asking your painter to redraw several times the same scenes with various perspectives and to throw away days, if not weeks of work. This is why at some point, you need to make choices and try to stick to it as much as possible (last minute changes may always happen, but you always have to weigh the pro and cons).
We finished ours around April, and have 2 versions: one without sound, and one heavily commented by myself (in French) for the musicians to get an idea of what they have to work on. We are currently working with them on a few songs. I hope we can soon give you more feedbacks about this particular part of our production too.
Currently the full animatic for the pilote is about 7 minutes. But this is likely to change slightly.
TL;DR; if you don't care at all about how crossroad works,
and you just want to cross-build GIMP in a few commands,
see at the bottom of the article.
Over the years, I have written a tool to cross-compile software under a GNU/Linux OS for other targets: crossroad. Well to this day, the only supported targets are Windows 32/64-bit. I realized I never advertised this tool much which — even though it has been originally built to help me build and hack a specific project (GIMP) — ended up as a generic cross-compilation system for Linux.
So today, I will explain crossroad by giving a concrete example:
Cross-compiling GIMP on GNU/Linux for Windows system
The cool stuff about crossroad is that it allows to cross-build as easily as a native build. For instance f your build system were the autotools, you would run the famous triptych ./configure && make && make install, right? Well with crossroad, you only wrap the configure step but the rest is the same! cmake is also fully supported, even though my examples below won’t show it (check out the manual for more).
All what crossroad does is preparing you a suitable environment, with the right environment variables, but also wrappers to various tools (for instance, you get the x86_64-w64-mingw32-pkg-config tool inside a crossroad environment, which is no more than a wrapper to detect packages inside the cross-built prefix only).
Enough chit-chat. Let’s install crossroad!
pip3 install crossroad
Running crossroad the first time
I will now go through a full cross-build of GIMP for Windows 64-bit, from a brand new crossroad install. It may be a little long and boring, but I want to show you a full process. So you can just run:
$ crossroad --list-targets crossroad, version 0.6 Available targets:
Uninstalled targets: w32 Windows 32-bit w64 Windows 64-bit
See details about any target with `crossroad --help <TARGET>`.
Ok so at this point, you may have no cross-compilation compiler installed. Let’s see what I need for Windows 64-bit.
$ crossroad --help w64 w64: Setups a cross-compilation environment for Microsoft Windows operating systems (64-bit).
Not available. Some requirements are missing: - x86_64-w64-mingw32-gcc [package "gcc-mingw-w64-x86-64"] (missing) - x86_64-w64-mingw32-ld [package "binutils-mingw-w64-x86-64"] (missing)
The package name was actually based off a Mint or a Mageia, I think. If you use Fedora for instance, you will want to install mingw64-gcc and mingw64-binutils. Just adapt to your case.
Let’s check the output of crossroad again:
$ crossroad --help w64 w64: Setups a cross-compilation environment for Microsoft Windows operating systems (64-bit).
Installed language list: - C Uninstalled language list: - Ada Common package name providing the feature: gnat-mingw-w64-x86-64 - C++ Common package name providing the feature: g++-mingw-w64-x86-64 - OCaml Common package name providing the feature: mingw-ocaml - Objective C Common package name providing the feature: gobjc++-mingw-w64-x86-64 - fortran Common package name providing the feature: gfortran-mingw-w64-x86-64
We could stop here, but I actually know some programs make use of the C++ compiler, so let’s also install `mingw64-gcc-c++`. And now we are good to go!
I create a Windows 64-bit cross-build environment, that I will call “gimp-build”:
$ crossroad w64 gimp-build Creating project "gimp-build" for target w64... You are now at the crossroads... Your environment has been set to cross-compile the project 'gimp-build' on Windows 64-bit (w64). Use `crossroad help` to list available commands and `man crossroad` to get a full documentation of crossroad capabilities. To exit this cross-compilation environment, simply `exit` the current shell session.
Now let’s cross-build babl! Very easy one to start with because it does not have any dependencies:
$ cd /path/to/src/of/babl/ $ crossroad configure && make && make install
Done! You’ll notice that you don’t even need to specify a prefix. crossroad is taking care of it.
$ cd /path/to/src/of/gexiv2 $ crossroad configure
The configure ends up with a pretty clear error:
checking for GLIB... no configure: error: GLib is required. Please install it.
Well basically you have to install glib. And then you think: the hell is starting! Do I have to build every dependency by hand? Fortunately no! crossroad relies on the OpenSUSE cross platform builds and can automatically download many dependencies for you. The reason I don’t do it for for all dependencies (babl, GEGL, libmypaint and GExiv2 in this tutorial) is when packages are either too old or non available. Install glib with:
$ crossroad install glib2-devel
That’s all! Neat right? Well you also have to install Exiv2 (trying to run the configure again, you’d see another error. I spare you the wasted time). You can run a separate command, or could have installed them both at the same time:
$ crossroad install glib2-devel libexiv2-devel
$ crossroad configure
In the configuration summary, you’ll see that introspection and python bindings won’t be built-in. But since they are not needed for GIMP, we don’t care.
$ make && make install
And now GExiv2 has been cross-built too!
Now for gegl:
$ cd /path/to/src/of/gegl $ crossroad configure
Once again, you’ll get a few dependency errors. I spare you the try and fail process. Here are all the other mandatory libs to install:
Well there are actually more dependencies you could install or build yourself, but I don’t think they are really needed for GIMP. I’ll just leave it there. Now I build:
But then… a build error (I’ll admit: I left a dependency error on purpose!)!
In file included from /usr/include/SDL/SDL_main.h:26:0, from /usr/include/SDL/SDL.h:30, from /home/jehan/dev/src/gegl/operations/external/sdl-display.c:35: /usr/include/SDL/SDL_stdinc.h:74:20: fatal error: iconv.h: No such file or directory compilation terminated. Makefile:1277: recipe for target 'sdl_display_la-sdl-display.lo' failed make: *** [sdl_display_la-sdl-display.lo] Error 1 make: Leaving directory '/home/jehan/dev/crossbuild/w64/gegl/operations/external'[…]
Well that’s a good example to debug. Look well at the paths… /usr/include/[…], they are definitely for the native platform! So something is wrong.
Also I don’t even remember having installed SDL through crossroad anyway. Well if you were to check out the config.log, you would understand why the configure script found it:
configure:22069: checking for sdl-config configure:22087: found /usr/bin/sdl-config configure:22100: result: /usr/bin/sdl-config
Sometimes, some projects would use their own *-config script instead of relying on pkg-config (SDL seems to also have a pkg-config file, not sure why we’d prefer usind sdl-config, but well…). And while pkg-config allows to really separate the build and target environments, I can’t remove the current $PATH because a lot of native tools are needed in a cross-compilation. All this to say: you may encounter issues with software distributing custom *-config script. Be warned!
Anyway let’s install SDL, don’t forget to re-run configure (otherwise the native lib will still be used), then build again.
$ crossroad install libSDL-devel && crossroad configure && make && make install
Easy said, easy done.
Only a single dependency (json-c), then classical configure, make, make install:
$ crossroad install libjson-c2 libjson-c-devel && crossroad configure && make && make install
And now for the main course! Once again, I spare you some of the search of dependencies. Here for mandatory deps:
Note 1: libwmf-devel has the same issue as SDL, thus the configure script would see it installed if you have it on your main system because of the libwmf-config in your $PATH.
Note 2: you can use crossroad search to discover package names. Even better, sometimes you know a file name that configure is looking for (after a dependency error, check out the configure.ac file or the config.log file for this info). For instance, I can’t find a libghostcript but I see that GIMP‘s configure is looking for the file ghostscript/iapi.h to detect ghostscript:
$ crossroad search --search-files iapi.h "iapi.h" not found in any package name. The following packages have files matching the search "iapi.h": - headers - libgs-devel
Then using crossroad list-files libgs-devel, I can confirm that this is the right package (crossroad info libgs-devel also confirms this is the package for Ghostscript development files).
Back to building GIMP:
$ crossroad configure --disable-python
$ make && make install
Note that I don’t built some options in, like the Ascii Art, the help browser, or OpenEXR because I could not find prebuilt dependencies, but it should not be hard for you to build the dependencies yourself as we did for babl/GEGL/…
Running under Windows!
And now you can for instance make a zip to put on a Windows, like this:
This will just compress the whole target build, where GIMP for Windows is under bin/gimp-2.9.exe. Now this is *not* an installer or whatever finale. The target directory is full of files useful for building, yet completely useless for the finale installation. crossroad is *not* meant for making installers… to this day at least (saying that I would not be against if anyone wanted to implement something of the sort. Why not?! Send me a patch!).
Since I usually run Windows in a Virtualbox VM, rather than zipping a whole archive, I would simply share a directory and symlink the target directory like this:
$ cd /path/to/dir/shared/with/windows/vm/
$ crossroad --symlink w64 gimp
Note: in your Windows environment, you must update the PATH environment variable to add your build’s bin/ directory otherwise Windows won’t find your various built DLLs. You’ll find information on how to do so everywhere in the web.
I use crossroad as a developer, to test and sometimes patch directly GIMP for Windows, without ever getting out of my Linux OS. Well I still test under a Windows VM, which runs in Linux. But I develop and compile in my GNU/Linux shell.
Hopefully this tool can be useful to other people willing to test their program under Windows while hacking on GNU/Linux.
About having a good build system
If you followed good programming practice, and use a full-featured build system such as autotools and cmake, chances are that you can cross-build your program with barely any fix to the code. This is for instance what happened when I ported GExiv2 to autotools after we started using it in GIMP. GExiv2 maintainer would say in the blog post:
This in turn allows gexiv2 to build on Windows, something we’d not targeted at all when we began development but is obviously a hard requirement for GIMP.
Just having a good build system turn their Linux-only library into a multi-platform one. Pretty cool, no? And now libmypaint got the same fate, I autotooled it making it just so easy to cross-compile!
But if you have hand-made makefiles (like GExiv2 did), a scons build (like libmypaint did), or other build systems which don’t have a proper support for cross-building, this won’t be as easy. Think twice when you set up your software. The tool you use for builds is definitely not something to take lightly!
The one-step crossbuild script
This was all for you to see how crossroad is working. If you are only interested into building GIMP specifically, I compiled my whole tutorial below into a single build script that you are welcome to copy paste and run with crossroad like this:
crossroad install glib2-devel libexiv2-devel libjson-glib json-glib-devel \
libjpeg8-devel libpng-devel cairo-devel libtiff-devel librsvg-2-2 \
librsvg-devel pango-devel libwebp5 libwebp-devel libjasper-devel \
gdk-pixbuf-devel libSDL-devel libjson-c2 libjson-c-devel atk-devel \
gtk2-devel libbz2-1 libbz2-devel liblzma-devel liblcms2-2 \
liblcms2-devel libgs8 libgs-devel libmng1 libmng-devel \
libpoppler-glib8 libpoppler-glib-devel poppler-data \
xpm-nox-devel headers iso-codes-devel libwmf-devel headers
git clone git://git.gnome.org/babl
cd babl && crossroad configure && make && make install && cd ..
git clone git://git.gnome.org/gegl
cd gegl && crossroad configure && make && make install && cd ..
git clone git://git.gnome.org/gexiv2
cd gexiv2 && crossroad configure && make && make install && cd ..
git clone https://github.com/mypaint/libmypaint.git
cd libmypaint && crossroad configure && make && make install && cd ..
git clone git://git.gnome.org/gimp
cd gimp && crossroad configure --disable-python && make && make install
If you copy these into a file, say build-gimp.sh, you can run it at once with:
$ crossroad w64 gimp-build --run build-gimp.sh -n
I hope you enjoyed this tutorial on how to build GIMP with crossroad!
Note: if you like what I do, consider sponsoring our
animation film (CC by-sa), made with GIMP: ZeMarmot!
We fund it with Patreon (USD) and Tipeee (EUR).
While Libre Graphics Meeting 2016 barely ended, we had to say Goodbye to London. But this is not over for us since we are leaving directly to India for GNOME.Asia Summit 2016. We will be presenting both ZeMarmot, our animation film project made with Free Software, under Libre Art licenses, and the software GIMP (in particular the work in progress, not current releases), as part of the team. See the » schedule « for accurate dates and times.
GNOME.Asia is hosted in Manav Rachna International University in Delhi, India, this year. If anyone is interested to meet us as well as other awesome projects around the Free Software and in particular GNOME desktop ecosystem, we’d be happy to see you there!
GNOME Foundation is sponsoring us to travel to the event. We are very grateful for this!
P.S.: I will write a report of Libre Graphics Meeting in a few days. As you can imagine, we barely have the time to stop and breathe right now as we are taking the plane in a few hours!
A short message to tell you that we will be present at Libre Graphics Meeting 2016, invited by the GIMP project as for the last 3 years.
We will showcase a small video on the workflow of ZeMarmot Open Movie in the “Libre Graphics Culture and Practice” exhibition hosted at London Gallery West, art gallery of the University of Westminster.
We will be present for the whole duration of the meeting from April 15 to 18, most often hanging out with other GIMP developers. If you spot us (here some photos of Aryeom, and the top left shot there is me, Jehan), do not hesitate to come and say hi!
Another aspect of character designing that we did was making the characters actual 3D. No I am not saying modeling them in a 3D software, like Blender. I really mean like “real world physical 3D“: you can touch it with your fingers and feel bumps here and there. I know, this is incredible technology! 😉
Doing clay (or other suited material) representation of characters, objects or even places is a pretty common tool in animation and film making, before actually making, filming, drawing, 3D-modeling (or whatever technology your film uses) the finale images. Such a technique is done in probably all animation schools and animation studios. Therefore this is not about doing props used in the movie, but really for the movie (i.e. not used on camera, and never seen in the actual film). This is a design tool, or a reference for 3D modelers, painters, animators, actors or directors.
As a side note, we saw some cool exhibits of this while visiting Weta studio in New Zealand (a famous studio which does props used in most big Hollywood movies). Amongst other cool stuff, they had this huge fake gorilla — actual size, like more than 2 meters high — in the visitable part of their workshop, which had not been used other than as a reference (I don’t remember which movie, or even if they told us).
So you remember when I was saying in an early post that character sheets are used as reference, right? What if instead of a turnaround character sheet, you had your real physical character you could really turn around? Well we don’t have the real marmot, but we can do clay models.
That’s really cool, right? 🙂
These were actually made back in November, and at the time I only thought of making a small message on @ZeMarmot twitter account in December. Their first usage was helping designing the current version of the main character, by experimenting physically with various shapes. Later they may again be used, as said above for instance for perspective drawing, positioning (or 3D modeling if we ever needed a 3D marmot), and many other cases.
You may also have spotted a few of these statues in the video interview of Aryeom, on her desk. But then, I thought it deserved a blog post on its own, don’t you? 🙂