[pitivi] Import pitivi wiki in our docs to be generated with hotdoc



commit 5f239c5535f0af6ca4fff618aba6548a24dc318e
Author: Thibault Saunier <tsaunier gnome org>
Date:   Sat Mar 4 01:43:58 2017 -0300

    Import pitivi wiki in our docs to be generated with hotdoc
    
    To build just go to docs/ and run `hotdoc run`
    Result has been uploaded here: https://pitivi.github.io/
    
    Differential Revision: https://phabricator.freedesktop.org/D1688

 .gitignore                                         |    2 +
 docs/Architecture.md                               |   34 +
 docs/Bug_reporting.md                              |  194 +++++
 docs/Command_line_tools.md                         |  104 +++
 docs/Current_events.md                             |   72 ++
 docs/Feroze_gsoc.md                                |  107 +++
 docs/GES.md                                        |   62 ++
 docs/Git.md                                        |  246 ++++++
 docs/Git_repositories.md                           |   74 ++
 docs/Goals.md                                      |   83 ++
 docs/Google_SoC_2007_-_Simple_Timeline.md          |  190 +++++
 docs/Google_Summer_of_Code.md                      |  157 ++++
 docs/HACKING.md                                    |    8 +-
 docs/Install_with_flatpak.md                       |   81 ++
 docs/Mac_OS_X.md                                   |   56 ++
 docs/Main_Page.md                                  |   71 ++
 docs/Past_GSoCs.md                                 |   88 +++
 docs/Pitivi_Love.md                                |    6 +
 docs/Plugins.md                                    |  634 +++++++++++++++
 docs/Praise.md                                     |  404 ++++++++++
 docs/Project_history.md                            |   50 ++
 docs/QA_Scenarios.md                               |  338 ++++++++
 docs/Roadmap.md                                    |  360 +++++++++
 docs/Test_suite_wishlist.md                        |   11 +
 docs/Testing.md                                    |   62 ++
 docs/The_people.md                                 |   47 ++
 docs/Troubleshooting.md                            |   99 +++
 docs/attic.md                                      |    5 +
 docs/attic/Audio_video.py.md                       |  117 +++
 docs/attic/Building_with_Windows.md                |  172 ++++
 docs/attic/Cross-fade.py.md                        |  121 +++
 docs/attic/Debug_bundles.md                        |   11 +
 docs/attic/Dependencies.md                         |  173 +++++
 docs/attic/Documentation.md                        |   10 +
 docs/attic/Dogtail_performance_tips.md             |   31 +
 docs/attic/Elements_basics.py.md                   |  107 +++
 docs/attic/Enhanced_demo.py.md                     |  191 +++++
 docs/attic/GNonLin.md                              |   25 +
 docs/attic/GStreamer_from_Git.md                   |  299 +++++++
 docs/attic/GStreamer_using_jhbuild.md              |  218 ++++++
 .../How_To_Hack_On_PiTiVi:_Two_Case_Studies.md     |   88 +++
 docs/attic/Notes_On_FCP.md                         |   73 ++
 docs/attic/Performance_problems.md                 |    4 +
 docs/attic/PiTiVi_on_Windows.md                    |  162 ++++
 docs/attic/Project_file_format.md                  |   77 ++
 docs/attic/Project_loading_and_saving.md           |  556 +++++++++++++
 docs/attic/PyGST_Tutorial.md                       |   39 +
 docs/attic/PyGST_Tutorial/Acknowledgements.md      |    8 +
 .../PyGST_Tutorial/Combining_Audio_and_Video.md    |  369 +++++++++
 .../Demos/Audio_video_crossfade.py.md              |  119 +++
 docs/attic/PyGST_Tutorial/Demos/Demo.py.md         |  162 ++++
 docs/attic/PyGST_Tutorial/Effects.md               |  247 ++++++
 docs/attic/PyGST_Tutorial/Elements:_basics.md      |  122 +++
 docs/attic/PyGST_Tutorial/Getting_Started.md       |  186 +++++
 docs/attic/PyGST_Tutorial/Introduction.md          |   49 ++
 .../Position,_Duration,_and_Seeking.md             |   28 +
 docs/attic/PyGST_Tutorial/States,_and_the_Bus.md   |  217 ++++++
 docs/attic/Setup_development_environment.md        |    7 +
 docs/attic/Simple-effect.py.md                     |   96 +++
 docs/attic/building_with_ges.md                    |    4 +
 docs/attic/hotdoc-private-Pitivi-1.0/hotdoc.db     |  Bin 0 -> 69632 bytes
 docs/crossplatform.md                              |    3 +
 docs/design.md                                     |    1 +
 .../design/2007_design/2007_Advanced_UI_Mockups.md |  121 +++
 .../2007_design/2007_Advanced_UI_implementation.md |  559 +++++++++++++
 docs/design/2007_design/2007_Simple_UI_Mockups.md  |  214 +++++
 .../2008_design/2008_7_28_interview_notes.md       |   65 ++
 .../2008_design/2008_Architectural_Redesign.md     |   48 ++
 .../2008_Architectural_Redesign/Browsers.md        |   78 ++
 .../2008_Architectural_Redesign/Design_Thoughts.md |  451 +++++++++++
 .../2008_Architectural_Redesign/Formatter.md       |   38 +
 .../High-level_Design.md                           |  138 ++++
 .../2008_Architectural_Redesign/ObjectFactory.md   |  151 ++++
 .../2008_Architectural_Redesign/Pipeline.md        |  142 ++++
 .../2008_Architectural_Redesign/Project.md         |   58 ++
 .../2008_Architectural_Redesign/Streams.md         |   36 +
 .../2008_Architectural_Redesign/Timeline.md        |  253 ++++++
 ...008_Jog_and_Shuttle_controls_code_experiment.md |  243 ++++++
 .../2008_Jog_and_Shuttle_controls_design.md        |   60 ++
 .../2008_Plugin_Interface_development.md           |  343 ++++++++
 docs/design/2008_design/2008_UI_Design.md          |  817 ++++++++++++++++++++
 docs/design/2012_Layer_Controls_Redesign.md        |   34 +
 docs/design/Grouping_and_nesting.md                |  160 ++++
 docs/design/Multi-Layer_Editing.md                 |   85 ++
 docs/design/Proxy_editing_requirements.md          |  268 +++++++
 docs/design/Rendering_Profiles.md                  |   53 ++
 docs/design/Rendering_Profiles_Implementation.md   |   95 +++
 docs/design/The_XGES_File_Format.md                |  278 +++++++
 docs/design/Title_editor_design.md                 |   44 ++
 docs/design/UI_Design_Variants.md                  |    4 +
 docs/design/UI_Implementation.md                   |  110 +++
 docs/design/UI_components.md                       |    8 +
 docs/design/Why_python.md                          |   23 +
 docs/design/XGES_Examples.md                       |  278 +++++++
 docs/extra/images/favicon.png                      |  Bin 0 -> 1426 bytes
 docs/extra/templates/navbar.html                   |   24 +
 docs/hotdoc.json                                   |   11 +
 docs/images/03-02-trackmanage.jpg                  |  Bin 0 -> 26937 bytes
 docs/images/Actions-hierarchy.png                  |  Bin 0 -> 8431 bytes
 docs/images/Advaced_ui_separated_keyframes.png     |  Bin 0 -> 11527 bytes
 docs/images/Advanced_box_and_pointer.jpg           |  Bin 0 -> 2054118 bytes
 docs/images/Advanced_box_and_pointer.png           |  Bin 0 -> 817519 bytes
 docs/images/Advanced_inheritance.png               |  Bin 0 -> 19795 bytes
 docs/images/Advanced_ui_basic.png                  |  Bin 0 -> 31211 bytes
 docs/images/Advanced_ui_direct_keyframes.png       |  Bin 0 -> 49598 bytes
 docs/images/Advanced_ui_expanded_contracted.png    |  Bin 0 -> 25542 bytes
 docs/images/Advancedmode-small-0.10.1.1.png        |  Bin 0 -> 471606 bytes
 docs/images/Alternate_layout_image.png             |  Bin 0 -> 180672 bytes
 docs/images/Alternate_layout_source.png            |  Bin 0 -> 89849 bytes
 docs/images/Alternate_layout_viewer.png            |  Bin 0 -> 80273 bytes
 docs/images/Anatomy_of_timeline_object.png         |  Bin 0 -> 73472 bytes
 docs/images/Anatomy_of_trackobject.png             |  Bin 0 -> 35156 bytes
 docs/images/Annotated.png                          |  Bin 0 -> 199581 bytes
 docs/images/Application_logic.png                  |  Bin 0 -> 25670 bytes
 docs/images/Approved.jpg                           |  Bin 0 -> 55907 bytes
 docs/images/Architecture_2012.png                  |  Bin 0 -> 30309 bytes
 docs/images/Architecture_2013.png                  |  Bin 0 -> 31021 bytes
 docs/images/Architecture_2015.png                  |  Bin 0 -> 12802 bytes
 docs/images/Audio_crossfade_chain.png              |  Bin 0 -> 12583 bytes
 docs/images/Audio_video_crossfade_pipeline.png     |  Bin 0 -> 58042 bytes
 docs/images/Audio_video_playback_pipeline.png      |  Bin 0 -> 11070 bytes
 docs/images/Avi_mjpeg_mp3_audio.png                |  Bin 0 -> 23803 bytes
 docs/images/Avid-layercontrols.jpg                 |  Bin 0 -> 11889 bytes
 docs/images/BSP Auto - Confirmation.pdf            |  Bin 0 -> 88830 bytes
 docs/images/Browser-functional.png                 |  Bin 0 -> 12079 bytes
 docs/images/Capture-PiTiVi_v0.13.0.1.jpg           |  Bin 0 -> 224705 bytes
 .../Cartola-cuatrimestral-resumida-AFPModelo.pdf   |  Bin 0 -> 163795 bytes
 docs/images/Challenge-Accepted.png                 |  Bin 0 -> 28133 bytes
 docs/images/Cineticket1.pdf                        |  Bin 0 -> 61989 bytes
 docs/images/Cineticket2.pdf                        |  Bin 0 -> 62108 bytes
 docs/images/Clip_transformation_keyframes.png      |  Bin 0 -> 192249 bytes
 docs/images/Close_flowchart.png                    |  Bin 0 -> 16590 bytes
 docs/images/Color_balance_pipeline.png             |  Bin 0 -> 12598 bytes
 ..._whiteboard_mockup_from_desktop_summit_2011.png |  Bin 0 -> 253973 bytes
 docs/images/Complex_timeline_schema.png            |  Bin 0 -> 63882 bytes
 docs/images/Complicated_composition.png            |  Bin 0 -> 17844 bytes
 docs/images/Composition-Pipeline.png               |  Bin 0 -> 28634 bytes
 docs/images/Config-custom-widget.png               |  Bin 0 -> 14401 bytes
 docs/images/Config-example.png                     |  Bin 0 -> 31920 bytes
 docs/images/Contracted_layer.png                   |  Bin 0 -> 72410 bytes
 docs/images/Crossfade.png                          |  Bin 0 -> 148586 bytes
 docs/images/Crossfade_pipeline.png                 |  Bin 0 -> 36325 bytes
 docs/images/Default_bg_hline_separator.png         |  Bin 0 -> 111349 bytes
 ...bg_hline_separator_etched_in_shadow_outline.png |  Bin 0 -> 101554 bytes
 docs/images/Default_bg_shadow_in_box_separator.png |  Bin 0 -> 92614 bytes
 ..._shadow_in_box_separator_etched_box_outline.png |  Bin 0 -> 92884 bytes
 .../Default_bg_shadow_out_box_handle_separator.png |  Bin 0 -> 97577 bytes
 .../images/Default_bg_shadow_out_box_separator.png |  Bin 0 -> 111995 bytes
 ...efault_bg_tracks_are_shadow_etched_in_boxes.png |  Bin 0 -> 101041 bytes
 ...fault_bg_tracks_are_shadow_etched_out_boxes.png |  Bin 0 -> 100718 bytes
 docs/images/Extension_schema.png                   |  Bin 0 -> 16828 bytes
 docs/images/Glade-1.png                            |  Bin 0 -> 15534 bytes
 docs/images/Kdenlive-layercontrols.jpg             |  Bin 0 -> 6093 bytes
 docs/images/Layers.png                             |  Bin 0 -> 18121 bytes
 docs/images/Openshot_layercontrol.jpg              |  Bin 0 -> 5680 bytes
 docs/images/Premiere-layercontrol.jpg              |  Bin 0 -> 16275 bytes
 docs/images/back.gif                               |  Bin 0 -> 216 bytes
 docs/images/blank.gif                              |  Bin 0 -> 148 bytes
 docs/index.md                                      |    1 +
 docs/releases.md                                   |    3 +
 docs/releases/0.10.1.md                            |   51 ++
 docs/releases/0.10.2.md                            |   86 ++
 docs/releases/0.10.3.md                            |   91 +++
 docs/releases/0.11.0.md                            |   77 ++
 docs/releases/0.11.1.md                            |   65 ++
 docs/releases/0.11.2.md                            |   92 +++
 docs/releases/0.11.3.md                            |   78 ++
 docs/releases/0.13.1.md                            |  274 +++++++
 docs/releases/0.13.2.md                            |  205 +++++
 docs/releases/0.13.3.md                            |  112 +++
 docs/releases/0.13.4.md                            |  226 ++++++
 docs/releases/0.13.5.md                            |  116 +++
 docs/releases/0.14.md                              |  140 ++++
 docs/releases/0.15.1.md                            |   45 ++
 docs/releases/0.15.2.md                            |   45 ++
 docs/releases/0.15.md                              |  122 +++
 docs/releases/0.91.md                              |  579 ++++++++++++++
 docs/releases/0.92.md                              |  118 +++
 docs/releases/0.93.md                              |  210 +++++
 docs/releases/0.94.md                              |  206 +++++
 docs/releases/0.95.md                              |  147 ++++
 docs/releases/0.96.md                              |  100 +++
 docs/releases/0.97.md                              |   62 ++
 docs/releases/0.98.md                              |   90 +++
 docs/releases/0.99.md                              |    3 +
 docs/releases/1.0.md                               |    3 +
 docs/releases/PiTiVi_on_Windows.md                 |  164 ++++
 docs/sitemap.txt                                   |   88 +++
 188 files changed, 16622 insertions(+), 4 deletions(-)
---
diff --git a/.gitignore b/.gitignore
index 74c3ae7..feb03b6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -27,3 +27,5 @@ help/index.cache
 build/flatpak/Pitivi.*.json
 build/flatpak/pyvenv/*
 build/devel/
+docs/output/*
+docs/hotdoc-private-Pitivi-1.0/*
diff --git a/docs/Architecture.md b/docs/Architecture.md
new file mode 100644
index 0000000..83a2196
--- /dev/null
+++ b/docs/Architecture.md
@@ -0,0 +1,34 @@
+# Architecture
+
+The image on the right should give you a general idea of what
+technologies Pitivi depends on.
+
+![Main Pitivi dependencies](images/Architecture_2015.png)
+
+The Pitivi **user interface** is made using GTK+, a toolkit for creating
+graphical user interfaces using widgets and event handling.
+
+The **backend** is made of the following components:
+
+-   [GES](GES.md) (GStreamer Editing Services), a library
+    wrapping Non-Linear Engine to offer
+    a higher level friendly API for video editing. Non-Linear Engine is
+    media-agnostic and has no notions of video editing. Non-Linear
+    Engine is basically composed of a few thread-safe GStreamer plugins
+    which allow compositing and mixing and translating the project's
+    timeline dynamically into a GStreamer pipeline.
+-   [GStreamer](http://en.wikipedia.org/wiki/GStreamer), a multimedia
+    framework that allows us to do anything multimedia-related. It is
+    very flexible and uses elements that are packaged in the form of
+    plugins. These elements can be codecs/muxers/demuxers/effects, etc.
+
+Ultimately, all the components above are based on GLib and communicate
+through its signals.
+
+-   GLib is a low level C library that provides fundamental types and
+    algorithms. It is a base upon which everything is constructed. Since
+    we interact with GStreamer through [GES](GES.md), in Pitivi
+    we can see the GLib basic types (gboolean, gchar, gint, gfloat,
+    gdouble etc).
+-   [GObject](http://lazka.github.io/pgi-docs/#GObject-2.0) is a part of
+    GLib that provides an object-oriented framework for C.
diff --git a/docs/Bug_reporting.md b/docs/Bug_reporting.md
new file mode 100644
index 0000000..cf2313a
--- /dev/null
+++ b/docs/Bug_reporting.md
@@ -0,0 +1,194 @@
+# Bug reporting
+
+Welcome, testers!
+
+To report a bug/problem in the software, or request a new
+feature/enhancement, [create a
+task](https://phabricator.freedesktop.org/maniphest/task/edit/form/1/?projects=pitivi)
+and set Projects: Pitivi.
+
+Bug reporting and feature requests are managed with Freedesktop's
+[Phabricator](https://phabricator.freedesktop.org). You need to create
+an account to file tasks and comment on them. Take a look at the
+[existing list of bugs/feature
+requests](https://phabricator.freedesktop.org/tag/pitivi/) to see if
+your problem has already been reported *(hint: use control+F in your
+browser to search!)*.
+
+Example queries:
+
+-   [Everything](https://phabricator.freedesktop.org/tag/pitivi/) - All
+    the tasks (bug reports and feature requests).
+-   [Patches](https://phabricator.freedesktop.org/differential/query/8RA8XgY0ogT3/)
+    — All the patches (diffs) attached to tasks that have not yet been
+    merged.
+-   [Pitivi tasks for
+    newcomers](https://phabricator.freedesktop.org/project/view/111/) —
+    feature requests and some small bugs that are considered easier for
+    new contributors to tackle.
+
+# Providing debugging information
+
+## Sharing sample files, projects, and “scenarios”
+
+In some cases we might ask you to share **sample media files** with us
+to debug a particular issue. If you don't have your own hosting space,
+we have a FTP account with unlimited space available for this purpose,
+provided by [idmark.ca](http://idmark.ca).
+
+1.  Using a FTP client (such as FileZilla, available on most Linux
+    distributions), connect to “idmark.ca” using the username
+    “pitivisamples idmark ca” (@idmark.ca is part of the username). Ask
+    [us](The_people.md) for the password on IRC.
+2.  Please follow our simple naming convention and put your files in a
+    folder called with the ID of the bug report (eg. T3553) so we can
+    find it easily.
+3.  Your uploaded files will be in a private staging folder (only
+    visible through FTP); once reviewed, we may move your uploaded files
+    to <http://pitivi.ecchi.ca/user-contributed-samples/> for ease of
+    access.
+
+You can also share in a similar way a **project archive** containing the
+project and all the media is uses:
+
+1.  Use the “Select unused clips” feature to easily remove unused media
+    from your project, this will help you save space (and upload time).
+2.  Click the menu button top-right and choose the “Export project as
+    tarball...” menu item. Save the .xges\_tar file somewhere. It will
+    contain your project file and its associated media.
+3.  Upload it as described above.
+
+In addition to the project archive, it is extremely helpful to provide
+**“scenario” files**. These are automatically generated each time you
+use a project and contain the operations you made. Combined with the
+project archive, these allow us to perform exactly the actions that have
+occurred to trigger the bug. This makes reproducing the issue on our
+machines a very easy and reliable process, which saves you a ton of
+time! Here's **how to provide scenario files to facilitate the
+process:**
+
+1.  Save your project, right before triggering the bug.
+2.  Trigger the bug (make Pitivi crash or freeze).
+3.  Get the last/newest scenario file from `~/.cache/pitivi/scenarios/`
+    or `~/.var/app/org.pitivi.Pitivi/cache/pitivi/scenarios/`
+4.  Upload it as described above, so we can reproduce your issue and
+    integrate it into our test suite so that it does not happen again in
+    the future!
+
+## Stack traces for crashes
+
+When reporting a **crash** or when the application freezed **deadlock**,
+it would be good to provide a **stack trace**.
+
+### When running with Flatpak
+
+Make sure you have the GNOME Sdk and Debug symbols installed:
+
+` GNOME_REPO=$(flatpak remote-list --user -d | grep 
`“[`http://sdk.gnome.org/repo/`](http://sdk.gnome.org/repo/)”` | awk '{ print $1 }')`\
+` flatpak install --user $GNOME_REPO org.gnome.Sdk 3.20`\
+` flatpak install --user $GNOME_REPO org.gnome.Sdk.Debug 3.20`\
+` flatpak install --user $GNOME_REPO org.gnome.Sdk 3.22`\
+` flatpak install --user $GNOME_REPO org.gnome.Sdk.Debug 3.22`
+
+Start a shell in the Pitivi bundle environment
+
+`flatpak run -d --command=bash org.pitivi.Pitivi`
+
+Start Pitivi inside gdb
+
+`gdb python3 -ex 'run /app/bin/pitivi`'
+
+When Pitivi crashes, run `bt full` to get the backtrace. When Pitivi
+freezes, press Ctrl+Z and run `thread apply all bt` to get the
+backtraces for all the threads.
+
+### When running from the packages of your Linux distro
+
+See GNOME's [Getting
+Traces](https://wiki.gnome.org/Community/GettingInTouch/Bugzilla/GettingTraces)
+instructions for some comprehensive documentation and tips on the
+subject.
+
+For those of you who already know how to install the relevant debug
+packages etc, we provide you with some simple reminders below of
+commands that can be particularly useful in Pitivi's context.
+
+When you want to “attach” to an existing Python process (useful for
+deadlocks, where the application will be hung instead of crashed):
+
+`gdb python3 THE_PITIVI_PROCESS_NUMBER`
+
+When you want to run Pitivi entirely in gdb from the start:
+
+`gdb python3`\
+`set pagination 0  # avoids the need to press Enter to `“`scroll`”
+
+`run /usr/bin/pitivi  # the version installed system-wide.`
+
+When Pitivi crashes, run `bt full` to get the backtrace. When Pitivi
+freezes, press Ctrl+Z and run `thread apply all bt` to get the
+backtraces for all the threads.
+
+## Debug logs
+
+When you need to know what’s going on inside pitivi, you can launch it
+with a debug level. In
+[loggable.py](https://git.gnome.org/browse/pitivi/tree/pitivi/utils/loggable.py#n50),
+there are five levels: ( <span style="color:red;">ERROR</span>,
+<span style="color:yellow; background-color:gray;">WARN</span>,
+<span style="color:magenta;">FIXME</span>,
+<span style="color:green;">INFO</span>,
+<span style="color:blue;">DEBUG</span>,
+<span style="color:cyan;">LOG</span> ) = range(1, 7). As such, if you
+want to see errors and warnings only, you launch
+
+`PITIVI_DEBUG=2 bin/pitivi`
+
+...and if you want to see everything you do
+
+`PITIVI_DEBUG=6 bin/pitivi`
+
+If that's “too much” and you want to focus on particular parts of the
+code, you can do so. For example, you can get output from the `Timeline`
+and `MediaLibraryWidget` classes only:
+
+`PITIVI_DEBUG=`**`timeline`**`:6,`**`medialibrarywidget`**`:6 bin/pitivi`
+
+Here are various examples of commands you can use to generate detailed
+debug logs that include not only Pitivi's debug output, but also
+GStreamer's:
+
+A basic log can be obtained by running:
+
+`PITIVI_DEBUG=*:5 GST_DEBUG=2 bin/pitivi > debug.log 2>&1`
+
+To get debugging information from Non-Linear Engine, you could use:
+
+`PITIVI_DEBUG=5 GST_DEBUG=3,nle*:5,python:5 bin/pitivi > debug.log 2>&1`
+
+The information most likely to be useful would probably be the debug
+info from [GES](GES.md) in addition to Pitivi's:
+
+`PITIVI_DEBUG=5 GST_DEBUG=ges:5 bin/pitivi > debug.log 2>&1;`
+
+Some additional tips:
+
+-   When using GST\_DEBUG, the resulting logs will most likely be too
+    big to be attached to a bug report directly. Instead, compress them
+    (in gzip, bzip2 or lzma format) before attaching them to a bug
+    report.
+
+# Python performance profiling
+
+In the rare cases where a performance problem is caused by our UI code,
+you can profile Pitivi itself, with this command (and yes,
+“JUMP\_THROUGH\_HOOPS” is needed for this case, it is an environment
+variable of
+[bin/pitivi](https://git.gnome.org/browse/pitivi/tree/bin/pitivi.in):
+
+`JUMP_THROUGH_HOOPS=1 python3 -m cProfile -s time -o pitivi_performance.profile bin/pitivi`
+
+The resulting “pitivi\_performance.profile” file can then be processed
+to create a visual representation of where the most time was spent and
+which functions were called the most often in the code. See also [Jeff's
+blog posts on profiling](http://jeff.ecchi.ca/blog/tag/profiling/).
diff --git a/docs/Command_line_tools.md b/docs/Command_line_tools.md
new file mode 100644
index 0000000..fce7c01
--- /dev/null
+++ b/docs/Command_line_tools.md
@@ -0,0 +1,104 @@
+# Command line tools
+
+This is a list of tools to use for developing Pitivi.
+
+# Commands
+
+## ges-launch
+
+Used to play back xges files and render them.
+
+`# Render project.xges to video.ogv.`\
+`$ ges-launch-1.0 -l project.xges -o video.ogv`
+
+## gst-launch
+
+Launches GStreamer pipelines.
+
+`# Play a video with the decodebin`\
+`$ gst-launch-1.0 filesrc location=foo.ogv ! decodebin ! autovideosink`
+
+## gst-inspect
+
+Lists installed GStreamer plugins.
+
+`# Find all plugins containing `“`2000`”\
+`$ gst-inspect-1.0 | grep 2000`
+
+`# List details of matroskamux`\
+`$ gst-inspect-1.0 matroskamux`
+
+## gst-discoverer
+
+Prints information of a media file.
+
+`# Print info of foo.mp3`\
+`$ gst-discoverer-1.0 foo.mp3`
+
+## gst-validate-launcher
+
+Launches gst validate test suites.
+
+`# -t enables blacklisted tests`\
+`$ gst-validate-launcher -t ges.playback.*`
+
+# Building
+
+## cerbero
+
+The GStreamer build system. Used to compile the Pitivi bundle builds or
+the GStreamer SDK.
+
+`# Build Pitivi with dependencies`\
+`$ cerbero build pitivi`
+
+## Pitivi build environment
+
+Builds Pitivi in an own environment
+
+`# Open shell in Pitivi environment`\
+`$ ./bin/pitivi-git-environment.sh`
+
+`# Update git repos and build everything`\
+`$ ./bin/pitivi-git-environment.sh --build`
+
+To build less packages the script checks if a sufficient GStreamer
+release is installed in your system. To build a git master version in
+this case, you need to set this value to a higher version:
+
+in bin/pitivi-git-evironment.sh:
+
+`DEFAULT_GST_VERSION=`“`1.6`”
+
+# Debugging
+
+## GST\_DEBUG
+
+If you want debug information to be printed in general, you have to use
+the GST\_DEBUG envoirement variable. Execute commands like so:
+
+`$ GST_DEBUG=3 gst-launch-1.0 videotestsrc ! autovideosink`
+
+You can also filter the debug categories
+
+`$ GST_DEBUG=audiotestsrc:5 gst-launch-1.0 videotestsrc ! autovideosink`
+
+## Pipeline graph
+
+You need graphviz installed for this.
+
+`$ GST_DEBUG_DUMP_DOT_DIR=/tmp/ gst-launch-1.0 videotestsrc ! autovideosink`
+
+Now you can convert the dot files to png:
+
+`$ dot -Tpng file.dot -o file.png`
+
+## gdb
+
+The GNU debugger. A C debugger.
+
+To debug a segfault, you need following syntax to run gdb:
+
+`$ gdb --args python ./bin/pitivi`
+
+`$ gdb --args sh ges-launch-1.0 -l project.xges`
diff --git a/docs/Current_events.md b/docs/Current_events.md
new file mode 100644
index 0000000..c376aee
--- /dev/null
+++ b/docs/Current_events.md
@@ -0,0 +1,72 @@
+# Releases
+
+For short-term release plans and events, see the calendar
+([iCal](https://www.google.com/calendar/ical/m4r5pf5da7c8kdba1cjq2d3jb4%40group.calendar.google.com/public/basic.ics)
+or
+[HTML](https://www.google.com/calendar/embed?src=m4r5pf5da7c8kdba1cjq2d3jb4%40group.calendar.google.com)).
+For long term plans, see the [Roadmap](Roadmap.md).
+
+-   [0.99](releases/0.99.md) “Giant enemy crab” should be released early
+    in 2017.
+
+Among the current releases, only the latest release is supported at any
+given time (unless otherwise noted):
+
+-   2016 Dec 5th: [0.98](releases/0.98.md) “Getting there”
+-   2016 Aug 8th: [0.97](releases/0.97.md)
+-   2016 Jun 30th: [0.96](releases/0.96.md) “Cogito Ergo Proxy”
+-   2015 Nov 13th: [0.95](releases/0.95.md) “Enfant suisse”
+-   2014 Nov 2nd: [0.94](releases/0.94.md) “Tricks or Tracebacks?”
+-   2014 Mar 20th: [0.93](releases/0.93.md) “Ra is a Happy”
+-   2013 Nov 4th: [0.92](releases/0.92.md) “Baby Steps”
+-   2013 Sep 29th: [0.91](releases/0.91.md) “Charming Defects”
+-   2012 May 3rd: [0.15.2](releases/0.15.2.md) “I accidentally... the
+    whole render”
+-   2012 Feb 24th: [0.15.1](releases/0.15.1.md) “Endless Excursion”
+-   2011 Sep 27th: [0.15](releases/0.15.md) “Ich bin ein berliner”
+-   2011 May 31st: [0.14](releases/0.14.md) “No longer kills kittens”
+-   2010 Sep 15th: [0.13.5](releases/0.13.5.md) “I Missed My Lunch”
+-   2010 Mar 10th: [0.13.4](releases/0.13.4.md) “Cabernet d’Anjou”
+-   2009 Sep 12th: [0.13.3](releases/0.13.3.md) “... we shall never
+    (sur)render”
+-   2009 Aug 13th: [0.13.2](releases/0.13.2.md) “Jailbreak (out of
+    Deadlock City)”
+-   2009 May 27th: [0.13.1](releases/0.13.1.md) “L'Aquila Immota Manet :
+    The eagle remains unmoved”
+-   2008 Dec 11th: [0.11.3](releases/0.11.3.md) “Paella Cubana”
+-   2008 Oct 15th: [0.11.2](releases/0.11.2.md) “Milanesa de Lomo”
+-   2007 Nov 18th: [0.11.1](releases/0.11.1.md) “A gentlemen game played
+    by hooligans”
+-   2007 Oct 14th: [0.11.0](releases/0.11.0.md) “A hooligan's game played
+    by gentlemen”
+-   2007 May 30th: [0.10.3](releases/0.10.3.md) “Got some new t-shirts”
+-   2007 Jan 28th: [0.10.2](releases/0.10.2.md) “A New Toy”
+-   2006 May 23rd: [0.10.1](releases/0.10.1.md) “Sister and Friend”
+-   2006 Apr 26th: 0.10.0 “It's a birthday party”
+
+# Talks
+
+See the Pitivi website's [showcase
+page](http://www.pitivi.org/?go=showcase) for video recordings and
+slides of some of these talks.
+
+-   2014 July 27th: GUADEC (Pitivi)
+-   2013 October 22nd: GStreamer Conference (GES)
+-   2013 August 4th: GUADEC (Pitivi)
+-   2012 August 27th/28th: GStreamer Conference (GES)
+-   2012 July 29th: GUADEC (Pitivi & GES)
+-   2012 June 9th: GNOME Asia (Pitivi & GES)
+-   2011 Dec 10th: ExpoLibre Talca (Pitivi & GES)
+-   2011 May 25th: Meego Conference (GES)
+-   2011 May 11th: Libre Graphics Meeting 2011 (Pitivi)
+-   2010 March 26th or 28th: Ubuntu Global Jam in Montréal (lightning
+    talk about Pitivi, in French)
+-   2009 July: GUADEC 2009 (Pitivi)
+-   2009 May 8th: Libre Graphics Meeting 2009 (Pitivi)
+-   2006 July 22nd: LUGRadio Live 2006
+-   2006 June 23rd-30th: GUADEC 2006 (Pitivi)
+
+# In the Media
+
+For a roundup of mentions in the media, see the
+[Praise](Praise.md) page.
diff --git a/docs/Feroze_gsoc.md b/docs/Feroze_gsoc.md
new file mode 100644
index 0000000..170d757
--- /dev/null
+++ b/docs/Feroze_gsoc.md
@@ -0,0 +1,107 @@
+# Proposal
+
+## What is its ultimate goal?
+
+The ultimate goal of this project is to make it easier for PiTiVi users
+to intuitively edit and share videos.
+
+## What components will it have?
+
+I will be creating modules for PiTiVi using GStreamer.
+
+## What benefits does it have for GStreamer and its community?
+
+Currently, PiTiVi is the one of the leading video editors on Linux which
+uses GStreamer. It is bundled with Ubuntu. It is very simple to use but
+lacks a few essential features which, if implemented, would greatly
+expand its userbase. It would be a major boost for the GStreamer and
+PiTiVi community.
+
+## Why you’d like to complete this particular project?
+
+While PiTiVi has many necessary functions, it is lacking in the
+following areas:
+
+### 1. Rendering presets
+
+Most users want the output formatted for a specific device or service –
+YouTube, iPod, iPhone, DVD, mobile, etc. Presently, the user would have
+to manually specify the codecs, containter and codec settings like
+resolution, frame rate,etc. He would have to either be familiar with the
+codecs or would have to google it up.
+
+`   1. The user should just be able to click on the output format and render. This would enable us to expand 
the userbase to people without much codec knowledge.`\
+`   2. User can add, remove and rename presets and edit codec settings within the render dialog menu.`\
+`   3. The presets should be stored seperately and the user should be able to import and export presets from 
GUI.`\
+`   4. Enable us to bundle a default set of rendering and project setting presets`
+
+Presets Suggested : iPod , iPad, PlayStation 3, DVD (NTSC, PAL), HTML5 (
+Theora + Vorbis ), Flash video (for embedding), HD (using mkv -&gt; good
+compression)
+
+Reference : <http://wiki.pitivi.org/wiki/Rendering_Profiles>
+
+### 2. Upload to video services
+
+Users should by able to easily upload their videos to YouTube, Vimeo,
+Archive.org and DailyMotion from PiTiVi using their respective APIs
+through the intuitive GUI.
+
+Create a uploader class to make integrating other video services in the
+future easier.
+
+Support limitations of each – file size, splitting
+
+### 3. Fix UI Bugs
+
+Users have reported for multiple GUI enhancements. Though they have
+normal priority, coding it would greatly improve the easy of use
+
+Easy:
+
+`   1. Bug 622079 – Use current clip’s parameter -> Club with render profile setting`\
+`   2. Bug 608682 – Ability to add markers to identify scenes and as a visual reminder in timeline, Add with 
Insert -> Marker and keyboard shortcut`\
+`   3. Bug 594485 – Ask for confirmation before deleting previously rendered file`\
+`   4. Bug 630374 -Add the ability to export the image currently seen in the viewer`\
+`   5. Bug 608108 – More details in unsaved dialog box`\
+`   6. Bug 578671 – Catch encoder exceptions and show in debugger window`\
+`   7. Bug 586071 & 
`[`https://bugzilla.gnome.org/show_bug.cgi?id=622563`](https://bugzilla.gnome.org/show_bug.cgi?id=622563)` – 
Custom labeling of clips`
+
+Moderate 1:
+
+`   1. Bug 575464 – Vertical timeline markers for every defined duration (10 seconds)`\
+`   2. Bug 596131 – Implement color-correction like white balance using GStreamer ( GES? )`\
+`   3. Bug 603738 – Hide toolbar + timeline in fullscreen`
+
+Moderate 2:
+
+`   1. Bug 637078 – Ability to render only selected portion of the timeline`\
+`   2. Bug 632319 – Manual layer interface`\
+`   3. Bug 593919 – Implement cropping/panning/zooming for clips`\
+`   4. Bug 642129 – Change properties (resize, time duration) of multiple photos at one go.`
+
+## How do you plan to achieve completion of your project?
+
+Following is a breakup of the project goals. Estimated time for each
+target is in braces.
+
+`   Up to May 23 – Study PiTiVi code. Gain indepth knowledge of GStreamer and codec settings and GooCanvas.`\
+`   Target 1 ( 2-3 weeks ) – Implement Preset Manager for Render`\
+`   Target 2 ( 2 weeks ) – Implement video uploading to YouTube, Vimeo, Archive.org and DailyMotion from 
GUI`\
+`   Target 3 ( 1 week ) – Code Cleanup – Mid-term Evaluation`\
+`   Target 4 ( 2 weeks ) – Implement Easy GUI enhancements`\
+`   Target 5 ( 2 weeks ) – Implement Moderate 1 GUI enhancements`\
+`   Target 6 ( 2 weeks ) – Implement Moderate 2 GUI enhancements`\
+`   Target 5 ( 1 week ) – Final Code Cleanup and Documentation`
+
+## What will showable at mid-term ?
+
+At midterm, Render profile presets and video uploading service would be
+ready
+
+## About Me
+
+My Name is Feroze Naina, and I’m currently doing my B.Eng in Chennai,
+India.
+
+<https://github.com/feroze/>
diff --git a/docs/GES.md b/docs/GES.md
new file mode 100644
index 0000000..a4c8e4f
--- /dev/null
+++ b/docs/GES.md
@@ -0,0 +1,62 @@
+# GES
+
+GES (GStreamer Editing Services) is a cross-platform library that sits
+on top of [GStreamer](http://en.wikipedia.org/wiki/GStreamer) and
+Non-Linear Engine. GES simplifies the
+creation of multimedia editing applications. Basically, GES is a
+complete [SDK](http://en.wikipedia.org/wiki/Sdk) for making a video
+editor (but not only that).
+
+Traditionally, Pitivi was a user interface and a homemade video editing
+“core” (or “backend”) that interacted directly with
+[GNonLin](attic/GNonLin.md). Starting in version
+[0.91](releases/0.91.md), Pitivi's core has been replaced by GES. This
+means that Pitivi is mostly only a user interface on top of GES.
+Starting in version [0.95](releases/0.95.md), GNonLin has been replaced
+by Non-Linear Engine to improve stability.
+
+GES does not aim at serving the needs of Pitivi only: we are building
+the platform of the future and breaking the cycle of failed projects.
+Indeed, other applications are already using GES or migrating to it.
+
+> *“Pitivi is one of the 'generous' projects that develops not just an
+> editor, but a set of libraries to implement editors. \[Applications
+> built on top of those libraries\] are not really re-inventing the
+> wheel, they can piggyback on top of the work that these folks are
+> doing, and then implement UI features that they care about the
+> most.”*\
+> — Bassam Kurdali, director of [Elephants
+> Dream](https://en.wikipedia.org/wiki/Elephants_Dream) and
+> [Tube](http://urchn.org).
+
+In addition to the fact that GES encourages code reuse among audio/video
+editing software, here are some concrete advantages that we've noticed
+while porting Pitivi to GES:
+
+-   It solves many architectural issues of the past.
+-   It vastly simplifies Pitivi development:
+    -   More than 20 000 lines of code have been removed from Pitivi as
+        a result
+    -   [A big
+        cleanup](http://jeff.ecchi.ca/blog/2012/01/12/spring-clean-up-in-january/)
+        of the Pitivi codebase was done in early 2011, significantly
+        reducing the amount of modules/files to deal with.
+    -   No more confusion between the UI and backend parts
+    -   Much less GStreamer knowledge is required to contribute to
+        Pitivi itself.
+-   It has much better performance.
+
+Further reading for contributors:
+
+-   See the [Architecture](Architecture.md) page for a visual
+    overview of the relationship between Pitivi, GES, Non-Linear Engine
+    and other components.
+-   Read the [GES API reference
+    documentation](http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-editing-services/html/)
+    if you need to interact with GES. This documentation can also be
+    found locally in the “docs/libs/html/” subdirectory of your GES git
+    checkout.
+-   [The initial GES
+    announcement](http://blogs.gnome.org/edwardrv/2009/11/30/the-result-of-the-past-few-months-of-hacking/),
+    which explains why GES was created, what its various components are
+    and how it fits with GStreamer.
diff --git a/docs/Git.md b/docs/Git.md
new file mode 100644
index 0000000..eac90d9
--- /dev/null
+++ b/docs/Git.md
@@ -0,0 +1,246 @@
+# Git
+
+[Git](http://git-scm.com) is the most popular [distributed revision
+control
+system](http://en.wikipedia.org/wiki/Distributed_revision_control) used
+by the kernel, X, GStreamer, GNOME, etc... Git allows you to get a
+checkout (with full history) of the Pitivi code, create your own
+branches, publish those, etc... without the need for access to the
+central repository.
+
+Indeed, one of the very big strengths of a decentralized (a.k.a.
+distributed) system is that it is truly open and meritocratic: it allows
+you to do whatever changes you want to your repository, request
+feedback/reviews and then request that others pull your changes into the
+main repository on which others base their work upon. See
+<http://youtube.com/watch?v=4XpnKHJAok8#t=18m05s> for an explanation of
+this phenomenon.
+
+This page is not meant to be a general tutorial for Git; for that, see
+the [GNOME Git page](https://live.gnome.org/Git), the [official Git
+tutorial/documentation page](http://git-scm.com/documentation) and [git
+ready](http://gitready.com). In this page, we will cover some more
+advanced usage and the **specifics of how we use Git in the Pitivi
+project**. This is aimed at people coming from Bazaar or Subversion.
+
+# First steps: checking out the main repository
+
+`git clone `[`git://git.gnome.org/pitivi`](git://git.gnome.org/pitivi)`  # do the initial repository 
checkout`
+
+You should now have a directory called pitivi with the latest version of
+the files checked out. You are in the **`master`** branch.
+
+**Note**: unlike in Bazaar or other DVCSes, in git you only do this
+once; the “remotes” and branches in are all self-contained in the
+repository. In other words, you only do one checkout and do everything
+inside it using branches and remotes.
+
+# Dealing with remotes and branches
+
+You can see all local branches by using the `git branch` command. The
+branch you are working in is marked with an asterisk (**\***). You can
+view all branches, including the remote ones, by doing:
+
+`git branch -a`
+
+You'll notice that it shows you all the branches available from the
+<http://git.gnome.org/pitivi> repository.
+
+Let's say we add multiple people's remote repositories inside your local
+repository (see [Git repositories](Git_repositories.md) for the
+list of our known remotes):
+
+`git remote add nekohayo `[`https://github.com/nekohayo/pitivi.git`](https://github.com/nekohayo/pitivi.git)\
+`git remote add thiblahute 
`[`https://github.com/thiblahute/pitivi.git`](https://github.com/thiblahute/pitivi.git)
+
+To update the remotes:
+
+`git remote update`
+
+And now you would be able to do stuff like:
+
+`git checkout thiblahute/somebranch`
+
+Or, to create a new local branch based on that branch:
+
+`git checkout -b mynewbranch thiblahute/somebranch`
+
+“git remote update” does not update your local branches, only the
+remotes. For example, if you have a local branch called “titles” based
+on “nekohayo/titles” (remote branch) and the “titles” branch on the
+“nekohayo” remote changed, you will have to checkout your local “titles”
+branch and update it to reflect the changes (with git pull --rebase, or
+a git reset --hard, depending on whether or not you want to keep your
+local changes).
+
+When the remote party has deleted some branches, you're still left with
+local copies of those remote branches... eventually you can clean it up
+with:
+
+`git remote prune REMOTE_NAME`
+
+I like to think of “git checkout” like “svn switch”: it allows you to
+move between branches (among other things). So, to go back to the main
+branch, you do “git checkout master”.
+
+## Creating a work branch
+
+It is good practice never to do work on the master branch (more details
+in the next section). Therefore you need to create a work branch :
+
+` git branch work master`
+
+If you use `git branch` you will now see your new branch... but you are
+still in `master`.
+
+To switch to your `work` branch you need to check it out using:
+
+` git checkout work`
+
+And it tells you it has successfully switched to the work branch.
+
+**Tip**: you can branch and checkout in one step using the
+`-b `<new_branch> option of `git checkout` Therefore the two steps above
+become:
+
+` git checkout -b work master`
+
+## Pitivi-specific gotcha: don't use git pull
+
+Typically, in Pitivi we use rebase and reset more often than “git merge”
+when merging your changes. This means two things:
+
+-   You should not do your work directly on your “master” branch. You
+    should do it in separate branches instead, unless you really know
+    what you're doing and can handle resolving conflicts. We recommend
+    that you keep master (or whatever the main development base is)
+    identical to the upstream (“origin”) remote branch.
+-   To update your local master branch (or whatever your base is) when
+    you're on the local branch, always use “git pull --rebase”.
+
+Really, in the Pitivi context you don't want to use “git pull” (this
+creates merge commits and becomes quite messy over time). However, the
+general rules of thumb regarding rebasing are:
+
+-   Branches on the official repository (git.gnome.org/pitivi) should
+    only be fast-forward, because that's what contributors may base
+    themselves upon
+-   Individual contributors might use “git rebase -i” when they feel it
+    necessary to sync up their work. Otherwise, we will do it at the
+    time of the “merge” (so to speak). Rebasing is a more advanced
+    notion, so refer to git ready and to this Pitivi-specific video
+    tutorial: <http://youtube.com/watch?v=6WU4jKti_vo>
+
+# Publishing your work / adding your own remote to push to
+
+Several free git hosting services exist out there where you can create
+very quickly some repositories and publish your branch there. These
+websites will contain information on how to add your publishing remote
+URL. Here's an example of how you can add your remote git repository
+where you'll push your changes, with github (notice that I named the
+remote “github” instead of “origin”, since origin is git.gnome.org):
+
+`git remote add github git github com:my_user/pitivi.git`
+
+Let's say you created a working branch locally (called `mytest`) and
+that you named your remote repository `myremote`, and you want to
+publish it so people can see what you have done, try it out, etc. The
+first time you will have to tell git **where** you want to push that
+branch:
+
+` git push myremote mytest`
+
+This will automatically:
+
+-   Create a `mytest` branch on your remote repository
+-   Copy over all the commits
+-   Make git remember where that branch is stored remotely
+
+The next time you want to push your work remotely, you just to be within
+that branch and do:
+
+` git push`
+
+To delete a branch (or tag) on the remote repository:
+
+`git push REMOTENAME :BRANCHNAME`
+
+This command may look strange, but it is literally telling git *push,
+onto REMOTENAME, “nothing” into BRANCHNAME*.
+
+Once that's done, others will be able to do a “git remote prune” to see
+those changes on their end.
+
+# Not going insane
+
+You are very quickly going to have a lot of branches. There are
+graphical tools to view what you have locally and make some
+changes/actions without needing to rely on the command line (unless you
+prefer the command line interface). We recommend
+[gitg](https://wiki.gnome.org/Apps/Gitg) (tailored for GNOME, with a
+really nice interface), though there are others like giggle or gitk.
+
+Other *very* useful tools are:
+
+-   [Git Meld](https://github.com/wmanley/git-meld) (not needed anymore,
+    simply put “meld = difftool --dir-diff -t meld” in the alias section
+    of your \~/.gitconfig file)
+-   [Showing the current branch name at all
+    times](http://asemanfar.com/Current-Git-Branch-in-Bash-Prompt)
+-   [Git autocompletion for
+    Bash](http://gitready.com/advanced/2009/02/05/bash-auto-completion.html)
+
+Nice Git features to learn about:
+
+-   “git grep”
+-   “git bisect” (for pinpointing regressions)
+-   “git rebase -i” is an extremely powerful tool once you get used to
+    it. See the various tutorials/documentation about it, this
+    Pitivi-specific video tutorial:
+    <http://youtube.com/watch?v=6WU4jKti_vo>
+-   “git add -p” (or use the little “+” icons in
+    [gitg](https://wiki.gnome.org/Apps/Gitg)'s commit mode) to
+    stage/commit only portions of a file (allowing you to easily plan
+    and split work across different commits)
+
+## Tips and tricks/gotchas for Bazaar/Subversion users
+
+-   To revert some files to the version provided by git, use “git
+    checkout thefiles”, not “git revert”.
+-   “git checkout” is also used for switching between branches (or to
+    any particular commit/point in the history). It is somewhat similar
+    to “svn switch”.
+-   To create a branch, you do “git checkout -b my\_new\_local\_branch
+    theremote/thesourcebranch”, not “git branch”.
+-   To delete a branch, you do “git branch -D thebranch”.
+-   To apply a patch without committing, use “git apply foo.diff”
+-   To apply a patch and create commits at the same time, use “git am
+    foo.patch”
+-   In the Pitivi context, do not ever use “git pull” (unless you really
+    know what you're doing). Use “git pull --rebase”, to get the
+    equivalent of a “svn up”. If you have changes in the branch you're
+    “pulling”, it will rebase them on top of it (but, as mentioned
+    previously, you should not do your work directly on the master
+    branch unless you know what you're doing and know how to resolve
+    potential rebase conflicts).
+
+Git's syntax can arguably be quite arcane. Take a look at the
+\~/.gitconfig file: you can add an \[alias\] section to create command
+aliases. This is nekohayo's gitconfig:
+
+`[alias]`\
+`   diffstat = diff --stat`\
+`   staged = diff --cached`\
+`   unstaged = diff`\
+`   both = diff HEAD`\
+`   oneline = log --pretty=oneline --abbrev-commit`
+
+`   newbranch = checkout -b # destination source, not the other way around`\
+`   deletebranch = branch -D`\
+`   switch = checkout`\
+`   uncommit = reset HEAD~1`\
+`   nukefromorbit = clean -fxd # use with extreme caution.`\
+`   up = pull --rebase`\
+`   patch = am`
+
+`   meld = difftool --dir-diff -t meld`
diff --git a/docs/Git_repositories.md b/docs/Git_repositories.md
new file mode 100644
index 0000000..84df1c9
--- /dev/null
+++ b/docs/Git_repositories.md
@@ -0,0 +1,74 @@
+# Git repositories
+
+See [Git](Git.md) for instructions on how to deal with our
+repositories.
+
+# Official (GNOME) repository
+
+You should clone and make your own branches based on this repository:
+<git://git.gnome.org/pitivi>
+
+-   Web view: <http://git.gnome.org/pitivi>
+
+Note that git being a decentralized version control system, you [do not
+need commit access](http://www.youtube.com/watch?v=4XpnKHJAok8#t=19m13s)
+to this repository to contribute to the project! You can easily make
+your own branch and get it merged into master (we have an official
+project policy to review your contributions within three weeks).
+
+Lack of activity in the main repository does not mean there is no
+development activity going on (it can be happening in other repositories
+below).
+
+## Old pitivi.org repository
+
+git.pitivi.org was previously the official repository. You should now be
+using the GNOME one instead.
+
+# Frequent contributors' repositories
+
+See [The people](The_people.md) to know who you're dealing with
+;)
+
+## Thibault's repository
+
+Used for heavy development work/experimental code before being merged to
+the main repository
+
+-   <git://github.com/thiblahute/pitivi.git>
+-   Webview : <https://github.com/thiblahute/Pitivi/branches>
+
+## Jeff's repository
+
+Mostly UI/usability fixes or new features
+
+-   <git://github.com/nekohayo/pitivi.git>
+-   Webview : <http://github.com/nekohayo/pitivi/branches>
+
+## Alex's repository
+
+-   <git://github.com/aleb/pitivi.git>
+-   Webview : <http://github.com/aleb/pitivi/branches>
+
+# Older/inactive frequent contributor repositories
+
+## Alessandro's repository
+
+-   <git://git.pitivi.org/git/user/alessandro/pitivi.git>
+-   Webview : <http://git.pitivi.org/?p=user/alessandro/pitivi.git>
+
+## Brandon's repository
+
+-   <git://github.com/emdash/pitivi.git>
+-   Webview : <http://github.com/emdash/pitivi/>
+
+# Other known repositories
+
+-   Stephen Griffiths: <http://github.com/lostcookie/pitivi/>
+-   “Yuvipanda”
+-   “Daf”
+    -   Contains an incomplete (but very interesting!) implementation of
+        text titles
+-   “Mathieu69”
+
+Add yours here!
diff --git a/docs/Goals.md b/docs/Goals.md
new file mode 100644
index 0000000..062cfeb
--- /dev/null
+++ b/docs/Goals.md
@@ -0,0 +1,83 @@
+# Goals
+
+*This page is about general principles that govern our project. To learn
+about our global mission and how we plan to achieve it, read the
+[frontpage](http://pitivi.org) of the Pitivi website. You can also take
+a look at the [tour](http://pitivi.org/?go=tour) page to find out about
+cool features.*
+
+[The people](The_people.md) of Pitivi have been part of the
+GStreamer developer community for many years and make sure any issues
+are solved as quickly as possible in the lower levels in order to avoid
+any bloated feature at the application level. This is what we call an
+“upstream first” approach: we fix things everywhere in the software
+stack (see: [Architecture](Architecture.md)) that we depend on,
+instead of accumulating hacks “downstream” (in our app).
+
+Pitivi's [Architecture](Architecture.md) is meant to be
+uncompromising:
+
+-   No limits on audio/video formats (input/output sizes, resolutions,
+    framerates, codecs and container formats, etc.)
+-   No limits on the number of tracks/layers used
+-   No limits on the number of combined effects
+-   Intuitiveness for newbies and flexibility for power users (see
+    below)
+-   Clean separation of the backend and UI. The backend is
+    [GES](GES.md) and it can be reused by anyone wanting to
+    create an application on top of it.
+-   etc.
+
+In the long term, we not only aim for Pitivi to be an intuitive video
+editor for everyone, but also a powerful tool for professionals and
+prosumers. **We are not a Windows Movie Maker clone**.
+
+# “Professional? Isn't this supposed to be easy to use?”
+
+*Yes*, and *yes*.
+
+With Pitivi's growing popularity and simple user interface, there seems
+to have been a misunderstanding in its mission: many people think our
+main goal is to make an application for “video editing newbies”, or to
+make a “clone” of Windows Movie Maker or iMovie. This is not entirely
+accurate. We have the following goals:
+
+-   Make a powerful, flexible video editor that can appeal to prosumers
+    and professionals
+-   Design it extremely well. Make its workflow elegant and intuitive.
+    If we succeed, this means we also reach the goal of “making it easy
+    for everyone to use it” possible.
+
+The confusion also stems from the common misconception that a powerful
+application is mutually incompatible with simplicity and efficiency.
+This is partly because there are so many **applications with poorly
+designed user interfaces**, and partly because the proprietary software
+world has conditioned us into thinking that users must be divided in two
+groups: “advanced” and “beginners”. There is no reason a video editor
+can't allow complex procedures (and make them as easy as possible!)
+while being intuitive to learn and efficient to use for basic
+operations, even for amateurs. The reason why there has been such a
+distinction in the proprietary software world is artificial **market
+segmentation** (further reading:
+[1](http://www.joelonsoftware.com/articles/CamelsandRubberDuckies.html)
+[2](http://www.codinghorror.com/blog/2009/07/oh-you-wanted-awesome-edition.html)
+[3](http://en.wikipedia.org/wiki/Market_segmentation)).
+
+Executive summary:
+
+-   We will make not make a crippled application. In the long run, it
+    will be powerful and flexible. Do not think that “because it doesn't
+    have lots of features right now” means that it was “designed” that
+    way. It's just that we need someone to implement those features
+    properly.
+-   By designing everything carefully, we strive to keep it simple for
+    amateurs as well.
+
+# Yeah, so what's your plan?
+
+You should probably take a look at our [Roadmap](Roadmap.md)
+page for a rough plan of the “big picture” features we want to tackle
+soon. Roadmaps are just rough estimates and objectives, and since Pitivi
+is purely a community-driven project,
+[contributing](http://pitivi.org/?go=contributing) is the best way to
+move what matters to you forward!
diff --git a/docs/Google_SoC_2007_-_Simple_Timeline.md b/docs/Google_SoC_2007_-_Simple_Timeline.md
new file mode 100644
index 0000000..91a3cf7
--- /dev/null
+++ b/docs/Google_SoC_2007_-_Simple_Timeline.md
@@ -0,0 +1,190 @@
+# Google SoC 2007 - Simple Timeline
+
+This branch of PiTiVi has been superceded by PiTiVi 0.11, which
+incorporates many of these changes. This page is left as a record of
+my participation in Summer of Code.
+
+# Main
+
+Our goal for this summer is to finish the Simple Timeline. I started by
+adding some of the features presented in the [Simple UI
+Mockups](Simple_UI_Mockups.md) illustrations. I am now turning
+my attention to file load and save support, even though not all of the
+simple UI has been implemented. File Load/Save is now high priority. In
+addition, I have been creating [Design Docs](design.md) for
+myself, and for other people who wish to contribute.
+
+During the development of PiTiVi this summer, we have discovered a
+number of gstreamer and gnonlin bugs. This means that <b>the pitivi-soc
+branch depends on GStreamer &gt;= 10.9 </b>. If you are interested in
+trying out PiTiVi, or hacking it, you will need to follow the directions
+on the Gstreamer Setup Page to configure your environment.
+
+## UI Enhancement Screenshots
+
+Image:SimpleSourceWidget.png|improved source widget
+Image:SimpleEditingWidget.png|new editing widget
+Image:Editing\_widget\_in\_action.png|functional editing widget in
+action Image:Editing widget in action 08-07-07.png|editing slider now
+features horizontal bar indicating start and stop positions Image:Simple
+timeline 08-07-07.png|timeline has been cosmetically tweaked
+Image:Source\_navigation\_widget.png|mockup of editing slider
+
+## Subversion branch
+
+All work is first being done in the PITIVI\_SOC\_2007 branch before
+being merged in trunk.
+
+WebSVN : <http://svn.gnome.org/viewcvs/pitivi/branches/PITIVI_SOC_2007/>
+
+Anonymous checkout :
+
+` svn co 
`[`svn://svn.gnome.org/svn/pitivi/branches/PITIVI_SOC_2007/`](svn://svn.gnome.org/svn/pitivi/branches/PITIVI_SOC_2007/)`
 pitivi-soc`
+
+## Recent Changes
+
+### Aug 21, 2007
+
+The coding period for SoC has ended. I did do a rather large commit, but
+this has left the SoC branch in a somewhat messy state, as most of the
+code is completely untested. I would like to continue working on this,
+but for the next two days I will be occupied with school and family
+issues. Thursday and friday are out, because my car needs attention
+(water pump leak), and instruction begins on the 27th. So it's not
+looking good for the short term.
+
+On the whole, I feel pleased with my earlier work, but I am a bit
+disappointed at the lack of progress during the later half of the
+summer. Stay tuned for future developments. I think this was a great
+experience, and I feel that I have learned a great deal from
+participating in Summer of Code.
+
+### Aug 15, 2007
+
+I tried to make a go at the UI, but it got hairy really fast. I was
+afraid to commit unfinished code, but I ended up waiting too long. I
+changed a bunch of internal stuff, so I gave up on trying to commit
+that. I'm working now on the backend, after having had a chance to
+discuss the architecture a bit with Edward. In between, I had to study
+for a final exam for a class in which I took an incomplete.
+
+### Aug 4, 2007
+
+Finished writing the core application logic for file load and save, as
+well as all the test cases. I spent most of the making the application
+logic actually <i>pass</i> the test cases =P. I'm debating between
+shifting focus towards the UI or towards file parsing/output. File
+output would be the easiest to implement, UI the next easiest, with file
+parsing being the most difficult. But, I could start working on the UI
+right away, whereas I will need to converse with Edward before beginning
+work on the file format itself.
+
+Edward, if you're able to read this, let me know what you think.
+
+### Aug 1, 2007
+
+I've gotten a bit bogged down in design work, and I've decided to just
+start coding what I have. I have a feeling the rest will become clear
+once I start making progress. I'm hoping to have the application logic
+finished by the end of the week, and the UI going by the start of next
+week. This has taken far too long, and I really need to get cracking at
+implementing the file format (which is the hard/interesting part).
+
+### July 26, 2007
+
+I've been working on the design documents, and creating file/load save
+test cases. My goal is to have the application logic for file load/save
+comitted to the SoC branch some time next week. I've been focusing
+mostly on design at the moment. Today I spent some time splitting up the
+design docs page into separate elements. I also am having to compile
+GStreamer from CVS to catch up to the latest gstreamer bug fixes.
+
+### July 24, 2007
+
+Began thinking about the issue of file load/save support. I started by
+examining the patch supplied by Richard Boulton almost a year ago, which
+implemented the complete application logic for handling saving and
+loading of projects. The patch does not, however, implement reading and
+writing of the project file itself. The patch no longer cleanly applies,
+so I did my best to apply it manually. I then created a new patch, which
+I've uploaded to bugzilla. It's still only a partial patch, and it
+breaks parts of the UI. My goal for the next day or so is to extract the
+best parts of his design, and then implement my own solution. I'll
+probably use some of his code in the system, but will definitely be
+re-implementing the UI.
+
+Part of the work on implementing file load/save support is creating a
+design document. Edward suggested that I put all my [Design
+Docs](design.md) up on the Wiki.
+
+### July 22, 2007
+
+Posted a mockup of the editing slider widget.
+
+#### Comments here
+
+### July 20, 2007
+
+I've been at GUADEC all week, and I've used some of that time to hack on
+PiTiVi. With edward's help, the volume slider on the source widget
+actually changes the volume for the clip. Today I committed a new
+revision to the SoC branch which adds a cancel button to the editing
+widget. This required some internal changes to the editing widget, but
+nothing too serious. Meanwhile, Edward is working on making the advanced
+UI more functional. He's got partial support for moving clips in the
+advanced timeline, but has run afoul of some gstreamer bugs.
+
+I'm considering replacing the slider with a gtk.ScaleButton, since that
+would allow the source widget to shrink down even more while allowing
+the slider to grow to a more managable size. I'm also thinking about a
+custom widget for seeking that would eventually replace the simple
+gtk.HScales we've been using. It feature a much slimmer cursor, would
+support zooming, display a timescale, provide fancy navigation input
+such as jog/shuttle, and would directly show the media start/stop
+points. I'm currently trying to design things on paper, but maybe i'll
+post a vector drawing to the wiki for comments.
+
+Project load/save support is in the early stages of design now. We are
+hoping to have this finished by the end of the summer, but it is a major
+chunk of work. Several contributors have begun submitting patches to
+help make this task easier. Edward is also beginning to explain to me
+the intricacies of the effects/transition system in pitivi.
+
+### July 08, 2007
+
+Today I split out the editing slider code into a new class / file. While
+I was at it I created a helper widget to display the start and end
+points of each clip above the slider. I also made it so that the start
+and stop trim buttons gray out when you drag the slider past the start
+or stop of the clip. This prevents you from setting the end before the
+start, or vice versa. Meanwhile, Edward Hervey has tracked down the
+source of a bug that caused PiTiVi to crash when dragging new sources
+into the timeline.
+
+### July 07, 2007
+
+Today I made great progress. I did a number of cosmetic tweaks to get
+the size of the SimpleSourceWidgets down (which in turn shrinks the
+timeline itself). I also changed the way the those widgets are packed so
+that resizing them does more to increase the size of the thumbnail
+image. I also made it so that the thumbnail in each SimpleSourceWidget
+is updated when it's source's start point changes.
+
+### July 06, 2007
+
+I've decided to start leaving messages on a weekly basis, so that
+there's a visible history of progress. Finally fixed thumbnail aspect
+ratio scaling issues, as well as tracking down a bug that was preventing
+them from updating.
+
+### May/June 2007
+
+The two components I have been focusing on are the SimpleSourceWidget
+and the SimpleEditingWidget. The SimpleSourceWidget and SimpleEditing
+widgets are almost fully functional. I am now working on cleaning up
+certain aspects of the editing widget, and perfecting the slider code.
+
+In the course of creating a generic way of extracting thumbnails, we
+have uncoverd a host of gstreamer bugs which make editing impractical
+for files supported by certain gstreamer plugins, an area which is
+outside of my domain.
diff --git a/docs/Google_Summer_of_Code.md b/docs/Google_Summer_of_Code.md
new file mode 100644
index 0000000..cefb3ef
--- /dev/null
+++ b/docs/Google_Summer_of_Code.md
@@ -0,0 +1,157 @@
+# Google Summer of Code
+
+The [Google “Summer of Code”
+program](https://developers.google.com/open-source/gsoc/) is available
+for students only. If we accept your project proposal, in
+June-July-August you work on your project while being payed by Google.
+Mid-term and end-term we evaluate your work.
+
+On the technical side, it might interest you that we use GES/GStreamer
+as backend, GTK for the UI, the Meson build system, and Flatpak to make
+builds for users. Flatpak also allows us to have a sandboxed development
+which means it's very easy to setup, you are set up in no time, and you
+don't have to run a virtual machine or f\*\*k up your system to be able
+to build the latest GStreamer and Pitivi. See the section at the top of
+the [contributing page](http://www.pitivi.org/?go=contributing) for
+details why Pitivi is important.
+
+While a GSoC with us is one of the most fun and rewarding experiences
+you can get, you need to consider it as *professional work*:
+
+-   **GSoC projects are on a “full-time” basis, not “part-time”**. What
+    this means is that you should not apply if you have some strange
+    schedule where, for example, you have school exams for many weeks
+    between early May and late August. If you have school
+    exams/obligations during the summer, *you need to mention them* and
+    account for them in your schedule.
+-   **No excuses!** We expect you to be a reliable, hard-working person.
+    If things don't go well because for example your roommates are
+    noisy, you don't have air conditioning, or your internet connection
+    is unreliable, and you can't fix it, tell us so we can terminate
+    your GSoC.
+
+Since 2014, our official policy is to ignore “theoretical” applications
+— to be eligible, you **must** have gotten involved early-on and made at
+least one contribution prior to applying. Read more about our stance in
+this blog post: “[Applying for a GSoC project is all about early
+involvement and
+commitment](http://jeff.ecchi.ca/blog/2014/02/15/applying-for-a-gsoc-project-is-all-about-early-involvement-and-commitment/)”.
+If you are interested, the best thing you can do is to come to our [IRC
+channel](http://www.pitivi.org/?go=contact) now, to make sure we have
+enough time to get to know you.
+
+# Who we are looking for
+
+We are looking for smart and talented developers interested in
+multimedia and video editing.
+
+You need to be highly **communicative**. Stuck on a problem? We need to
+know. Achieved a milestone or solved a really nasty problem? The *entire
+world* needs to know. We require to see you in our IRC channel, that's
+where you can meet the team, where you follow what's going on and that's
+where we'll communicate. Email is not sufficient. If you're new to IRC,
+check out [IRCCloud](https://www.irccloud.com/pricing).
+
+You must have experience with Python or C, depending on your project.
+Knowledge of [Git](Git.md), GStreamer and [related
+technologies](Architecture.md) is a plus. Familiarity with
+[Test-Driven
+Development](http://en.wikipedia.org/wiki/Test-driven_development) is a
+plus.
+
+# What we offer
+
+You have a fantastic learning opportunity to play with
+[technologies](Architecture.md) such as GStreamer, GTK+, Python,
+etc. We'll direct you to make great use of the tight-knit GStreamer and
+GTK communities so you have high-quality feedback throughout your
+project.
+
+You can improve the lives of thousands of users by working on a tangible
+and fun project.
+
+You have the opportunity to present your accomplishments to others at
+[GUADEC](http://en.wikipedia.org/wiki/GNOME_Users_And_Developers_European_Conference)
+where you can also meet with us. In past years the travel expenses for
+GSoC students have been covered by GNOME.
+
+See more [reasons for
+contributing](http://www.pitivi.org/?go=contributing).
+
+# How to apply and get started
+
+![](Challenge-Accepted.png "Challenge-Accepted.png")
+
+You don't have to be a veteran hacker but it is important that you prove
+to us — and to yourself — that you *know* what you're getting into and
+that you can handle it. You need to demonstrate that you have sufficient
+technical skills, motivation, and have some familiarity with the
+application and its source code. This also ensures that you get to know
+members of the community and have sufficient time and information to
+properly plan your project.
+
+See also [our official
+stance](http://jeff.ecchi.ca/blog/2014/02/15/applying-for-a-gsoc-project-is-all-about-early-involvement-and-commitment/)
+(as of 2014) on the matter and Lionel Dricot's blog post on “[Being
+selected as a Summer of Code
+student](http://ploum.net/be-selected-student-for-soc/)”.
+
+Therefore, you should proceed like this:
+
+1.  Come to our [IRC channel](http://www.pitivi.org/?go=contact) and
+    stick around.
+2.  Setup your [development
+    environment](https://github.com/pitivi/pitivi/blob/master/docs/HACKING.md)
+    and run the [Test suite](Testing.md). Explore the
+    development version of Pitivi, what works well and what doesn't,
+    etc. See how you like it.
+3.  To get a better idea of how comfortable you are with the code and
+    community, make some small contributions to the code. Pick some
+    small [bugs](https://phabricator.freedesktop.org/project/view/15/)
+    to fix or pick a “small” task in the [Pitivi tasks for
+    newcomers](https://phabricator.freedesktop.org/tag/pitivi_tasks_for_newcomers/)
+    list and have a go at it. Keep us in the loop. The earlier you start
+    contributing, the more likely you know what you're getting into.
+    Don't start contributing in March/April: we highly encourage you to
+    start getting involved in January/February, or even earlier, to have
+    time to try another team if we are not a good fit for you.
+4.  Find a cool feature you need in Pitivi and tell us. Start making a
+    design doc on how you plan to implement it.
+5.  Fill out the
+    [application](https://wiki.gnome.org/Outreach/SummerOfCode/Students#Fill_out_the_Application)
+    and apply officially to the Google's Summer of Code
+    [website](https://developers.google.com/open-source/gsoc/) under
+    both the GNOME or GStreamer mentoring organizations, depending on
+    your project.
+
+# Project ideas
+
+Pitivi is a very modular video editor, whose
+[architecture](Architecture.md heavily depends on technologies
+like [GES](GES.md) and GStreamer. The scope of your GSoC project
+will probably cover only Pitivi, but it could very well span multiple
+codebases:
+
+-   [Pitivi](http://www.pitivi.org/manual/mainwindow.html), which is the
+    user interface. Written in Python. *For those who love design and
+    graphical user interaction.*
+-   [GES](GES.md), the high-level video editing GStreamer
+    library that powers Pitivi and other applications. Written in C.
+    *For those who wish to improve an easy to use, powerful and flexible
+    library for audio/video editing.*
+-   GStreamer, for low-level work, such as improving filters/effects,
+    codecs, hardware decoding/encoding acceleration, analysis, etc.
+    Written in C. *For those seeking a challenging audio and video
+    experience where optimization is key.*
+
+We'd love to see GSoC proposals originating from an itch you need to
+scratch. You are welcome to ask around and **bring your own ideas**. If
+you're not sure where you can be most useful, have a look at the “large”
+tasks in the [Pitivi tasks for
+newcomers](https://phabricator.freedesktop.org/tag/pitivi_tasks_for_newcomers/)
+list. They are fun cool features very suitable for a GSoC project. See
+the [roadmap](roadmap.md) for our overall vision for the
+project. Deadlines for applying are approaching fast, hurry up!
+
+See [Past GSoCs](Past_GSoCs.md) for details on what the previous
+GSoC students did.
diff --git a/docs/HACKING.md b/docs/HACKING.md
index 110d85f..22f8219 100644
--- a/docs/HACKING.md
+++ b/docs/HACKING.md
@@ -132,7 +132,7 @@ gives a weird "shape" to the code.
 ### Names
 The function names, method names and other class attributes should be
 small_caps_with_underscore. For example:
-``` lang=python
+``` python
 def some_function():
     return ""
 
@@ -149,7 +149,7 @@ class MyClass:
 
 To illustrate how private a method or other class field is, prepend
 one or two underscores:
-``` lang=python
+``` python
   class MyClass:
 
      def public_method(self):
@@ -167,7 +167,7 @@ The most common place where this would happen is in callbacks from
 gobject signals. For example, below we don't use the second argument,
 but we do use `pad`.
 
-``` lang=python
+``` python
      def __pad_added_cb(self, unused_element, pad):
         self.do_something_with(pad)
 ```
@@ -177,7 +177,7 @@ The name of a callback method should:
   - be prepended with two underscores since it's private
   - be appended with `cb`
 
-``` lang=python
+``` python
   class MyClass:
 
      def some_method(self):
diff --git a/docs/Install_with_flatpak.md b/docs/Install_with_flatpak.md
new file mode 100644
index 0000000..7539557
--- /dev/null
+++ b/docs/Install_with_flatpak.md
@@ -0,0 +1,81 @@
+# Install with flatpak
+
+The Pitivi community supports a [flatpak](http://flatpak.org/)
+repository to let users install the latest Pitivi releases. This is the
+official, recommended way of installing Pitivi on Linux. The repository
+contains only 64-bit builds.
+
+If you see problems, come to our [IRC
+channel](http://www.pitivi.org/?go=contact) or [file a
+bug](Bug_reporting.md).
+
+## Getting Flatpak
+
+You can get information about how to install flatpak for your
+distribution [here](http://flatpak.org/getting.html).
+
+You need to log out/in again after installing flatpak for apps to show
+up in menus. Until you log out/in, the flatpak data directories aren't
+part of your desktop environment's search path. This needs to be done
+only one time.
+
+## Installing Pitivi
+
+To install the latest stable Pitivi release, run as a normal user (no
+root nor sudo):
+
+` $ flatpak install --user 
`[`http://flatpak.pitivi.org/pitivi.flatpakref`](http://flatpak.pitivi.org/pitivi.flatpakref)
+
+### Troubleshooting
+
+If your flatpak version is less than 0.8, you need to run instead:
+
+` $ flatpak --version`\
+` $ curl 
`[`https://git.gnome.org/browse/pitivi/plain/build/flatpak/pitivi-flatpak`](https://git.gnome.org/browse/pitivi/plain/build/flatpak/pitivi-flatpak)`
 -Sso pitivi-flatpak`\
+` $ chmod +x pitivi-flatpak`\
+` $ ./pitivi-flatpak --branch=`**`stable`**` --update`
+
+When the script finishes installing (or updating), it launches Pitivi.
+
+## Installing Pitivi master (development version)
+
+To install the development version as a separate application called
+“(Rolling) Pitivi”, run in a terminal:
+
+` $ flatpak install --user 
`[`http://flatpak.pitivi.org/pitivi-master.flatpakref`](http://flatpak.pitivi.org/pitivi-master.flatpakref)
+
+You might want to use Pitivi master to contribute and help us test
+Pitivi, or if a specific bug which annoys you is fixed in master, etc.
+
+## Running Pitivi
+
+You can now launch Pitivi from your applications menu as any other
+installed application.
+
+You can also re run the installer which launches Pitivi after updating
+to the latest version.
+
+To see if warning or error messages are printed in the console, run:
+
+` $ flatpak run org.pitivi.Pitivi//stable`
+
+If for some reason you need to use an older Pitivi version, run:
+
+` $ flatpak run org.pitivi.Pitivi//0.96`
+
+## Updating Pitivi
+
+To update Pitivi to the latest version you can just run again the
+installer the same way as before.
+
+Alternatively, update by using directly flatpak:
+
+` $ flatpak --user update org.pitivi.Pitivi`
+
+If a new version is fetched, it will be made current.
+
+## Uninstalling Pitivi
+
+If your software manager doesn't allow this yet, run the command below:
+
+` $ flatpak --user uninstall org.pitivi.Pitivi stable`
diff --git a/docs/Mac_OS_X.md b/docs/Mac_OS_X.md
new file mode 100644
index 0000000..1c87ff6
--- /dev/null
+++ b/docs/Mac_OS_X.md
@@ -0,0 +1,56 @@
+# Mac OS X
+
+Mac OS X is a funny kind of Unix, but it's a Unix and should be able to
+run Pitivi. It's also popular -- even lots of open source types lug
+around a MacBook of some kind. Think of applications as a free software
+gateway drug! ;)
+
+## Current status
+
+Pitivi runs pretty well on Mac, but consider it alpha quality. A few
+[bugs](https://phabricator.freedesktop.org/project/view/123/) have been
+filed already. If you are interested please [get in
+touch](http://www.pitivi.org/?go=contact)!
+
+Besides fixing bugs, we need to prepare somehow out of the [Homebrew
+formula](https://github.com/aleb/homebrew-gui/blob/master/pitivi.rb) a
+proper Mac app. Help is welcome!
+
+## Installing
+
+First install [Homebrew](http://brew.sh/) then run:
+
+` brew install aleb/gui/pitivi`
+
+To run Pitivi, run in a terminal:
+
+` pitivi`
+
+Please report bugs to
+[phabricator](https://phabricator.freedesktop.org/project/view/123/).
+
+## Hacking
+
+Mac OS X has a few major differences from Linux:
+
+-   GTK+ uses Quartz backend instead of X11
+-   When building for multi-arch, a single filesystem hierarchy with
+    “fat binaries” is used, rather than separate directories for
+    libs/executables in each arch.
+    -   This causes some issues with gobject-introspection, in that
+        attempting to support multi-arch (“Universal”) builds requires
+        adjusting paths to the gir files. Currently this has been
+        removed from cerbero's build scripts, so you'll only get a
+        64-bit build. But this might change again.
+-   Applications are usually “bundled” into relocatable 'Foo.app'
+    directories which encapsulate their binaries, libraries, and shared
+    data.
+
+## Development environment
+
+Have a look at [HACKING](HACKING.md) to see how to clone a local repository.
+
+To be able to run `./configure`, you need to add
+`/usr/local/opt/gettext/bin/` to `PATH` so that `msgfmt` can be found.
+
+You should be able to run `bin/pitivi`
diff --git a/docs/Main_Page.md b/docs/Main_Page.md
new file mode 100644
index 0000000..89a7fe2
--- /dev/null
+++ b/docs/Main_Page.md
@@ -0,0 +1,71 @@
+---
+title: Pitivi
+...
+
+# Pitivi development website
+
+This is the documentation for **planning/contributing** to [Pitivi], the
+Free and Open Source video editor based on GStreamer. If you're looking
+for documentation on how to *use* Pitivi, check out our [User's Manual]
+(also available directly inside the application)!
+
+To edit the website edit the markdown files in our git repo in the
+`docs/` and follow our [developer instructions].
+
+  [Pitivi]: http://www.pitivi.org
+  [User's Manual]: http://pitivi.org/manual/
+  [developer instructions]: HACKING.md
+
+# Contributors' documentation
+
+See the [Developer documentation](HACKING.md) section
+page for a complete listing of documentation aimed at contributing to
+Pitivi. Here is a small overview/some starting points taken from that
+category:
+
+-   [Easy and fun projects](Pitivi_Love.md) for new contributors
+-   [Roadmap](Roadmap.md) (long-term plans)
+-   [Architecture](Architecture.md): where does Pitivi fit? What
+    are all those components?
+-   [Brainstorming](design.md) (UI mockups and “future” features only!)
+
+See also the [Contributing](http://www.pitivi.org/?go=contributing) page
+on the website (includes a “Why contribute to Pitivi?” section).
+
+## Tools to help you get started
+
+-   [Git](Git.md)
+-   [Setup development environment](HACKING.md) (official and
+    easiest way to get your testing/development environment running,
+    with pre-built dependencies)
+-   The [test suite](Testing.md) (outdated)
+
+## Ways to communicate
+
+-   [Reporting bugs](Bug_reporting.md)
+-   IRC: [\#pitivi](irc://irc.freenode.net/pitivi) on irc.freenode.net
+-   Our [Google+ page](https://plus.google.com/+pitivi) or
+    [Twitter](https://twitter.com/pitivi) account. Do *not* report bugs
+    there, use our bug tracker instead!
+-   [The people](The_people.md) (who does what)
+
+# Random stuff
+
+-   [Goals](Goals.md) (mission statement, vision)
+-   [Project history](Project_history.md) - rumors of our death
+    have been greatly exagerated... :)
+-   [Current events](Current_events.md) - releases, meetings,
+    talks ... See also the [planet](http://www.pitivi.org/planet) for
+    news about the project.
+-   [Why Python?](design/Why_python.md)
+-   [Praise](Praise.md) - a page to list some of the praises and
+    positive comments we received
+-   [Google Summer of Code](Google_Summer_of_Code.md)
+
+# Pages that need to be reworked/deleted
+
+The pages in these categories need to be reworked. Help is welcome!
+Also, feel free to tag pages with these categories should you find that
+a page is woefully incomplete or outdated:
+
+-   [Probably obsolete](attic.md)
diff --git a/docs/Past_GSoCs.md b/docs/Past_GSoCs.md
new file mode 100644
index 0000000..0939c0d
--- /dev/null
+++ b/docs/Past_GSoCs.md
@@ -0,0 +1,88 @@
+# Past GSoCs
+
+See [Google Summer of Code](Google_Summer_of_Code.md) for how to
+get involved.
+
+## 2016
+
+-   [Jakub Brindza](https://github.com/jakubbrindza) implemented
+    [customizable keyboard
+    shortcuts](http://www.jakubbrindza.com/2016/08/gsoc-with-pitivi.html).
+
+## 2014
+
+-   [Fabián Orccón](http://cfoch-dev.tumblr.com/) worked on the Pitivi,
+    GES, GStreamer stack to allow using image sequences.
+-   [Lubosz Sarnecki](https://lubosz.wordpress.com/) worked on
+    implementing a new OpenGL based transformation effect to be used for
+    the transformation UI.
+
+## 2013
+
+-   Anton Belka worked on the initial
+    implementation of proxies in [GES](GES.md) (see [proxy
+    editing requirements](proxy_editing_requirements.md)).
+-   Mathieu Duponchelle worked on heavy
+    bugfixing all across the Pitivi, [GES](GES.md) and GStreamer
+    stack, allowing us to release [0.91](releases/0.91.md) at the end of
+    the summer.
+-   Joris Valette started work on
+    slow/fast-motion in GStreamer.
+-   [Simon Corsin](https://github.com/rFlex) worked on various pieces
+    alongside Mathieu, such as the new waveforms renderer.
+
+## 2012
+
+-   Matas Brazdeikis implemented a new UI [Test
+    suite](Testing.md) using Dogtail. He also started the
+    implementation of a title editing user interface.
+-   Paul Lange implemented a manual layer
+    controls user interface for the timeline.
+-   Volodymyr Rudoy spent some time
+    designing the GES “Materials” (now known as Assets) API.
+
+All the work above has been merged and is expected to be available in
+the [0.91](releases/0.91.md) release.
+
+In addition, we also co-mentored Peteris Krisjanis who worked on an
+audio waveform generation and display library for GStreamer (see his
+[post-summer
+report](http://pecisk.blogspot.ca/2012/11/state-of-libwaveform-after-gsoc.html)).
+
+## 2011
+
+-   Feroze Naina worked on adding profiles for
+    rendering.
+-   Mathieu Duponchelle started to port
+    PiTiVi to GES after having worked on the GES Python bindings and the
+    GES Pitivi formatter.
+-   [Lubosz Sarnecki](https://lubosz.wordpress.com/) implemented a nifty
+    user interface for [resizing/cropping clips directly in the
+    viewer](https://lubosz.wordpress.com/2016/09/26/making-viewer-uis-for-pitivi/).
+
+Feroze and Lubosz's work has been merged and made available in the
+[0.15](releases/0.15.md) release. Mathieu's work has also been merged, to
+be part of the [0.91](releases/0.91.md) release.
+
+## 2010
+
+-   Thibault Saunier implemented with the
+    core backend developers special effects. He also worked in close
+    collaboration with nekohayo for the user
+    interface and testing.
+
+Thibault's work has been merged in September/October 2010 and is
+expected to be available to users in releases &gt;0.13.5.
+
+## 2008
+
+-   Brandon Lewis worked on the [advanced
+    
timeline](http://dotsony.blogspot.ch/search?updated-min=2008-01-01T00:00:00-08:00&updated-max=2009-01-01T00:00:00-08:00&max-results=41).
+-   [Sarath Lakshman](http://www.sarathlakshman.com/about/) implemented
+    [webcam
+    capture](http://www.sarathlakshman.com/2008/09/28/pitivi-hacks).
+
+## 2007
+
+-   Brandon Lewis worked on the [simple
+    timeline](Google_SoC_2007_-_Simple_Timeline.md).
diff --git a/docs/Pitivi_Love.md b/docs/Pitivi_Love.md
new file mode 100644
index 0000000..d88cf3c
--- /dev/null
+++ b/docs/Pitivi_Love.md
@@ -0,0 +1,6 @@
+# Pitivi Love
+
+See the [Pitivi tasks for
+newcomers](https://phabricator.freedesktop.org/project/view/111/) which
+lists small bugs and features you could jump right away and also larger
+cool features to implement.
diff --git a/docs/Plugins.md b/docs/Plugins.md
new file mode 100644
index 0000000..4afe392
--- /dev/null
+++ b/docs/Plugins.md
@@ -0,0 +1,634 @@
+# Plugins
+
+The PiTiVi plugin system will help keep the core to a minimum codebase
+required for normal editing. The plugins will add various kind of
+functionnalities/interfaces for new features, special hardwares, online
+services, ....
+
+# Use Cases for Plugins
+
+This is a list of use cases for plugins so we can figure out what are
+the various categories of plugins we will need.
+
+-   Istanbul controller : To be able to do screen-grabs that can then be
+    edited within pitivi
+-   YouTube uploader : uploading projects to YouTube
+-   3rd party effects : provides higher-level effects re-using existing
+    GStreamer elements. (optional) can provide a specific UI.
+-   UI-only plugins : provide a different user interface to manipulate
+    the timeline for specific tasks (compositing-specific view for
+    example)
+-   Specific hardware integration
+-   image sequence loader : So you can load a sequence of image files
+    and use that as a source in the timeline.
+-   **Put your ideas here...**
+
+# Case Studies
+
+Here we analyze some pluggable architecture implemented by other
+opensource projects in order to focus their strength/weak points in
+relation to pitivi's needs. The list here does not pretend at all to be
+exaustive but is only meant to provide a cheap guided tour of the
+neighbourhood.
+
+## The Deluge way
+
+Deluge is a bittorrent client written in python+gtk
+(http://www.deluge-torrent.org), it provides one of the most simple
+implementation of a pluggable architecture:
+
+Plugins are stored in subdirectories of the ./plugin path. Each
+subdirectory takes the name of the contained plugin. Each plugin should
+at least provide an \_\_init\_\_.py file which defines the custom
+namespace and provides the access points for the plugin.
+
+Inside the \_\_init\_\_.py are stored:
+
+-   Description fields (plugin's name, author, version and description)
+-   deluge\_init() function is called to initialize the plugin
+-   enable() function is called when the user enables the plugin
+
+The plugin manager scans the plugin directory for new items and when a
+plugin is found, it imports the namespace into the list of plugins and
+calls the deluge\_init() function to initialize the plugin.
+
+This implementation has the major advantage of being lightweight.
+
+It does not create a class hierarchy for plugins: this can be both an
+advantage and an handicap since changes in the common base plugin class
+would potentially break plugin's compatibility but having a common
+ancestor can simplify usual operation by defining them inside the
+ancestor.
+
+It is not possible to categorize plugins, even if a simple “category”
+field inside the \_\_init\_\_.py would be enough.
+
+This plugin architecture is useful for extending the application with
+functionality not considered in the core objects, since the plugin has
+full control over the application and can thus extend any aspect of the
+host.
+
+## The Jokosher way
+
+Jokosher is an audio production software that uses python+gtk+gstreamer
+(http://www.jokosher.org)
+
+Its pluggable architecture places plugins into the ./extensions
+directory. Plugins can be stored as source .py files or packed into
+python eggs.
+
+Extension API are provided for inserting menu items inside the main
+jokosher menu, as well as functions to control playback, instruments and
+to add new output formats.
+
+Plugin preferences are stored in the ./extension-config path, with one
+config file for each plugin named as the plugin itself. Preferences are
+serialized by pickle into a dictionary of objects; standard methods to
+store and retrieve keys from the dictionary are available to the plugin
+writer.
+
+The plugin manager install/remove plugins taking care of possible
+conflicts, it also manages the loading/unloading/configuration processes
+for each plugin, ensuring each plugin is loaded only once (plugins are
+treated as singletons).
+
+Each plugin must contain:
+
+-   some descriptive fields identifying the name, description and
+    version
+-   startup(api) function is called when the plugin is activated,
+    passing the whole API set to the the plugin.
+-   shutdown() function is called when the plugin is deactivated, it
+    takes care of the cleanings.
+
+This approach defines a clear set of API that the plugin can use as
+preferred way to interact with the main application, API are pushed into
+the plugin when it is activated and a reference to them is usually kept
+inside the plugin though all its lifetime.
+
+API for UI integration allow to insert new menu items, leaving to the
+plugin the responsability to remove the inserted items when it is
+unloaded. The same logic is applied when additional output formats are
+provided by the plugin, those must be removed from available output
+format by the plugin itself when it is deactivated.
+
+Strength points of the Jokosher approach are a well designed and
+lightweight plugin manager; the possiblity to store plugins in python
+eggs that simplifies a lot the deployment of new plugins; a clean set of
+API the plugin can use to interact with the host application; the
+possibility to add new output formats; the possibility to save plugin's
+preferences without having the plugin care about serialization
+procedures.
+
+Weak points of this architecture are a limited UI integration beccause
+plugins wich uses only the API can insert menu items only under the
+“plugin” submenu; the creation of a preferences file for each plugin
+available could lead to a pollution of config files; leaving to plugins
+the duty of removing UI enhancements they inserted could lead to waste
+of memory if the plugin writer does not make a good job, a defaulf
+approach for cleaning would be preferrable.
+
+## The Trac way
+
+Trac is an enhanced wiki and issue tracking system for software
+development projects (http://trac.edgewall.org/), it has a consistent
+pluggable architecture that it strikingly rensembles the one of the
+Eclipse framework:
+
+The main application exposes some entry points where plugin can plug
+into. each entry point is characterized by a contract that both the
+plugin and the main application must subscrive in order to interact;
+this contract takes the concrete form of an interface declared by the
+main application and implemented by the plugin.
+
+Each plugin can implement multiple interfaces, in this way it extends
+multiple aspects of the main application.
+
+Each entry point can be plugged by multiple plugins, thus the same
+feature of the main application can be extended in multiple ways.
+
+Plugins can expose entry points themself, allowing them to be extended
+by other plugins.
+
+Trac plugins inherits from the “Component” class and are deployed as
+python eggs.
+
+The whole application is designed to be modular and plugins can also be
+created to replace built-in components.
+
+Technically, the most of the work is done in the core.py file which
+declares the following structures:
+
+-   Interface class, defines the ancestor of all interfaces implemented
+    by plugins using the implements() function
+-   ExtensionPoint class, defines each single extension point slot,
+    characterized by an Interface that every component who wants to plug
+    must conform.
+-   Component class, defines the generical component boundled to an
+    exinsing component manager
+-   ComponentManager class, manages all the components available to the
+    application, switching them on/off and taking care each component is
+    a singleton.
+
+Trac approach intruces a simple implementation for interfaces in python,
+an example code of how this architecture is used for creating plugins is
+reported in the following example (taken from Trac documentation):
+
+`from trac.core import *`
+
+`class ITodoObserver(Interface):`
+
+`    def todo_added(name, description):`\
+`     `“““`Called`` ``when`` ``a`` ``to-do`` ``item`` ``is`` ``added.`”””
+
+`class TodoList(Component):`
+
+`    observers = ExtensionPoint(ITodoObserver)`
+
+`    def __init__(self):`\
+`        self.todos = {}`
+
+`    def add(self, name, description):`\
+`        assert not name in self.todos, 'To-do already in list'`\
+`        self.todos[name] = description`\
+`        for observer in self.observers:`\
+`            observer.todo_added(name, description)`
+
+`class TodoPrinter(Component):`\
+`    implements(ITodoObserver)`
+
+`    def todo_added(self, name, description):`\
+`        print 'TODO:', name`\
+`        print '     ', description`
+
+ITodoObserver interface provides a todo\_added() callback to trigger
+plugin's functionalities.
+
+The class TodoList is declared as expandable by declaring an extension
+point, used by plugins that implements the ITodoObserver interface.
+
+Finally an example plugin TodoPrinter is written that extends the
+TodoList by implementing the interface ITodoObserver via the
+implements() function.
+
+## The Zope way
+
+Since version 3.0 the CMS engine Zope (http://www.zope.org) introduced a
+full fledged interface implementation in python, as core system for its
+pluggable architecture.
+
+In python the concept of interfaces, intended as a formal way to define
+relationships between items, does not yet exist; instead duck typing is
+the generally utilized way, so if an object hasattr(foo, 'bar') then
+foo.bar(), but this approach goes so far, since it is not possible to
+determine if an attribute is callable or has constrains to its possible
+values.
+
+In fact plugin developers must rely over documentation to check what
+methods their classes have to provide to implement a certain feature,
+and this approach is very prone to broke plugins compatibility if
+documentation is not kept perfectly synchronized with the code.
+
+Zope interfaces are designed to be applied not only to classes, but also
+to modules, objects and functions, since they follow the golden rule
+that “specification should make no assumption about implementation”;
+this approach leaves complete freedom to the plugin developer to
+organize its code in the way it prefers, as long the intefrace
+requirements are fullfilled; in this way duck typing gets formalized
+without adding a big overhead.
+
+`from zope.interface import Interface, implements,  providedBy`
+
+`class ISing(Interface):`\
+`   def sing():`\
+`       `“`"`”` Returns a melody `“`"`”
+
+`class Sinatra(object):`\
+`   implements(ISing)`
+
+`   def sing(self):`\
+`       return `“`In`` ``singing`` ``in`` ``the`` ``rain...`”
+
+`frank = Sinatra()`\
+`ISing.providedBy(frank)    <-- True`
+
+Interfaces fully supports inheritance from other interfaces (with the
+security check that children's methods conforms to ancestor's one if
+overridden), implementer of an interface hierarchy can limit the
+implentation only to a certain child interface in the lineage; the
+status of interface implementer can be attached at runtime to items that
+do not explicitely implemented the interface in their definition; as
+well the implementer status can be removed from an item at runtime
+(useful for example in containers that implement an interface by
+delegating implementation to contained objects).
+
+The other big feature of Zope interfaces is that they can be used to
+create adapters in a very efficient way, providing also a centralized
+registry for adapters.
+
+## Considerations
+
+These case studies exemplify two different approaches for extending the
+host application:
+
+In the first two cases (Deluge and Jokosher) the host application
+basically defines a plugin manager that takes care of activating and
+deactivating plugins; when activated, the plugin is allowed to access
+the core objects and modify the application as it wants.
+
+This approach has the advantage to leave complete freedom to plugins at
+the cost of anarchy, since there isn't a standardized way for the plugin
+to interact with the host application. Jokosher tries to overcome this
+situation by defining some API that can be optionally used by plugins to
+accomplish common tasks. The other big advantage is that plugins can be
+created to extend aspect of the application not considered originally by
+the author to be extendable.
+
+In the third case study (Trac), as opposite, plugins can only extend
+specific aspects of the host application defined as extension points,
+whose declare a clear contract the plugin must subscrive if it wants to
+extend the host application.
+
+This approach enforces a neat definition of rights and duties for the
+partiecipants to the extension process at the cost of some freedom. In
+this way plugins do not “put” their features into the application, but
+“offer” instead some extended features the application can use.
+
+The last case study (Zope) further improves the concept of interfaces,
+adding the possibility to define attributes/constrains inside
+interfaces, providing functions to check interface
+implementation/definition, adding a complete facility to provide
+adapters; all this is done in the pythonic way of leaving the developer
+the most freedom.
+
+The main advantage of using interfaces over class inheritance is that
+the former defines relationships between items and keeps the system
+higly decoupled, while the latter constrains thee partecipants to a gree
+an “is a” relationship, thus creating strong coupling between classes.
+
+# Pluggable architecture proposal
+
+In the light of needed use cases and analyzed case studies the following
+hybrid pluggable architecture is proposed for Pitivi.
+
+## Nomeclature
+
+From here on, we will use the term “extension point” to define an aspect
+of the main application which can be extended by plugins. In respect to
+extension point we'll define “host” the component (usually pitivi but
+also plugins can be extended) that exposes the extension point, and
+“extender” the component that plugs into the extension point in order to
+provide additional features to the host component. Every extension point
+is characterized by a contract that both the parts must subscrive in
+order to interact.
+
+## Plugin deployment
+
+Since simple plugins may consist of a single python file, while complex
+plugins may comprise glade interfaces, code written in other languages,
+graphics etc.. etc.. then plugins needs to be packed.
+
+A convenient method is to take advantage of python eggs
+(http://peak.telecommunity.com/DevCenter/PythonEggs) and create an .egg
+file for each plugin. Eggs are similar to java's jar files, they make
+very simple the shipping and installation of new plugins since all you
+need is to drag the .egg file inside the ./plugins directory. Eggs also
+ships a standard method for exposing plugin's entry points and
+dependancies, making easy to allow cooperation/subordination among
+plugins.
+
+we can expect pitivi to be shipped with some default plugins available
+for all the users and meant to be uninstalled by the system
+administrator only; while it is also auspicable to let users install
+custom plugins and encourage them in writing new ones.
+
+Default plugins could be placed inside the pitivi installation path (i.e
+/usr/local/pitivi/plugins), these plugins are usually installed by the
+linux distribution facility and only users with root privileges can
+modify them directly.
+
+User plugins could be placed inside the user home directory (i.e. in
+/home/my\_user/.pitivi/plugins) and can be installed/deleted/modified by
+the user.
+
+Pitivi should check for both the locations when searching for available
+plugins, and should use the user home to store plugin configuration
+parameters (i.e /home/my\_user/.pitivi/plugin-settings).
+
+## The extension act
+
+The relationship that exists between extension points and plugins is
+schematized in this cartoon:
+
+![](images/Extension_schema.png)
+
+1.  Each plugin may act as extender and as host by exposing extension
+    point itself.
+2.  Each host may have many extension points.
+3.  Each extension point may be extended by multiple extenders.
+4.  Each extender may extend multiple extension points.
+
+In order to plug into the extension point the extender component must
+conform a protocol declared by the host component; this intefrace
+specifies function signatures for the duties that host component is
+planned to demand to plugin, like callbacks for occurred events, widgets
+to integrate into the user interface or implementation of common
+operations over new file formats.
+
+Each extension point should be able to keep a list of extenders plugged
+in, providing to the host component a convenient way for trasversing
+extenders.
+
+## Direct core objects access
+
+For those plugin which wants to extend aspects of the application not
+exposing extension points, core objects of the host application can be
+manipulated directly by the plugin writer. Since in python classes does
+not encforce information hiding concepts, the plugin writer can easily
+access them and inject the new features.
+
+In order to allow the plugin this alternative extension approach, the
+plugin writer will insert new features when the plugin is activated by
+the plugin manager, and provide a complete cleaning of plugged features
+when the plugin is deactivated.
+
+## Plugin manager
+
+The plugin manager is the orchestra director, its duties comprise:
+
+1.  Keep track of available plugins
+2.  Install/Remove plugins
+3.  Activate/deactivate plugins
+4.  Provide facilities to store and retrieve plugin's preferences
+5.  Retrieve plugins from the pools on a category search criterium
+6.  Resolve versioning conflicts and incompatibilities among plugins
+
+# Use cases for plugin manager
+
+## Install a new plugin
+
+For a generic plugin the user:
+
+1.  Open the plugins list window
+2.  Drags&drop the new plugin's package inside the list of plugins
+
+For an effect/transition the user:
+
+1.  Selects the effects list
+2.  Drag&drop the effect plugin inside the list of available effects
+
+The plugin manager backend:
+
+1.  Catch the drop of items inside the plugin list
+2.  Check the item dropped is really a plugin compatible with the
+    current version of the application
+3.  Check if the plugin requires other plugins to be installed, stop if
+    those are not present
+4.  Copy the package inside the user plugin directory
+5.  register the plugin among the pool of available plugins
+6.  If there are plugins requiring the installed one to work, make them
+    activable by the user
+7.  Update the plugin/effect/transition list
+
+## Uninstall a custom plugin
+
+The user:
+
+1.  Drag&drop the plugin from the list of plugins to the trash
+
+The plugin manager backend:
+
+1.  Catch the drop of a plugin from the list to the trash
+2.  Check for plugins that depends upon this one, and ask the user if he
+    wants to cancel the operation or proceed anyway
+3.  Deactivate the plugin if active
+4.  Unregister the plugin from the pool of available plugins
+5.  Remove the plugin package
+6.  Disable plugins whose require the trashed plugin to be activated
+7.  Make plugin whose require the trashed plugin unactivable by the user
+8.  Update the plugin/effect/transition list
+
+## Upgrade an existent plugin
+
+The user:
+
+1.  Drag&drop the new version of the plugin into the list of plugins
+
+The plugin manager:
+
+1.  Check the plugin pool for duplicates of the plugin to be installed
+2.  Ensure the verion of the dropped plugin is newer than the current's,
+    otherwise prompt the user for confirmation
+3.  Remove the old plugin, preserving configuration items
+4.  Install the new plugin
+
+## Configure a plugin
+
+The user:
+
+1.  Open the plugin manager window
+2.  Select the plugin to configure
+3.  Press the “Configure” button to show the configuration dialog.
+
+The plugin manager:
+
+1.  Ask the plugin for the configuration dialog.
+2.  Retrieve from the plugin configuration file the dictionary of config
+    values belonging to the plugin
+3.  Pass the plugin the dictionary
+4.  The plugin updates the dictionary passed by the plugin manager
+5.  Save the dictionary in the file containing plugin configuration
+
+## Enable/Disable a plugin
+
+The user:
+
+1.  Open the plugin manager window
+2.  Check/Unckeck the plugin
+
+The plugin manager:
+
+1.  Load/unload the plugin
+2.  Refresh the user interface if plugin extended it
+
+# Design
+
+## UI integration
+
+Extending the user interface could be achieved in basically two ways in
+GTK:
+
+The first is writing custom code to integrate new widgets provided by
+the plugin into the current user interface design.
+
+The second way is taking advantage of the UImanager component provided
+by gtk, this facility allow the developer to define UI widgets as xml
+then the UImanager can be told to merge the xml code into the existing
+GUI. Even thought this approach requires the plugin writer to learn
+UImanager xml syntax, the process clearly separate the UI creation part
+from the definition of actions triggered by the new UI piece, so it'll
+be preferred to the former approach when possible.
+
+Despite of the type of widget integrated in the main user interface the
+following interface definitions will provide methods with a “UI” suffix
+meant to provide to the UImanager the xml code to integrate inside the
+main user interface, and other methods with the suffix “Action” meant to
+provide to the main application actions to bind to the main UI widgets.
+
+Plugins must conform to the following protocol if they want to extend
+pitivi UI, in change pitivi is obliged to integrate the widgets provided
+by plugins in the way plugins define, with the freedom to choose when
+it's time to integrate them (usually when the main user interface is
+built at application startup or when user choose to activate the
+plugin).
+
+## Menu / Toolbar integration
+
+Placing a menu item or a tool button is the simplest way a plugin can
+interact with the user, the following interfaces provide convenient ways
+for the plugin to integrate widgets in the main user interface:
+
+Class IMenuProvider(Interface):
+
+`   def getUI():`\
+`   `“`"`”` Return the xml code defining the user interface enhancement `“`"`”\
+`   def getActions():`\
+`   `“`"`”` Return the list of actions triggered by new menuitems `“`"`”
+
+## Additional source providers
+
+This kind of plugins provides items user can drag into the timeline such
+as videoclips, effects, transitions. Pitivi inserts a new tab in the
+sources notebook displayed in the top-left portion of the main window.
+Plugins that want to be source providers must implement the following
+interface:
+
+Class ISourceProvider(Interface):
+
+`   def getName():`\
+`   `“`"`”` Return the name to be displayed in the notebook tab title `“`"`”\
+`   def getWidget():`\
+`   `“`"`”` Return the source view widget, usually a gtk box `“`"`”\
+`   def getCallbacks():`\
+`   `“`"`”` Return a tuple of (cb_name, signal_name) in the order they must be connected `“`"`”
+
+Note on signals handling: the plugin may provide callbacks to observe
+application signals, they're retrieved from the plugin with the
+getCallbacks() method, the returned tuple is coonnected to host
+application signals in the order specified by the plugin, and
+disconnected in reverse order when the plugin is deactivated.
+
+## Recording devices
+
+Recording devices such as webcams, microphones but also unconventional
+items like screencast share the same requirements to be used by pitivi:
+
+Class IRecordingDevice(Interface):
+
+`   __gsignals__ =`\
+`       {`\
+`       `“`recording-started`”`: (gobject.SIGNAL_RUN_LAST, gobject.TYPE_VOID, ()),`\
+`       `“`recording-finished`”`: (gobject.SIGNAL_RUN_LAST, gobject.TYPE_PYOBJECT, ())`\
+`       }`\
+`       `“`"`”` recording-started informs observers the device started recording.`\
+`           recording-finished signals the main application that a new clip is produced by the device,`\
+`           the clip uri is returned by the signal in order to be added among sources `“`"`”\
+`   def getName():`\
+`   `“`"`”` Return the name of the device `“`"`”\
+`   def hasVideo():`\
+`   `“`"`”` Return true if device can provide video `“`"`”\
+`   def hasAudio():`\
+`   `“`"`”` Return true if device can provide audio `“`"`”\
+`   def record():`\
+`   `“`"`”` Start recording `“`"`”\
+`   def stop():`\
+`   `“`"`”` Stop recording `“`"`”\
+`   def isRecording():`\
+`   `“`"`”` Returns true if the defice is currently recording `“`"`”
+
+## Effects/Transitions
+
+This kind of items represent an exception to the general concept of
+plugin, which are usually meant to be singletons by definition (only a
+single object for each plugin is created by the application), since
+they're made to be applied more than one time over the timeline.
+
+Effects/Transitions are collected and exposed to the user as a list,
+grouped into functional categories. This task will be accomplished by a
+specialized SourceProvider plugin called Effect(Transition)Provider,
+exposing entry points where Effects can be inserted. The Provider takes
+also care of creating a new effect object every time the user drags the
+effect to the timeline, thus implementing the Factory design pattern.
+
+Every Effect object life-cycle starts in the moment the user drags it
+into the timeline and ends when its is removed, during its lifetime the
+object stores its custom preferencies in memory, while default
+preferences are stored in the same way of preferences of other plugins.
+
+Detailed discussion of Effects/Transitions architecture will be
+discussed in a separate design document.
+
+# Links
+
+Various links for inspiration...
+
+## Other python plugin systems
+
+-   <http://trac.edgewall.org/wiki/TracDev/ComponentArchitecture>
+-   <http://trac-hacks.org/wiki/EggCookingTutorial/BasicEggCooking>
+-   <http://live.gnome.org/Gedit/PythonPluginHowTo>
+-   <http://jokosher.python-hosting.com/wiki/ExtensionSystem>
+-   <http://twistedmatrix.com/projects/core/documentation/howto/plugin.html>
+-   <http://termie.pbwiki.com/SprinklesPy>
+-   <http://docs.turbogears.org/1.0/TemplatePlugins>
+-   <http://www.zope.org>
+
+## Other non-python plugin systems
+
+-   <http://www.eclipse.org/articles/Article-Plug-in-architecture/plugin_architecture.html>
+-   <http://www.codeproject.com/csharp/C__Plugin_Architecture.asp>
+-   <http://www.codeproject.com/dotnet/PluginManagerClassBrk.asp>
+-   <http://www.objectplanet.com/opinio/userguide/index.htm?page=plugin_architecture.html>
+-   <http://developer.mozilla.org/en/docs/Plugin_Architecture>
+-   <http://sync4jmozilla.sourceforge.net/Mozilla%20PIM%20Plugin%20Design%20Document.pdf>
+-   <http://www.gnome.org/projects/epiphany/documentation/extensions/>
diff --git a/docs/Praise.md b/docs/Praise.md
new file mode 100644
index 0000000..8855a2a
--- /dev/null
+++ b/docs/Praise.md
@@ -0,0 +1,404 @@
+# Praise
+
+This page lists some of the positive comments/praise we have received.
+
+# In the Media
+
+> “Here's the thing. I have found a legitimate video editor for Linux,
+> that is more powerful than Lightworks, that uses the latest GTK
+> technologies, and it's available to run right now with one download,
+> no proprietary counter. It's Pitivi. They just had a brand new
+> version, 0.95, and it's a huge, huge deal. I'm not joking, this is a
+> really big deal. \[...\] They've been essentially working on this
+> release for over a year, and they have done SO. MUCH. WORK. It's
+> almost an entirely new product. They've redone everything. \[...\]
+> This looks like an actual video editor! \[...\] If you're familiar
+> with Final Cut this is going to be a familiar editing experience for
+> you. \[...\] This is a whole new deal. I'm excited.”
+
+— Chris Fisher on the [Linux Action Show, episode
+392](http://www.jupiterbroadcasting.com/90616/the-evolution-of-solus-las-392/)
+(from 22 to 32 mins), 2015
+
+> “Pitivi es uno de los mejores editores de vídeo para Linux que he se
+> puede encontrar en la actualidad. La interfaz es sencilla y agradable
+> a la vista, no hay complicaciones de ningún tipo… una de esas perlas
+> de software que no se ven a menudo y que conviene tener siempre a
+> mano.” (**translated**: *“One of the best video editors for Linux that
+> I can find today. The interface is simple and pleasing to the eye, no
+> complications... a rare gem that you don't see often in the software
+> world, and something you should have on hand.”*
+
+—
+[UpToDown](http://blog.uptodown.com/pitivi-potente-rapido-y-eficaz-editor-de-videos-para-linux/),
+September 11, 2012
+
+> “It is a testimony to Pitivi's stability that the only problems I
+> found with it were minor. (...) Obviously the big plus is the vast
+> assortment of effects available, and how easy they are to configure
+> and use. But the collective effect of the UI improvements (settings
+> presets, detachable tabs) and other enhancements (fully adjustable
+> frame rates, media previews) make for a better editing experience as
+> well.”
+
+—
+[Linux.com](http://www.linux.com/learn/tutorials/465688-pitivi-video-editor-now-kitten-friendly),
+July 6th, 2011
+
+> “What impresses me about Pitivi isn't so much that it's a flexible
+> multimedia editor — we have a handful of those already in the Linux
+> community. What I think sets Pitivi apart is that it makes video
+> editing intuitive. I don't generally create or edit video files, but I
+> was able to jump right in with this application. I didn't have any
+> need for a manual or tutorial (...). Pitivi has an interface which
+> allows people to learn by doing without a bunch of scary options or
+> jargon. Almost everything is drag-n-drop with this editor and I feel
+> it lowers the bar for people interested in putting together their own
+> videos.”
+
+—
+[DistroWatch](http://distrowatch.com/weekly.php?issue=20101025#feature),
+October 25th, 2010
+
+> “(...) I have to say the work Thibault and the Pitivi guys have done
+> is incredible. Truly. (...) The wide selection of effects and the ease
+> in which they can be added/used is so simple and user-intuitive it
+> can’t help but stoke your creative fire. (...) The process for
+> editing/adjusting clip effects in Pitivi certainly scores one up here.
+> Where OpenShot hides effect preferences behind right-clicks and extra
+> windows Pitivi puts them slapbang where you can see and access them
+> equalling a usability plus. All of this is done in real-time, too: As
+> soon as you drag an effect on a clip it’s instantly applied. This
+> makes workflow irrepressibly speedy; you can see what works and what
+> doesn’t straight away. (...) I am utterly, utterly astounded by the
+> quality, handling & fantastic interface this has gained in such a
+> short amount of time. It is a absolute credit to the talents of the
+> team behind this – and it’s not even released yet!”
+
+— [OMG!
+Ubuntu!](http://www.omgubuntu.co.uk/2010/09/pitivi-video-effects-ubuntu-download/)
+on the inclusion of special effects in September 2010
+
+> “Overall, Pitivi is a promising application. It's a decent video
+> editor with no frills, and intuitive to pick up. And in the tests I
+> ran, Pitivi was rock-solid. This isn't something to be taken for
+> granted. Years ago I spent time editing video with Kino for various
+> projects, and learned to save after nearly every edit or operation.”
+
+— [ars
+technica](http://arstechnica.com/open-source/guides/2010/01/video-editing-in-linux-a-look-at-pitivi-and-kdenlive.ars),
+February 1st, 2010
+
+## Other mentions in the media
+
+> “I shuddered at the thought of editing on Linux, as every piece of
+> software I'd tried was extremely buggy and always crashed at some
+> point in the process. After seeing a comment in this subreddit, I
+> decided to give Pitivi a chance, and I was blown away. It is not the
+> most feature-packed editor (kdenlive), but it did exactly what I
+> needed it to do: I imported video, made cuts, added transitions, added
+> titles, and rendered out a 30min video to ProRes. Not a single glitch
+> in the whole process. Also, it looks great! If any Pitivi developers
+> are reading, THANK YOU! You have made a functional video editor under
+> Linux. Looking forward to your 1.0 release.”
+
+— theray76 [on
+Reddit](https://www.reddit.com/r/linux/comments/5mlsme/wanting_to_show_some_love_to_the_pitivi_project/),
+2017-01-07
+
+> “I've spent years looking for a simple, stable video editor to fit
+> into my Linux (GNOME) desktop experience. Flatpak, and Pitivi
+> installation via flapak is simple and it works. Pitivi 0.96 is a great
+> release. It's stable, responsive, and it works. Kudos to the Pitivi
+> developers and wider community. \[...\] if you're like me, and you've
+> been waiting on the sidelines for a simple, stable video editor for
+> Linux (and in particular the GNOME/GTK environment) then I recommend
+> you give Pitivi 0.96 a try.”
+
+— maheart [on
+Reddit](https://www.reddit.com/r/linux/comments/4v0swv/pitivi_096_a_great_release/),
+2016-07-28
+
+> (...) "I have worked as video editor in my earlier life (before I
+> became software programmer), and used Final Cut Pro. I have always
+> been a Linux user though, and have meddled with everything that exist
+> every single year. Cinelerra was always the fall-back that would never
+> really let me down because it was frank about its crashers and they
+> were possible to navigate around.
+>
+> In later years, I did find Pitivi to be a possible replacement for
+> simple out-to-blog cuts. Especially the version before they added
+> filters. Sadly, the filters-version exposed lots of bugs in the
+> underlying stack and everything became dog-slow and probably quite
+> unstable. I just stuck with that old (now very old) version.
+>
+> However, the new GES-backed 0.9-line that is aiming at becoming 1.0 is
+> something totally different. It is really shaping up to becoming a
+> quite awesome little video editor and I will be donating happily."
+> (...)
+
+— [Odin Hørthe Omdal on the 2014 fundraiser coverage article on OMG!
+Ubuntu!](http://www.omgubuntu.co.uk/2014/02/pitivi-video-editor-fundraising-campaign),
+February 24, 2014
+
+# On our IRC channel/elsewhere
+
+-   **P Fudd**: Thanks again for a great program! I managed to edit my
+    file correctly in the first 5 minutes of using Pitivi, which is far
+    faster than I managed with any other program! (2014 03 14 on
+    bug 719651)
+-   **Jonathan Duff**: I just want to say also I was blown away by how
+    intuitive, versatile (by using GStreamer), and powerful this program
+    is. I'm used to using Adobe Premiere Pro, so I was very impressed
+    when I found this gem. (2010 12 31 at 21h55 UTC)
+-   **rowinggolfer**: Loving the git version. You guys are awesome. I
+    was a Pitivi skeptic until a couple of weeks ago, but I am using it
+    daily to get stuff done with very few issues and a tiny learning
+    curve (2010 02 21 at 13h15 GMT -5)
+-   **Ants**: \[...\] Might I say, 0.14 has blown me away, it's
+    fantastic! \[...\] (2011 06 05 on LP \#709090)
+
+# Ubuntu Software Center reviews
+
+## Version 0.15
+
+-   “Works like a charm”:\
+    Had to do some editing, was quick and simple. (Paulius Šukys,
+    2014-03-03)
+-   “Great little application for quick video editing”:\
+    If you want to do some quick and simple video editing and exporting
+    then this is a great app for that. Do not expect it to do the world.
+    (Iain Lane, 2011-11-02)
+-   “Must Have Video Editor!”:\
+    Gotta be one of the best I've used! It's definitely gotten WORLDS
+    better than it used to be. (Yanike, 2011-12-14)
+-   “My Favorite Video Editor on Ubuntu”:\
+    I know that OpenShot seems to get a lot more attention as a video
+    editor on Ubuntu, but I find Pitivi to be the better software. For
+    example, I find making the actual cuts, more instinctual on Pitivi,
+    and I'm able to be more precise - It earns a lot of points for that.
+    \[...\] if you really want to do some efficient editing, I say go
+    with Pitivi. It gets my vote. (DigitalMan, 2011-11-27)
+-   “Better than Ever”:\
+    What else can I say? UI is good, effects are nice and it handles big
+    files (2 GB) without crashing. It took a while, but now Pitivi is
+    finally usable editor with potential! (PYHhfWp, 2011-10-31)
+-   “Getting there”:\
+    It has taken a while, but as of version 0.15.0, Pitivi is both
+    stable for me and presents a sufficient featureset to be useful.
+    Compared to other video editors, I find the UI a pleasure to use.
+    However, it's about time the still missing features (titling and
+    more complex transitions) are implemented. (Alexander Hunziker,
+    2011-09-29)
+
+# On Twitter (in all languages)
+
+-   **yurayko** I just donated 20€ to the @Pitivi video editor and you
+    should too, because perseverance wins when all else fails (7:29 AM -
+    23 Nov 2015)
+-   **mcnelsn** Needed a good video editor on Linux. First go-around
+    with @Pitivi and I'm very, very impressed! (1:10am · 30 Sep 2014)
+-   **P3terFr** Je test \#Pitivi, un logiciel libre de montage vidéo.
+    C'est aussi bon qu'un Sony Vegas ou un Adobe Premiere ! (4:27 PM -
+    21 Apr 2013)
+-   **lornajane** Did I mention how much I love ubuntu? Kazam and PiTIVi
+    make screencasting entirely approachable, fantastic tools (4:27 PM -
+    25 Mar 2013)
+-   **TheSamsai** Oon alkanu tykkää Linuxilla videoiden editoimisesta.
+    Onhan siinä omat pikku mutkat, mut en anna sen haitata. Good job
+    \#pitivi developers! (4:08 AM - 15 Sep 2012)
+-   **Kurobyte** Editar un vídeo con Pitivi y que salga mejor que con
+    Vegas Pro e Adobe Premiere. Software Libre Rlz. (5:37 AM - 16
+    Sep 2012)
+-   **CharlesYarnold** The power of FLOSS! Rerendered the videos in
+    Pitivi and all is happy again. \#flossuk (4:20 AM - 21 Mar 12 via
+    TweetDeck)
+-   **CytecK** Me pasan unos vídeos con un codec mpg2 que ningún editor
+    de mac/Pc se lo traga y el puto Pitivi para linux si \#epicwin (7:36
+    AM - 8 Mar 12 via Twitter for Mac)
+-   **Dylan\_Coakley** Must give some thanks and praise to the Pitivi
+    video editor, saved my ass because OpenShot kept corrupting my .ogv
+    files! \#Pitivi (4:33 AM - 8 Mar 12 via Ubuntu)
+-   **ubuntufanatic** Hmm, my trials creating my Speed Dreams video
+    suggest that Pitivi may be the best video editor for Linux, even
+    despite the trajic name... (12 Feb 2012)
+-   **marce34** @savermsx Los últimos podcasts los he hecho con Pitivi y
+    va bastante bien (6 Feb 2012)
+-   **julinux** No he encontrado ningún editor de vídeo más rápido y
+    sencillo que Pitivi, es una maravilla de verdad (nivel amateur por
+    supuesto) (11 Sept 2011)
+-   **altnative**
+    Ubuntuについてる「Pitivi動画エディタ」が意外に使えることが判明。flvを食わせると落ちるけど、他の形式だとサクサク編集できる。WindowsMovieMaker2と似たUIなので馴染みやすい。(1
+    Sep 2011)
+-   **Valkyri9** Pitivi 1.4.2 has come a long way - hooray for video
+    effects and basic transitions! Another reason I don't need M\$ crap!
+    Pitivi.org (31 Aug 2011)
+-   **zeenix** new Pitivi UI is much more intuitive (at least now i can
+    do basic stuff without reading lots of docs) (29 Aug 2011)
+-   **gustawho** Editar videos con Pitivi + Publicarlos en FB con
+    Shotwell = Win absoluto. (14 Aug 2011 via web)
+-   **paxnovem** Pitivi just released a new version! Thank you
+    @thiblahute @nekohayo you guys are really turning this project
+    around (13 Aug 2011)
+-   **leighblackall** Pitivi video editor is working great on my new
+    Ubuntu install!! <http://j.mp/5DvY7b> love it when free software
+    works better than paysoft (23 Jul 2011)
+-   **LinuxBird** Vi presentiamo il nostro video promo realizzato con
+    \#Gimp e \#Pitivi :) <http://vimeo.com/26108682> \#videoediting (7
+    Jul 2011)
+-   **Wolfdale64** Pretty impressed the Pitivi video editor in Linux can
+    leverage multiple cores. (24 Jun 2011)
+-   **MarceloGomezG** Pitivi 0.14.0 por fin se está poniendo a la
+    altura. (24 Jun 2011)
+-   **frefro** \#Pitivi, en \#Ubuntu, hace todo lo que un usuario común
+    necesita! (14 Jun 2011)
+-   **CabeludoPLC** Pitivi está bastante usable \#linux (13 Jun 2011)
+-   **omaregan** wow, Pitivi renders to vp8 very cool indeed (2
+    Jun 2011)
+-   **oleg\_mangutov** Wow! Editing video in Pitivi is so easy: 4 hours
+    from 03:00 to 07:00 am and afterparty video is ready. (29 May 2011
+    via web)
+-   **Cehars** Pitivi sen ne güzel şeymişsin öyle.. :) (9 May 2011)
+-   **diipad** Ohh vaya que grato es el uso de Pitivi, se los recomiendo
+    mucho a esos usuarios que editan video para Vlogs y esas cosas,
+    desde LINUX. (7 Apr 2011)
+-   **dtumelero** estou editando um video no Pitivi, por ser a 1ª vez
+    que mecho parece ser bem simples de usar e tem recursos
+    interessantes (3 Apr 2011)
+-   **silveira** Pitivi tá muito bom. tem seus bugs mas tá quebrando um
+    galhão (2 Apr 2011)
+-   **Spirotot** Using the simple, yet powerful \#Pitivi video editor on
+    \#Ubuntu to mux/render my \#buffer \#overflow tutorial... Solid
+    program. (31 Mar 2011)
+-   **mahmoudhossam** Pitivi is now my official video editing software
+    :) (8 Feb 2011)
+-   **spouyllau** monte des films avec \#Pitivi sous Ubuntu : dv, ogg,
+    flash : très bon (enfin) ! (29 Jan 2011)
+-   **jaimekristene** I think quite a few people are going to give
+    Pitivi another chance after my talk here at \#lca2011 gotten some
+    positive feedback about it. (24 Jan 2011)
+-   **floydwilde** Pitivi has turned out to be the linear digital video
+    editor that works best for me, tried it on ubuntu lucid and mav. (18
+    Jan 2011)
+-   **irabinovitch** Played with Pitivi, Lives, & Kino for some video
+    editing tonight. Maybe Im just dense but I could only figure out how
+    to do it with Pitivi. (4 Jan 2011)
+-   **pixelot** Rendering a snowmobiling video in \#Pitivi. Pretty
+    impressive—a bit buggy, but probably my favorite \#Linux video
+    editor so far. (Dec 24 2010)
+-   **escalant3** Vaya maravilla el Pitivi. Necesitaba pegar cuatro
+    vídeos, nunca lo había usado y lo tengo listo en 5 minutos. Eso es
+    usabilidad... y libre! (Nov 18 2010)
+-   **BadWolf42** Now if only Pitivi did GPU encoding this would go
+    much, much faster. Still, can't argue with the price! (10 Nov 2010)
+-   **BadWolf42** So I WAS going to buy video editing software for my HD
+    video, but it turns out that Pitivi in Ubuntu does it for free! WIN
+    (10 Nov 2010)
+-   **ReneMolenaar** been fighting all day long with ffmpeg/mencoder to
+    convert from OGV to FLV....until I tried Pitivi...that program
+    rocks!! (9 Nov 2010)
+-   **rv** Avec Pitivi on peut encoder les vidéos en WebM. Ça va faire
+    plaisir à @LordTonPere ça. \#LibérezVP8 ! (9 Nov 2010)
+-   **creationix** xVidCap + Inkscape + Pitivi actually make a great
+    combo for screencasting in linux. (7 Nov 2010)
+-   **bpxdev** Loving the Pitivi video editor at the moment, so simple
+    yet so powerful (Thu Aug 05 2010 10:34:12 (EDT) via TweetDeck)
+-   **TeraDyne** You know, after using it for a while, I think I find
+    Pitivi to be superior to Windows Movie Maker for my needs. :p (Wed
+    Aug 04 2010 05:22:22 (EDT) via web)
+-   **carlopiana** First time ever I have used Pitivi, and it's quite
+    easy for basic video editing once you grasped the basic (RTFM,
+    Carlo, RTFM!) (Fri Jul 30 2010 10:49:09 (EDT) via identica)
+-   **bigdaddymerk** Pitivi is a great open source video editor for
+    Linux, really impressed with it. (Sun Jun 20 2010 18:55:15 (EDT) via
+    dabr)
+-   **dylanmccall** Just found \#Pitivi's Quick Start Manual. Wow, it's
+    great! I hope that gets shipped with it some day. Maybe a \#Mallard
+    version? :) (Sat Jun 12 2010 00:32:06 (EDT) via Identica)
+-   **murilomachado** editando o \#tcc no \#Pitivi. Cativante pela
+    simplicidade. Recomendo! \#linux \#softwarelivre (Sun May 30 2010
+    13:02:41 (EDT) via web)
+-   **yaxu** Loving Pitivi for simple video editing
+    <http://www.pitivi.org/> (Thu May 27 2010 11:10:50 (EDT) via web)
+-   **MacoLabels** Just installed Pitivi Movie Editor (
+    <http://www.pitivi.org/> )on Ubuntu. Can't believe it's free. (Tue
+    May 25 2010 12:12:58 (EDT) via web)
+-   **RaiHS**
+    <http://blog.narendrasisodiya.com/2010/05/kids-says-linux-is-easy.html>
+    kids were able to cut-join Videos using \#Pitivi video editor (Sat
+    May 22 2010 05:10:22 (EDT) via web)
+-   **for\_django** I'm actually using Pitivi to cut some video. An app
+    this simple is pretty much my speed for this particular task. (Tue
+    May 18 2010 14:50:13 (EDT) via identica)
+-   **rtrappe** Installed Ubuntu 10.4. Great software! And finally Gnome
+    has an usable video editor. Happy to forget all my ffmpeg knowledge.
+    \#Pitivi (2:58 AM May 16th via Gwibber)
+-   **gbarrero** \#Pitivi me salvó la vida jejeje ... I love \#Ubuntu
+    10.04 ;-) (7:45 PM May 6th via Gwibber)
+-   **ryanprior** I just made my first video using \#Pitivi on \#ubuntu,
+    good experience! So much nicer and easier than \#OpenShot, which I
+    had been using. (4:19 PM May 4th via Identica)
+-   **neried7** @jonobacon i love Pitivi, it's fanfrickintastic. (9:21
+    AM Apr 22nd via BarnOwl in reply to jonobacon)
+-   **jonobacon** Playing with Pitivi which we now ship on a default
+    Ubuntu 10.04 installation - it is absolutely fantastic! Great work
+    @bilboed (12:19 AM Apr 22nd via Gwibber)
+-   **Wrinkliez** first time trying anything video-editing-related. what
+    im finding is that Pitivi is really all I need— and that kdenlive is
+    buffy as fuck (2:08 PM Apr 17th via API)
+-   **BranchPlan** Just did small experiment with \#Pitivi in \#ubuntu
+    lucid. Replaced audio of video with song (example content). Worked
+    well and v. easy. (1:46 PM Mar 30th via identica)
+-   **tristan\_2468** The new Pitivi video editing software in \#Ubuntu
+    is seriously impressive. (11:08 AM Mar 29th via Gwibber)
+-   **zootm** @rubzo I found Pitivi (out some name similar too that)
+    surprisingly decent. I didn't have huge requirements though. (7:54
+    AM Mar 28th via Seesmic in reply to rubzo)
+-   **castrojo** @bilboed - Took some video this weekend with my Nexus,
+    mnted it, imported, shuffled things, added music. And done. \#Pitivi
+    ftw. (4:23 PM Mar 24th via Gwibber)
+-   **lucasratmundo** Pitivi 0.13.4 is a really nice release. I only
+    miss some basic transitions and video adjustments (brightness,
+    saturation, contrast, etc). (6:05 PM Mar 21st via web)
+-   **monsterjavaguns** Played a bit with Pitivi - I'm actually pretty
+    impressed. Thought that project had been abandoned. Still doesn't do
+    everything I need, tho (2:55 PM Mar 11th via web)
+-   **thezub** I've been experimenting with video editors. Really loving
+    Pitivi. <http://www.pitivi.org/> \#gnu \#linux \#Pitivi \#gstreamer
+    \#freesoftware (9:54 AM Mar 7th via web)
+-   **acruiz** I'm finally managing to put together my first screencast
+    with \#Pitivi and \#gtk-recordmydesktop! (12:14 PM Feb 20th from
+    web)
+-   **tueqtle009** Just compiled a video with Pitivi. Unlike Movie
+    Maker, it allows the user to choose the output format. I prefer
+    Theora to WMV. (8:51 AM Feb 19th from Echofon)
+-   **inorman88** OH MY GAWD! I found a video making program that will
+    handle [5D Mark II 1080p video](http://vimeo.com/9460793) out of the
+    box. And it's open source for linux. Pitivi (8:05 PM Feb 14th from
+    web)
+-   **bercolax** Pitivi rocks in editing screencasts... Tried it in
+    Ubuntu <http://www.pitivi.org/> (9:49 PM Feb 5th from web)
+-   **yibble** Having some fun with Pitivi... Finally, simple video
+    editing for GNU/Linux that doesn't require any actual pro' courses
+    before using. (2:12 PM Jan 25th from HootSuite)
+-   **ColinMacD** Wow, I just edited a video on linux and it wasn't a
+    complete nightmare. Easy and a joy infact! \#Pitivi is amazing!
+    (2:05 PM Jan 8th from Mauku)
+-   **zylogz80** \#Pitivi is soooo cool! Like iMove for Linux. Very
+    impressed! (5:46 PM Dec 31st, 2009 from web)
+-   **F1LT3R** Just discovered Pitivi the .ogg video editor for Gnome.
+    “It just works!” And it just works very well. <http://bit.ly/rNzxM>
+    (5:49 PM Nov 28th, 2009 from TweetDeck)
+-   **rysiekpl** Pitivi and UbuntuStudio are absolutely, positively,
+    \*awesome\*! plus VLC and you get a full-blown video production and
+    streaming solution! :) (4:13 PM Nov 28th, 2009 from identica)
+-   **EugeniaLoli** What does my mother, Pitivi, Kodak and Linux have in
+    common? Find out
+    [here](http://eugenia.gnomefiles.org/2009/11/27/kodak-digicam-hd-editing-with-pitivi/)
+    ;-) (9:09 PM Nov 27th, 2009 from web)
+-   **pantoniades** needed a simple & easy video editing tool, and
+    \#Pitivi was perfect for the job. (9:44 AM Aug 14th, 2009 from
+    Gwibber)
+-   **herrsteiner** \#Pitivi helped me to convert a video to \#ogg
+    \#theora which I strangly couldn't convert on commandline without
+    loosing the audio (7:31 PM Aug 13th, 2009 from web)
diff --git a/docs/Project_history.md b/docs/Project_history.md
new file mode 100644
index 0000000..04c4adf
--- /dev/null
+++ b/docs/Project_history.md
@@ -0,0 +1,50 @@
+# Project history
+
+* [Wikipedia's page] is currently more complete than this page. The goal
+here is to explain, eventually, some events and design decisions
+(without needing to cite everything). You can see the overall project
+activity throughout the years [on Ohloh].*
+
+PiTiVi was started in 2004 as an “end of studies” project by Edward
+Hervey and his classmates at the French computer engineering school
+Epitech. The “PiTiVi” name came from the combination of “Epitech” and
+“TV”.
+
+In 2005-2007, development stalled due to various factors, including the
+fact that Edward (the only active PiTiVi developer at that time) was
+hired by Fluendo to work on GStreamer. Improving GStreamer was necessary
+in order for PiTiVi to be usable, but this meant that PiTiVi did not get
+as much direct development attention. During that time, PiTiVi was also
+rewritten in Python (it was initially written in C). A more detailed
+[explanation] can be read in this blog post by Edward in 2007.
+
+In early 2008, it was decided that PiTiVi had outgrown its original
+design specifications and needed to be re-architected. The result was
+the [2008 Architectural Redesign]. In late 2008/early 2009, it was
+[announced] that Collabora Multimedia would invest developer time in
+improving PiTiVi (and hire [additional developers] to accelerate its
+pace). The results of Collabora's help on that front were dramatic, as
+can be seen in the significant amount of commits in 2009-2010.
+
+In late 2009/early 2010, the [GES] library was created to address many
+architectural problems around non-linear editing with GStreamer.
+Starting in 2011, efforts on the PiTiVi side have been focused on
+porting to GES, cleaning and stabilizing the whole stack (PiTiVi, GES,
+GNonLin, GStreamer and related technologies like GObject introspection)
+while fixing longstanding bugs and adding new features.
+
+As part of a website and branding facelift in 2013, the traditionally
+camel-cased “PiTiVi” name was [changed] to simply “Pitivi”.
+
+To this day, the project lives on, thanks to the continued efforts of
+[many dedicated people].
+
+  [Wikipedia's page]: http://en.wikipedia.org/wiki/PiTiVi
+  [on Ohloh]: https://www.ohloh.net/p/pitivi
+  [explanation]: http://blogs.gnome.org/edwardrv/2007/07/01/is-that-a-video-editor/
+  [2008 Architectural Redesign]: design/2008_design/2008_Architectural_Redesign.md
+  [announced]: http://blogs.gnome.org/uraeus/2008/10/09/supporting-pitivi/
+  [additional developers]: http://blogs.gnome.org/uraeus/2008/12/02/new-team-member/
+  [GES]: GES.md
+  [changed]: https://bugzilla.gnome.org/show_bug.cgi?id=705756
+  [many dedicated people]: https://www.ohloh.net/p/pitivi/contributors/summary
diff --git a/docs/QA_Scenarios.md b/docs/QA_Scenarios.md
new file mode 100644
index 0000000..06c458f
--- /dev/null
+++ b/docs/QA_Scenarios.md
@@ -0,0 +1,338 @@
+These QA Scenarios are here to check the expected behaviours of Pitivi
+under many situations.
+
+If you see a problem in one of them, [Create a
+task](Bug_reporting.md) on Phabricator, indicating:
+
+-   which QA Scenario doesn't go through,
+-   (optionnaly) the media files you used,
+-   At which step it failed and what happened
+-   Which version of Pitivi was used
+
+# Standard QA Scenarios
+
+## Test Import
+
+1.  Start Pitivi
+    -   Pitivi should appear
+2.  Choose Import from Toolbar
+    -   Import Sources Dialog should appear
+3.  Select Several Sources and click the “Import Button”
+    -   Sources should appear in the sourcelist, or the import warning notification should appear
+    -   Icons on files with video data should be shown
+4.  Select one clip in the file browser and press the “insert” key
+    -   the clip should be inserted at the end of the timeline
+5.  Select two files (using shift- or control-click) and press the “insert” key
+    -   Both clips are inserted at end of timeline in the order in which they are sorted in the clip browser.
+6.  Drag and drop one file from the clip browser to the timeline
+    -   An instance of the clip should appear under the cursor as soon as it enters the timeline.
+    -   When the button is released, the clip should remain in the timeline at the location it was dropped.
+7.  Select several clips in the clip library and drag them to the timeline, but do not release the mouse
+    -   The clips should appear in the same order that they are sorted in the timeline under the cursor, as 
in (5)
+8.  Move the pointer outside of the timeline area
+    -   Pitivi should remove the clips from the timeline
+9.  Move the pointer back inside the timeline area
+    -   The clips should re-appear as they were before being removed
+10. Release the mouse within the timeline.
+    -   Make sure the clips are added at the mouse position.
+11. Repeat steps 8 and 9, then release the mouse button outside the timeline
+    -   Make sure that no clips are added to the timeline
+12. Add several instances of a factory to the timeline
+13. Choose Project &gt; “Remove from Project” to remove the clip from the timeline
+    -   Make sure every instance of the factory is removed from the timeline.
+
+
+## Test Preview
+
+1. Start with at least two clips in the timeline.
+2. Press 'Play/Pause' button on the viewer.
+    - Playback button icon should change from 'Play' to 'Paused'
+    - Watch the preview output carefully. There should be no glitche
+    - When the playhead crosses clip boundaries, playback should remain smooth
+    - When the playhead moves off-screen, the timeline should scroll to center the playhead in the window.
+3. Press the 'Play/Pause' button on the viewer again.
+    - Playback should immediately cease.
+4. Scroll the timeline so that the playhead moves off screen (increase zoom level if necessary)
+    -   The timeline scroll position should not jitter, nor snap back to the playhead while the playhead is 
paused.
+5. Repeat (2) - (4), using the keyboard shortcuts
+6. Repeat (2) - (4) alternating alternating between using the playback button and the keyboard shortcuts.
+    -   In particular, make sure the icon on the play/pause button is updated properly.
+7. Click and drag on the volume curve on one of the clips. Move it to just above the bottom of the clip.
+8. Play that portion of the clip
+    - The volume should sound softer
+
+## Test Audio-Only Clips
+
+-   add at least one video track to timeline
+-   add and audio clip to the timeline
+
+## Test Still Images
+
+## Test Ruler
+
+1. Start with at least one clip in the Timeline
+2. click on the timeline ruler.
+    - The timeline playhead marker should appear under the mouse pointer
+    - The viewer should display the timeline at the timestamp represented by the playhead
+3. Scrub the mouse over the ruler
+    - The playhead should track the mouse position closely
+    - The viewer should update continuously while the mouse is moving
+
+## Test Clips
+
+1. Start with at least two clips in the timeline
+2. Click and drag the middle of one of the clips.
+   -   the trimming handles at the start and end of the clips should hilight as the mouse moves over them
+   -   the clip should move smoothly, even when vigorously scrubbed back and forth
+   -   the viewer should not update during this operation **this will change when we support live previews**
+   -   if thumbnails are enabled, they should appear properly even while the clip is being moved
+   -   the clip should snap to the edges of other clips, but not to its original coordinates
+   -   check that audio track moves downward so that tracks do not intermingle
+   -   when moved beyond the edges of the timeline window, the timeline should scroll
+   -   when moving leftward from the right edge (end) of the timeline, there should be no change in scroll 
position unless the clip moves past the left edge of the timeline.
+   -   you should not be able to move the start of the clip past the beginning of the timeline
+   -   at all times the shaded portion of the timeline ruler should show the true length of the entire 
timeline.                                                               |
+3. Click and drag the middle of one of the clips in the top-most, moving it up and down.
+   -   The layer position of the clip in the track should change
+   -   The track containing the clip should expand (pushing all clips lower tracks downward).
+   -   The vertical position of layers and controls adjacent to the timeline should update to match          
                                                                  |
+4. Click and drag the left handle of a movie clip (not a still image)
+   -   Only the left handle should highlight as the mouse moves over it
+   -   The start point of the clip should be trimmed as closely as possible to the mouse position
+       -   You should not be able to expand the clip beyond its native duration
+       -   You should not be able to move the handle beyond the right edge of the clip
+   -   When the start keyframe of an audio clip moves out of view, a “remote handle” should appear matching 
its vertical position.                                             |
+5. Repeat step (4) for the right handle of the same clip
+6. Double click on the volume curve on one of the audio clips (preferably one with start &gt; 0)
+    A new key frame control point should appear under the mouse location
+7. Click and drag the key frame
+    The curve should change shape as the key frame moves
+8. Position the playhead at the start of this clip and press play
+    The volume of the clip should rise and fall with the keyframe curve.
+9. Double click the keyframe control point
+    The control point should disapear
+10. Double click both the start and end points
+    These points should never disappear
+11. Trim the start of the clip
+12. Double-click the volume curve
+    - Make sure the new keyrame appears in the correct location, right under the mouse pointer.
+
+## Test Zooming
+
+1. Start with at least one clip in the timeline
+2. Zoom in and out using the buttons on the toolbar
+   -   Clips should resize appropriately
+   -   The zooming should have a smooth feel to it
+   -   The scroll position should adjust to keep the playhead as close to the center of the window as 
possible
+   -   If thumbnails and waveforms are enabled, they should update quickly
+   -   The ruler's tick marks should adjust to the new zoom ratio
+   -   Both the scroll wheel and the tool bar buttons should have the same effect                            
   |
+3. Repeat step (2) moving the cursor over the timeline ruler and turning the mouse scroll wheel back and 
forth.
+
+## Test Selection
+
+1. Start with at least 3 clips in the Timeline
+2. Click a clip to select it
+   -   The clip should tint to the selection color to indicate that it is selected.
+3. Click another clip
+   -   This clip should become selected, and the old clip deselected.
+4. Shift+Click on a third clip
+   -   Both the second and third clips should now be selected
+5. Click-and-drag the middle of one of the selected clips
+   -   Both selected clips should move in unison, and their distance from each other should remain unchanged
+6. Ctrl+Click on one of the two selected clips
+   -   This clip should be deselected, but the other clip should still remain selected
+7. Click and Drag on blank canvas
+   -   The marquee should appear between the initial mouse-down coordinates and the current location of the 
cursor
+   -   When the mouse is released, all the clips touching the marquee should be selected
+   -   Make sure that thumbnails are drawn properly under the marquee (no smearing or other distortions).    
       |
+
+## Test Roll Editing
+
+1. Start with at least four clips in the timeline, arranged so that there are no gaps between them. These 
clips will be referred to as A, B, C, D going from left to right.
+  -   The end of clip A should be trimmed about 50% from the true end of the clip
+  -   Clip B should be longer than clip A
+  -   The start of clip B should be about trimmed 25% from the true start of the clip
+  -   Clips C, and D and should be left alone                                                                
                                                               |                                              
                                                                     |
+2. While holding shift, click-and-drag the end handle of clip A
+   -   The end of clip A should be trimmed in sync with the start of clip B
+   -   Make sure the start handle of clip B is clamped between the true start of clip B and the end handle 
of clip B
+   -   Make sure the end handle of clip A is clamped between the true end of clip A and the start of clip A  
         |
+3. Repeat step (2) using the start-handle of clip B.
+   -   The behavior should be identical.
+4. Arrange the clips so that A and B are on the same layer, while C and D are on different layers, but 
snapped to the end point of clip A
+5. Clear the selection
+6. Repeat steps (2) and (3)
+   -   Only clips A and B should be affected by the roll edit
+7. select clips C and D
+8. Repeat steps (2) and (3)
+   -   Only clips A, C, and D should be affected by the roll edit
+
+## Test Ripple Editing
+
+1. Start with at least four clips in the timeline, arranged so that there are no gaps between them. These 
clips will be referred to as A, B, C, D going from left to right.
+  -   The end of clip A should be trimmed about 50% from the true end of the clip
+  -   Clip B should be longer than clip A
+  -   The start of clip B should be about trimmed 25% from the true start of the clip
+  -   Clips C, and D and should be left alone                                                                
                                                               |                                              
                                                                     |
+2. While holding control, click-and-drag the end handle of clip A
+   -   Clips B-D should move relative to the end handle of clip A
+   -   Make sure the end handle of clip A is clamped between the true end of clip A and the start of clip A  
         |
+3. While holding control, click-and-drag the start handle of clip D
+   -   Clips A-C should move relative to the start handle of clip D
+   -   Make sure the start handle of clip D is clamped between the true start of clip D and the end handle 
of clip D  |
+4. Arrange the clips so that A and B are in the same layer, while C and D are on different layers, but 
snapped to the end point of clip A
+5. Clear the selection
+6. Repeat (2) and (3)
+    -   Only clips A and B should be affected by the ripple edit
+7. Select clips C and D
+8. Repeat (2) and (3)
+    -   Only clips A, C, and D should be affected by the ripple edit.
+9. Arrange clips A, B, C, D so they appear in sequence, left to right
+
+10. Select clips A, B
+    -   Make sure clips C and D are deselected
+11. Begin dragging clip B
+    -   Clips A and B should be moving together
+12. While dragging, press and hold the shift key
+    -   Clips C, and D should now be moving with clips A and B, preserving the original offsets
+13. Move the mouse as far as possible to the left
+   -   It should not be possible to set the start time of clips A, B, C or D less to less than 0
+   -   While ripple mode is engaged, the relative offsets of clips A, B, C, and D should remain constant     
         |
+14. While continuing to drag, release the shift key
+    -   Clips C and D should return to their original positions
+
+## Test Slip-and-Slide Editing
+
+## Test Delete
+
+1. Start with an empty timeline
+   -   The delete button should be insensitive
+2. Add at least 3 clips to the timeline
+
+3. Select one clip
+   -   The delete button should be come sensitive
+4. Press Delete
+   -   The selected clip should be removed from the timeline
+   -   The delete button should become insensitive                 |
+5. Select at lest two more clips, and press delete
+   -   All the selected clips should be removed from the timeline
+   -   The delete button should once again become insensitive      |
+
+## Test Group / Ungroup
+
+## Test Link / Unlink
+
+1. Start with at least 3 clips in the timeline and the selection cleared
+    -   The 'Link' command button should be insensitive
+    -   The 'Unlink' command button should be insensitive
+2. Select two of the clips
+    -   The 'Link' command button should become sensitive
+    -   The 'Unlink' command button should remain insensitive
+3. Press the 'Link' command button
+    -   The 'Link' command button should become insensitive.
+    -   The 'Unlink' command button should become sensitive.
+4. Move both of the linked clips in turn
+    -   Moving either clip should cause both linked clips to move in unison
+5. Clear the selection
+    -   Both 'Link' and 'Unlink' commands should be insensitive.
+6. Select one of the linked clips
+    -   The 'Unlink' command should be sensitive
+8. Add a clip that is not linked to the selection
+    -   The 'Link' commands should be sensitive
+    -   The 'Unlink' command should be insensitive
+9. Press the 'Link' command
+    -   The 'Link' command should now be insensitive
+10. Click and drag all three linked clips
+    -   Dragging any of the linked clips should cause all three to move in unison.
+11. Select just one of the linked clips and press 'Unlink'
+    -   The Link and Unlink commands should be insensitive
+    -   Moving this unlinked clip should not affect either of the two linked clips
+    -   Moving either of the linked clips should not affect the unlinked clip
+12. Select the two remaining linked clips in the timeline.
+    -   The link command should be insensitive
+    -   The unlink command should be sensitive
+13. Press the 'Unlink' command
+    -   The link command should be sensitive
+    -   The unlink command should be insensitive
+14. Move each of the three clips involved in this test in turn.
+    -   All of the clips should now move independently
+15. Create two groups of linked clips, call them A and B
+16. Select one clip each from A and B
+    -   The link command should be sensitive
+17. Press the link button
+    -   The unlink command should be sensitive
+    -   All the clips in A and B should now be part of the same link (clicking and dragging on any of them 
will move all of them)
+19. Delete one of the linked clips
+    -   It should be removed from the timeline, but the others should remain
+    -   Make sure the other clips are still linked together
+    -   Make sure no tracebacks appear on console
+20. Select and delete at least two linked clips
+21. Select the and delete the remaining linked clips and at least one non-linked clip
+    -   Make sure there are no tracebacks
+
+## Test Split
+
+1. Start with at least one clip in thee timeline.
+    -   Make sure you are somewhat familiar with it, so that you can spot problems during playback.
+2. Click the razor tool
+    -   a vertical trimming bar should appear across the timeline at the horizontal mouse position.
+3. Click somewhere on the clip
+    -   The clip should be divided into two clips at the mouse position
+4. Preview the timeline
+    -   Playback across the two pieces should be identical with the original clip.
+5. Repeat (2) - (4) on each of the half of the clip, leaving a total of four clips
+    -   Playback across all four pieces should be identical with the original clip.
+6. Click the razor tool
+    -   The vertical bar should appear as before
+7. Click the razor tool again (to deactivate the razor tool)
+    -   The vertical trimming bar should not be visible when the pointer moves over the canvas
+8. Click on a clip
+    -   The clip should become selected
+    -   The clip should not be split
+9. Position the playhead somewhere in the middle of a clip
+    -   when the mouse moves near the playhead, the trimming bar should snap to the position of the playhead
+10. With the trimming bar locked to the playhead, click on the clip.
+    -   Make sure that the clip is split exactly at the playhead position (not at the mouse position). Zoom 
in, if necessary, to verify this.
+11. Add several keyframe control points to an audio clip's volume curve, and adjust them so that the curve 
forms a distinctive pattern.
+12. Split this clip
+    The keyframe curve should be duplicated exactly. Verify this by extending both halves of the clip to 
full length and comparing the shape of the curves.
+
+## Test Rendering
+
+## Test File Load and Save
+
+1. Start with several clips in the project and timeline.
+    -   Make a few edits
+2. Save the project
+3. Take a screen-shot of the timeline
+4. Reload the project
+    -   The project should match the screen-shot exactly
+5. Make a small change to the project and then save it. Take a new screenshot
+    -   The save-as dialog should not appear.
+6. Choose save-as
+    -   The save-as dialog should appear -   The current folder of the save-as dialog should be the same 
folder as the current project
+7. Attempt to overwrite the current project
+    -   The overwrite confirmation dialog should present itself
+8. Choose cancel
+    -   Check the modification date/time of the file to make sure it was not overwritten.
+9. Try to overwrite the current file, this time choosing “Ok” from the confirmatino dialog
+    -   Check that modification date/time of the file to make sure it has been overwritten
+10. Continue working with the file
+    -   Verify that all of Pitivi other functions still work correctly on the loaded file.
+
+## Test New Project
+
+-   create a complicated project
+-   hit new
+-   repeat standard test suite
+-   test keyboard shortcuts
+    -   try to locate a specific frame using only the keyboard
+
+## Test Preferences
+
+# User provided Scenarios
+
+If you want to propose a QA Scenario, Create a page (Called
+'`User QA Scenario ##`') and link it here. After reviewing of the steps
+and expected behaviours, it will be moved in the above category.
diff --git a/docs/Roadmap.md b/docs/Roadmap.md
new file mode 100644
index 0000000..6671cc1
--- /dev/null
+++ b/docs/Roadmap.md
@@ -0,0 +1,360 @@
+# Roadmap
+
+This is intended to be a **general overview** of the very
+important or big features/improvements we are working on, or planning.
+For a list of smaller features see [fun tasks for
+newcomers](https://phabricator.freedesktop.org/project/view/111/).
+
+What keeps us busy in general?
+
+-   **Fixing bugs**. Improving reliability and ease of use is never
+    “done”. We have
+    [tons](https://phabricator.freedesktop.org/tag/pitivi/) of work.
+    [Help](http://www.Pitivi.org/?go=contributing) is very welcome!
+-   **Improving GStreamer**. This benefits not only Pitivi, but other
+    multimedia applications as well.
+-   **Working on features**: Until we reach [1.0](releases/1.0.md), only
+    if they improve stability.
+
+# High-level roadmap
+
+Any time estimates here are mostly wild guesses. Do not treat them as
+hard deadlines. This aims mostly at giving an idea of how milestones
+follow each other.
+
+-   2016 Q2: release [0.96](releases/0.96.md) with a focus on
+    stabilization and accuracy through proxy files
+-   2016 Q4 or 2017 Q2: release [1.0](releases/1.0.md) with ponies and
+    rainbows
+
+See [Current events](Current_events.md) for past items.
+
+# Major features
+
+## Plugin system
+
+-   Status: planning.
+-   **This is very important**. A plugin would have access to the entire
+    app. Being in Python, it will be extremely easy to quickly write
+    useful plugins without having to compile anything. Pitivi plugins
+    will allow manipulating the timeline clips and clip effects
+    automatically, thus allowing great flexibility for custom solutions.
+    See the [tasks blocked by
+    T3193](https://phabricator.freedesktop.org/T3193) for a few examples
+    where this will be useful.
+
+## Motion ramping/time stretching
+
+-   Status: started
+-   See [T2344](https://phabricator.freedesktop.org/T2344)
+
+## Effects
+
+-   We need to create custom (“hand-made”) interfaces for some effects
+    so that they can be easier to use. See
+    [T3263](https://phabricator.freedesktop.org/T3263)
+
+## Advanced layer management
+
+-   See [T2642](https://phabricator.freedesktop.org/T2642#85395)
+
+## A better title editor
+
+-   The current title editor UI is very simple. Please join us to make
+    it work up to your expectations! See the existing
+    \[<https://phabricator.freedesktop.org/maniphest/?statuses=open>()&projects=PHID-PROJ-ext-TITLEEDITOR\#R
+    title editor tasks\].
+
+## MAM/DAM
+
+-   [Digital asset
+    management](http://en.wikipedia.org/wiki/Digital_asset_management)
+    is the ability to manage huge amounts of media (video clips, sounds,
+    images, etc.). This feature is very much needed for professional
+    editing; it allows handling multiple simultaneous camera angles,
+    multiple takes of the same scene, multiple sound sources, etc.
+-   Potentially being addressed by the Novacut team with
+    [dmedia](https://launchpad.net/dmedia)
+
+## Hardware-accelerated decoding and encoding
+
+-   Since GStreamer 1.2, the basic infrastructure allowing us to cleanly
+    take advantage of the video decoding capabilities of modern graphic
+    cards is there. We need to ensure that our planned usecases are
+    properly supported with the most common graphic drivers (through
+    VA-API) and to make the integration work in Pitivi.
+
+## Proxy editing
+
+-   See [proxy editing
+    requirements](design/Proxy_editing_requirements.md) for the “spec”
+    of how this feature should behave
+-   See [T2455](https://phabricator.freedesktop.org/T2455)
+# Proxy editing requirements
+
+See [T2455](https://phabricator.freedesktop.org/T2455) to learn about
+proxy editing and why we want this in [GES](GES.md) and Pitivi.
+This page is meant to brainstorm:
+
+-   User interface/user experience (UX) possibilities and requirements
+-   GES API requirements deriving from that. This also touches on media
+    assets management in general.
+
+Prior art if you don't know what proxy editing “feels” like:
+
+-   [In Edius](http://www.youtube.com/watch?v=SyUvp0YqLpc). This is an
+    interesting example of a badly designed UI: pretty much all the
+    options/preferences presented there are useless, the application
+    should be smart enough to make those choices!
+-   [In FCP X](http://www.youtube.com/watch?v=MnZx3JxoR-A) (alternative
+    [longer version](http://www.youtube.com/watch?v=aL7gE-my4_c))
+-   [In Sony Vegas](http://www.youtube.com/watch?v=4PE6tDjgDEY)
+-   Others we should be looking at in particular? Some particularly
+    great (short and to the point) video tutorials of other apps we
+    ought to see? Let us know.
+
+# User experience
+
+As [T2455](https://phabricator.freedesktop.org/T2455) indicates, we can
+envision two types of user experience: a semi-automatic and a
+fully-automated one. Since Pitivi is not the only application (now and
+in the future) using GES, we need to design the GES API to be flexible
+enough to accomodate the design needs of both kinds of applications.
+
+In both cases, the experience must be:
+
+-   Intuitive: it should be a very easily discoverable feature
+-   With good visual indications of the process and progress. We should
+    probably have some sort of “yellow/green light” (red for errors)
+    icons somewhere near each clip in the media library to indicate the
+    status of individual proxies. Remains to be seen how we can do this
+    with iconview mode and listview mode without going insane.
+-   Fluid, with no negative performance impacts from the act of
+    generating the clip “proxies”
+
+## Icons representation
+
+Since the Media Library's iconview is meant to be compact and
+minimalistic (and has a fair amount of technical limitations), we could
+use the following icon metaphor system to indicate the states of proxies
+for assets:
+
+  Status icon   Icon's opacity   Thumbnail's opacity   Meaning
+  ------------- ---------------- --------------------- 
----------------------------------------------------------
+  None          N/A              100%                  Proxies are disabled for this asset
+  Gears/sync?   100%             50%                   A proxy is currently being generated for this asset
+  Checkmark     70%?             100%                  Proxies are present and ready for this asset
+  ⚠ (warning)   100%             100%                  The proxy could not be generated for this asset
+  ⚠ or X        100%             50%                   A proxy file is present, but the original file is 
absent
+
+## Manual/semi-automated UX
+
+In this mode, users would manually select which assets/clips use
+proxies, and when the proxies are generated. There would be no
+“automated” background processing. This is probably not what we want in
+Pitivi in terms of the default user experience, however the GES API
+should support that scenario. We could still provide this feature in
+pitivi by:
+
+1.  Having an option in the preferences, under the “Performance”
+    section: “Automatically create proxies for clips in the media
+    library”
+2.  If that option is disabled, show a toolbar button in the media
+    library that, when clicked, generates the proxies for selected
+    clips.
+
+However this also means temporarily providing a “Cancel” button while
+those clips' proxies are being generated. Additionally to the “status
+lights” icons mentioned earlier, we could perhaps show a progressbar
+(with a “Stop” button on its right) below the media library (similar to
+when we're importing clips).
+
+Jakub commented:
+
+> “Semi-automatic - I don't grok this experience. Why would I want to
+> explicitly hold the burden of being a transcoding manager? I like the
+> validity checking and ability to explicitly re-render a proxy though.
+> Ran into issues in both kdenlive and FCPX where I spent ages looking
+> for a faulty proxy.”
+
+To balance things, Bassam commented:
+
+> "manual vs. automatic: however the ui is chosen, this should be a per
+> project setting, not a choice of a different application. both
+> workflows are valid, and the same person might opt for one or another
+> depending on the specifics of the project. \[...\]
+
+## Fully-automated UX
+
+Otherwise, the default behavior would be to transparently (and
+intelligently) create proxies for everything, in the background. When a
+proxy file does not exist for an asset (clip), create it and use it as
+soon as it has been created.
+
+Performance requirements in the automated scenario are even more
+important than in the semi-automated scenario; while users can expect
+some delay (as long as there is a visual progress indication) when they
+manually trigger an action, they must absolutely *not* feel
+delays/sluggishness when such actions are triggered automatically. The
+generation of proxy clips in the background should not negatively impact
+system performance.
+
+Jakub has a different opinion than Jeff's or Bassam's, suggesting (?)
+that we make proxy generation a modal (blocking, in terms of UI)
+operation:
+
+> "You mention the problem of indicating the transcoding process as if
+> you could continue working with original assets and have that not stop
+> you from editing work with original media. In case of offline editing
+> (either having assets on external drive, or networked/cloud storage),
+> the indication can be summed up to “tell me when my assets are safe to
+> disconnect and I'm able to proceed editing offline”. For low
+> performing systems, the background transcoding is just an illusion,
+> you cannot really edit until your assets are transcoded. So I think
+> both cases are best addressed by providing an aggregate progressbar
+> telling me when all assets referenced from the project are transcoded,
+> rather than colorcoding individual clips, or worrying about preview
+> overlays. \[...\] For offline editing I would agree not choking the
+> system competely with transcoding might be a good thing, but for the
+> low performing system case you want the transcoding process to take
+> the foreground so that the assets are ready sooner. You really can't
+> do any 4k editing on a laptop and expect to also transcode proxies in
+> the background."
+
+# GES API requirements
+
+## Control
+
+-   Proxies generation/processing needs to be pause-able
+    -   When pitivi starts playback (or render) and needs the system's
+        resources
+    -   When the user pauses proxy generation (in the case of the
+        semi-automated UX)
+-   Proxies generation needs to be cancel-able
+    -   When the user asks to stop generating proxies for selected clips
+        (in the case of the semi-automated UX)
+-   The ability to “force” regenerating the proxies for a given asset
+    (for whatever reason)
+-   Delete a proxy (or all proxies) for a given asset
+-   Relocate/move proxies for a given asset or for all assets
+-   Ability to manually replace an offline asset.
+
+## Data integrity checking
+
+-   Need a way to detect incomplete or invalid proxies, to handle
+    various scenarios:
+    -   The user has quit the application before it was done processing
+    -   The application crashed
+    -   The source file has changed (use a md5 on the first few bytes of
+        the file like in pitivi/previewers.py and store that hash in the
+        GES Asset?)
+
+## Signalling/notifying
+
+-   For each asset, report the proxies' encoding progress, so the
+    application UI can show progressbars or some other form of visual
+    indications
+-   Provide a way to signal to the application that an asset has its
+    original offline, or its proxy offline, or whatever situation we can
+    imagine, so the UI can let the user know about it.
+-   Tolerate and signal errors/failures.
+
+## Fault tolerance and sandboxing
+
+-   Tolerate and signal errors/failures.
+-   Processing should probably happen in a separate/sandboxed process,
+    to ensure that GES/applications can't crash because of something
+    going wrong during the processing of a proxy
+-   GES needs to handle the notion that an asset and/or any of its
+    proxies can go offline/online. For example, if the original clip is
+    not available but the proxy version is present, consider the
+    original “offline” and use the proxy version.
+    -   The way we handle “missing” media needs to change: currently
+        Pitivi just refuses to handle “partial” projects, but in theory
+        it should “deal with it”. Even if all the assets of a clip
+        (including proxies) are offline.
+    -   If an asset or its proxies were moved/renamed externally, allow
+        specifying the new location (already mostly implemented in GES
+        assets?), but don't force it. Proxies/assets for which the user
+        has not provided replacements are to be marked as temporarily
+        “offline” (we should also save info about the last time it was
+        seen, its metadata/attributes, etc.).
+
+## Additional API flexibility
+
+-   Multiple ways to handle offline assets for rendering and export:
+    -   “Draft render” mode (low quality render using only the proxies
+        instead of the original clips), as some applications might like
+        to offer that feature.
+    -   Rendering to a multimedia output file requires original assets
+        to be “online”. Otherwise, if only proxies are available, we
+        can:
+        -   Warn the user about reduced quality. If some assets have no
+            originals and no proxies, show a serious warning.
+        -   Export only an EDL (edit decision list), but that's [another
+            story](https://bugzilla.gnome.org/show_bug.cgi?id=674605)
+-   Provide a way to specify which containers, codecs and settings (ex:
+    video resolution, bitrate/quality) to use for proxies. This will
+    probably use a technology similar to what we see in Pitivi's render
+    dialogs.
+-   Allow multiple proxies per asset (for multiple resolutions, for
+    example). The application should be able to request a proxy to match
+    a particular context (ex: a maximum resolution or something); for
+    example, multicam editing could use very small versions if there is
+    a big number (ex: 16) of camera angles to be displayed
+    simultaneously. Or the media library could automatically show a
+    playing thumbnail-sized video preview when putting the mouse over a
+    clip.
+-   Ability to save, in a project formatter's data, the following
+    per-project overrides of the global app settings:
+    -   A custom folder path for the proxies for that project (see also
+        the “where to store the proxies?” item in the “outstanding
+        questions” section on this page).
+    -   Whether this project prefers fully-automated (or manual)
+        handling of proxies (Bassam said: “However the ui is chosen,
+        this should be a per project setting, not a choice of a
+        different application. Both workflows are valid, and the same
+        person might opt for one or another depending on the specifics
+        of the project.”)
+
+# Outstanding questions
+
+-   Where to store the proxies? (beyond the obvious question of disk
+    space and tidiness, there's the question of people working across
+    networks that raises interesting questions)
+    -   In pitivi we could default to the XDG user cache dir (which in
+        this case would turn out to be \~/.cache/pitivi/proxies/)
+    -   ...but Bassam insists that this can be overridden on a
+        per-project basis. So in the project settings UI, we could have
+        a checkbox to “Use a custom directory to store proxies” that
+        enables a gtk folder chooser button right besides it. Unchecking
+        the checkbox would clear the project's custom directory.
+-   Filenames of the actual proxy files depending on their location
+    (global cache folder vs project folder?). For example, if a clip is
+    called “foo.MOV”, should the proxies be called foo-360p.gesproxy, or
+    foo--proxy-360p.webm, or C462NTH353.webm in the hidden cache folder,
+    or...?
+-   Codecs? So far we're hesitating between MJPEG and VP8. MJPEG is
+    handsdown the fastest codec to seek and to encode, since it is so
+    simple and every frame is a keyframe - however, the filesize is
+    rather big. VP8 is more configurable and can be made to approximate
+    MJPEG's seeking performance, but it is significantly more expensive
+    to encode.
+-   Resolutions, and how to handle aspect ratios. That is, how do you
+    determine the appropriate resolution depending on the aspect ratio
+    and resolution of the source material?
+    -   Going with a hardcoded percentage (ex: 50% of the original's
+        resolution) can be bound to fail in scenarios where the original
+        has a huge native resolution (such as 4K).
+    -   Alternatively, one can imagine a hardcoded (or configurable)
+        “max resolution”, where clips bigger than that resolution will
+        have proxies created to “fit the box” (in terms of width and
+        height, whichever comes first). Hardcoding the box resolution
+        might be problematic as computers become more powerful and
+        screen resolutions increase.
+    -   Ideally, we need a clever algorithm to figure out all of this
+        automatically. Any rough ideas of the logic here? Let us know.
+        Solutions where the software can be smart enough to figure the
+        optimal resolution to use, instead of having the user deal with
+        it, are preferred.
+-   Handling “tarball export” in Pitivi
diff --git a/docs/Test_suite_wishlist.md b/docs/Test_suite_wishlist.md
new file mode 100644
index 0000000..446ec89
--- /dev/null
+++ b/docs/Test_suite_wishlist.md
@@ -0,0 +1,11 @@
+# Test suite wishlist
+
+This page is meant as a TODO list for new contributors interested in the
+[test suite](Testing.md), and for ourselves. Feel free to
+tackle any of these items, to add your own, or ask for help/guidance.
+
+-   Undo/redo tests for each case the user can undo/redo.
+-   Tests for each timeline operation
+    -   Copy/paste
+    -   Split
+    -   Group/ungroup
diff --git a/docs/Testing.md b/docs/Testing.md
new file mode 100644
index 0000000..d77a624
--- /dev/null
+++ b/docs/Testing.md
@@ -0,0 +1,62 @@
+# Testing
+
+We have tree sets of tests:
+ - the normal unit tests (ninja test)
+ - integration tests using GstValidate.
+ - [manual tests](QA_Scenarios.md)
+
+Since version [0.91](releases/0.91.md), our backend test suite is much
+smaller and simpler; since most of the core functionality is now handled
+by [GES](GES.md), you need to run GES's test suite instead if
+you want to test more thoroughly.
+
+## Unit tests
+
+You can run the unit tests with:
+
+`ninja -C mesonbuild/ test`
+
+If you want to run only one particular unit test, use:
+
+`nose2 tests test_project.TestProjectManager.testLoadProjectFailedUnknownFormat`
+
+### Writing unit tests
+
+As mock library we use [Mock](http://www.voidspace.org.uk/python/mock/),
+as it's now integrated into
+[Python3](http://docs.python.org/dev/library/unittest.mock) which we use
+as of [0.94](releases/0.94.md).
+
+If you're curious about our unit tests, the best way to get to know them
+is to write a few Pitivi unit tests and have us review them. Check out
+[how to set up your dev
+env](https://github.com/pitivi/pitivi/blob/master/docs/HACKING.md) and
+come in our [IRC channel](http://www.pitivi.org/?go=contact)!
+
+## Integration tests
+
+The integration tests are run with GstValidate. They are located in the
+[tests/validate-tests](https://git.gnome.org/browse/pitivi/tree/tests/validate-tests)
+directory. Each `.scenario` file in the
+[scenarios](https://github.com/pitivi/pitivi/tree/master/tests/validate-tests/scenarios)
+subdirectory contains a sequence of actions which represent a test.
+
+When a test is run, the actions in the scenario are performed by
+handlers in
+[pitivi/utils/validate.py](https://github.com/pitivi/pitivi/blob/master/pitivi/utils/validate.py),
+or by handlers in GES. The handlers generally act on the widgets and
+check the expected effect has been obtained on the GES objects. Besides
+the checks integrated in the handlers, for now it is not possible to
+have additional checks.
+
+A scenario file is [created
+automatically](http://wiki.pitivi.org/wiki/Bug_reporting#Sharing_sample_files.2C_projects.2C_and_.22scenarios.22)
+each time Pitivi is used.
+
+You can run the integration tests with:
+
+`tests/validate-tests/runtests`
+
+See also:
+
+-   [Test suite wishlist](Test_suite_wishlist.md)
diff --git a/docs/The_people.md b/docs/The_people.md
new file mode 100644
index 0000000..8df237e
--- /dev/null
+++ b/docs/The_people.md
@@ -0,0 +1,47 @@
+# The people
+
+This page is intended for new community members to know who to “go to”
+for specific issues, as well as highlight the great work of our
+contributors. You might have noticed that **some of us are connected at
+all times** (using an IRC proxy such as
+[bip](http://bip.milkypond.org)). Being connected does not necessarily
+mean we are in front of the computer: if we have an Away status, you
+need to be patient when asking questions as we might be temporarily
+offline or on different timezones. We'll see your messages when we
+reconnect using our IRC client.
+
+Current maintainers:
+
+-   Thibault Saunier: developer and
+    current project maintainer, GSoC 2010 student
+    -   Knows all the technical/architectural decisions
+    -   Knows [GES](GES.md) inside-out
+-   Alexandru “aleb” Băluț: Bug fixer, UI polisher, unittest juggler
+
+Previous (co-)maintainers:
+
+-   Jean-François “nekohayo” Fortin Tam: UI
+    designer and occasional developer, tester, bug triager,
+    documentation writer, webmaster.
+    -   Knows about the vast majority of existing bugs (since he triages
+        them)
+    -   Elaborates the project's vision. Knows about design decisions,
+        existing or missing features
+    -   Offers guidance/mentoring to get acquainted with the project. In
+        case of doubt, go to him!
+-   Mathieu Duponchelle: hardcore bug
+    fixer, GSoC 2011 and 2013 student
+-   Edward “bilboed” Hervey: founder of the
+    project. Knows GStreamer and GNonlin inside-out. Retired from the
+    Pitivi project to focus on GStreamer.
+-   Brandon “emdash” Lewis: features and UI work between 2008-2010.
+-   Alessandro “twi\_” Decina: backend work between 2009-2010.
+
+A lot of [Google Summer of Code students](Past_GSoCs.md) have
+been contributed to Pitivi and GES.
+
+Occasional community members and contributors include many other people.
+See also <http://ohloh.net/p/pitivi/contributors> to get a historic
+sense of scale.
+
+-   Add your name here!
diff --git a/docs/Troubleshooting.md b/docs/Troubleshooting.md
new file mode 100644
index 0000000..4564749
--- /dev/null
+++ b/docs/Troubleshooting.md
@@ -0,0 +1,99 @@
+# Troubleshooting
+
+This is a list of some known issues that are recurrent in users reports.
+Issues will be removed as they get fixed (or relatively soon
+afterwards). See also the list of [bugs related to
+rendering](https://bugzilla.gnome.org/buglist.cgi?query_format=advanced;bug_status=UNCONFIRMED;bug_status=NEW;bug_status=ASSIGNED;bug_status=REOPENED;bug_status=NEEDINFO;component=rendering;product=pitivi).
+See [Bug reporting](Bug_reporting.md) for instructions on how to
+get debug logs to be used for debugging and troubleshooting.
+
+**Tip: restart Pitivi between tries**:
+
+> When an error happens, it is possible that Pitivi may enter an
+> inconsistent state (ie: the UI is not responsive anymore, or actions
+> don't seem to do anything). Sometimes, restarting Pitivi may solve the
+> problem. To be exact, it is a good practice to restart it between
+> tries when trying to investigate and isolate bugs. In the next version
+> of Pitivi based on [GES](GES.md), rendering errors will be
+> [shown to
+> you](http://jeff.ecchi.ca/blog/2013/04/28/no-more-stuck-render-dialogs/).
+
+## I use cinnamon and I can't select clips in the timeline !
+
+As of April 2014, we have spotted that issue. A bug report has been
+opened against cinnamon here :
+<https://github.com/linuxmint/Cinnamon/issues/2993>. Until the next
+version of cinnamon, the solution is to “unset CLUTTER\_DISABLE\_XINPUT”
+before launching pitivi.
+
+## Rendering hangs at 1 second (or less) remaining
+
+This is a known bug with Pitivi 0.15.x. There are several ways you can
+reduce the probability of this happening:
+
+-   If you have extremely long clips (ie: hours) or heavy media files
+    (ie: gigabytes) in your timeline, try with smaller clips for the
+    sake of testing
+-   Make sure the audio track and the video track cover the whole
+    timeline, without gaps. This means you must have at least one audio
+    clip under the playhead at all times, and that the beginning/end of
+    the timeline must match between video and audio.
+-   If you're using PNG images, try with JPEGs instead.
+
+These tricks are not guaranteed to work in all situations, but they are
+some of the most common causes of rendering failing.
+
+## Rendering doesn't start (stuck at “estimating”)
+
+This might be due to many reasons, including an invalid codecs
+combination, incorrect codec settings, or something else.
+
+### “The rendered files weighs 0 bytes!”
+
+That's [bug 692316](https://bugzilla.gnome.org/show_bug.cgi?id=692316),
+which is most likely fixed for future versions of Pitivi
+([0.91](releases/0.91.md) and newer). In that case, the workaround is
+simply to try starting the render again.
+
+### Make sure you have the proper codecs
+
+Some codecs in GStreamer (such as Dirac) are not reliable for use with
+Pitivi. When rendering, we recommend you try the following combinations
+of containers and codecs:
+
+-   Webm
+    -   VP8 video
+    -   Vorbis audio
+-   OGG
+    -   Theora video
+    -   Vorbis audio
+-   Matroska
+    -   x264enc (H.264 video)
+    -   AAC audio
+
+Starting with Pitivi [0.91](releases/0.91.md), this will not be an issue
+anymore, as bad quality codecs will not show up.
+
+### Incorrect codec settings
+
+Some codecs require video resolution width and height to be multiples of
+4, 8 or 16. Typically, always make sure that they're at least multiples
+of 2. Otherwise, some video codecs won't encode at all, sometimes
+they'll encode with suboptimal or broken results.
+
+## Playback performance is bad
+
+See [Performance problems](Performance_problems.md).
+
+## What are the recommended rendering settings to export to YouTube?
+
+“Why don't Theora files work on YouTube?”
+
+-   Youtube doesn't support Theora 1.1 videos. Uploading such files will
+    result in a garbled/corrupt green video.
+
+For files destined to YouTube, you could use this combination:
+
+-   Container: Matroska (.mkv): matroskamux
+-   Video codec: H.264: x264enc
+-   Audio codec: AAC
diff --git a/docs/attic.md b/docs/attic.md
new file mode 100644
index 0000000..7e0cf35
--- /dev/null
+++ b/docs/attic.md
@@ -0,0 +1,5 @@
+# Attic
+
+This section contains old documents kept for referencing history.
+Some of those documents re broken and are not present in the
+web interface but only as markdown pages in the git tree.
diff --git a/docs/attic/Audio_video.py.md b/docs/attic/Audio_video.py.md
new file mode 100644
index 0000000..8a3724e
--- /dev/null
+++ b/docs/attic/Audio_video.py.md
@@ -0,0 +1,117 @@
+# Audio video.py
+
+``` python
+#!/usr/bin/env python
+
+"""A short Audio-Video example"""
+import gobject
+gobject.threads_init()
+import gst
+import pygtk
+pygtk.require("2.0")
+import gtk
+gtk.gdk.threads_init()
+import sys
+import os
+from demo import Demo
+
+def create_decodebin():
+    try:
+        return gst.element_factory_make("decodebin2")
+    except:
+        return gst.element_factory_make("decodebin")
+
+class DemoException(Exception):
+    """Base exception class for errors which occur during demos"""
+
+    def __init__(self, reason):
+        self.reason = reason
+
+class AVDemo(Demo):
+    """Extends base demo with both audio and video sinks
+    * a window containing a drawing area and basic media controls
+    * a basic gstreamer pipeline using an ximagesink and an autoaudiosink
+    * connects the ximagesink to the window's drawing area
+
+    Derived classes need only override magic(), __name__,
+    and __usage__ to create new demos."""
+
+    __name__ = "AV Demo"
+    __usage__ = "python audio_video.py <filename>"
+    __def_win_size__ = (320, 240)
+
+    # this commment allows us to include only a portion of the file
+    # in the tutorial for this demo
+
+    def magic(self, pipeline, (videosink, audiosink), args):
+        """This is where the magic happens"""
+
+        def onPadAdded(source, pad):
+            # first we see if we can link to the videosink
+            tpad = videoqueue.get_compatible_pad(pad)
+            if tpad:
+                pad.link(tpad)
+                return
+            # if not, we try the audio sink
+            tpad = audioqueue.get_compatible_pad(pad)
+            if tpad:
+                pad.link(tpad)
+                return
+
+        src = gst.element_factory_make("filesrc", "src")
+        src.props.location = args[0]
+        dcd = create_decodebin()
+        audioqueue = gst.element_factory_make("queue")
+        videoqueue = gst.element_factory_make("queue")
+        pipeline.add(src, dcd, audioqueue, videoqueue)
+
+        src.link(dcd)
+        videoqueue.link(videosink)
+        audioqueue.link(audiosink)
+        dcd.connect("pad-added", onPadAdded)
+
+    def createPipeline(self, w):
+        """Given a window, creates a pipeline and connects it to the window"""
+
+        # code will make the ximagesink output in the specified window
+        def set_xid(window):
+        gtk.gdk.threads_enter()
+            videosink.set_xwindow_id(window.window.xid)
+            videosink.expose()
+            gtk.gdk.threads_leave()
+
+        # this code receives the messages from the pipeline. if we
+        # need to set X11 id, then we call set_xid
+        def bus_handler(unused_bus, message):
+            if message.type == gst.MESSAGE_ELEMENT:
+                if message.structure.get_name() == 'prepare-xwindow-id':
+                    set_xid(w)
+            return gst.BUS_PASS
+
+        # create our pipeline, and connect our bus_handler
+        self.pipeline = gst.Pipeline()
+        bus = self.pipeline.get_bus()
+        bus.set_sync_handler(bus_handler)
+
+        videosink = gst.element_factory_make("ximagesink", "sink")
+        videosink.set_property("force-aspect-ratio", True)
+        videosink.set_property("handle-expose", True)
+        scale = gst.element_factory_make("videoscale", "scale")
+        cspace = gst.element_factory_make("ffmpegcolorspace", "cspace")
+
+        audiosink = gst.element_factory_make("autoaudiosink")
+        audioconvert = gst.element_factory_make("audioconvert")
+
+        # pipeline looks like: ... ! cspace ! scale ! sink
+        #                      ... ! audioconvert ! autoaudiosink
+        self.pipeline.add(cspace, scale, videosink, audiosink,
+            audioconvert)
+        scale.link(videosink)
+        cspace.link(scale)
+        audioconvert.link(audiosink)
+        return (self.pipeline, (cspace, audioconvert))
+
+# if this file is being run directly, create the demo and run it
+if __name__ == '__main__':
+    AVDemo().run()
+```
diff --git a/docs/attic/Building_with_Windows.md b/docs/attic/Building_with_Windows.md
new file mode 100644
index 0000000..abfc4cd
--- /dev/null
+++ b/docs/attic/Building_with_Windows.md
@@ -0,0 +1,172 @@
+# Building with Windows
+
+This tutorial describes how to build [GStreamer Editing
+Services](GES.md) using cerbero a freshly installed Windows 8.1 x86\_64.
+
+# Download Software
+
+## git
+
+Install [git for Windows](http://msysgit.github.io/).
+
+-   Bash only is fine
+-   IMPORTANT: Select the install option “Checkout as-is, Commit as-is”
+
+## Python 2.7
+
+Install [Python 2.7.8](https://www.python.org/download/releases/2.7.8/)
+
+-   Choose the MSI Installer for x86\_64.
+-   For all users
+-   To C:\\Python27\\
+
+## MinGW
+
+Install
+[mingw-get](http://sourceforge.net/projects/mingw/files/Installer/)
+
+-   To C:\\MinGW
+-   Select the following packages in “Basic Setup”:
+    -   mingw32-base
+    -   mingw32-gcc-g++
+    -   msys-base
+-   Instalation =&gt; Apply changes
+-   Close the dialoge when complete
+
+## CMake
+
+Download the [CMake win32
+installer](http://www.cmake.org/cmake/resources/software.html), since
+there is no 64bit build.
+
+You do not need to add CMake to the system path, since we are not using
+CMD anyway.
+
+## Text Editor
+
+Make sure you have a decent text editor. I recommend Sublime or
+Notepad++.
+
+# Setup the shell
+
+## Link on Desktop
+
+Sadly I do not know how to make a .bat available in the task bar / dock,
+so make a link on the Desktop.
+
+-   Make a link on your Desktop to C:\\MinGW\\msys\\1.0\\msys.bat
+-   Rename it to msys Shell and give it a nice icon.
+
+## Edit fstab
+
+This needs to be configured to be able to use the package manager
+mingw-get.
+
+-   Go to C:\\MinGW\\msys\\1.0\\etc\\
+-   rename fastab.sample to fstab. If you installed MinGW to another
+    folder, you need to edit this file.
+
+## Install MinTTY
+
+-   Open the shell from your Desktop.
+-   It is a cmd like shell. Pasting sucks. We should install a cooler
+    one with transparency and stuff.
+
+`$ mingw-get install mintty`
+
+Now we need to set it as the default shell
+
+Add following line to C:\\MinGW\\msys\\1.0\\mys.bat after line 58:
+
+`set MSYSCON=mintty.exe`
+
+-   Open your new cool shell mintty.
+
+It its scaled dynamically. You can copy with just selecting text. You
+can paste with middle click. Cool.
+
+## Editing your bash profile
+
+We will need to add everything to our path manually.
+
+Add the following lines at the end of C:\\MinGW\\msys\\1.0\\etc\\profile
+
+`export PATH=$PATH:/c/Python27`\
+`export PATH=$PATH:/c/Program\ Files\ `$x86$`/Git/bin`\
+`export PATH=$PATH:/home/bmonkey/cerbero/`\
+`export PATH=$PATH:/c/Program\ Files\ `$x86$`/CMake/bin`
+
+`alias cerbero=cerbero-uninstalled`
+
+Note that the cerbero path is the path where we will clone cerbero into
+in the next step. You need to change it to your user name.
+
+Save the file and restart your shell.
+
+## Setting up git config
+
+The bootstrap will fail if git config is not set up. Do the following:
+
+`$ git config --global user.email `“`you example com`”\
+`$ git config --global user.name `“`Your`` ``Name`”
+
+# Compile
+
+### Checkout cerbero
+
+`$ git clone 
`[`git://anongit.freedesktop.org/gstreamer/cerbero`](git://anongit.freedesktop.org/gstreamer/cerbero)
+
+## Install dependencies
+
+Now we need to get some extra dependencies from mingw-get to start the
+bootstrap.
+
+`$ mingw-get.exe install msys-perl msys-patch msys-bison msys-flex msys-coreutils`
+
+## Bootstrap
+
+Now we can start cerbero bootstrap.
+
+If you cannot access the cerbero command, make sure its in the PATH in
+your bash profile.
+
+`$ cerbero bootstrap`
+
+Go get some coffee.
+
+## Building GStreamer Editing Services
+
+`$ cerbero build gst-editing-services-1.0`
+
+Go plant a tree. This can take hours.
+
+## Building GStreamer Plugins
+
+Since GES does not depend on all plugins, you need to build them
+manually.
+
+`$ cerbero build gst-plugins-bad-1.0`\
+`$ cerbero build gst-plugins-ugly-1.0`\
+`$ cerbero build gst-libav-1.0`
+
+### Adding GStreamer tools to the PATH
+
+You propably want to use ges-launch-1.0.exe and friends in the shell. To
+do this, add the dist folder to the PATH.
+
+In your bash profle:
+
+`export PATH=$PATH:/home/bmonkey/cerbero/dist/windows_x86_64/bin/`
+
+## Troubleshooting
+
+### Configure hangs
+
+If you encounter the configure process to freeze, you need to close the
+shell and kill all sh.exe processes in the task manager. Alternatively
+you can log out and log in.
+
+`checking for msgfmt... /c/Users/Lubosz/cerbero/build-tools/bin/msgfmt`\
+`checking for gmsgfmt... /c/Users/Lubosz/cerbero/build-tools/bin/msgfmt`\
+`checking for xgettext... /c/Users/Lubosz/cerbero/build-tools/bin/xgettext`\
+`checking for msgmerge...`
diff --git a/docs/attic/Cross-fade.py.md b/docs/attic/Cross-fade.py.md
new file mode 100644
index 0000000..fd1f281
--- /dev/null
+++ b/docs/attic/Cross-fade.py.md
@@ -0,0 +1,121 @@
+# Cross-fade.py
+
+    #!/usr/bin/env python
+    """Extends basic demo with a gnl composition"""
+    import gobject
+    gobject.threads_init()
+    from demo import Demo, DemoException
+    import gtk
+    import gst
+    import sys
+    import os
+
+    def create_decodebin():
+        try:
+            return gst.element_factory_make("decodebin2")
+        except:
+            return gst.element_factory_make("decodebin")
+
+    class SimpleCrossfadeDemo(Demo):
+        __name__ = "Demo of crosfade  without using gnonlin"
+        __usage__ = '''python %s sourceA sourceB
+        live crossfading between two sources''' % sys.argv[0]
+        __def_size__ = (320, 420)
+
+        def magic(self, pipeline, sink, args):
+
+            def onPad(obj, pad, target):
+                sinkpad = target.get_compatible_pad(pad, pad.get_caps())
+                if sinkpad:
+                    pad.link(sinkpad)
+                return True
+
+            assert len(sys.argv) == 3
+            assert os.path.exists(sys.argv[1])
+            assert os.path.exists(sys.argv[2])
+
+            # <excerpt 1>
+            src = gst.element_factory_make("filesrc")
+            src.set_property("location", sys.argv[1])
+
+            srcAdecode = create_decodebin()
+            srcAconvert = gst.element_factory_make("ffmpegcolorspace")
+            srcAalpha = gst.element_factory_make("alpha")
+            srcAalpha.set_property("alpha", 1.0)
+
+            srcB = gst.element_factory_make("filesrc")
+            srcB.set_property("location", sys.argv[2])
+            srcBdecode = create_decodebin()
+            srcBconvert = gst.element_factory_make("ffmpegcolorspace")
+            srcBalpha = gst.element_factory_make("alpha")
+            srcBalpha.set_property("alpha", 0.5)
+
+            mixer = gst.element_factory_make("videomixer")
+            mixer.set_property("background", "black")
+            # </excerpt>
+
+            # <excerpt 2>
+            pipeline.add(mixer)
+
+            pipeline.add(src, srcAdecode, srcAconvert, srcAalpha)
+            src.link(srcAdecode)
+            srcAdecode.connect("pad-added", onPad, srcAconvert)
+            srcAconvert.link(srcAalpha)
+            srcAalpha.link(mixer)
+
+            pipeline.add(srcB, srcBdecode, srcBconvert, srcBalpha)
+            srcB.link(srcBdecode)
+            srcBdecode.connect("pad-added", onPad, srcBconvert)
+            srcBconvert.link(srcBalpha)
+            srcBalpha.link(mixer)
+
+            mixer.link(sink)
+
+            # remember the alpha elements
+            self.srcBalpha = srcBalpha
+            # </excerpt>
+
+
+        # overriding from parent
+        def customWidgets(self):
+            """Create a control for each property in the videobalance
+            widget"""
+
+            # <excerpt 3>
+            # to be called a property value needs to change
+            def onValueChanged(widget):
+                if self.srcBalpha:
+                    self.srcBalpha.set_property("alpha", widget.get_value())
+            # </excerpt>
+
+            lower = 0
+            upper = 1
+            default = 0.5
+
+            # create a place to hold our controls
+            controls = gtk.VBox()
+            labels = gtk.VBox()
+
+            widget = gtk.HScale(); label = gtk.Label("Crossfade")
+
+            # set appropriate atributes
+            widget.set_update_policy(gtk.UPDATE_CONTINUOUS)
+            widget.set_draw_value(True)
+            widget.set_range(lower, upper)
+            widget.set_value(default)
+
+            # connect to our signal handler, specifying the property
+            # to adjust
+            widget.connect("value-changed", onValueChanged)
+
+            # pack widget into box
+            controls.pack_start(widget, True, True)
+            labels.pack_start(label, True, False)
+
+            layout = gtk.HBox()
+            layout.pack_start(labels, False, False)
+            layout.pack_end(controls, True, True)
+            return layout
+
+    if __name__ == '__main__':
+        SimpleCrossfadeDemo().run()
diff --git a/docs/attic/Debug_bundles.md b/docs/attic/Debug_bundles.md
new file mode 100644
index 0000000..0007913
--- /dev/null
+++ b/docs/attic/Debug_bundles.md
@@ -0,0 +1,11 @@
+# Preamble
+
+Tips to help debug [pitivi
+bundles](http://fundraiser.pitivi.org/download-bundles):
+
+# Run pitivi in GDB inside the pitivi bundes
+
+` # Launch the pitivi bundle environment:`\
+` APP_IMAGE_TEST=1 ./pitivi-bundle # Change pitivi-bundle with the name of the bundle you downloaded and 
extracted. eg. ./pitivi-0.94-x86_64`\
+` cd $APPDIR`\
+` gdb --args python3 bin/pitivi`
diff --git a/docs/attic/Dependencies.md b/docs/attic/Dependencies.md
new file mode 100644
index 0000000..a6ad2aa
--- /dev/null
+++ b/docs/attic/Dependencies.md
@@ -0,0 +1,173 @@
+# Dependencies
+
+This page is intended for contributors wishing to work with the
+**development version**. Otherwise, take a look at [the download
+page](http://www.pitivi.org/?go=download) on the main website.
+
+To build Pitivi, you will need the latest devel packages for gstreamer,
+pygst, and all related packages. Generally speaking, you will need:
+
+-   The latest GStreamer 1.x and plugins including headers (if your
+    distro doesn't provide it). Since we often fix issues upstream in
+    GStreamer, even the latest stable GStreamer 1.x releases might not
+    be enough, we sometimes depend on GStreamer from git. Follow the
+    [HACKING](HACKING.md) instruction to setup everything.
+-   GObject introspection including header files (if your distro doesn't
+    provide it)
+-   automake
+-   libtool
+-   intltool and itstool
+-   Python 3 including header files
+-   PyGObject including header files
+-   GTK 3 including header files
+-   development headers for OpenGL/OpenGLU through Mesa (used for
+    glimagesink if you're building GStreamer)
+-   gtk-doc-tools, yelp-tools, gnome-doc-utils
+-   gdk-pixbuf2
+-   gnome-common
+-   matplotlib
+-   numpy
+-   PulseAudio and ALSA header files
+
+Optional but very much recommended:
+
+-   gnome-desktop3 (for thumbnails in the media library)
+-   libnotify's python bindings
+-   libcanberra's python bindings (pycanberra)
+
+Specifically, if you want to know the **exact versions of our current
+dependencies**, have a look at the bottom of
+[check.py](http://git.gnome.org/browse/pitivi/tree/pitivi/check.py),
+specifically the “HARD\_DEPENDENCIES” and “SOFT\_DEPENDENCIES”
+variables.
+
+You can use the following commands to do that in one go:
+
+## On Fedora
+
+For starters, copy-paste this paragraph into a terminal to get the basic
+Pitivi dependencies, as well as various build dependencies for
+GStreamer:
+
+`sudo dnf install \`\
+`   gcc gcc-c++ yasm-devel python3-devel \`\
+`   bison flex intltool itstool libtool libxml2-devel meson ninja-build \`\
+`   gnome-common gnome-desktop3-devel gnome-doc-utils gtk3-devel gtk-doc yelp-tools \`\
+`   gstreamer1*-devel mesa-libGL-devel mesa-libGLU-devel \`\
+`   python3-cairo-devel cairo-gobject-devel \`\
+`   pygobject3-devel gdk-pixbuf2-devel \`\
+`   python3-matplotlib python3-matplotlib-gtk3 python3-numpy python3-canberra ninja-build \`\
+`   redhat-rpm-config`
+
+And then, if you need to build GStreamer (quite likely;
+[pitivi/check.py](http://git.gnome.org/browse/pitivi/tree/pitivi/check.py)
+or the environment script will tell you which version is required), you
+need to ensure that you have all the required dependencies to build the
+various GStreamer plugins. See the next section below.
+
+### GStreamer's dependencies
+
+The yum-builddep utility installs the RPMS needed to build a specific
+package by looking at that package's source RPM in your yum
+repositories. It only works for one package at a time; this python
+script invokes it for each of the relevant packages. Some of the
+packages are from the [rpmfusion](http://rpmfusion.org) repository so
+make sure you have that repository enabled before running the script.
+Copy and paste the following script into a .py file, make it executable
+and run it as root:
+
+`#!/usr/bin/env python`\
+`import sys, os, pwd`
+
+`print(`“`Will`` ``get`` ``the`` ``build`` ``deps`` ``from`` ``gstreamer1`` ``packages`”`)`\
+`duck = [`“`gstreamer1`”`,`\
+`    `“`gstreamer1-plugins-base`”`,`\
+`    `“`gstreamer1-plugins-good`”`,`\
+`    `“`gstreamer1-plugins-bad`”`,`\
+`    `“`gstreamer1-plugins-bad-nonfree`”`,`\
+`    `“`gstreamer1-plugins-ugly`”`,`\
+`    `“`python-gstreamer1`”`,`\
+`    `“`gstreamer1-libav`”`,`\
+`    `“`pitivi`”`]`
+
+`user = pwd.getpwuid(os.getuid())[0]`\
+`if user ==`“`root`”`:`\
+`    for wat in duck:`\
+`        os.system(`“`dnf`` ``builddep`` ``-y`` ``%s`”` % wat)`\
+`else:`\
+`    print(`“`You`` ``must`` ``be`` ``root`` ``to`` ``run`` ``this`` ``script.`”`)`\
+`    sys.exit(1)`
+
+Also, to be able to build gst-transcoder, you will need to do this hack
+on Fedora after installing “ninja-build”:
+
+`sudo ln -s /usr/bin/ninja-build /usr/bin/ninja`
+
+## On Ubuntu/Debian
+
+You can simply paste the following, which should (hopefully) solve your
+dependencies. This was reportedly working on Ubuntu 12.10 but package
+names change all the time, so if something is missing (or you have a
+better way to solve the deps), please tell us about it.
+
+`# Basic build tools:`\
+`sudo apt-get install git build-essential automake libtool itstool gtk-doc-tools yelp-tools gnome-common 
gnome-doc-utils yasm flex bison`
+
+`# Stuff related to introspection, GTK, canvases, and various other dependencies:`\
+`sudo apt-get install libgirepository1.0-dev python3-dev python3-gi python-gi-dev \`\
+`python3-cairo-dev libcairo2-dev python3-gi-cairo python3-matplotlib python3-numpy \`\
+`libgdk-pixbuf2.0-dev libpulse-dev libgtk-3-dev \`\
+`libxml2-dev \`
+
+`# GStreamer 1.x, if you're lucky and your distro packages are recent enough:`\
+`sudo apt-get install gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad 
gstreamer1.0-alsa gstreamer1.0-pulseaudio \`\
+`libgstreamer-plugins-bad1.0-dev libgstreamer-plugins-base1.0-dev libgstreamer1.0-dev libgstreamer1.0-0`
+
+`# GStreamer plugins' full set of dependencies to build all the codecs:`\
+`sudo apt-get build-dep gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad 
gstreamer1.0-plugins-ugly`\
+`sudo apt-get install libglu1-mesa-dev`
+
+## In a Virtual Env
+
+If you are using python virtual environments to do your development, you
+aren't going to be able to use the python library packages listed above
+for your install, and the packages are not available via install tools.
+Install everything \*else\* listed above (keep python-dev)and then
+install the following packages.
+
+replace (ENV) with the path to your virtual env (e.g.
+/home/aleks/src/python-def/ )
+
+WARNING: the versions used here may change, but the general build
+process should still hold. If you get errors about version mismatches,
+just grab the appropriate ones and start over.
+
+### PyCairo
+
+Download py2cairo-1.10.0 from the appropriate place, extract it, then:
+
+`./configure --prefix=(ENV)`\
+`make && make install`
+
+I don't recall any special overrides, but depending on your distro, you
+may need to do something like this if configure complains that it can't
+find cairo.h:
+
+`CFLAGS=-I/usr/include/cairo/ ./configure --prefix=(ENV)`\
+`make && make install`
+
+### PyGObject
+
+Download pygobject-3.0.0 from the appropriate place, extract it, cd into
+it, then:
+
+`PYCAIRO_LIBS=(ENV)/include/pycairo/ PYCAIRO_CFLAGS=-I(ENV)/pycairo/ CFLAGS=-I/usr/include/cairo/ 
./configure --prefix=(ENV)`\
+`make && make install`
+
+### PyGST
+
+grab gst-python from git, cd to it, ./autogen.sh This is going to FAIL.
+after that, do this:
+
+`PYGOBJECT_LIBS=(ENV)/include/pygobject-3.0/ PYGOBJECT_CFLAGS=-I(ENV)/include/pygobject-3.0/ ./configure 
--prefix=(ENV)`\
+`make && make install`
diff --git a/docs/attic/Documentation.md b/docs/attic/Documentation.md
new file mode 100644
index 0000000..24c8cf2
--- /dev/null
+++ b/docs/attic/Documentation.md
@@ -0,0 +1,10 @@
+# Documentation
+
+We use the [Epydoc](http://epydoc.sourceforge.net/manual-fields.html)
+annotations to document the method parameters, etc. Most importantly, if
+there can be any doubt about the expected type for a method parameter,
+use “@type parameter\_name: bla bla” to mention it!
+
+To build the API documentation, simply run:
+
+`epydoc pitivi/ -o `<outputdir>
diff --git a/docs/attic/Dogtail_performance_tips.md b/docs/attic/Dogtail_performance_tips.md
new file mode 100644
index 0000000..99dd899
--- /dev/null
+++ b/docs/attic/Dogtail_performance_tips.md
@@ -0,0 +1,31 @@
+# Dogtail performance tips
+
+Here are some tips and tricks to make Dogtail test scripts that go as
+fast as possible. Feel free to expand and improve this page with your
+findings.
+
+While we already set the delays variables to be much faster than the
+defaults, Dogtail can still be slow when you need to “search” through a
+lot of widgets. Generally speaking, here are some principles:
+
+-   Avoid recursive toplevel searches. If you know the widget you're
+    looking for is directly inside the mainwindow, use recursive=False.
+-   Confine searches to specific dialogs or widgets
+-   Use attributes (ex: “.button”) to avoid searches
+-   If you're going to use a widget more than once, keep a reference to
+    it by storing it in a variable.
+
+This yields some highly visible performance improvements. It can be the
+difference between 80 seconds and 55 seconds for a test.
+
+Some easy tips that will help you for the items above:
+
+1.  Look at the variables provided in the setUp method of test\_base.py.
+    Those are available for every test and allow you to get the widgets
+    (or subwidgets) you need much faster.
+2.  Use helper\_functions.py to access common operations (such as
+    opening the file chooser/importing files). These have been optimized
+    to be faster.
+
+[Category:Developer
+documentation](Category:Developer_documentation.md)
diff --git a/docs/attic/Elements_basics.py.md b/docs/attic/Elements_basics.py.md
new file mode 100644
index 0000000..c146ca6
--- /dev/null
+++ b/docs/attic/Elements_basics.py.md
@@ -0,0 +1,107 @@
+# Elements basics.py
+
+    #!/usr/bin/env python
+
+    """
+    gst.Element basics, this is a modified script of Brandon Lewis
+    """
+
+    # PiTiVi does this for you, but in any stand-alone gstreamer script you need
+    # to do this before anything else
+    import gobject
+    gobject.threads_init()
+
+    # import gst and gtk
+    import gst
+    import gtk
+
+
+    class NewElement(gst.Element):
+        """ A basic, buffer forwarding gstreamer element """
+
+        #here we register our plugin details
+        __gstdetails__ = (
+            "NewElement plugin",
+            "newelement.py",
+            "gst.Element, that passes a buffer from source to sink (a filter)",
+            "Stephen Griffiths <scgmk5 gmail com>")
+
+        #source pad (template): we send buffers forward through here
+        _srctemplate = gst.PadTemplate ('src',
+            gst.PAD_SRC,
+            gst.PAD_ALWAYS,
+            gst.caps_new_any())
+
+        #sink pad (template): we recieve buffers from our sink pad
+        _sinktemplate = gst.PadTemplate ('sink',
+            gst.PAD_SINK,
+            gst.PAD_ALWAYS,
+            gst.caps_new_any())
+
+        #register our pad templates
+        __gsttemplates__ = (_srctemplate, _sinktemplate)
+
+        def __init__(self, *args, **kwargs):
+            #initialise parent class
+            gst.Element.__init__(self, *args, **kwargs)
+
+            #source pad, outgoing data
+            self.srcpad = gst.Pad(self._srctemplate)
+
+            #sink pad, incoming data
+            self.sinkpad = gst.Pad(self._sinktemplate)
+            self.sinkpad.set_setcaps_function(self._sink_setcaps)
+            self.sinkpad.set_chain_function(self._sink_chain)
+
+            #make pads available
+            self.add_pad(self.srcpad)
+            self.add_pad(self.sinkpad)
+
+        def _sink_setcaps(self, pad, caps):
+            #we negotiate our capabilities here, this function is called
+            #as autovideosink accepts anything, we just say yes we can handle the
+            #incoming data
+            return True
+
+        def _sink_chain(self, pad, buf):
+            #this is where we do filtering
+            #and then push a buffer to the next element, returning a value saying
+            # it was either successful or not.
+            return self.srcpad.push(buf)
+
+    #here we register our class with glib, the c-based object system used by
+    #gstreamer
+    gobject.type_register(NewElement)
+
+
+
+
+
+    ## this code creates the following pipeline, equivalent to
+    ## gst-launch-0.10 videotestsrc ! videoscale ! ffmpegcolorspace !
+    ### NewElement ! autovideosink
+
+    # first create individual gstreamer elements
+
+    source = gst.element_factory_make("videotestsrc")
+    print "making new element"
+    newElement = NewElement()
+    print "made new element"
+    vscale = gst.element_factory_make("videoscale")
+    cspace = gst.element_factory_make("ffmpegcolorspace")
+    vsink  = gst.element_factory_make("autovideosink")
+
+    # create the pipeline
+
+    p = gst.Pipeline()
+    p.add(source, vscale, cspace, newElement,
+        vsink)
+    gst.element_link_many(source, vscale, cspace, newElement,
+        vsink)
+    # set pipeline to playback state
+
+    p.set_state(gst.STATE_PLAYING)
+
+    # start the main loop, pitivi does this already.
+
+    gtk.main()
diff --git a/docs/attic/Enhanced_demo.py.md b/docs/attic/Enhanced_demo.py.md
new file mode 100644
index 0000000..86b2cb6
--- /dev/null
+++ b/docs/attic/Enhanced_demo.py.md
@@ -0,0 +1,191 @@
+# Enhanced demo.py
+
+    #!/usr/bin/env python
+
+    """Basic Framework for writing GStreamer Demos in Python"""
+    #<excerpt 2>
+    import gobject
+    gobject.threads_init()
+    import gst
+    #</excerpt>
+    import pygtk
+    pygtk.require("2.0")
+    import gtk
+    gtk.gdk.threads_init()
+    import sys
+    import os
+
+
+    class DemoException(Exception):
+        """Base exception class for errors which occur during demos"""
+
+        def __init__(self, reason):
+            self.reason = reason
+
+    class Demo:
+        """Base class implementing boring, boiler-plate code.
+        Sets up a basic gstreamer environment which includes:
+
+        * a window containing a drawing area and basic media controls
+        * a basic gstreamer pipeline using an ximagesink
+        * connects the ximagesink to the window's drawing area
+
+        Derived classes need only override magic(), __name__,
+        and __usage__ to create new demos."""
+
+        __name__ = "Enhanced Demo"
+        __usage__ = "python demo.py -- runs a simple test demo"
+        __def_win_size__ = (320, 240)
+
+        # this commment allows us to include only a portion of the file
+        # in the tutorial for this demo
+        # <excerpt 1>     ...
+
+        def magic(self, pipeline, sink, args):
+            """This is where the magic happens"""
+            src = gst.element_factory_make("videotestsrc", "src")
+            pipeline.add(src)
+            src.link(sink)
+
+        def messageCb(self, bus, message):
+            if message.type == gst.MESSAGE_STATE_CHANGED:
+                old, new, pending = message.parse_state_changed()
+                self.updateButtons(new)
+            return gst.BUS_PASS
+
+        def createPipeline(self, w):
+            """Given a window, creates a pipeline and connects it to the window"""
+
+            # code will make the ximagesink output in the specified window
+            def set_xid(window):
+            gtk.gdk.threads_enter()
+                sink.set_xwindow_id(window.window.xid)
+                sink.expose()
+                gtk.gdk.threads_leave()
+
+            # this code receives the messages from the pipeline. if we
+            # need to set X11 id, then we call set_xid
+            def bus_handler(unused_bus, message):
+                if message.type == gst.MESSAGE_ELEMENT:
+                    if message.structure.get_name() == 'prepare-xwindow-id':
+                        set_xid(w)
+                return gst.BUS_PASS
+
+            # create our pipeline, and connect our bus_handler
+            self.pipeline = gst.Pipeline()
+            bus = self.pipeline.get_bus()
+            bus.set_sync_handler(bus_handler)
+            bus.add_watch(self.messageCb)
+
+            sink = gst.element_factory_make("ximagesink", "sink")
+            sink.set_property("force-aspect-ratio", True)
+            sink.set_property("handle-expose", True)
+            scale = gst.element_factory_make("videoscale", "scale")
+            cspace = gst.element_factory_make("ffmpegcolorspace", "cspace")
+
+            # our pipeline looks like this: ... ! cspace ! scale ! sink
+            self.pipeline.add(cspace, scale, sink)
+            scale.link(sink)
+            cspace.link(scale)
+            return (self.pipeline, cspace)
+
+        # ... end of excerpt </excerpt>
+
+        # subclasses can override this method to provide custom controls
+        def customWidgets(self):
+            return gtk.HBox()
+
+        def createWindow(self):
+            """Creates a top-level window, sets various boring attributes,
+            creates a place to put the video sink, adds some and finally
+            connects some basic signal handlers. Really, really boring.
+            """
+
+            # create window, set basic attributes
+            w = gtk.Window()
+            w.set_size_request(*self.__def_win_size__)
+            w.set_title("Gstreamer " + self.__name__)
+            w.connect("destroy", gtk.main_quit)
+
+            # declare buttons and their associated handlers
+            controls = (
+                ("play_button", gtk.ToolButton(gtk.STOCK_MEDIA_PLAY), self.onPlay),
+                ("pause_button", gtk.ToolButton(gtk.STOCK_MEDIA_PAUSE), self.onPause),
+                ("stop_button", gtk.ToolButton(gtk.STOCK_MEDIA_STOP), self.onStop),
+                ("quit_button", gtk.ToolButton(gtk.STOCK_QUIT), gtk.main_quit)
+            )
+
+            # as well as the container in which to put them
+            box = gtk.HButtonBox()
+
+            # for every widget, connect to its clicked signal and add it
+            # to the enclosing box
+            for name, widget, handler in controls:
+                widget.connect("clicked", handler)
+                box.pack_start(widget, True)
+                setattr(self, name, widget)
+            self.updateButtons(gst.STATE_NULL)
+
+            viewer = gtk.DrawingArea()
+            viewer.modify_bg(gtk.STATE_NORMAL, viewer.style.black)
+
+            # we will need this later
+            self.xid = None
+
+            # now finally do the top-level layout for the window
+            layout = gtk.VBox(False)
+            layout.pack_start(viewer)
+
+            # subclasses can override childWidgets() to supply
+            # custom controls
+            layout.pack_start(self.customWidgets(), False, False)
+            layout.pack_end(box, False, False)
+            w.add(layout)
+            w.show_all()
+
+            # we want to return only the portion of the window which will
+            # be used to display the video, not the whole top-level
+            # window. a DrawingArea widget is, in fact, an X11 window.
+            return viewer
+
+        def onPlay(self, unused_button):
+            self.pipeline.set_state(gst.STATE_PLAYING)
+
+        def onPause(self, unused_button):
+            self.pipeline.set_state(gst.STATE_PAUSED)
+
+        def onStop(self, unused_button):
+            self.pipeline.set_state(gst.STATE_READY)
+
+        def updateButtons(self, state):
+            if state == gst.STATE_NULL:
+                self.play_button.set_sensitive(True)
+                self.pause_button.set_sensitive(False)
+                self.stop_button.set_sensitive(False)
+            elif state == gst.STATE_READY:
+                self.play_button.set_sensitive(True)
+                self.pause_button.set_sensitive(False)
+                self.stop_button.set_sensitive(False)
+            elif state == gst.STATE_PAUSED:
+                self.play_button.set_sensitive(True)
+                self.pause_button.set_sensitive(False)
+                self.stop_button.set_sensitive(True)
+            elif state == gst.STATE_PLAYING:
+                self.play_button.set_sensitive(False)
+                self.pause_button.set_sensitive(True)
+                self.stop_button.set_sensitive(True)
+
+        def run(self):
+            w = self.createWindow()
+            p, s = self.createPipeline(w)
+            try:
+                self.magic(p, s, sys.argv[1:])
+                gtk.main()
+            except DemoException, e:
+                print e.reason
+                print self.__usage__
+                sys.exit(-1)
+
+    # if this file is being run directly, create the demo and run it
+    if __name__ == '__main__':
+        Demo().run()
diff --git a/docs/attic/GNonLin.md b/docs/attic/GNonLin.md
new file mode 100644
index 0000000..fc35b86
--- /dev/null
+++ b/docs/attic/GNonLin.md
@@ -0,0 +1,25 @@
+# GNonLin
+
+[GNonLin](http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gnonlin/html/)
+is a [GStreamer](http://gstreamer.freedesktop.org/) plugin providing a
+set of elements to ease handling non-linear streams and dynamic
+pipelines. The goals of the GNonLin elements are:
+
+-   To be GStreamer **elements**, and therefore integrating themselves
+    perfectly into any GStreamer pipeline,
+-   To **not use any specific API**, except for the GStreamer/GObject
+    API, making them easy to use with any language already supporting
+    the GStreamer API,
+-   To provide somewhat of an “editing point-of-view” to using gstreamer
+    (sources, effects, position in time, ...),
+-   To be non-destructive.
+
+Initially created to be used in video editors, GNonLin was also made
+generic so it can be used for audio editors, jukebox applications,
+slideshows, live editing, etc.
+
+While GNonLin was historically used as the sole editing backend for
+Pitivi, Jokosher and other applications, it is **not** recommended to
+use GNonLin directly anymore, unless you have a special appetite for
+unwarranted pain and a Ph.D. in nuclear physics. Instead, you should use
+[GES](GES.md).
diff --git a/docs/attic/GStreamer_from_Git.md b/docs/attic/GStreamer_from_Git.md
new file mode 100644
index 0000000..4c4a125
--- /dev/null
+++ b/docs/attic/GStreamer_from_Git.md
@@ -0,0 +1,299 @@
+# GStreamer from Git
+
+The following directions will help you set up latest GStreamer from git.
+See also [GStreamer using jhbuild](attic/GStreamer_using_jhbuild.md)
+for an automated process that is potentially easier (and safer).
+
+# Build system
+
+In order to proceed from here, you need to first have a working build
+system. Here are something to get you started; you might need additional
+packages or some tinkering. However setting up a build environment is
+beyond the scope of this tutorial.
+
+## Fedora
+
+<code>
+
+`$ yum groupinstall `“`Development`` ``Tools`”
+
+</code>
+
+## Ubuntu
+
+At the very least, make sure you have build-essentials and binutils.
+<code>
+
+`$ apt-get install build-essential binutils git`\
+`$ apt-get build-dep pitivi`
+
+</code>
+
+## Your Distro Here
+
+Add the directions for your distribution
+
+# Set Up \~/bin
+
+We're going to be using a couple of scripts. They'll be easiest to run
+if you put them somewhere that's in your current path. I have a
+directory called `bin` in my home directory that I use for this purpose.
+If you already know how to do this, or you already have \~/bin in your
+path, skip this section.
+
+<code>
+
+`$ cd`\
+`$ mkdir bin`
+
+</code>
+
+Now edit `~/.bashrc`, and add this line to the end of the file.
+
+`export PATH=`“`~/bin:$PATH`”
+
+Save the file.
+
+Now edit `~/.bash_profile` and make sure it contains the line
+
+`. ~/.bashrc`
+
+Save the file, then type
+
+<code>
+
+`$ exec bash`
+
+</code>
+
+`~/bin` should now be in your current path. To check this, type:
+
+<code>
+
+`$ env | grep PATH`
+
+</code>
+
+You should see a line that starts with `PATH=~/bin`
+
+From now on when you log in or create a new terminal window, `~/bin`
+will be in your current path.
+
+# Install build dependencies
+
+Exactly how to do this will vary from system to system.
+
+## Fedora
+
+On Fedora 12 install at least the following packages:
+
+<code>
+
+`$ yum install intltool gtk-doc liboil-devel`
+
+</code>
+
+And to build plugins needed to use Pitivi, install these packages
+aswell:
+
+<code>
+
+`$ yum install libogg-devel libvorbis-devel libvisual-devel alsa-lib-devel libtheora-devel`
+
+</code>
+
+## Debian/Ubuntu
+
+On debian/ubuntu the following command should suffice:
+
+Save a list of all gstreamer library package names: <code>
+
+`$ apt-cache search --names-only '^(lib)?gstreamer\S*' | sed 's/`$.*$` -.*/\1 /' > dependencies`
+
+</code>
+
+Install the build dependencies for those packages: <code>
+
+`` $ sudo apt-get build-dep `cat dependencies` ``
+
+</code>
+
+## Your Distro Here
+
+Add the directions for your distribution
+
+## Full List of Dependencies
+
+Someone add the full list of build dependencies here.
+
+# Get Latest Gstreamer
+
+## Create a Sources directory
+
+Find a place for your gstreamer sources to go. You could use /usr/src/,
+but I prefer to keep them in my home directory so that I do not need
+root privileges to update them. For example:
+
+<code>
+
+`$ mkdir -p ~/src/gstreamer/head`\
+`$ cd ~/src/gstreamer/head`
+
+</code>
+
+<b>N.B. that the lowest level directory must be called <i>head</i></b>.
+The rest of this tutorial will assume that you are in your sources
+directory.
+
+## Checkout Sources
+
+We're going to check out gstreamer from git. Gstreamer is split up into
+several modules:
+
+-   gstreamer
+-   gst-plugins-base
+-   gst-plugins-good
+-   gst-plugins-bad
+-   gst-plugins-ugly
+-   gst-python
+-   gnonlin
+-   gst-ffmpeg
+
+To check them all out at once...
+
+    $ for i in gstreamer gnonlin gst-plugins-base gst-plugins-good gst-plugins-bad gst-plugins-ugly 
gst-python gst-ffmpeg
+    do
+      git clone git://anongit.freedesktop.org/gstreamer/$i
+    done
+
+To check them out individually, where `module-name` is one of the
+gstreamer modules, do:
+
+<code>
+
+`$ git clone 
`[`git://anongit.freedesktop.org/gstreamer/module-name`](git://anongit.freedesktop.org/gstreamer/module-name)
+
+</code>
+
+# Install GST\_Head Script
+
+We do not want to install gstreamer at this point. gstreamer provides
+the gst-uninstalled script which allows you to temporarily switch your
+Gstreamer to an uninstalled version.
+
+From your sources directory, copy this script to `~/bin` directory:
+
+<code>
+
+`$ cp ~/src/gstreamer/head/gstreamer/scripts/gst-uninstalled ~/bin/gst-head`
+
+</code>
+
+The reason we rename the script is that the bit after the dash (head)
+refers to the sub-directory in `~/src/gstreamer` (in our case, head).
+This allows you to easily have multiple un-installed versions of
+gstreamer.
+
+Now edit this file and look for the `MYGST` line. Change it to this:
+
+<code>
+
+`MYGST=`“`$HOME/src/gstreamer`”
+
+</code>
+
+<b>N.B. Each time you want to use your CVS gstreamer, you will need to
+run this script. Run it like this:</b>
+
+<code>
+
+`$ ~/bin/gst-head`
+
+</code>
+
+# Build Sources
+
+This will take a bit of time. If you have a dual- or quad-core computer,
+you can replace `make` with `make -j2` in all of the following steps to
+speed up the build.
+
+First, we need to build gstreamer:
+
+<code>
+
+`$ cd gstreamer`\
+`$ ./autogen.sh`\
+`$ make`\
+`$ cd ..`
+
+</code>
+
+Now we need to run gst-head. This allows the other plugins to build
+against this gstreamer.
+
+<code>
+
+`$ gst-head`
+
+</code>
+
+You'll notice you're now in the sources directory: this is because the
+gst-head script starts a subshell in this directory. This is how it is
+able to make it appear as though your uninstalled version of gstreamer
+is the current version.
+
+Build all the modules using these commands, where `module-name` is one
+of the gstreamer modules.
+
+<code>
+
+`$ cd module-name`\
+`$ ./autogen.sh`\
+`$ make`\
+`$ exit`\
+`$ gst-head`
+
+</code>
+
+<b>N.B. do <i>not</i> run `make install`</b>
+
+Build the modules in this order:
+
+-   gst-plugins-base
+-   gst-plugins-good
+-   gst-plugins-bad (optional)
+-   gst-plugins-ugly (optional)
+-   gst-python
+-   gnonlin
+-   gst-ffmpeg (optional)
+
+# Congrats
+
+If you got to this step, you should be able to check out the CVS version
+of PiTiVi. Make sure you run
+
+<code>
+
+`$ gst-head`
+
+</code>
+
+before you try to start PiTiVi, or PiTiVi will not find your new
+versions of gstreamer. You will have to do this once every time you log
+in, or every time you want to start PiTiVi in a new terminal. If you
+decide you are done using the new version of gstreamer, you can type
+
+<code>
+
+`$ exit`
+
+</code>
+
+in your terminal to exit the subshell started by running gst-head.
+
+# `gst-inspect` is your friend
+
+This section will explain how to use gst-inspect to verify that your
+installation is complete.
+
+# Updating
diff --git a/docs/attic/GStreamer_using_jhbuild.md b/docs/attic/GStreamer_using_jhbuild.md
new file mode 100644
index 0000000..52a4d11
--- /dev/null
+++ b/docs/attic/GStreamer_using_jhbuild.md
@@ -0,0 +1,218 @@
+# GStreamer using jhbuild
+
+JHBuild is a build tool that automates the process of building the GNOME
+software stack. It is organized somewhat like a package manager and is
+cabable of tracking dependencies between packages. JHBuild elminates a
+great deal of the work of compiling GStreamer manually.
+
+**Warning: The following instructions are not supported** by the PiTiVi
+developers. They are provided for informational purposes only. The
+author takes no responsibility for damage you may cause to your system
+as a result of attempting to follow these instructions. Proceed at your
+own risk! Your results may vary.
+
+# Intended Audience
+
+This document is primarily intended for PiTiVi developers and testers
+who need to test PiTiVi against the latest development versions of
+gstreamer. It is emphatically **not intended for end users** You are
+assumed to be familiar with the process of compiling software from
+source, and how to deal with problems when they arise.
+
+These instructions assume a debian-based system. For non-debian systems,
+replace the apt-get commands and package names with those appropriate
+for your distro.
+
+For more information on JHBUild, see <http://live.gnome.org/Jhbuild>
+
+# Installing GStreamer Using JHBuild
+
+First things first: Make sure your system is up-to-date, and for ubuntu,
+make sure universe, multiverse, etc are enabled in System -&gt;
+Administration -&gt; Software Sources. Then run:
+
+`sudo apt-get install git-core gettext build-essential \`\
+` libglew1.5 libglew1.5-dev python-gtk2-dev autoconf \`\
+` automake1.9 cvs libxml2-dev liboil0.3-dev subversion`
+
+Get some coffee...
+
+## Install GStreamer Build Dependencies
+
+`sudo apt-get build-dep libgstreamer0.10-0 libgstreamer-plugins-base0.10-0 \`\
+`gstreamer0.10-{plugins-{good,bad,ugly},ffmpeg}`
+
+On Debian and Ubuntu Maverick you may also need to install `autopoint`
+
+`sudo apt-get install autopoint && \`\
+`sudo apt-get build-dep libgstreamer0.10-0 libgstreamer-plugins-base0.10-0 \`\
+`gstreamer0.10-{plugins-{good,bad,ugly},ffmpeg}`
+
+Get some more coffee...
+
+To have the x264 encoder (for H.264) available, you should also install
+the **libx264-dev** package.
+
+## Configure Your Environment
+
+If you do not have \~/bin and \~/src directories, create them:
+
+`cd`\
+`mkdir bin`\
+`mkdir src`
+
+If \~/bin and \~/.local/bin are not already in your path, do this:
+
+`echo 'export PATH=${HOME}/bin/:${HOME}/.local/bin:${PATH}' >> ~/.bashrc`\
+`exec bash`
+
+## Install JHbuild
+
+`cd src`\
+`git clone `[`git://git.gnome.org/jhbuild`](git://git.gnome.org/jhbuild)\
+`cd jhbuild`\
+`make -f Makefile.plain`\
+`make -f Makefile.plain install`
+
+## Install gst-jhbuild Script
+
+`cd ~/bin`\
+`cat > gst-jhbuild << `“`EOF`”
+
+And paste the following (then press Enter):
+
+    #!/bin/bash
+
+    JHBUILDFILE=$HOME/src/gstreamer/jhbuild/gstreamer.jhbuildrc
+    jhbuild -f $JHBUILDFILE "$@"
+
+    EOF
+
+Then run:
+
+`chmod +x gst-jhbuild`
+
+## Install JHBuild Config Files for GStreamer
+
+`cd`\
+`mkdir -p src/gstreamer/jhbuild`\
+`cd src/gstreamer/jhbuild`\
+`cat > gstreamer.jhbuildrc << `“`EOF`”
+
+And paste the following:
+
+    # gstreamer.jhbuildrc
+
+    moduleset = [os.path.expanduser('~/src/gstreamer/jhbuild/gstreamer.modules')]
+    modules = [ 'my-gst-all' ]
+    checkoutroot = os.path.expanduser('~/src/gstreamer/repos')
+    prefix = os.path.expanduser('~/src/gstreamer/install')
+    autogenargs = ''
+    autogenargs = autogenargs + ' --disable-static'
+
+    # consider commenting this out on a single-core system or using -j3, -j4 or -j7
+    # on systems with > 2 cores
+    makeargs = "-j2"
+
+    os.environ['ACLOCAL'] = 'aclocal -I ' + prefix + '/share/aclocal/'
+    os.environ['INSTALL'] = os.path.expanduser('~/bin/install-check')
+
+    EOF
+
+If you want to disable building documentation (to save time), use the
+--disable-gtk-doc parameter, like so:
+
+`autogenargs = autogenargs + ' --disable-static --disable-gtk-doc'`
+
+Then run:
+
+`wget 
`[`https://github.com/emdash/gst-jhbuild/raw/f5decae2003b02ce0c19eb677c354649a69ceedb/gstreamer.modules`](https://github.com/emdash/gst-jhbuild/raw/f5decae2003b02ce0c19eb677c354649a69ceedb/gstreamer.modules)
+
+Note: the official gstreamer module set is [available
+here](http://webcvs.freedesktop.org/gstreamer/jhbuild/gstreamer.modules?revision=HEAD).
+Using the official module set may require changes to gstreamer.jhbuildrc
+
+## Build gstreamer
+
+`cd`\
+`gst-jhbuild build`
+
+Get lunch...
+
+# Problems
+
+If you're lucky, you'll have a freshly-built copy of gstreamer when you
+come back from lunch. If you're unlucky, you'll be staring at a prompt
+similar to this one:
+
+    *** Error during phase build of gstreamer: ########## Error running make -j2 *** [1/10]
+
+     [1] Rerun phase build
+     [2] Ignore error and continue to install
+     [3] Give up on module
+     [4] Start shell
+     [5] Reload configuration
+     [6] Go to phase "wipe directory and start over"
+     [7] Go to phase "configure"
+     [8] Go to phase "clean"
+     [9] Go to phase "distclean"
+
+If a build failure occurs, it's probably because one or more of the
+above steps were performed incorrectly. Go back over everything and
+figure out what you did wrong. Likely sources of error are missing
+dependencies. Beyond that, you are assumed to be familiar with the
+process of building software from source and capable of resolving issues
+with software compilation. Having said that, sometimes waiting a few
+minutes and trying again with option \[6\] will magically just work.
+
+One hint you can use to diagnose problems with gstreamer.jhbuildrc and
+gstreamer.modules is to start a subshell and see if the sources build
+normally when you run
+
+`make clean && ./autogen.sh && make`
+
+If the sources build normally in this fashion but not using JHBuild, you
+can bet that JHBuild or its configuration files are to blame.
+
+Option \[4\] will start a shell at that build phase. You can use it to
+tweak the source tree as you see fit, and when you exit the shell you'll
+be returned to the menu where you can resume the build process.
+
+**Note:**
+
+-   if you want to continue build at the configuration phase (i.e.
+    re-run ./configure), do that from the menu! Otherwise, the install
+    phase will fail.
+-   if you change gstreamer.jhbuildrc or gstreamer.modules, you can try
+    to reload the configuration with option \[5\] but in the author's
+    experience, your best bet is to kill and re-start JHBuild.
+
+If you think you've determined that there is a problem with the
+gstreamer.jhbuildrc, gstreamer.modules, or these instructions, report
+this on the PiTiVi irc channel or on the PiTiVi mailing list. We will
+try to keep the JHBuild config files up-to-date.
+
+Keep in mind that the PiTiVi developers want to spend their time working
+on PiTiVi, and any issues you have with gstreamer or its dependencies
+should be taken up with the developers and maintainers of those
+projects. The PiTiVi developers will **not** help you figure out why
+gstreamer dependency XYZ won't build on your box.
+
+# Using Your Installation
+
+Running `jhbuild build` does not replace your system libraries. Instead,
+you run gstreamer applications in a subshell as follows:
+
+`gst-jhbuild run `<your gstreamer application here>
+
+To simply start a shell (to avoid having to keep typing gst-jhbuild with
+repeated invocations):
+
+`gst-jhbuild shell`
+
+When you wish to update GStreamer, run this command:
+
+`gst-jhbuild update && gst-jhbuild build -ac`
+
+Keep in mind that you may encounter build errors when updating as well.
+See the Problems section above.
diff --git a/docs/attic/How_To_Hack_On_PiTiVi:_Two_Case_Studies.md 
b/docs/attic/How_To_Hack_On_PiTiVi:_Two_Case_Studies.md
new file mode 100644
index 0000000..e75bab7
--- /dev/null
+++ b/docs/attic/How_To_Hack_On_PiTiVi:_Two_Case_Studies.md
@@ -0,0 +1,88 @@
+# How To Hack On PiTiVi: Two Case Studies
+
+You can think of this article as a complement to the more traditional
+API reference. Rather than laboriously enumerate class relationships and
+API speficications, we will follow the implementation of two features
+from the initial concept to the final implementation. Along the way, we
+introduce various components of PiTiVi's design on an as-needed basis.
+Hopefully, you'll emerge on the other side with a better understanding
+of how to modify PiTiVi.
+
+The two features we will be examining are *interpolation curves* and
+*still images*. *Interpolation cuves* are an example of an intrusive
+change that expands PiTiVi's fundamental capabilities. We will see how
+adding capabilities to TrackObjects creates rippling changes in many
+other parts of PiTiVi. *Still Image* support is a good example of how to
+implement new SourceFactory objects and how to implement new GStreamer
+objects in python.
+
+# Interpolators
+
+Many NLEs provide a mechanism for editing time-varying values, such as
+audio volume and clip opacity. GStreamer exposes this ability through
+`gst.Controller` and supporting classes. The design documents for pitivi
+show a number of mock-ups which include keyframe curves overlaid
+directly atop track-objects in the time-line. We will develop this
+feature using the `gst.Controller` API to provide the actual
+functionality.
+
+## Proof Of Concept Demo
+
+First, we should familiarize ourselves with the `gst.Controller` API.
+Let's create an automated of existing `videobalance` demo.
+
+![](Color_balance_pipeline.png "Color_balance_pipeline.png")
+
+    Exerpt 1
+
+The trick now is to control one or more of the `videobalance` element's
+properties with a `gst.Controller`. First we create a controller, and
+bind it to the element's properties.
+
+    Excerpt 1
+
+Then, we add a series of control points. Since we're trying to test out
+this functionality, let's choose a test pattern that will be easy to
+detect.
+
+![](interpolator_test_pattern.png "interpolator_test_pattern.png")
+
+The code to add this curve is pretty straightforward:
+
+    We create the
+
+## UI Interaction Demo
+
+This next demo is a prototype keyframe interface.
+
+## Defining the API
+
+## Dummy Back-end Implementation
+
+## Develop and Test the UI
+
+## Making the Back-end Do Something
+
+### Providing Access to Required Elements
+
+## Extending the Project Formatters
+
+## Integrating into the Undo System
+
+## Unsolved Issues
+
+# Still Images
+
+## Proof of Concept Demo
+
+## Initial Implementation
+
+### Changes to Discoverer
+
+### New SourceFactory Type
+
+## Issues with the Freeze Element
+
+## Writing a Python Freeze Element
+
+## Final Implementation
diff --git a/docs/attic/Notes_On_FCP.md b/docs/attic/Notes_On_FCP.md
new file mode 100644
index 0000000..f947d37
--- /dev/null
+++ b/docs/attic/Notes_On_FCP.md
@@ -0,0 +1,73 @@
+# Notes On FCP
+
+These are some of the notes I made while reading tutorials for Final Cut
+Pro, version 6. I have only done some minor editing, and they appear in
+nearly their original form. These are just my observations from viewing
+screenshots: It is very possible that I have mis-interpreted or missed
+some important details altogether.
+
+-Brandon
+
+# The Notes
+
+there are three kinds of tasks
+
+-   acquisition
+-   editing
+-   mastering/output
+
+timeline clips only have name and single thumbnail. single playback head
+decends from timeline ruler across entire timeline video and audio
+tracks are separated from each other in separate panes.
+
+each track (audio/video) conatins: enable/disable button, label, lock,
+two other unidentified markings. tracks appear slightly translucent,
+with 3d beveled edges.
+
+zoom control appears to be logarithmic scale, and is a horizontal
+slider. rather unsightly mix of aqua, carbon, and custom widgets.
+
+when you import the first clip, final cut asks you if you want to
+conform the project/sequence settings to the clip.
+
+smoothcam filter (wow)
+
+filters can be applied to clips in the browser or in the timeline
+
+some filters need to “analyze” the clip before being used. this data is
+saved separately from the clip.
+
+you can normalize audio clips to a peak decibel
+
+you can make realtime adjustments to filters applied to a clip, but
+there is also a keyframe editor.
+
+audio volume is adjustable by manipulating keyframes overlayed on top of
+the waveform (rendered into the audio clip)
+
+portions of the timeline can be sent to other studio applications. when
+you save the project in another studio application, the relevant portion
+of the final cut timeline is updated in place.
+
+in general apple seems to have broken off pieces of the post production
+workflow into separate applications that all understand finalcut's file
+format (and possibly use other mechanisms to communicate)...this might
+be a UI design choice -- to emphasize the application scope, or it might
+simply be to help maximize revenues.
+
+do we have a codec alternative for ProRes 422?
+
+effects are edited with the “canvas” window, which presents a clip
+viewer on top, and an editing timeline on the bottom for setting
+keyframes.
+
+FCP has stock objects, like colour mattes which can help create title
+keys, frames, and backdrops.
+
+FCP allows the use of external title applications
+
+transitions seem to come before the clips they modify, in line with them
+on the same track. not yet clear to me whether the visual size of the
+transition has anything to do with its duration, or whether the visual
+width of the modified clip changes (shrinks) in response to the
+transition's presence.
diff --git a/docs/attic/Performance_problems.md b/docs/attic/Performance_problems.md
new file mode 100644
index 0000000..8e1165e
--- /dev/null
+++ b/docs/attic/Performance_problems.md
@@ -0,0 +1,4 @@
+# Performance problems
+
+See the [current list of performance
+bugs](https://bugzilla.gnome.org/buglist.cgi?keywords=perf%20memory;query_format=advanced;keywords_type=anywords;bug_status=UNCONFIRMED;bug_status=NEW;bug_status=ASSIGNED;bug_status=REOPENED;bug_status=NEEDINFO;product=pitivi).
diff --git a/docs/attic/PiTiVi_on_Windows.md b/docs/attic/PiTiVi_on_Windows.md
new file mode 100644
index 0000000..8ce3c00
--- /dev/null
+++ b/docs/attic/PiTiVi_on_Windows.md
@@ -0,0 +1,162 @@
+# Status
+
+Andoni Morales [sent a post to
+gst-devel](http://www.nabble.com/Re:--gst-devel---PiTiVi-running-on-Windows-XP-td23885580.html)
+with a screenshot of pitivi 0.13.1 running on windows, which got the
+ball rolling. Andoni develops
+[LongoMatch](http://www.longomatch.ylatuya.es/) a gstreamer/gnonlin app
+that runs on windows, even with an installer!
+
+Andoni also set up [WinBuilds for
+Gstreamer](http://www.gstreamer-winbuild.ylatuya.es) which we'll
+definitely need. However, no-one's heard from Andoni since, I guess he's
+busy working on LongoMatch :)
+
+I gave it a go and got fairly close, but not being a hardcore gstreamer
+dev, and with the versions continually moving underneath my feet, I
+didn't get it all the way.
+
+-   Summary: Obscure bug in pygstreamer that may or may not be fixed
+    with fresh builds of winbuilds and python bindings...
+
+# Dependencies
+
+Starting with PiTiVi 0.13.3, you need the latest version of Gstreamer
+for windows you can get. You also need a compatible version of
+GST-python, both of these come from
+[WinBuilds](http://www.gstreamer-winbuild.ylatuya.es/doku.php?id=download)
+
+As of today, you'll need python 2.5, as we'll see in a minute...
+
+You also need GTK for windows, and pygtk. GTK comes from [gnome win32
+binaries](http://ftp.gnome.org/pub/GNOME/binaries/win32/gtk+/) but as
+for what version, that's a rabbit hole we need to follow first.
+
+To use PyGtk, we need PyGObject and PyCairo. Fortunately, these all come
+from [pygtk.org](http://www.pygtk.org/downloads.html) The latest version
+of PyGtk is 2.12 at the time of writing, so that dicatates what bundle
+of GTK we download. The matching version of PyGObject only has a Python
+2.5 installer, which is where our python 2.5 requirement comes from.
+
+For PyCairo, I just picked the latest version with a python 2.5
+installer, but I didn't get far enough to verify that.
+
+You'll also need libglade, which is not part of GTK. You can get it from
+[gnome win32
+binaries](http://ftp.gnome.org/pub/GNOME/binaries/win32/libglade/) I
+just installed the latest.
+
+## Installation
+
+The Py\* packages have installers which “do the right thing” for your
+python intallation. GTK is simply a bundle of dlls, which need to be
+added to your path. From System Properties (winkey-break or right click
+“my computer” and choose properties") click on Advanced, then
+Environment Variables at the bottom. You need to add the path to the
+extract gtk bin directory to the PATH variable, for either the system or
+the user, doesn't matter.
+
+libglade just has a single dll that needs to be in the path as well. I
+found that easiest by just dropping it into the GTK bin directory.
+
+## Verifying the setup
+
+### PyGst and GST
+
+To test that gst and pygst are installed correctly, importing them
+shouldn't give any errors...
+
+    Python 2.5.4 (r254:67916, Dec 23 2008, 15:10:54) [MSC v.1310 32 bit (Intel)] on
+    win32
+    Type "help", "copyright", "credits" or "license" for more information.
+    >>> import pygst
+    >>> pygst.require("0.10")
+    >>> import gst
+    >>>
+
+### PyGtk and GTK and glade
+
+Just like for gst, importing this should work too....
+
+    Python 2.5.4 (r254:67916, Dec 23 2008, 15:10:54) [MSC v.1310 32 bit (Intel)] on
+    win32
+    Type "help", "copyright", "credits" or "license" for more information.
+    >>> import pygtk
+    >>> pygtk.require("2.0")
+    >>> import gtk
+    C:\python25\lib\site-packages\gtk-2.0\gtk\__init__.py:69: Warning: Passing a non
+    -NULL package to g_win32_get_package_installation_directory() is deprecated and
+    it is ignored.
+      _gtk.init_check()
+    >>> from gtk import glade
+    >>>
+
+The warning seeeems to be harmless....
+
+# PiTiVi itself!
+
+PiTiVi uses autotools to generate a few things, mostly detecting the
+libraries and setting up translations. I didn't have autotools, and
+didn't feel like installing them. You can edit bin/pitivi.in to manually
+fix the paths, and if you're happy running without i18n, you can skip
+building the translation files too.
+
+I wasn't clever enough to fix the paths though.... :(
+
+    C:\junk\pitivi-0.13.3>\python25\python bin\pitivi.py
+    Couldn't set locale !, reverting to C locale
+    C:\python25\lib\site-packages\gtk-2.0\gtk\__init__.py:69: Warning: Passing a non
+    -NULL package to g_win32_get_package_installation_directory() is deprecated and
+    it is ignored.
+      _gtk.init_check()
+    Couldn't set locale !, reverting to C locale
+    Traceback (most recent call last):
+      File "bin\pitivi.py", line 118, in <module>
+        _run_pitivi()
+      File "bin\pitivi.py", line 111, in _run_pitivi
+        import pitivi.application as ptv
+      File "C:\junk\pitivi-0.13.3\bin\pitivi.py", line 118, in <module>
+        _run_pitivi()
+      File "C:\junk\pitivi-0.13.3\bin\pitivi.py", line 111, in _run_pitivi
+        import pitivi.application as ptv
+    ImportError: No module named application
+
+I'm sure someone with an ounce of pythonfoo could fix that, so I
+proceeded to do the steps manually, and here we reach the end of the
+line, a bizarre bug in gstreamer? `bilboed-pi` suggests that this is
+caused by PiTiVi 0.13.3 requiring pygst 0.10.16.x, while the current
+winbuilds only provides 0.10.15.1. `laszlok` reported that he gets this
+error singledecodebin in python2.5 and pygst is compiled for python2.6
+So there's possibly another bug there. Bilboed-pi wants to push Andoni
+and co to update winbuilds so we can get 0.10.16.x and we can try again.
+
+    C:\junk\pitivi-0.13.3>\python25\python
+    Python 2.5.4 (r254:67916, Dec 23 2008, 15:10:54) [MSC v.1310 32 bit (Intel)] on
+    win32
+    Type "help", "copyright", "credits" or "license" for more information.
+    >>> import pygtk
+    >>> pygtk.require("2.0")
+    >>> import gtk
+    C:\python25\lib\site-packages\gtk-2.0\gtk\__init__.py:69: Warning: Passing a non
+    -NULL package to g_win32_get_package_installation_directory() is deprecated and
+    it is ignored.
+      _gtk.init_check()
+    >>> import gobject
+    >>> gobject.threads_init()
+    >>> gobject.threads_init()
+    >>> from gtk import glade
+    >>> import pygst
+    >>> pygst.require("0.10")
+    >>> import gst
+    >>> import pitivi.application
+    Traceback (most recent call last):
+      File "<stdin>", line 1, in <module>
+      File "application.py", line 41, in <module>
+      File "pitivi\device.py", line 28, in <module>
+        from pitivi.factories.base import ObjectFactory, SourceFactory
+      File "pitivi\factories\base.py", line 29, in <module>
+        from pitivi.elements.singledecodebin import SingleDecodeBin
+      File "pitivi\elements\singledecodebin.py", line 409, in <module>
+        gobject.type_register(SingleDecodeBin)
+    TypeError: __gsttemplates__ attribute neither a tuple nor a GstPadTemplate!
+    >>>
diff --git a/docs/attic/Project_file_format.md b/docs/attic/Project_file_format.md
new file mode 100644
index 0000000..99f1625
--- /dev/null
+++ b/docs/attic/Project_file_format.md
@@ -0,0 +1,77 @@
+# Preamble
+
+Although video editors are complex by nature, the information they need
+to create a timeline is rather lightweight compared to the data they
+process. There is therefore no need to create a memory-efficient and/or
+binary file format. It is more important to have an format which is
+**easy to parse and extensible**, an **XML-based** format is therefore
+chosen.
+
+# Requirements
+
+The various information we need to store can be summarized in 3
+categories:
+
+-   **Global project information**
+    -   metadata: title, comment, revision history, authors, ...
+    -   sources, ...
+    -   export settings, ...
+    -   ...
+-   **Timeline specific information**
+    -   tracks, layers
+    -   layout of sources/effects/transitions,
+    -   ...
+-   **Extensions information**
+    -   Parsing/Serializing done by extension plugins.
+
+# Specification
+
+# Implementation sample
+
+**This page was a draft from 2007**. It badly needs to be updated. Help
+welcome!
+
+<?xml version="1.0"?>
+<project xmlns='http://www.pitivi.org/projectxml'>\
+`  `<formatversion>`1`</formatversion>\
+`  `
+
+<title>
+Insane video
+
+</title>
+`  `<comment>\
+`    This is my very first video done with PiTiVi.`\
+`  `</comment>\
+`  `<authors>\
+`    `<author id="0" name="Edward Hervey" />\
+`    `<author id="1" name="George Lucas" />\
+`  `</authors>\
+`  `<history>\
+`    `<revision id="0" date="Mon 25 Sep 2006 12:00" who="0" >`Initial version`</revision>\
+`    `<revision id="1" date="Mon 25 Sep 2006 12:25" who="1" />\
+`  `</history>\
+`  `<sources>\
+`    `
+
+`  `</sources>\
+`  `<timeline>\
+`    `<composition type="video">\
+`      `<transitions>\
+`        `<transition type="fade" start="2000000000" duration="2000000000" />\
+`      `</transitions>\
+`      `<sources>\
+`        `
+
+``` {startFrom="0"}
+```
+
+`      `</sources>\
+`    `</composition>\
+`    `<composition type="audio">\
+`      `<transitions>\
+`        `<transition start="2000000000" duration="200000000" />\
+`      `</transitions>\
+`    `</composition>\
+`  `</timeline>\
+</project>
diff --git a/docs/attic/Project_loading_and_saving.md b/docs/attic/Project_loading_and_saving.md
new file mode 100644
index 0000000..dd92e3a
--- /dev/null
+++ b/docs/attic/Project_loading_and_saving.md
@@ -0,0 +1,556 @@
+# Project loading and saving
+
+File load/save support in PiTiVi is seemingly simple; however, it has do
+be done properly, or user experience will suffer. That is the motivation
+for this rather lengthy design document.
+
+The following document is partially based on a patch supplied by Richard
+Boulton, including comments and documentation strings. As the patch no
+longer cleanly applies, I have been asked to re-work it into a design
+document so that we can determine how best to incorporate his ideas.
+
+# Use Cases
+
+There are 4 states and 4 commands, giving the user a total of 14
+possible scenarios that users might encounter (the initial state does
+not allow for two of the commands).
+
+## “Save” vs. “Save As”
+
+“Save As” will be treated as a special case of “Save” for the purposes
+of this document. When the “Save As” command is issued, the user will be
+asked to supply a file path, and the project will be saved. From then
+on, pitivi will be editing the file pointed to by the new file path,
+rather than the previous one. In all other respects, “Save As” is
+identical to “Save”. When a “Save” command is given on a new project,
+the scenario will be identical to the “Save As” scenario.
+
+## Overwriting Modified Files
+
+Before saving, PiTiVi checks to see if the file has been modified since
+the last save. When a file has changed on disk, the user will be
+prompted to ask if it is acceptable to overwrite the file. PiTiVi will
+not check to see if the file has been altered except in these
+circumstances.
+
+## PiTiVi Save States Visible to User
+
+1.  Initial state
+    1.  Pitivi can be launched with, or without the path to a project
+        which can be automatically loaded
+2.  Unmodified project state
+    1.  pitivi is running, and the current project is unmodified since
+        the last save operation
+3.  Modified project state
+    1.  pitivi is running, and the current project has been modified
+        since the last save operation.
+    2.  A save operation implicitly returns PiTiVi to the unmodified
+        state
+
+## PiTiVi Save/Load Commands Visible to User
+
+1.  New project
+2.  Save Project
+3.  Save Project As
+4.  Load Project
+
+## Things Invisible to User
+
+PiTiVi only edits a single project at a time. Consequently, implicit in
+the New, Save, and Save As commands is the “Close Project” command.
+Since PiTiVi's UI must always display a project, a “Close Project”
+command would be identical to the “New Project” command. Based on this,
+it makes sense to omit “Close Project” from the UI. Nevertheless, it
+should still be considered a command that is part of this module, for
+the sake of code reuse.
+
+## Load/Save Behavior
+
+PiTiVi should follow the established convention for large applications
+of keeping unsaved changes in a temporary file to minimize the potential
+amount of work lost due to crashes, power failures, accidental quits,
+etc. After a user-specifiable interval, unsaved changes will be saved to
+a temporary file. In addition to this, PiTiVi should not directly
+overwrite a file when saving, but instead back up the original file
+first.
+
+## PiTiVi Use Cases Visible to User
+
+1.  Initial State, No Project Path Argument
+    1.  PiTiVi initializes and displays a blank project
+2.  Initial State, With Project Path Argument
+    1.  PiTivi initializes and loads the specified project from disk
+3.  Unmodified Project State, New Project Command
+    1.  A new project is loaded.
+4.  Unmodified Project State, Save Project Command
+    1.  Nothing happens
+5.  Unmodified Project State, Save Project As Command
+    1.  A dialog prompts the user for a new project path
+    2.  The current project is saved under this new path
+6.  Unmodified Project State, Load Project Command
+    1.  A dialog prompts the user to open a new file
+    2.  The new file is loaded, replacing the current project
+7.  Unmodified Project State, Save Project Command, File Changed On Disk
+    1.  A Dialog is displayed presenting choices of “Overwrite”, “Save
+        As”, and Cancel
+        1.  overwrite: the project is saved over the top of the original
+        2.  user interaction proceeds as if “Save As” had been issued
+        3.  cancel: the save operation is canceled
+8.  Unmodified Project State, Save Project As Command, (or file already
+    exists)
+    1.  File chooser dialog prompts user for filepath
+    2.  If the file exists at all, then the overwrite confirmation
+        dialog is displayed offering the following choices
+        1.  overwrite: the project is saved over the top of the existing
+            file
+        2.  save as: file is saved over the top of the existing file
+        3.  cancel: the save operation is canceled
+9.  Unmodified Project State, Load Project Command, File Changed On Disk
+    1.  Identical to Unmodified, Load Project where original file is
+        unchanged
+10. Modified Project State, New Project Command
+    1.  Close Project confirmation dialog displayed, presenting choices
+        of “Save”, “Dont' Save”, and “Cancel”
+        1.  Cancel: a new project is not created, and the old project is
+            not saved
+        2.  Don't Save: the new project will replace the current, and it
+            will not be saved
+        3.  Save: The project is saved, and a new project is created.
+11. Modified Project State, Save Project Command
+    1.  If the project has not been saved before, this scenario is
+        identical to choosing “Save As”.
+    2.  If the project has been saved before, the project simply
+        overwrites the old one on disk.
+12. Modified Project State, Save As Project Command
+    1.  A dialog prompts the user save a new file
+    2.  The file is saved under the new path
+    3.  PiTiVi continues editing the project under the new pathname
+13. Modified Project State, Load Project Command
+    1.  Close Project Confirmation Dialog displayed, presenting choices
+        of “Save”, “Don't Save”, and “Cancel”
+        1.  Cancel: the project is not loaded, and the old project is
+            not saved
+        2.  Don't Save: the current project will not be saved, but the
+            user will be prompted to load a project
+        3.  Save: The project is saved, and the user is prompted to load
+            a project
+14. Modified Project State, Save Project Command, File Changed On Disk
+    1.  A confirm overwrite dialog is displayed presenting choices of
+        “Overwrite”, “Save As”, and “Cancel”
+15. Modified Project State, Save As Project Command, File Changed On
+    Disk
+    1.  Identical to Modified State, Save As
+16. Modified Project State, Load Project Command, File Changed On Disk
+    1.  Identical to Modified State, Load Project Command
+
+# Application Logic
+
+The high level application logic is relatively straight forward. The
+coding will not be, due to the nature of the GObject/Gtk. The logic is
+divided into four operations. these are “New”, “Load”, “Save”, and
+“Close”. The “Close” process is not directly operation by the user, but
+is performed any time the current project is to be replaced.
+
+Image:New flowchart.png|Logic for creating a new project Image:Load
+flowchart.png|Logic for loading an existing project Image:Save
+flowchart.png|Logic for saving a project (both “Save” and “Save As”)
+Image:Close flowchart.png|Logic for closing a project
+
+At the lower level, the application logic will be implemented through
+signals, and callbacks.
+
+The core classes will provide public methods for initiating the
+operations of saving, loading, and creating new projects. If the core
+needs user input, it will emit the appropriate signal, passing a
+reference to a callback. If the UI determines that further action is
+necessary by the system, the UI then returns control to the system by
+calling the callback. This means that system code could be split into
+two functions, the public interface which initiates the action, and the
+deferred callback which finalizes the action.
+
+# Native file format
+
+While PiTiVi should make every effort to support a wide range of file
+formats, most of these will be through external plugins. PiTiVi provides
+a reference implementation that uses Python's cPickle module to
+serialize and deserialize data in the intermediate format.
+
+# Pluggable Saving Backend
+
+One goal of PiTiVis is to work work with a wide variety of project file
+formats.
+
+The `ProjectSaver` class coordinates the work of saving, loading, and
+validating project data. The class works with an intermediate format
+which concisely represents the project. Everything contained within a
+project (sources, transitions, effects, compositions, settings, etc)
+must implement the `Serializable` interface, which includes the
+`toDataFormat()` and `fromDataFormat()` methods. These methods convert
+to and from this intermediate format.
+
+Multiple file formats can be supported by sub-classing `ProjectSaver`
+These classes must provide `dump()` and `load()` methods for the file
+format they implement. Users of the ProjecSaver's public interface can
+use the methods `saveToFile(), openFrom File, listFormats()`, and
+`newProjectSaver`. These methods are summarized in the following table:
+
+<table>
+<tr>
+<td>
+<strong>Method Name</strong>
+
+</td>
+<td>
+parameters
+
+</td>
+<td>
+purpose
+
+</td>
+</tr>
+<tr>
+<td>
+`saveToFile`
+
+</td>
+<td>
+`tree, output_stream`
+
+<td>
+write project data to file
+
+</td>
+</tr>
+<tr>
+<td>
+`openFromFile`
+
+</td>
+<td>
+`tree, output_stream`
+
+<td>
+read project data from file
+
+</td>
+</tr>
+<tr>
+<td>
+`@classmethod newProjectSaver`
+
+</td>
+<td>
+`fmt` - string representing the project file format
+
+<td>
+return a new projectSaver instance
+
+</td>
+</tr>
+<tr>
+<td>
+`@classmethod listFormats`
+
+</td>
+<td>
+<td>
+return a list of strings representing project file formats
+
+</td>
+</tr>
+</table>
+## The intermediate data structure
+
+The following example assumes the following:
+
+-   There are 5 media sources located in the same directory as the
+    project
+    -   Three video files `video1.ogm, video2.ogm`, and `video4.ogm`
+    -   Two audio files `audio1.ogg`, and `audio2.ogg`
+-   The project output format is 320x240 resolution, 15fps video and
+
+Of these sources, only 4 have been added to the timeline (time-stamps
+given in h:mm:ss.sss):
+
+-   video1.ogm:
+    -   media-start: 0:00:02:0.000
+    -   media-duration: 0:00:37.000
+    -   start: 0:00:00.000
+    -   duration: 0:00:37.000
+-   video2.ogm:
+    -   media-start: 0:00:00:0.000
+    -   media-duration: 0:00:30.242
+    -   start: 0:00:00.37.000
+    -   duration: 0:00:30.242
+-   video1.ogm:
+    -   start: 0:01:7.242
+    -   duration: 0:00:20.0
+    -   media-start: 00:30:00.000
+    -   media-duration: 00:00:20.0
+-   audio1.ogm
+    -   media-start: 00:00:00.000
+    -   media-duration: 00:01:27.242
+    -   start: 00:00:00.000
+    -   duration: 00:01:27.242
+-   audio2.ogm:
+    -   media-start: 0:00:00:00.000
+    -   media-duration: 0:00:05.200
+    -   start: 0:00:45.127
+    -   duration: 0:00:5.2
+
+In this example, media-duration and timeline duration correspond. This
+is not necessarily the case, however.
+
+The equivalent python data structure will look like this (currently
+incomplete):
+
+<code>
+
+project = {
+
+“`timeline`”` : {`\
+`    `“`compositions`”` :`\
+`    (`\
+`        {`\
+`              `“`type`”`: `“`video`”`,`\
+`              `“`sources`”` :`\
+`              (`\
+`                    {`\
+`                        `“`project-source`”` : `<ref to video1.ogm source definition>`,`\
+`                        `“`start`”`:0,`\
+`                        `“`duration`”`: 37000,`\
+`                        `“`media-start`”`: 120000,`\
+`                        `“`media-duration`”`: 37000`\
+`                    }`\
+`                    {`\
+`                        `“`project-source`”` : `<ref to video2.ogm source definition>`,`\
+`                        `“`start`”`: 37000,`\
+`                        `“`duration`”`: 30242,`\
+`                        `“`media-start`”`: 67242,`\
+`                        `“`media-duration`”`: 30242,`\
+`                    }`\
+`                    {`\
+`                        `“`project-source`”` : `<rref to video1.ogm source definition>`,`\
+`                        `“`start`”`: 67242,`\
+`                        `“`duration`”`: 20000,`\
+`                        `“`media-start`”`: 30000,`\
+`                        `“`media-duration`”`: 20000`\
+`                    }`\
+`              )`\
+`         },`
+
+`         {`\
+`            `“`type`”` : `“`audio`”`,`\
+`            `“`sources`”` : (`\
+`                  {`\
+`                        `“`project-source`”` : `<ref to audio1.ogg source definition>`,`\
+`                        `“`start`”`: 0,`\
+`                        `“`duration`”`: 87242,`\
+`                        `“`media-start`”`: 0,`\
+`                        `“`media-duration`”`: 87242`\
+`                    }`\
+`                    {`\
+`                        `“`project-source`”` : `<ref to audio2.ogg source definition>`,`\
+`                        `“`start`”`: 45127,`\
+`                        `“`duration`”`: 5200,`\
+`                        `“`media-start`”`: 0,`\
+`                        `“`media-duration`”`: 5200`\
+`                    }`\
+`             )`\
+`         }`\
+`    )`\
+`  },`
+
+`  `“`sources`”` : ....`
+
+`  `“`settings`”` : ....`
+
+} </code>
+
+More specifically, the project is composed python dictionaries, tuples,
+and strings. It could be thought of as a “tree” but it is really more of
+a “deep dictionary,” with several levels of nesting. Each dictionary
+contains a key called “datatype” which identifies what the kind of
+object it is. Optional keys are not required to exist, but you must
+handle them if they do.
+
+### Project
+
+The project is the root of the “tree.” It is a dictionary, with three
+keys:
+
+-   `datatype` -- “project”
+-   `timeline` -- maps to a tuple of “Composition” dictionaries (see
+    below)
+-   `sources` -- maps to a “source-list”
+-   `settings` --maps to a dictionary of project-specific settings (the
+    ExportSettings field of a Project object)
+
+### Compositions
+
+The composition field represents a PiTiVi timeline composition element.
+There is one main timeline per project, but sub-compositions can be
+represented as well. A sub composition is represented as a source
+dictionary whose ID field refers to a composition dictionary as defined
+here. This allows multiple instances of the same composition in the
+timeline, as well as allowing only part of the composition to be used.
+
+-   `datatype` -- “timeline-composition”
+-   `sources` -- maps to a tuple containing source dictionaries. (see
+    below)
+-   `effects` (optional) -- maps to a tuple of effects dictionaries (see
+    bleow)
+-   `transitions` (optional) -- maps a tuple of transitions dictionaries
+    (see below)
+
+#### Source (composition)
+
+This represents a source object in a timeline. It is a dictionary
+containing the following keys:
+
+-   `datatype` -- “timeline-source”, “timeline-live-source”,
+    “timeline-blank-source”
+-   `id` -- maps to a reference to a source in this project's sources
+    list or to a composition
+-   `start` -- maps to an integer in gnonlin time format (milliseconds).
+    the start of the source in the timeline.
+-   `duration` -- maps to an integer in gnonlin time format. how long
+    the source lasts in the timeline.
+
+There is also the FileSource, which has the same properties as above,
+but also the following:
+
+-   `datatype` -- “timeline-file-source”
+-   `media-start` -- where the source starts in the media, in gnonlin
+    time units
+-   `media-duration` -- how long the source plays the media, in gnonlin
+    time units
+-   `volume` (optional) -- a real number, 0 being mute, 1 being original
+    source volume, and &gt; 1 being some multiple of source volume.
+
+### SourceList
+
+Represents a list of source factories in a project. Source factories are
+objects which can create timeline sources. The source-list is a
+dictionary containing:
+
+-   `datatype` -- “source-list”
+-   `source-factories` -- maps to a list containing “source-factory”
+    dictionaries.
+
+#### Source Factory
+
+Represents a source factory in the project sources list. It is a
+dictionary containing the following keys:
+
+-   `datatype` -- “file-source-factory”, “operation-factory”,
+    “simple-operation-factory”, “transition-factory”, “SMPTE-factory”
+-   `uid` -- an id mapping to the object's unique id
+
+### Settings
+
+Project-specific settings are as follows. This section is incomplete
+
+-   `datatype` -- “export-settings”
+-   `videowidth`
+-   `videoheight`
+-   `videorate`
+-   `audiochans`
+-   `audiorate`
+-   `audiodepth`
+-   `vencoder`
+-   `aencoder`
+-   `containersettings`
+-   `acodecsettings`
+-   `vcodecsettings`
+
+### Formats for Unimplemented Features
+
+A number of features are planned for future releases of PiTiVi. Handling
+these is currently considered optional, and these specifications are
+subject to change.
+
+#### Transitions
+
+Transitions and effects have not yet been implemented in PiTiVi. This
+This represents a transition object in a timeline. It is a dictionary
+containing the following keys:
+
+-   `type` -- maps to a string naming the transition to apply. valid
+    names have not yet been established.
+-   `start` -- the start of the transition in the timeline, (see
+    Source(Timeline) above)
+-   `duration` -- maps to the duration of the transition in the timeline
+    (see Source(Timeline above)
+-   `parameters` -- maps to the parameters of the transition, which are
+    specific to each transition. specifications for these have yet to be
+    established.
+
+#### Effects
+
+-   `type` -- maps to a string naming the effect to apply. valid names
+    have not yet been established
+-   `start` -- maps to the start of the effect in the timeline (see
+    Source(Timeline above)
+-   `duration` -- maps to the duration of the effect in the timeline
+    (see Source(Timeline) above)
+-   `parameters` -- maps to the parameters of the effect, which are
+    specific to each effect. specifications for these have yet to be
+    established.
+
+## Implementing other File Formats
+
+TODO: explain how to implement a file format as a plugin
+
+Support for a variety of formats will be provided by plugins which
+implement the `ProjectSaver` interface. A reference implementation
+exists in projectsaver.py, called PickleFormat.
+
+When implementing a custom file format, you should subclass
+ProjectSaver. Your child class should define:
+
+-   the doc string for the class. It should contain a brief,
+    human-readable description of the file format your class implements
+-   `__file_format__` -- a string used by pitivi to represent your
+    format
+-   `__extensions__` -- a list of valid file extensions for the module.
+-   `dump(tree, output_stream)` -- a method which converts the
+    intermediate representation `tree` into your file format, and writes
+    it to the open file object `output_stream`
+-   <code>load(input\_stream) -- a method which reads from the open file
+    object `input_stream` and returns an object in the intermediate
+    representation
+
+## Test Cases
+
+### Unit Test Cases
+
+#### Test Serialization of Objects
+
+1.  Test the serialization methods of each kind of object. Create an
+    object with known parameters, then test that the python object
+    returned is as expected
+2.  Test deserialization methods of each kind of object. Create a python
+    data structure with known parameters, check that the timeline object
+    returned is as expected
+
+#### Test tree traversal code
+
+1.  Create a complicated project data structure with nested
+    compositions. Test that it is properly converted into a Project
+    object.
+2.  Test project serialization code. Create a complicated project using
+    the available interface functions. Test that the project is properly
+    serialized into python data structure. Do deep comparison of
+    generated tree and expected tree
+
+#### Test file processing code
+
+1.  Take a tree representing a complicated project, and save it to a
+    file. Load the file back from disk, and compare the trees. They
+    should be identical. Note: here we can saving/loading of features
+    which are not yet implemented in PiTiVi.
+2.  Test everything. Create a project using the available interface.
+    Save the project using the high-level interface. Load the project.
+    The two projects should be identical.
diff --git a/docs/attic/PyGST_Tutorial.md b/docs/attic/PyGST_Tutorial.md
new file mode 100644
index 0000000..40f9a8d
--- /dev/null
+++ b/docs/attic/PyGST_Tutorial.md
@@ -0,0 +1,39 @@
+# PyGST Tutorial
+
+If the documentation on this wiki is not enough, you can also look at
+the [pygstdocs
+tutorial](http://pygstdocs.berlios.de/pygst-tutorial/index.html)
+
+## Articles
+
+1.  [Acknowledgements](PyGST_Tutorial/Acknowledgements.md)
+2.  [Introduction](PyGST_Tutorial/Introduction.md)
+3.  [Getting Started](PyGST_Tutorial/Getting_Started.md)
+4.  [Effects](PyGST_Tutorial/Effects.md)
+5.  [Combining Audio and
+    Video](PyGST_Tutorial/Combining_Audio_and_Video.md)
+6.  [States, and the
+    Bus](PyGST_Tutorial/States,_and_the_Bus.md) \*
+7.  [Position, Duration, and
+    Seeking](PyGST_Tutorial/Position,_Duration,_and_Seeking.md) \*
+8.  [How To Hack On PiTiVi: Two Case
+    Studies](How_To_Hack_On_PiTiVi:_Two_Case_Studies.md) \*
+
+(\*) Incomplete
+
+### Creating New Elements
+
+1.  [Elements: basics](PyGST_Tutorial/Elements:_basics.md) \*
+
+## Demonstration Listings
+
+1.  [demo.py](demo.py.md)
+2.  [simple-effect.py](simple-effect.py.md)
+3.  [cross-fade.py](cross-fade.py.md)
+4.  [audio\_video.py](audio_video.py.md)
+5.  [audio\_video\_crossfade.py](audio_video_crossfade.py.md)
+6.  [enhanced\_demo.py](enhanced_demo.py.md) (replaces demo.py
+    in later articles)
+
+[Category:Developer
+documentation](Category:Developer_documentation.md)
diff --git a/docs/attic/PyGST_Tutorial/Acknowledgements.md b/docs/attic/PyGST_Tutorial/Acknowledgements.md
new file mode 100644
index 0000000..803fcad
--- /dev/null
+++ b/docs/attic/PyGST_Tutorial/Acknowledgements.md
@@ -0,0 +1,8 @@
+# PyGST Tutorial/Acknowledgements
+
+My thanks goes out to the following:
+
+-   Stephen Griffiths, for pointing out that I should use `decodebin2`
+    if possible.
+-   Tomas Cernaj, for letting me know about the necessity of calling
+    `gtk.gdk.threads_init()`, `threads_enter()` and `threads_leave()`
diff --git a/docs/attic/PyGST_Tutorial/Combining_Audio_and_Video.md 
b/docs/attic/PyGST_Tutorial/Combining_Audio_and_Video.md
new file mode 100644
index 0000000..a951b25
--- /dev/null
+++ b/docs/attic/PyGST_Tutorial/Combining_Audio_and_Video.md
@@ -0,0 +1,369 @@
+# PyGST Tutorial/Combining Audio and Video
+
+So far, our demos have been video-only for the sake of clarity. A few
+people have asked for some specific examples explaining how to get audio
+and video together in the same pipeline, so this article focuses
+specifically on these challenges.
+
+# Audio Elements
+
+GStreamer also has various audio sink elements, but for the sake of
+simplicity we can just use `autoaudiosink`, which figures out the
+correct type for us. Working with audio sinks is much easier than
+working with video sinks.
+
+We have seen that GStreamer offers some utility elements for video,
+including `videoscale` and `ffmpegcolorspace`. We also have a similar
+elements for audio, including: `audioconvert` and `audioresample`.
+
+# What Happens Inside Decodebin
+
+Media files have a hierarchical structure. The top level of this is the
+container format, and within that are one or more media streams. Files
+with audio and video information have at least one audio and one video
+stream. In order to completely decode a movie file, the container format
+must first be read and interpreted in order to extract the encoded
+streams. Then the streams must be decompressed and possibly converted to
+a format suitable for processing or display. In gstreamer terminology,
+the container format is read with a “demuxer”, which is short for
+“demultiplexer”, and streams are decompressed with “decoders”.
+
+For example, let's say you wanted to decode an mpeg2 audio video stream:
+
+![](mpeg2_decode_pipeline.png "mpeg2_decode_pipeline.png")
+
+Or how about Motion-JPEG in an AVI container with mp3 audio:
+
+![](avi_mjpeg_mp3_audio.png "avi_mjpeg_mp3_audio.png")
+
+You could create an add-hoc pipeline for each independent scenario, but
+that's not very flexible. Most container formats support a wide variety
+of codecs, and the number of combinations of containers and codecs
+supported by GStreamer is huge. Creating separate pipelines for each
+scenario is impractical. What decodebin does is read a little bit of
+information from its sink pad. Once it has worked out what container
+format and streams are present in the data, it creates the appropriate
+chain demuxers and decoders. It creates one source pad for each
+individual stream in the file. Therefore if a file contains one video
+stream and one audio stream, decodebin creates two pads: one for video,
+and one for audio. GStreamer refers to this type of behavior as
+*autoplugging* and elments which do this type of thing as
+“autopluggers”. Because decodebin can't know what's in a stream until it
+reads it, the pads are not created until the pipeline transitions into
+the ready or paused states. This is why we must link decodebin to other
+elements in the “pad-added” signal.
+
+In previous examples, we were only interested in the video stream, so we
+simply ignored any pad that that wasn't compatible with our video
+colorspace converter. Now we have two possible targets to link when a
+pad is created, and we need to be careful that the audio and video
+source pads are linked to the appropriate processing elements.
+
+## Your first Attempt
+
+Suppose we want to play the a file, what do you suppose the pipeline
+will look like? Go ahead, grab a napkin and a pen and take a wild stab
+at drawing the pipeline for this example.
+
+Done?
+
+You probably drew something like the following:
+
+![](wrong_pipeline.png "wrong_pipeline.png")
+
+You can try and run this pipeline with the following gst-launch command
+(be sure to set `${FILENAME}` to a suitable path before trying these
+examples):
+
+`gst-launch-0.10 filesrc location=${FILENAME} ! decodebin name=decode \`\
+`decode. ! ffmpegcolorspace ! ximagesink \`\
+`decode. ! audioconvert ! autoaudiosink`
+
+So far so good. Now suppose we want to transcode instead. This means we
+will pipe decoded audio and video through *encoders* and then into a
+*muxer*, which will output to a filesink. We will use motion-jpeg with
+raw audio in an avi container. The resulting pipeline looks like this in
+`gst-launch` syntax:
+
+`gst-launch-0.10 filesrc location=${FILENAME} ! decodebin name=decode \`\
+`decode. ! ffmpegcolorspace ! jpegenc ! avimux name=muxer \`\
+`decode. ! audioconvert ! muxer. \`\
+`muxer. ! filesink location=${FILENAME}.avi sync=false`
+
+This example probably works well enough, but now suppose we want a
+preview of the compressed video, so we can tune our quality settings:
+
+`gst-launch-0.10 filesrc location=${FILENAME} ! decodebin name=decode \`\
+`decode. ! ffmpegcolorspace ! jpegenc ! tee ! avimux name=muxer \`\
+`tee0. ! jpegdec ! ffmpegcolorspace ! autovideosink sync=false \`\
+`decode. ! audioconvert !muxer. \`\
+`muxer. ! filesink location=${FILENAME}.avi sync=false`
+
+This looks perfectly reasonable, but probably will not work -- this is
+because you need something else we haven't seen yet: `queues`.
+
+## Queues
+
+The `queue` element is used to allow concurrent execution of streams
+within a pipeline. Essentially, it forces elements linked *downstream*
+to do their processing in a separate thread. This is especially
+important when multiplexing, and when using multiple sink elements.
+Consequences of not using queues when required include link errors,
+audio / video sync issues, and deadlocks.
+
+When working with multiple streams in gstreamer, use the following rules
+of thumb:
+
+-   Always add a queue before any sink element when the pipeline
+    contains multiple sinks
+-   Always add a queue before each input to a *muxer* (an element which
+    combines several input streams into one output stream)
+
+One thing to be aware of is that queues introduce *latency*. The
+placement of queues within a pipeline can affect the responsiveness of
+the pipeline to things like property changes.
+
+Here's the proper version of the previous transcoding example, complete
+with queues:
+
+`gst-launch-0.10 filesrc location=${FILENAME} ! decodebin name=decode \`\
+`decode. ! ffmpegcolorspace ! jpegenc ! tee ! queue ! avimux name=muxer \`\
+`tee0. ! jpegdec ! ffmpegcolorspace ! queue ! autovideosink sync=false \`\
+`decode. ! queue ! audioconvert !muxer. \`\
+`muxer. ! queue ! filesink location=${FILENAME}.avi sync=false`
+
+# Movie Player Demo
+
+In this example we will write a simple movie player applet that can
+handle both audio and video. The UI for this example is basically the
+same as demo.py, so there's little to say about it. Let's jump straight
+into creating the piepline, which looks like this:
+
+[source for this example](audio_video.py.md)
+
+![](audio_video_playback_pipeline.png "audio_video_playback_pipeline.png")
+
+We override `createPipeline` so that it creates two sinks:
+
+        def createPipeline(self, w):
+            """Given a window, creates a pipeline and connects it to the window"""
+
+            # ... duplicate code omitted for brevity
+
+            videosink = gst.element_factory_make("ximagesink", "sink")
+            videosink.set_property("force-aspect-ratio", True)
+            videosink.set_property("handle-expose", True)
+            scale = gst.element_factory_make("videoscale", "scale")
+            cspace = gst.element_factory_make("ffmpegcolorspace", "cspace")
+
+            audiosink = gst.element_factory_make("autoaudiosink")
+            audioconvert = gst.element_factory_make("audioconvert")
+
+            # pipeline looks like: ... ! cspace ! scale ! sink
+            #                      ... ! audioconvert ! autoaudiosink
+            self.pipeline.add(cspace, scale, videosink, audiosink,
+                audioconvert)
+            scale.link(videosink)
+            cspace.link(scale)
+            audioconvert.link(audiosink)
+            return (self.pipeline, (cspace, audioconvert))
+
+In `magic()`, the main difference is accepting the extra parameters, and
+creating the audio and video queues:
+
+            src = gst.element_factory_make("filesrc", "src")
+            src.props.location = args[0]
+            dcd = create_decodebin()
+            audioqueue = gst.element_factory_make("queue")
+            videoqueue = gst.element_factory_make("queue")
+            pipeline.add(src, dcd, audioqueue, videoqueue)
+            src.link(dcd)
+            videoqueue.link(videosink)
+            audioqueue.link(audiosink)
+            dcd.connect("pad-added", onPadAdded)
+
+Our dynamic linking code must now take into account one of two possible
+targets:
+
+            def onPadAdded(source, pad):
+                # first we see if we can link to the videosink
+                tpad = videoqueue.get_compatible_pad(pad)
+                if tpad:
+                    pad.link(tpad)
+                    return
+                # if not, we try the audio sink
+                tpad = audioqueue.get_compatible_pad(pad)
+                if tpad:
+                    pad.link(tpad)
+                    return
+
+[source for this example](audio_video.py.md)
+
+# Video DJ Example
+
+**Note: Currently there is an issue with the `volume` element which
+prevents this example from working as well as it should. The audio
+latency is much higher than it should be.**
+
+[source for this example](audio_video_crossfade.py.md)
+
+We've seen how to construct a simple pipeline that uses both audio and
+video. Now, let's re-visit the video crossfade example, this time
+cross-fading both audio and video. As with video, we need two kinds of
+elements: an element to control audio volume, and an element to perform
+the mixing. The volume element is called `volume` and the audio mixing
+element is called `adder`. Adder requires that the incoming streams be
+of the same type, width, depth, and rate, so we also need `audioconvert`
+and `audioresample` to sanitize the incoming streams.
+
+Go ahead: try to draw the pipeline for this example before looking at
+the solution.
+
+[audio\_crossfade\_pipeline.png](audio_crossfade_pipeline.png.md)
+
+Notice that there are some recurring chains of elements. For audio, we
+see this chain appear twice:
+
+![](audio_crossfade_chain.png "audio_crossfade_chain.png")
+
+And for video, this chain appears twice:
+
+![](video_crossfade_chain.png "video_crossfade_chain.png")
+
+To simplify the code for this example, i've factored out the audio and
+video code into separate methods. First we make our `pad-added`
+signal-handler a proper method so that we can connect to it multiple
+places:
+
+        def onPad(self, decoder, pad, target):
+            tpad = target.get_compatible_pad(pad)
+            if tpad:
+                pad.link(tpad)
+
+This method creates a chain of audio elements between `decoder` and
+`adder`. At the end, we save the volume element as an instance attribute
+to that the UI can its properites. This purpose of the `name` parameter
+is to help generate a unique attribute names. Notice that we are passing
+the target of the dynamic link as a user-parameter of the decoder's
+`connect` method.
+
+        def addAudioChain(self, pipeline, name, decoder, adder):
+            volume = gst.element_factory_make("volume")
+            volume.props.volume = 0.5
+            audioconvert = gst.element_factory_make("audioconvert")
+            audiorate = gst.element_factory_make("audioresample")
+            queue = gst.element_factory_make("queue")
+
+            pipeline.add(volume, audioconvert, audiorate, queue)
+            decoder.connect("pad-added", self.onPad, audioconvert)
+            audioconvert.link(audiorate)
+            audiorate.link(queue)
+            queue.link(volume)
+            volume.link(adder)
+
+            setattr(self, "vol%s" % name, volume)
+
+Now the code to create the chain of video elements. Notice how similar
+it is in structure to the audio version:
+
+        def addVideoChain(self, pipeline, name, decoder, mixer):
+            alpha = gst.element_factory_make("alpha")
+            alpha.props.alpha = 1.0
+            videoscale = gst.element_factory_make("videoscale")
+            videorate = gst.element_factory_make("videorate")
+            colorspace = gst.element_factory_make("ffmpegcolorspace")
+            queue = gst.element_factory_make("queue")
+
+            pipeline.add(alpha, videoscale, videorate, colorspace, queue)
+            decoder.connect("pad-added", self.onPad, videorate)
+            videorate.link(videoscale)
+            videoscale.link(colorspace)
+            colorspace.link(queue)
+            queue.link(alpha)
+            alpha.link(mixer)
+
+            setattr(self, "alpha%s" % name, alpha)
+
+For each input, we add a `filesrc` and decoder, then we combine the
+audio and video chains.
+
+        def addSourceChain(self, pipeline, name, filename, mixer, adder):
+            src = gst.element_factory_make("filesrc")
+            src.props.location = filename
+            dcd = create_decodebin()
+
+            pipeline.add(src, dcd)
+            src.link(dcd)
+            self.addVideoChain(pipeline, name, dcd, mixer)
+            self.addAudioChain(pipeline, name, dcd, adder)
+
+Now our `magic` method is fairly concise. All we have to do is create
+the `videomixer`, `adder` and connect them to our source element-chains.
+
+        def magic(self, pipeline, (videosink, audiosink), args):
+            """This is where the magic happens"""
+            mixer = gst.element_factory_make("videomixer")
+            adder = gst.element_factory_make("adder")
+            pipeline.add(mixer, adder)
+
+            mixer.link(videosink)
+            adder.link(audiosink)
+            self.addSourceChain(pipeline, "A", args[0], mixer, adder)
+            self.addSourceChain(pipeline, "B", args[1], mixer, adder)
+            self.alphaB.props.alpha = 0.5
+
+The UI layout is similar to the video-only example, but with an extra
+control: a balance adjuster so the user can compensate if the volume
+varies significantly between sources A and B.
+
+        def customWidgets(self):
+            self.crossfade = gtk.Adjustment(0.5, 0, 1.0)
+            self.balance = gtk.Adjustment(1.0, 0.0, 2.0)
+            crossfadeslider = gtk.HScale(self.crossfade)
+            balanceslider = gtk.HScale(self.balance)
+            self.crossfade.connect("value-changed", self.onValueChanged)
+            self.balance.connect("value-changed", self.onValueChanged)
+
+            ret = gtk.Table()
+            ret.attach(gtk.Label("Crossfade"), 0, 1, 0, 1)
+            ret.attach(crossfadeslider, 1, 2, 0, 1)
+            ret.attach(gtk.Label("Balance"), 0, 1, 1, 2)
+            ret.attach(balanceslider, 1, 2, 1, 2)
+            return ret
+
+When the slider moves, we want to set the alpha only on source B, as we
+did in the video-only example. But we need to set the volume on both
+audio sources to complimentary values. We also perform the balance
+computation entirely in the UI.
+
+        def onValueChanged(self, adjustment):
+            balance = self.balance.get_value()
+            crossfade = self.crossfade.get_value()
+            self.volA.props.volume = (2 - balance) * (1 - crossfade)
+            self.volB.props.volume = balance * crossfade
+            self.alphaB.props.alpha = crossfade
+
+[source for this example](audio_video_crossfade.py.md)
+
+## Exercises
+
+1.  Modify this example to work with an arbitrary number of sources.
+    Hint: create a separate alpha slider for each source.
+2.  Lookup `v4l2src` and `autoaudiosrc` using `gst-inspect`. Use what
+    you learn replace one of the sources with input from the a webcam
+    and sound card.
+3.  Notice that this example does not place any queues between the
+    mixing and sink elements. This is to minimize the latency of the
+    slider control.
+    1.  Insert queues between the `videomixer` and `ximagesink`, as well
+        as between the `adder` and `autoaudiosink` elements. How does
+        this affect the demo?
+    2.  Try changing the properties of the queues. In particular, see
+        how changing `max-size-time` and `min-threshold-time` affects
+        latency. See if you can reduce latency to usable levels.
+4.  In this example, we factored out code to create recurring portions
+    of our pipeline into separate methods. GStreamer has a more general
+    way to abstract repeating combinations of elements, called a *Bin*.
+    We've already seen one example of such an element, `decodebin`.
+    Rewrite this example so that common sections of code are factored
+    into separate Bins. Hint: you also need to learn about *Ghost Pads*.
diff --git a/docs/attic/PyGST_Tutorial/Demos/Audio_video_crossfade.py.md 
b/docs/attic/PyGST_Tutorial/Demos/Audio_video_crossfade.py.md
new file mode 100644
index 0000000..d9ea0c0
--- /dev/null
+++ b/docs/attic/PyGST_Tutorial/Demos/Audio_video_crossfade.py.md
@@ -0,0 +1,119 @@
+# PyGST Tutorial/Demos/Audio video crossfade.py
+
+    #!/usr/bin/env python
+
+    """A short Audio-Video example"""
+    import gobject
+    gobject.threads_init()
+    import gst
+    import pygtk
+    pygtk.require("2.0")
+    import gtk
+    import sys
+    import os
+    from audio_video import AVDemo, create_decodebin
+
+    class AVCrossfade(AVDemo):
+        """Base class implementing boring, boiler-plate code.
+        Sets up a basic gstreamer environment which includes:
+
+        * a window containing a drawing area and basic media controls
+        * a basic gstreamer pipeline using an ximagesink and an autoaudiosink
+        * connects the ximagesink to the window's drawing area
+
+        Derived classes need only override magic(), __name__,
+        and __usage__ to create new demos."""
+
+        __name__ = "AV Demo"
+        __usage__ = "python audio_video.py <filename>"
+        __def_win_size__ = (320, 240)
+
+        # this commment allows us to include only a portion of the file
+        # in the tutorial for this demo
+
+        def onPad(self, decoder, pad, target):
+            tpad = target.get_compatible_pad(pad)
+            if tpad:
+                pad.link(tpad)
+
+        def addVideoChain(self, pipeline, name, decoder, mixer):
+            alpha = gst.element_factory_make("alpha")
+            alpha.props.alpha = 1.0
+            videoscale = gst.element_factory_make("videoscale")
+            videorate = gst.element_factory_make("videorate")
+            colorspace = gst.element_factory_make("ffmpegcolorspace")
+            queue = gst.element_factory_make("queue")
+
+            pipeline.add(alpha, videoscale, videorate, colorspace, queue)
+            decoder.connect("pad-added", self.onPad, videorate)
+            videorate.link(videoscale)
+            videoscale.link(colorspace)
+            colorspace.link(queue)
+            queue.link(alpha)
+            alpha.link(mixer)
+
+            setattr(self, "alpha%s" % name, alpha)
+
+        def addAudioChain(self, pipeline, name, decoder, adder):
+            volume = gst.element_factory_make("volume")
+            volume.props.volume = 0.5
+            audioconvert = gst.element_factory_make("audioconvert")
+            audiorate = gst.element_factory_make("audioresample")
+            queue = gst.element_factory_make("queue")
+
+            pipeline.add(volume, audioconvert, audiorate, queue)
+            decoder.connect("pad-added", self.onPad, audioconvert)
+            audioconvert.link(audiorate)
+            audiorate.link(queue)
+            queue.link(volume)
+            volume.link(adder)
+
+            setattr(self, "vol%s" % name, volume)
+
+        def addSourceChain(self, pipeline, name, filename, mixer, adder):
+            src = gst.element_factory_make("filesrc")
+            src.props.location = filename
+            dcd = create_decodebin()
+
+            pipeline.add(src, dcd)
+            src.link(dcd)
+            self.addVideoChain(pipeline, name, dcd, mixer)
+            self.addAudioChain(pipeline, name, dcd, adder)
+
+        def magic(self, pipeline, (videosink, audiosink), args):
+            """This is where the magic happens"""
+            mixer = gst.element_factory_make("videomixer")
+            adder = gst.element_factory_make("adder")
+            pipeline.add(mixer, adder)
+
+            mixer.link(videosink)
+            adder.link(audiosink)
+            self.addSourceChain(pipeline, "A", args[0], mixer, adder)
+            self.addSourceChain(pipeline, "B", args[1], mixer, adder)
+            self.alphaB.props.alpha = 0.5
+
+        def onValueChanged(self, adjustment):
+            balance = self.balance.get_value()
+            crossfade = self.crossfade.get_value()
+            self.volA.props.volume = (2 - balance) * (1 - crossfade)
+            self.volB.props.volume = balance * crossfade
+            self.alphaB.props.alpha = crossfade
+
+        def customWidgets(self):
+            self.crossfade = gtk.Adjustment(0.5, 0, 1.0)
+            self.balance = gtk.Adjustment(1.0, 0.0, 2.0)
+            crossfadeslider = gtk.HScale(self.crossfade)
+            balanceslider = gtk.HScale(self.balance)
+            self.crossfade.connect("value-changed", self.onValueChanged)
+            self.balance.connect("value-changed", self.onValueChanged)
+
+            ret = gtk.Table()
+            ret.attach(gtk.Label("Crossfade"), 0, 1, 0, 1)
+            ret.attach(crossfadeslider, 1, 2, 0, 1)
+            ret.attach(gtk.Label("Balance"), 0, 1, 1, 2)
+            ret.attach(balanceslider, 1, 2, 1, 2)
+            return ret
+
+    # if this file is being run directly, create the demo and run it
+    if __name__ == '__main__':
+        AVCrossfade().run()
diff --git a/docs/attic/PyGST_Tutorial/Demos/Demo.py.md b/docs/attic/PyGST_Tutorial/Demos/Demo.py.md
new file mode 100644
index 0000000..32086ae
--- /dev/null
+++ b/docs/attic/PyGST_Tutorial/Demos/Demo.py.md
@@ -0,0 +1,162 @@
+# PyGST Tutorial/Demos/Demo.py
+
+    #!/usr/bin/env python
+
+    """Basic Framework for writing GStreamer Demos in Python"""
+    #<excerpt 2>
+    import gobject
+    gobject.threads_init()
+    import gst
+    #</excerpt>
+    import pygtk
+    pygtk.require("2.0")
+    import gtk
+    gtk.gdk.threads_init()
+    import sys
+    import os
+
+
+    class DemoException(Exception):
+        """Base exception class for errors which occur during demos"""
+
+        def __init__(self, reason):
+            self.reason = reason
+
+    class Demo:
+        """Base class implementing boring, boiler-plate code.
+        Sets up a basic gstreamer environment which includes:
+
+        * a window containing a drawing area and basic media controls
+        * a basic gstreamer pipeline using an ximagesink
+        * connects the ximagesink to the window's drawing area
+
+        Derived classes need only override magic(), __name__,
+        and __usage__ to create new demos."""
+
+        __name__ = "Basic Demo"
+        __usage__ = "python demo.py -- runs a simple test demo"
+        __def_win_size__ = (320, 240)
+
+        # this commment allows us to include only a portion of the file
+        # in the tutorial for this demo
+        # <excerpt 1>     ...
+
+        def magic(self, pipeline, sink, args):
+            """This is where the magic happens"""
+            src = gst.element_factory_make("videotestsrc", "src")
+            pipeline.add(src)
+            src.link(sink)
+
+
+        def createPipeline(self, w):
+            """Given a window, creates a pipeline and connects it to the window"""
+
+            # code will make the ximagesink output in the specified window
+            def set_xid(window):
+                gtk.gdk.threads_enter()
+                sink.set_xwindow_id(window.window.xid)
+                sink.expose()
+                gtk.gdk.threads_leave()
+
+            # this code receives the messages from the pipeline. if we
+            # need to set X11 id, then we call set_xid
+            def bus_handler(unused_bus, message):
+                if message.type == gst.MESSAGE_ELEMENT:
+                    if message.structure.get_name() == 'prepare-xwindow-id':
+                        set_xid(w)
+                return gst.BUS_PASS
+
+            # create our pipeline, and connect our bus_handler
+            self.pipeline = gst.Pipeline()
+            bus = self.pipeline.get_bus()
+            bus.set_sync_handler(bus_handler)
+
+            sink = gst.element_factory_make("ximagesink", "sink")
+            sink.set_property("force-aspect-ratio", True)
+            sink.set_property("handle-expose", True)
+            scale = gst.element_factory_make("videoscale", "scale")
+            cspace = gst.element_factory_make("ffmpegcolorspace", "cspace")
+
+            # our pipeline looks like this: ... ! cspace ! scale ! sink
+            self.pipeline.add(cspace, scale, sink)
+            scale.link(sink)
+            cspace.link(scale)
+            return (self.pipeline, cspace)
+
+        # ... end of excerpt </excerpt>
+
+        # subclasses can override this method to provide custom controls
+        def customWidgets(self):
+            return gtk.HBox()
+
+        def createWindow(self):
+            """Creates a top-level window, sets various boring attributes,
+            creates a place to put the video sink, adds some and finally
+            connects some basic signal handlers. Really, really boring.
+            """
+
+            # create window, set basic attributes
+            w = gtk.Window()
+            w.set_size_request(*self.__def_win_size__)
+            w.set_title("Gstreamer " + self.__name__)
+            w.connect("destroy", gtk.main_quit)
+
+            # declare buttons and their associated handlers
+            controls = (
+                ("play_button", gtk.ToolButton(gtk.STOCK_MEDIA_PLAY), self.onPlay),
+                ("stop_button", gtk.ToolButton(gtk.STOCK_MEDIA_STOP), self.onStop),
+                ("quit_button", gtk.ToolButton(gtk.STOCK_QUIT), gtk.main_quit)
+            )
+
+            # as well as the container in which to put them
+            box = gtk.HButtonBox()
+
+            # for every widget, connect to its clicked signal and add it
+            # to the enclosing box
+            for name, widget, handler in controls:
+                widget.connect("clicked", handler)
+                box.pack_start(widget, True)
+                setattr(self, name, widget)
+
+            viewer = gtk.DrawingArea()
+            viewer.modify_bg(gtk.STATE_NORMAL, viewer.style.black)
+
+            # we will need this later
+            self.xid = None
+
+            # now finally do the top-level layout for the window
+            layout = gtk.VBox(False)
+            layout.pack_start(viewer)
+
+            # subclasses can override childWidgets() to supply
+            # custom controls
+            layout.pack_start(self.customWidgets(), False, False)
+            layout.pack_end(box, False, False)
+            w.add(layout)
+            w.show_all()
+
+            # we want to return only the portion of the window which will
+            # be used to display the video, not the whole top-level
+            # window. a DrawingArea widget is, in fact, an X11 window.
+            return viewer
+
+        def onPlay(self, unused_button):
+            self.pipeline.set_state(gst.STATE_PLAYING)
+
+        def onStop(self, unused_button):
+            self.pipeline.set_state(gst.STATE_READY)
+
+        def run(self):
+            w = self.createWindow()
+            p, s = self.createPipeline(w)
+            try:
+                self.magic(p, s, sys.argv[1:])
+                gtk.main()
+            except DemoException, e:
+                print e.reason
+                print self.__usage__
+                sys.exit(-1)
+
+    # if this file is being run directly, create the demo and run it
+    if __name__ == '__main__':
+        Demo().run()
diff --git a/docs/attic/PyGST_Tutorial/Effects.md b/docs/attic/PyGST_Tutorial/Effects.md
new file mode 100644
index 0000000..50a0fd8
--- /dev/null
+++ b/docs/attic/PyGST_Tutorial/Effects.md
@@ -0,0 +1,247 @@
+# PyGST Tutorial/Effects
+
+This article discusses effects and mixing of video. We cover two demos:
+a simple video processing demo, and a slightly more complicated
+video-mixing demo.
+
+# Applying Effects
+
+In GStreamer, effects are just elements. To apply an effect to a video
+stream, you simply link it into the pipeline between the source and the
+sink. Let's say you wanted to adjust the color balance on a video clip
+before displaying it:
+
+![](color_balance_pipeline.png "color_balance_pipeline.png")
+
+Some effects take a number of parameters. These are controlled by
+setting properties on the element. This is represented by the red arrow
+in this pipeline, because these parameters are set from outside of the
+GStreamer pipeline.
+
+# Simple Effect Demo
+
+Let's use what we've learned to create a simple video-processing
+application.
+
+![Color Balance Demo](simple_effect_1.png "Color Balance Demo")
+
+[source for this example](simple-effect.py.md)
+
+First, a word about `decodebin`. There are two variants: `decodebin` and
+`decodebin2`. We want `decodebin2` if it is available, but if not we
+fall back on `decodebin`. This is embodied in the following routine,
+which we will be re-using often.
+
+    def create_decodebin():
+        try:
+            return gst.element_factory_make("decodebin2")
+        except:
+            return gst.element_factory_make("decodebin")
+
+We override the `magic()` method of our previous demo to create a
+pipeline similar to the one shown above.
+
+        def magic(self, pipeline, sink, args):
+
+            def onPad(obj, pad, target):
+                sinkpad = target.get_compatible_pad(pad, pad.get_caps())
+                pad.link(sinkpad)
+                return True
+
+            assert os.path.exists(sys.argv[1])
+
+            # create the following pipeline
+            # filesrc location = sys.argv[1] ! decodebin ! videobalance ! ...
+            src = gst.element_factory_make("filesrc")
+            src.set_property("location", sys.argv[1])
+            decode = create_decodebin()
+            self.balance = gst.element_factory_make("videobalance")
+
+            pipeline.add(src, decode, self.balance)
+            src.link(decode)
+            decode.connect("pad-added", onPad, self.balance)
+            self.balance.link(sink)
+
+            return
+
+The only tricky part here is that the a `decodebin` has no pads when
+it's first created: it cannot be linked into the pipeline straightaway.
+So, we register a handler for the `pad-added` signal which connects any
+dynamic pads to the pipeline.
+
+That was easy enough. So, what about the UI? We want to be able to
+adjust the hue, saturation, etc. *in real time*. The first thing is to
+figure out which properties `videobalance` supports. We use
+`gst-inspect` for this:
+
+    $ gst-inspect-0.10 videobalance
+    ...
+    Element Properties:
+      name                : The name of the object
+                            flags: readable, writable
+                            String. Default: null Current: "videobalance0"
+      qos                 : handle QoS messages
+                            flags: readable, writable
+                            Boolean. Default: false Current: true
+      contrast            : contrast
+                            flags: readable, writable
+                            Double. Range:               0 -               2 Default:               1
+    Current:               1
+      brightness          : brightness
+                            flags: readable, writable
+                            Double. Range:              -1 -               1 Default:               0
+    Current:               0
+      hue                 : hue
+                            flags: readable, writable
+                            Double. Range:              -1 -               1 Default:               0
+    Current:               0
+      saturation          : saturation
+                            flags: readable, writable
+                            Double. Range:               0 -               2 Default:               1
+    Current:               1
+
+Yeesh! Let's clarify this with the following table:
+
+  Property       Type      Range        Default
+  -------------- --------- ------------ ---------
+  “contrast”     `float`   \[0 - 2\]    1
+  “brightness”   `float`   \[-1 - 1\]   0
+  “hue”          `float`   \[-1 - 1\]   0
+  “saturation”   `float`   \[0 -2\]     1
+
+That's much better. Now we can see we that all the properties are
+floating point values within a specific range. This indicates that a
+`gtk.Scale` widget would be a good choice for representing the value of
+each property. So, we will create a widget for each property, and link
+the value of the widget to the value of the property. To accomplish
+this, all we need do is connect the `gtk.HScale` widget's
+`value-changed` signal, to a callback which calls `set_property()` on
+the `videobalance` element.
+
+[source for this example](simple-effect.py.md)
+
+## Exercises
+
+-   Modify the demo to work with a different effect
+    -   First use `gst-inspect-0.10 | grep 'filter'` to find an
+        appealing effect
+    -   Then use `gst-inspect-0.10 `*`your`` ``effect`* to learn about
+        its properties.
+    -   Finally, insert the effect into the pipeline and write a
+        user-interface to control its properties.
+
+# Mixing Sources
+
+Compositing is the mainstay of visual effects. I'll create a simple
+example to illustrate how compositing can be done in GStreamer. Note
+that there are some issues with this demo that we do not address here:
+in particular, what happens when one of the sources finishes playing.
+
+![](crossfade.png "crossfade.png")
+
+[source for this example](cross-fade.py.md)
+
+We're going to create a video cross-fader that will mix between two
+arbitrary sources. We will specify the sources on the command line, and
+use a slider to do live adjustment of the amount of cross-fade.
+
+## The Crossfade Pipeline
+
+![](crossfade_pipeline.png "crossfade_pipeline.png")
+
+Compositing is done with the `videomixer` element. The `videomixer` can
+accommodate any number of sources, though the performance of your
+machine will limit how much processing you can do. An important thing to
+understand is that `videomixer` only operates on <em> YUVA </em>
+streams. What that means is that the input video stream must be in the
+<em> YUV </em> color-space, and must contain an alpha channel. Sometimes
+streams are in the <em> RGB </em> color-space, and do not have alpha
+channels. Therefore, we will first use `ffmpegcolorspace` to
+automatically convert the source video to YUV (if necessary), and then
+add an alpha channel to our video using the `alpha` element. The `alpha`
+element has the `alpha` property, effectively allowing us to set the
+transparency of our sources.
+
+The first step is to create our sources. We create the sources in the
+same way as we did for the color-balance demo shown above, except that
+we create a separate `ffmpegcolorspace` and `alpha` element for each
+source.
+
+            src = gst.element_factory_make("filesrc")
+            src.set_property("location", sys.argv[1])
+
+            srcAdecode = create_decodebin()
+            srcAconvert = gst.element_factory_make("ffmpegcolorspace")
+            srcAalpha = gst.element_factory_make("alpha")
+            srcAalpha.set_property("alpha", 1.0)
+
+            srcB = gst.element_factory_make("filesrc")
+            srcB.set_property("location", sys.argv[2])
+            srcBdecode = create_decodebin()
+            srcBconvert = gst.element_factory_make("ffmpegcolorspace")
+            srcBalpha = gst.element_factory_make("alpha")
+            srcBalpha.set_property("alpha", 0.5)
+
+            mixer = gst.element_factory_make("videomixer")
+            mixer.set_property("background", "black")
+
+The second step is to build up our pipeline. Aside from the `decodebin`,
+all the elements in the pipeline use static pads.
+
+            pipeline.add(mixer)
+
+            pipeline.add(src, srcAdecode, srcAconvert, srcAalpha)
+            src.link(srcAdecode)
+            srcAdecode.connect("pad-added", onPad, srcAconvert)
+            srcAconvert.link(srcAalpha)
+            srcAalpha.link(mixer)
+
+            pipeline.add(srcB, srcBdecode, srcBconvert, srcBalpha)
+            srcB.link(srcBdecode)
+            srcBdecode.connect("pad-added", onPad, srcBconvert)
+            srcBconvert.link(srcBalpha)
+            srcBalpha.link(mixer)
+
+            mixer.link(sink)
+
+            # remember the alpha elements
+            self.srcBalpha = srcBalpha
+
+For the user interface, we only need to create one `gtk.HScale()`
+element. We'll call its value “Crossfade”. Its `value-` `changed` signal
+handler looks like this:
+
+            def onValueChanged(widget):
+                if self.srcBalpha:
+                    self.srcBalpha.set_property("alpha", widget.get_value())
+
+## What the alpha Value Means
+
+The slider only controls the alpha channel of the second source. This
+might seem confusing. If so, you are probably thinking the `videomixer`
+works in the same way as an audio mixer -- that the alpha channel
+represents the “volume” of the source in the output “mix.” This is not
+quite the case. It is true that if you set both sources' alpha value to
+zero, you will only see the background pattern (black); however, you
+will not see both sources if you set both alpha values to 1. Instead,
+you will only see srcB. An alpha value of 1 represents opacity. In order
+to have an even blend of both sources, you set the alpha of the srcA to
+1, and set the alpha of srcB to 0.5. This will make more sense if you
+think of the `videomixer` as composed of “layers” stacked atop one
+another. If the front-most source is completely opaque, you cannot see
+the layers behind.
+
+[source for this example](cross-fade.py.md)
+
+## Exercises
+
+We use the `alpha` element here to apply a solid alpha; however, the
+`alpha` can do several other methods of compositing.
+
+1.  Create a demo that can do chroma key with either red, green, or blue
+    screen.
+2.  Create a demo that can use an arbitrary key color
+3.  Modify your solution to the previous example to allow an eye-dropper
+    type tool to select the color.
+4.  Use `v4l2src` to allow a webcam or capture card to supply the video
+    input for one of the sources.
diff --git a/docs/attic/PyGST_Tutorial/Elements:_basics.md b/docs/attic/PyGST_Tutorial/Elements:_basics.md
new file mode 100644
index 0000000..a6ec571
--- /dev/null
+++ b/docs/attic/PyGST_Tutorial/Elements:_basics.md
@@ -0,0 +1,122 @@
+# PyGST Tutorial/Elements: basics
+
+The purpose of this tutorial is to give you a basic working PyGst
+plugin, and explain what each part does succinctly. This is a jumpstart,
+not a replacement for the GStreamer Plugin Tutorial.
+
+I will try to walk you through creating a new element that acts as a
+filter (has both a sink and source, this one wont actually do any
+filtering :)), which recieves a buffer and pushes it forward. As such it
+should help you avoid the pain.
+
+:   source
+
+## explanations
+
+:   We will only be talking about the code in NewElement, the rest can
+    be found in the [ source](elements_basics.py.md).
+:   still needs a lot of work.
+
+The image below shows the most important parts of a filter element, the
+sink a gst.Pad, the elements chain function and the source a gst.Pad.
+
+![filter element](Filter_element.elements_basics.png "filter element")
+
+The image below shows how data flows through elements, and what type
+each element is.
+
+![source filter and sink
+elements](Src-filter-sink.elemets-basics.png "source filter and sink elements")
+
+All new elements are derived from gst.Element or a class derived from
+gst.Element, gst.PushSrc is such an example. There are several basic
+steps common to all plugins which include registering the element with
+gstreamer, and initalising the plugin like you would anyother object.
+When initialising a derivied gst.Element you must do several things,
+create the gst.Pads which describe media streams (buffers) the element
+can recieve and send, and make the pads by calling the
+gst.Element.add\_pad(gst.Pad) method. You must also overide the
+functions specific to what you are trying to do, we are creating a
+filter (an element which both recieves and sends buffers) in this case
+we must at minimum override the gst.Pad.set\_caps function which is used
+to negotiate which type of buffers can be recieved and the gst.Pad.chain
+function which handles incoming buffers.
+
+NewElement is derived from gst.Element
+
+    class NewElement(gst.Element):
+        """ A basic, buffer forwarding gstreamer element """
+
+Every new class derived from gst.Element (or another class derived from
+gst.Element) must register it's self
+
+        #here we register our plugin details
+        __gstdetails__ = (
+            "NewElement plugin",
+            "newelement.py",
+            "gst.Element, that passes a buffer from source to sink (a filter)",
+            "Stephen Griffiths <scgmk5 gmail com>")
+
+        #source pad (template): we send buffers forward through here
+        _srctemplate = gst.PadTemplate ('src',
+            gst.PAD_SRC,
+            gst.PAD_ALWAYS,
+            gst.caps_new_any())
+
+        #sink pad (template): we recieve buffers from our sink pad
+        _sinktemplate = gst.PadTemplate ('sink',
+            gst.PAD_SINK,
+            gst.PAD_ALWAYS,
+            gst.caps_new_any())
+
+        #register our pad templates
+        __gsttemplates__ = (_srctemplate, _sinktemplate)
+
+When we initialise the class, we must create the pads required to
+communicate with other elements.
+
+        def __init__(self, *args, **kwargs):
+            #initialise parent class
+            gst.Element.__init__(self, *args, **kwargs)
+
+            #source pad, outgoing data
+            self.srcpad = gst.Pad(self._srctemplate)
+
+            #sink pad, incoming data
+            self.sinkpad = gst.Pad(self._sinktemplate)
+            self.sinkpad.set_setcaps_function(self._sink_setcaps)
+            self.sinkpad.set_chain_function(self._sink_chain)
+
+            #make pads available
+            self.add_pad(self.srcpad)
+            self.add_pad(self.sinkpad)
+
+the pad setcaps function is called when we need to negotiate the
+capabilities of our element relative to the element we are negotiating
+with.
+
+        def _sink_setcaps(self, pad, caps):
+            #we negotiate our capabilities here, this function is called
+            #as autovideosink accepts anything, we just say yes we can handle the
+            #incoming data
+            return True
+
+the pad chain function is called on sink caps (the ones recieving data),
+a buffer is recieved and pushed forward. Normally this is where we would
+make changes to a buffer.
+
+        def _sink_chain(self, pad, buf):
+            #this is where we do filtering
+            #and then push a buffer to the next element, returning a value saying
+             it was either successful or not.
+            return self.srcpad.push(buf)
+
+### source
+
+[elements\_basics.py](elements_basics.py.md)
+
+## Other Resources
+
+-   [GStreamer
+    documentation](http://gstreamer.freedesktop.org/documentation/)
+-   [PyGST documentation](http://pygstdocs.berlios.de/)
diff --git a/docs/attic/PyGST_Tutorial/Getting_Started.md b/docs/attic/PyGST_Tutorial/Getting_Started.md
new file mode 100644
index 0000000..07f166d
--- /dev/null
+++ b/docs/attic/PyGST_Tutorial/Getting_Started.md
@@ -0,0 +1,186 @@
+# PyGST Tutorial/Getting Started
+
+Developing applications with GStreamer is primarily about creating and
+modifying pipelines and providing an interface to control those
+pipelines. GStreamer is a programming environment unto itself and is
+inherently capable of performing complex tasks. It ships with a utility
+called `gst-launch` which allows building and running pipelines using a
+command-line syntax. This tool comes in handy for testing and debugging,
+but is also useful for other tasks including: transcoding, transmuxing,
+and effects processing. However, gst-launch-0.10 also hides a great deal
+of complexity from the user. We will not be using `gst-launch`, or its
+cousin `gst-parse-launch()` much from here on out. We will dive directly
+into gstreamer in all its glory.
+
+# What is GStreamer?
+
+It's worth pausing a moment to reflect on what GStreamer actually is.
+GStreamer is a media-processing framework organized around the
+[dataflow](http://en.wikipedia.org/wiki/Dataflow) paradigm. In brief,
+this means that computations are represented as directed, acyclic
+[graphs](http://en.wikipedia.org/wiki/Graph_(data_structure)) through
+which data 'flows'. Data buffers are passed from node to node though the
+graph, starting at *source* nodes, and ending at *sink* nodes. At each
+node, a different operation is performed on the data.
+
+In GStreamer terminology, the top-level graph is called a *pipeline*,
+and nodes within the graph are called *elements*. The *edges* connecting
+elements are referred to as *links*. Elements can only be connected to
+each other through connection points called *pads*; however, GStreamer
+elements have convenience methods that allow them to link directly to
+other elements. This allows us to forget about pads most of the time.
+
+Programming in GStreamer at the API level can be counter-intuitive. The
+application runs in a GObject main-loop, and Business logic is often
+spread across several layers of signal handlers. Depending on the
+situation your code may be called from either the main thread, or one of
+many of element threads created automatically by GStreamer. The main
+thing is to remember that GStreamer pipelines are just graphs. In all of
+these examples, the graph-structure of the underlying pipeline is
+emphasized.
+
+# The First GStreamer Demo
+
+Our first task is to set up a suitable environment for experimenting
+with GStreamer, particularly with video. We'd like to get the minimal
+set of features going: an output window, some minimal controls, and a
+minimal GStreamer pipeline for displaying video. We want it to look
+something like this:
+
+![screenshot of first demo](demo_1.png "screenshot of first demo")
+
+[source for this example](demo.py.md)
+
+First things first. Every PyGST application needs to start with some
+boilerplate:
+
+    #!/usr/bin/env python
+    import gobject
+    gobject.threads_init()
+    import gst
+
+Note that the call to `gobject.threads_init()` occurs before importing
+anything else, including `gst`. Since we're also using PyGTK, we have a
+few other imports to include:
+
+    import pygtk
+    pygtk.require("2.0")
+    import gtk
+    gtk.gdk.threads_init()
+    import sys
+    import os
+
+**Note**: I have been informed that we also need to call
+gtk.gdk.threads\_init()
+
+So, where do we go from here? I'll assume you're all familiar enough
+with GTK to know how to create the GUI. Let's focus specifically on the
+section of the window which displays the image: the viewer widget. A
+good place to start is to observe that directed graphs have sources and
+sinks, and our output window would definitely be a sink in the graph.
+So, let's try searching for a sink element and see what we come up with.
+The `gst-inspect-0.10` utility will be helpful here:
+
+<code>
+
+    $ gst-inspect-0.10 | grep sink
+    multifile:  multifilesink: Multi-File Sink
+    cacasink:  cacasink: A colored ASCII art video sink
+    autodetect:  autoaudiosink: Auto audio sink
+    autodetect:  autovideosink: Auto video sink
+    aasink:  aasink: ASCII art video sink
+    ossaudio:  osssink: Audio Sink (OSS)
+    udp:  dynudpsink: UDP packet sender
+    udp:  multiudpsink: UDP packet sender
+    udp:  udpsink: UDP packet sender
+    halelements:  halaudiosink: HAL audio sink
+    alsaspdif:  alsaspdifsink: S/PDIF ALSA audiosink
+    debug:  testsink: Test plugin
+    xvimagesink:  xvimagesink: Video sink
+    dfbvideosink:  dfbvideosink: DirectFB video sink
+    ximagesink:  ximagesink: Video sink
+    ...
+
+</code>
+
+Yeesh! There's a lot of plug-ins in GStreamer. However, if you look
+towards the bottom of the list you'll see the `ximagesink` element.
+That's the one we want. As an exercise, type
+`$ gst-inspect-0.10 ximagesink` and read what it says. `gst-inspect` is
+your first resource for learning about what GStreamer can do. However,
+in this case the output from `gst-iqnspect` is limited. There are two
+important things about `ximagesink` that you will not find here. More
+about that later. For now, take my word for it that `gst-` `inspect`
+will tell you that `ximagesink` has a one sink pad which accepts decoded
+video data. We have reached square one.
+
+In the interest of brevity, I'll also mention that it is a good idea to
+have a `videoscale` and a `ffmpegcolorspace` element between the source
+data and the output sink. This way, if your input comes in some form
+which your display can't handle, it will be automatically converted. So,
+our pipeline is beginning to take shape. It looks kinda like this:
+
+![](demo_pipeline_1.png "demo_pipeline_1.png")
+
+There are two bubbles in this diagram which represent unsolved problems.
+The first is “Where do we get the input?”. The answer to the first
+question will be the subject of later chapters. For now, we'll use
+`videotestsrc` to make sure everything is working. The magic method is
+to be overridden by future subclasses to create new demos. In this demo,
+it simply connects a test source to the rest of the pipeline.
+
+         ...
+
+        def magic(self, pipeline, sink, args):
+            """This is where the magic happens"""
+            src = gst.element_factory_make("videotestsrc", "src")
+            pipeline.add(src)
+            src.link(sink)
+
+The the second question is “How do we connect the `ximagesink` to the
+output window?”. The answer to this is unfortunately a rather advanced
+topic for an introductory demo. You don't have to worry about
+understanding this code just yet. We will revisit it in more depth in
+the article on pipeline `Bus` objects. Long story short, the
+`ximagesink` object puts a request to get the xwindow-id onto the bus.
+When we get that message, we call `set_xwindow_id()`. If we do not do
+this, the sink element will create a new window.
+
+        def createPipeline(self, w):
+            """Given a window, creates a pipeline and connects it to the window"""
+
+            # code will make the ximagesink output in the specified window
+            def set_xid(window):
+                gtk.gdk.threads_enter()
+                sink.set_xwindow_id(window.window.xid)
+                sink.expose()
+                gtk.gdk.threads_leave()
+
+            # this code receives the messages from the pipeline. if we
+            # need to set X11 id, then we call set_xid
+            def bus_handler(unused_bus, message):
+                if message.type == gst.MESSAGE_ELEMENT:
+                    if message.structure.get_name() == 'prepare-xwindow-id':
+                        set_xid(w)
+                return gst.BUS_PASS
+
+            # create our pipeline, and connect our bus_handler
+            self.pipeline = gst.Pipeline()
+            bus = self.pipeline.get_bus()
+            bus.set_sync_handler(bus_handler)
+
+            sink = gst.element_factory_make("ximagesink", "sink")
+            sink.set_property("force-aspect-ratio", True)
+            sink.set_property("handle-expose", True)
+            scale = gst.element_factory_make("videoscale", "scale")
+            cspace = gst.element_factory_make("ffmpegcolorspace", "cspace")
+
+            # our pipeline looks like this: ... ! cspace ! scale ! sink
+            self.pipeline.add(cspace, scale, sink)
+            scale.link(sink)
+            cspace.link(scale)
+            return (self.pipeline, cspace)
+
+        # ... end of excerpt
+
+[source for this example](demo.py.md)
diff --git a/docs/attic/PyGST_Tutorial/Introduction.md b/docs/attic/PyGST_Tutorial/Introduction.md
new file mode 100644
index 0000000..a596b1b
--- /dev/null
+++ b/docs/attic/PyGST_Tutorial/Introduction.md
@@ -0,0 +1,49 @@
+# Introduction
+
+This series of articles is intended to pick up where others leave off.
+The choice of subject matter has an emphasis on video, which PiTiVi
+hackers should find particularly relevant.
+
+## Intended Audience
+
+I'm going to assume that the reader is very familiar with python, and
+has some basic knowledge about `gst-python`. In particular, Read the
+following material before continuing:
+
+-   <http://www.jonobacon.org/?p=750>
+-   <http://www.jonobacon.org/?p=851>
+
+These articles are written in a tutorial format. You may also wish to
+refer to the official PyGST and GStreamer references. The C
+documentation is often more helpful than the PyGST documentation.
+
+-   <http://pygstdocs.berlios.de/>
+-   <http://pygstdocs.berlios.de/pygst-tutorial/> (direct link to
+    official tutorial)
+-   <http://gstreamer.freedesktop.org/data/doc/gstreamer/head/manual/html/index.html>
+
+This article is primarily about GStreamer and gnonlin, so I'm not going
+to spend a lot of time about explaining the basics of PyGTK or the
+GObject programming model. In particular, you should understand the
+GObject concepts of *signals* and *properties*.
+
+## How to Contact
+
+This material is evolving, and I encourage readers to send feedback to.
+You can write me at brandon\_lewis AT alum dot berkeley dot edu. I am
+also in `#pitivi` channel on the <em>freenode</em> irc network.
+
+## Running the Examples
+
+The examples are intended to be run from the command line, and the
+meaning of the arguments varies from example to example. Most of the
+examples import at least demo.py, so you should save all the all
+examples into the same directory. At the moment I cannot upload files
+with a .py extension directly into the wiki, so you must manually copy
+and paste the example source into a text editor. Apologies for the
+inconvenience.
+
+## A Word of Caution
+
+This information is for educational purposes only. It is provided free
+of chage, use at your own risk.
diff --git a/docs/attic/PyGST_Tutorial/Position,_Duration,_and_Seeking.md 
b/docs/attic/PyGST_Tutorial/Position,_Duration,_and_Seeking.md
new file mode 100644
index 0000000..3430320
--- /dev/null
+++ b/docs/attic/PyGST_Tutorial/Position,_Duration,_and_Seeking.md
@@ -0,0 +1,28 @@
+# PyGST Tutorial/Position, Duration, and Seeking
+
+The next few articles focus on the notion of *time* in GStreamer. We
+discuss how to determine the duration of a pipeline, and how to query
+the current position. We discuss absolute and relative *seeking* modes,
+and then create a video player with seeking capability. Finally we
+discuss the *segment seek*, and show how we can use segment seeking to
+implement looping and non-linear editing.
+
+# Querying Position and Duration
+
+## Query Duration Demo
+
+## Exercises
+
+# Seeking
+
+## Absolute and Relative Seeks
+
+### Seeking Demo
+
+## Segment Seeks
+
+### Looping Demo
+
+### Editing Demo
+
+# GSTControllers
diff --git a/docs/attic/PyGST_Tutorial/States,_and_the_Bus.md 
b/docs/attic/PyGST_Tutorial/States,_and_the_Bus.md
new file mode 100644
index 0000000..c1451ff
--- /dev/null
+++ b/docs/attic/PyGST_Tutorial/States,_and_the_Bus.md
@@ -0,0 +1,217 @@
+# PyGST Tutorial/States, and the Bus
+
+The material in this section may not seem all that exciting, but serves
+as the foundation for more interesting topics. Hopefully now that I've
+captured your attention with a few sexy examples, we can get through
+this rather dreary subject. In this tutorial, we explore *element
+state*and the *element life-cycle*. We will also examine the *message
+bus* in further detail, and how this relates to tracking state changes.
+Finally, will use this information to polish up our demonstration
+framework.
+
+# States
+
+There are four element states: `gst.STATE_NULL`, `gst.STATE_READY`,
+`gst.STATE_PAUSED`, and `gst.STATE_PLAYING`. The distinction between
+`NULL` and `READY` states deserve some explanation.
+
+`gst.STATE_NULL`
+
+:   when state is null resources needed for a gst.Element have not been
+    loaded, these can be libraries, devices etc. This is the first state
+    of any gst.Element.
+
+`gst.STATE_READY`
+
+:   when state is ready resources have been allocated, and the
+    gst.Element is ready to be used.
+
+`gst.STATE_PAUSED`
+
+:  
+
+`gst.STATE_PLAYING`
+
+:  
+
+## The element life-cycle
+
+![](element_lifecycle.png "element_lifecycle.png")
+
+The above illustration summarizes the element life-cycle.
+
+## Dataflow and Blocking
+
+So far, we've only talked about *element state*. However, *pads* also
+have state. Pads can be either *blocked* or *unblocked*. In order for a
+pipeline to transition into the playing state, all the pads of all the
+elements in the pipeline must be in the *unblocked* state.
+
+## Adding a Pause Button
+
+[source for this example](enhanced_demo.py.md)
+
+Let's use what we've learned to modify demo.py to add a *pause* button.
+
+First, add the pause button to the UI layout:
+
+        def createWindow(self):
+
+        ...
+
+            # declare buttons and their associated handlers
+            controls = (
+                ("play_button", gtk.ToolButton(gtk.STOCK_MEDIA_PLAY), self.onPlay),
+                ("pause_button", gtk.ToolButton(gtk.STOCK_MEDIA_PAUSE), self.onPause),
+                ("stop_button", gtk.ToolButton(gtk.STOCK_MEDIA_STOP), self.onStop),
+                ("quit_button", gtk.ToolButton(gtk.STOCK_QUIT), gtk.main_quit)
+            )
+
+        ...
+
+Next, define the `onPause()` handler. This handler simply sets the
+pipeline state to the `gst.PAUSED` state.
+
+        def onPause(self, unused_button):
+            self.pipeline.set_state(gst.STATE_PAUSED)
+
+[source for this example](enhanced_demo.py.md)
+
+## Running this Example
+
+This example serves as a drop-in replacement for our original `demo.py`.
+You can run this file stand-alone, but it will be more interesting to
+save it as `demo.py` and re-run the previous examples.
+
+# The Bus
+
+We have seen the Bus before. Remember this code from the first example?
+
+            # this code receives the messages from the pipeline. if we
+            # need to set X11 id, then we call set_xid
+            def bus_handler(unused_bus, message):
+                if message.type == gst.MESSAGE_ELEMENT:
+                    if message.structure.get_name() == 'prepare-xwindow-id':
+                        set_xid(w)
+                return gst.BUS_PASS
+
+            # create our pipeline, and connect our bus_handler
+            self.pipeline = gst.Pipeline()
+            bus = self.pipeline.get_bus()
+            bus.set_sync_handler(bus_handler)
+
+The bus is one mechanism that GStreamer pipelines use to communicate
+with the application. Elements can post messages onto the Bus from any
+thread, and the messages will be received by the application's main
+thread. Handling bus messages is central to many aspects of GStreamer
+application development, including tracking state changes.
+
+## Connecting to the Bus
+
+There are three ways to connect to the bus: with a *watch*, a *signal
+watch*, and a *sync handler*.
+
+-   A watch is a simple call back, which you register by calling
+    `Bus.add_watch()`.
+-   If you need more flexibility, add a signal watch by calling
+    `Bus.add_signal_watch()`. This causes the bus to emit the `message`
+    signal, which you can connect to. The `message` signal is not
+    emitted unless you call `add_signal_watch()`
+-   If you want to receive bus messages in the same thread from which
+    they are posted, call `Bus.set_sync_handler`. You should probably
+    avoid this method unless you understand how to to write
+    multi-threaded code.
+
+## Messages
+
+There are many message types, including the `gst.MESSAGE_ELEMENT` shown
+above. Here's a list of some common ones, and what they mean:
+
+  Message Type                  Meaning
+  ----------------------------- -----------------------------------------------
+  `gst.MESSAGE_ELEMENT`         message type for element-specific information
+  `gst.MESSAGE_EOS`             the end of the pipeline has been reached
+  `gst.MESSAGE_ERROR`           a pipeline error has occurred
+  `gst.MESSAGE_SEGMENT_DONE`    the pipeline has completed a *segment seek*
+  `gst.MESSAGE_STATE_CHANGED`   an element's state has changed
+  `gst.MESSAGE_TAG`             meta-data has been decoded from the stream
+
+We'll talk more about that last message, `gst.MESSAGE_SEGMENT_DONE`, in
+the next article.
+
+The `gst.Message` object is generic, and information is extracted using
+the `parse_*()` set of functions depending on the message type. For
+example, to parse the `gst.MESSAGE_STATE_CHANGED` message, use the
+`parse_state_changed()` method. You may also need to access the
+message's `structure` attribute directly (as we must to do set the
+`ximagesink` element's `xwindow_id`).
+
+## Providing State-Change Feedback
+
+Let's use what we've learned to provide feedback to the user about state
+changes. We want the sensitivity of the playback controls to reflect the
+current state of the pipeline.
+
+[source for this example](enhanced_demo.py.md)
+
+The following table summarizes the sensitivity that Play, Pause, and
+Stop buttons should have in each of the GStreamer states.
+
+  State                 Play Button   Pause Button   Stop Button
+  --------------------- ------------- -------------- -------------
+  `gst.STATE_NULL`      Sensitive     Insensitive    Insensitive
+  `gst.STATE_READY`     Sensitive     Insensitive    Insensitive
+  `gst.STATE_PAUSED`    Sensitive     Insensitive    Sensitive
+  `gst.STATE_PLAYING`   Insensitive   Sensitive      Sensitive
+
+This is easily translated into an else-if chain. What we will do is
+update the sensitivity of all the buttons according to this chart when
+we get a state-changed message.
+
+        def updateButtons(self, state):
+            if state == gst.STATE_NULL:
+                self.play_button.set_sensitive(True)
+                self.pause_button.set_sensitive(False)
+                self.stop_button.set_sensitive(False)
+            elif state == gst.STATE_READY:
+                self.play_button.set_sensitive(True)
+                self.pause_button.set_sensitive(False)
+                self.stop_button.set_sensitive(False)
+            elif state == gst.STATE_PAUSED:
+                self.play_button.set_sensitive(True)
+                self.pause_button.set_sensitive(False)
+                self.stop_button.set_sensitive(True)
+            elif state == gst.STATE_PLAYING:
+                self.play_button.set_sensitive(False)
+                self.pause_button.set_sensitive(True)
+                self.stop_button.set_sensitive(True)
+
+Now, we just need to look for the `gst.MESSAGE_STATE_CHANGED` message on
+the bus, and call `updateButtons` with the new state. First let's define
+our message handler:
+
+         def messageCb(self, bus, message):
+            if message.type == gst.MESSAGE_STATE_CHANGED:
+                old, new, pending = message.parse_state_changed()
+                self.updateButtons(new)
+            return gst.BUS_PASS
+
+We want to receive these element messages in the main thread, since we
+are using the information to update the UI. Therefore, we modify
+`createPipeline()` to connect to our message handler as a bus watch.
+
+One last detail: update the state of the buttons with the null state in
+`createWindow()`
+
+[source for this example](enhanced_demo.py.md)
+
+## Running this Example
+
+This example serves as a drop-in replacement for our original `demo.py`.
+You can run this file stand-alone, but it will be more interesting to
+save it as `demo.py` and re-run the previous examples.
+
+## Handling Pipeline Errors
+
+Our demonstration framework has not done any error handling to speak of.
+Let's fix that.
diff --git a/docs/attic/Setup_development_environment.md b/docs/attic/Setup_development_environment.md
new file mode 100644
index 0000000..9bbe92f
--- /dev/null
+++ b/docs/attic/Setup_development_environment.md
@@ -0,0 +1,7 @@
+# Setup development environment
+
+See
+[docs/HACKING.md](https://github.com/pitivi/pitivi/blob/master/docs/HACKING.md)
+
+[Category:Developer
+documentation](Category:Developer_documentation.md)
diff --git a/docs/attic/Simple-effect.py.md b/docs/attic/Simple-effect.py.md
new file mode 100644
index 0000000..02f4c3f
--- /dev/null
+++ b/docs/attic/Simple-effect.py.md
@@ -0,0 +1,96 @@
+# Simple-effect.py
+
+    #!/usr/bin/env python
+    """Extends basic demo with a gnl composition"""
+
+    from demo import Demo, DemoException
+    import gtk
+    import gst
+    import sys
+    import os
+
+    def create_decodebin():
+        try:
+            return gst.element_factory_make("decodebin2")
+        except:
+            return gst.element_factory_make("decodebin")
+
+    class SimpleEffectDemo(Demo):
+        __name__ = "Basic GStreamer Effect Demo"
+        __usage__ = '''python %s file
+        display file with a color_balance effect''' % sys.argv[0]
+        __def_win_size__ = (320, 500)
+        # <excerpt 1>
+        def magic(self, pipeline, sink, args):
+
+            def onPad(obj, pad, target):
+                sinkpad = target.get_compatible_pad(pad, pad.get_caps())
+                pad.link(sinkpad)
+                return True
+
+            assert os.path.exists(sys.argv[1])
+
+            # create the following pipeline
+            # filesrc location = sys.argv[1] ! decodebin ! videobalance ! ...
+            src = gst.element_factory_make("filesrc")
+            src.set_property("location", sys.argv[1])
+            decode = create_decodebin()
+
+            self.balance = gst.element_factory_make("videobalance")
+
+            pipeline.add(src, decode, self.balance)
+            src.link(decode)
+            decode.connect("pad-added", onPad, self.balance)
+            self.balance.link(sink)
+
+            return
+        # </excerpt>
+
+        # <excerpt 2>
+        # overriding from parent
+        def customWidgets(self):
+            """Create a control for each property in the videobalance
+            widget"""
+
+            # to be called a property value needs to change
+            def onValueChanged(widget, prop):
+                # set the corresponding property of the videobalance element
+                self.balance.set_property(prop, widget.get_value())
+
+            # videobalance has several properties, with the following range
+            # and defaults
+            properties = [("contrast", 0, 2, 1),
+                          ("brightness", -1, 1, 0),
+                          ("hue", -1, 1, 0),
+                          ("saturation", 0, 2, 1)]
+
+            # create a place to hold our controls
+            controls = gtk.VBox()
+            labels = gtk.VBox()
+            # for every propety, create a control and set its attributes
+            for prop, lower, upper, default in properties:
+                widget = gtk.HScale(); label = gtk.Label(prop)
+
+                # set appropriate atributes
+                widget.set_update_policy(gtk.UPDATE_CONTINUOUS)
+                widget.set_value(default)
+                widget.set_draw_value(True)
+                widget.set_range(lower, upper)
+
+                # connect to our signal handler, specifying the property
+                # to adjust
+                widget.connect("value-changed", onValueChanged, prop)
+
+                # pack widget into box
+                controls.pack_start(widget, True, True)
+                labels.pack_start(label, True, False)
+
+            layout = gtk.HBox()
+            layout.pack_start(labels, False, False)
+            layout.pack_end(controls, True, True)
+            return layout
+
+        # </excerpt>
+
+    if __name__ == '__main__':
+        SimpleEffectDemo().run()
diff --git a/docs/attic/building_with_ges.md b/docs/attic/building_with_ges.md
new file mode 100644
index 0000000..bab0b73
--- /dev/null
+++ b/docs/attic/building_with_ges.md
@@ -0,0 +1,4 @@
+# Building with GES
+
+This is outdated and you should follow our [HACKING guide](HACKING.md) to
+setup your development environment.
diff --git a/docs/attic/hotdoc-private-Pitivi-1.0/hotdoc.db b/docs/attic/hotdoc-private-Pitivi-1.0/hotdoc.db
new file mode 100644
index 0000000..e5d5e75
Binary files /dev/null and b/docs/attic/hotdoc-private-Pitivi-1.0/hotdoc.db differ
diff --git a/docs/crossplatform.md b/docs/crossplatform.md
new file mode 100644
index 0000000..2199aae
--- /dev/null
+++ b/docs/crossplatform.md
@@ -0,0 +1,3 @@
+# Crossplatform
+
+This section references the effort made to make Pitivi crossplatform
diff --git a/docs/design.md b/docs/design.md
new file mode 100644
index 0000000..84e2f52
--- /dev/null
+++ b/docs/design.md
@@ -0,0 +1 @@
+# Design documents
diff --git a/docs/design/2007_design/2007_Advanced_UI_Mockups.md 
b/docs/design/2007_design/2007_Advanced_UI_Mockups.md
new file mode 100644
index 0000000..f7e5e00
--- /dev/null
+++ b/docs/design/2007_design/2007_Advanced_UI_Mockups.md
@@ -0,0 +1,121 @@
+# Brandon's Design
+
+## Basic Design
+
+In basic design goal is to provide as much direct-manipulation as
+possible. In this case, properties interpolation graphs are overlayed
+atop source widgets directly. The properties can be shown/hidden with
+the property selection popup at the bottom of the source. In addition,
+the interpolation mode can be set for the currently selected
+interpolation graph. The interpolation graph is manipulated with
+“keyframes” which are dragable handles that adjust the timestamp and
+keyframe.
+
+-   When a source in the timeline moves, the viewer needs to seek just
+    before that source's in point in the timeline.
+-   When the user adjusts the in-point or out-point of a source, the
+    viewer nees to seek to the new in or out point in the source
+-   When the user adjusts a keyframe, the viewer needs to seek to that
+    point in the timeline and show the user a preview of the change
+
+<image:advanced_ui_direct_keyframes.png>
+
+## Separated-keyframes variant
+
+The basic design doesn't address the problem of keyframes in
+SimpleEffects, which don't have room to display interpolation graphs. In
+this variant, the keyframe interpolation graphs have been moved directly
+below the timeline. Selecting any object (or group of objects, the
+color-balance effect in this mock-up is selected) causes its properties
+to be displayed in the property editing region below. Not shown are the
+key-frame handles, which would not become visible until objects within
+the key-frame window are selected.
+
+All keyframed properties are initially flat lines. These lines can be
+moved up or down simply by clicking/draging.
+
+At this point it is not yet clear which variant would be preferable. It
+is also not yet clear how the user will add or remove key-frames.
+Possibilities are:
+
+-   click directly on the graph and a new keyframe appears if one hasn't
+    been created (means that the line as a whole isn't movable. have to
+    select both end-points)
+-   select a keyfame then click “add” (user can't control where new
+    frame is added, so a second adjustment step is required)
+
+<image:advaced_ui_separated_keyframes.png>
+
+## Expanded/Contracted Variant
+
+The similar to the basic design, but objects can be expanded to take up
+a maximal amount of screen space. This extra space is used to display
+the interpolation graphs.
+
+<image:advanced_ui_expanded_contracted.png>
+
+# Kiddo's Design
+
+## General Timeline Overview
+
+Features in this mockup:
+
+-   nice looking clips representation on the timeline, maybe in cairo?
+-   arrows on the left and right sides of the clips to allow setting the
+    beginning/end (only works in the advanced timeline, because the
+    clips' widths are proportional to their duration). If the user zooms
+    out or the clip is too short, these arrows should “squeeze”
+    themselves, and, below a certain threshold, disappear completely.
+    The user will still be able to manipulate the begin/end points by
+    dragging the sides (borders) of the clip.
+-   thumbnails displayed when enough space is available *and when the
+    user has not deactivated them in the preferences*
+-   notice how the proportions of the various components of the UI are
+    different from the simple timeline. Here, the video preview and
+    media library are smaller, pushed to the top, to leave a lot more
+    space for the timeline itself. In a multitrack non-linear editor,
+    you want the timeline to be the main zone of interaction and
+    maximize the amount of space you have to play with it
+-   waveform previews for audio, ripped straight out of
+    [Jokosher](http://www.jokosher.org)
+-   the layer buttons on the left are there just for making the mockup
+    look less empty, they should be replaced by relevant ones
+-   notice the transition indicators on the bottom clip and the
+    top-right clip: some white “curve” allows you to see the speed of
+    transitions such as crossfades and fade-in/out
+-   the clip displayed on the layer “bg actors” has a motion curve (the
+    thing called “velocity curve” in Vegas Video). You might want to
+    look at Jokosher's code that was used for their audio volume curves,
+    it would be great to be able to control the volume/opacity/speed of
+    an audio/video clip using curves everywhere as “keyframes”.
+-   this user interface's **audio and video tracks are separated**. Do
+    not be fooled by the looks. It was just me being lazy (and
+    forgetting to show audio tracks everywhere). Basically, what you are
+    seeing in this mockup is a bunch of “silent clips with no audio” (or
+    clips whose audio tracks were removed in favor of one sound track)
+-   “pyrotechs” and “bg actors” are just track “names” (or “labels”)
+-   this was made from a screenshot of the French version of pitivi, so
+    a few terms might seem odd. For example “Piste vidéo” means “Video
+    track”.
+-   this whole timeline is \*HUGE\*. This would be in a case where the
+    user has big toolbars in his gnome preferences, and where he
+    stretched up the layer's height (because, realistically, the layer
+    heights should be maybe ½ of that to avoid eating up too much screen
+    height).
+
+![](Pitivi-advanced-mockup.png "Pitivi-advanced-mockup.png")
+
+I would be a strong proponent in favor of **having only one timeline for
+PiTiVi, the advanced one**. I mean, I really don't think that a
+multitrack UI like that is harder than the “imovie-simplified like”
+counterpart. This multitrack interface **is** scalable from the newbie
+to the professional, *if* you design, *think* the user interface really
+well (you can leave that to me ;). **I believe a “direct manipulation”
+multitrack “time-proportional” timeline interface kicks the hell out of
+the current “simplified interface”**, and will need no significant
+learning curve, even for grandma. The rest can be done with nice
+tutorial screencasts that I would gladly provide, and that would give
+the advantage of not splitting the coding workforce over two timelines.
+Do one thing, and do it so well that grandma's jaw drops (not from
+natural cause)! --[Kiddo](User:Kiddo.md) 23:28, 10 June 2007
+(BST)
diff --git a/docs/design/2007_design/2007_Advanced_UI_implementation.md 
b/docs/design/2007_design/2007_Advanced_UI_implementation.md
new file mode 100644
index 0000000..20045fe
--- /dev/null
+++ b/docs/design/2007_design/2007_Advanced_UI_implementation.md
@@ -0,0 +1,559 @@
+# Design Overview
+
+[Inheritance Diagram](image:advanced_inheritance.png.md)
+
+This document **does not reflect the existing codebase**, but rather a
+road map for future development. Some of this design has been
+implemented in the 2008\_SOC\_BLEWIS branch, and these changes will be
+gradually merged into trunk.
+
+The goal of the design is to build a UI which supports the following
+features:
+
+-   multi-track editing
+-   multi-layer editing\*
+-   multiple selection
+-   noun-verb interaction
+-   direct manipulation
+-   edge snapping
+-   multiple-level undo/redo support
+
+(\*) It is important to distinguish between a **track**, and a **layer**
+in application terminology. Existing video editors use the term
+**track** to refer to a UI object which represents a stream of video
+with a sequence of sources. PiTiVi refers to this as a **composition**.
+The term **track** in PiTiVi means a separate channel of output: for
+example, audio and video are in separate tracks. The Timeline class
+contains one TimelineComposition for each of its output tracks.
+Currently these are hard-coded to audiocomp and videocomp, but in the
+future multiple audio and video output tracks will be supported. This
+will enable things like multi-language sound tracks, or multi-angle
+video sequences.
+
+This is distinguished from the concept of a **layer** which is directly
+related to the notion of **compositing**. Within a track, sources have a
+property called **priority** which determines what will appear when the
+play-head reaches a given position in the timeline. By default, the
+source with the lowest numerical priority is displayed. Adding effects
+to a composition enables multiple sources to be composited together.
+Priority is used to determine which sources will be used by an effect as
+input.
+
+## The MVC/Observer Design Pattern
+
+PiTiVi relies heavily on MVC and Observer design patterns to decouple
+the core of the application from the user interface. Core objects emit
+signals which prompt changes in the UI. UI elements wrap core objects to
+manipulate data, which in turn emit signals. The observer pattern allows
+the user interface to listen for changes in the core without coupling
+the core to the UI.
+
+We use pygobject to provide support for the observer pattern in the
+core. The user interface depends on pygtk and pygoocanvas, both of which
+are based on GObject.
+
+## Files
+
+The advanced UI is implemented in several files in the pitivi/ui
+directory in the source tree:
+
+-   util.py
+-   complexinterface.py
+-   complextimeline.py
+-   ruler.py
+
+## Interfaces
+
+-   Selectable
+-   Draggable
+-   SelectableDraggable
+-   Magnetic
+
+## Classes
+
+-   History
+-   ComplexTimelineObject
+    -   ComplexTimelineFile
+-   Content
+    -   AudioContent
+    -   VideoContent
+-   Handle
+-   EditMarker
+-   ComplexTrack
+-   ComplexTimelineCanvas
+-   ComplexTimelineWidget
+
+# Utilites
+
+The util.py file provides a number of convenience functions for working
+with goocanvas, including an easy way of creating canvas item objects,
+as well as generic support for drag-and-drop and selections. This file
+also provides the SmartGroup class, which extends goocanvas.Group with
+automatic recalculation of size and position.
+
+The code in this file is intended to be as reusable and generic as
+possible. Its goal is to overcome some limitations of goocanvas which
+make programming dynamic, reactive interfaces more challenging than
+necessary. Code in this file is also used by the simple timeline.
+
+## SmartGroup
+
+SmartGroup is also used to implement HList and VList, which are
+container classes that enforce positioning constraints on their
+children. They work more-or-less like HBox and VBox in gtk. What you
+need to know about smart group is:
+
+-   The smart group keeps track of its own position: Setting the x or y
+    properties on a smartgroup will cause all the group's children to
+    move accordingly.
+-   The smart gropu keeps track of its size: If any of the group's
+    children change size or position, the group recomputes its width and
+    height properties.
+
+This is currently accomplished by using property notification signals.
+SmartGroup overrides the add\_child method and connects to the
+notify::x, notify::y, notify::width, and notify::height signals for each
+of its children.
+
+## Convenience Functions
+
+These functions all take an item as input and return the appropriate
+property. They make expressions involving these properties more readable
+and more compact.
+
+-   width(item)
+-   height(item)
+-   left(item)
+-   right(item)
+-   top(item)
+-   bottom(item)
+-   center(item)
+
+This function handles getting coordinates from an event object and
+converting them into the canvas space:
+
+-   event\_coords(canvas, event)
+
+These functions manipulate object size and position
+
+-   pos(item)
+-   set\_pos(item, pos), where pos is a tuple (x, y)
+-   size(item)
+-   set\_size(item, size), where size is a tuple (width, height)
+
+These functions activate draging and selection management:
+
+-   manage\_selection(canvas, changed\_cb)
+-   make\_selectable(canvas, item)
+-   make\_dragable(canvas, item, start\_cb, transform, end\_cb,
+    moved\_cb)
+
+## SmartCanvas
+
+This class is yet to be implemented. Intended to provide internal
+support for some of the convenience functions described above:
+
+### Methods
+
+-   manage\_selection(), activates internal selection managment,
+    deprecates top-level function with same name
+-   make\_selectable(), activates selection management on a given
+    object, deprecates top-level function with same name.
+-   make\_selection\_dragable(),
+
+# Interfaces
+
+All the interfaces used in the complex UI are kept in
+complexinterface.py.
+
+## Zoomable
+
+This interface allows for sharing a single gtk.Adjustment among multiple
+client objects. When the adjustment's value changes, the the Zoomable
+object's zoomratio property is set, and its zoomChanged() method called.
+
+Implementing classes must define a zoomChanged() method. This method
+should perform any drawing or size adjustments.
+
+Zoomable containers have the option of defining a
+setChildZoomAdjustment() method, which they can use to set the zoom
+adjustment on all of their children. In general, however, a container
+should set the child's zoom adjustment whenever the child is added to
+the container.
+
+## Draggable
+
+This interface encapsulates handling the mouse events required to make
+an object dragable with the mouse. Objects can simply extending from
+this interface to get basic drag-and-drop functionality. If more complex
+drag-and-drop behavior is required, this interface provides some hook
+functions which can be overridden by implementing classes.
+
+### Methods
+
+-   dragStart -- a hook which is called to notify the object that
+    dragging is about to begin
+-   dragEnd -- a hook which is called to notify the object that dragging
+    has ended
+-   dragMotion -- a hook which is called to notify the object that its
+    position should be updated.
+
+## Selectable
+
+This encapsulates the notion of an object which may be included in the
+current UI selection. This is kept strictly separate from Dragable, as
+there is a use case for selectable objects which cannot be moved by the
+user, as well as a use case for dragable objects which should never
+become part of the current selection. Objects are selected with
+Select(), and deslected with Deselect(). Objects are notified of their
+selection status through the selected() and deselected() method calls.
+
+Being part of the selection implies that the object represents data that
+can be manipulated. To this end, all Selectable objects provide a
+core\_object property. The list of all selected core objects can be
+obtained with the getSelectedCoreObjects class method.
+
+The current selection is a set of Selectable objects, and any command
+which affects the current selection operates on these objects (or the
+core objects which they represent). To facilitate this, the interface
+provides class methods to iterate over all instances of selectable
+objects in various ways.
+
+### Properties
+
+-   core\_object
+
+### Methods
+
+-   (absract) selected -- notifies the object it has been selected
+-   (absract) deselected -- notifies the object it has been deselected
+-   select -- places this item in the current selection
+-   deselect -- removes this item from the current selection
+-   (abstract) delete -- removes the core object from application data
+    structures
+-   (abstract) copy -- places a representation of the core object into
+    the application clipboard
+-   @classmethod getSelected -- returns a list of all selected
+    selectable objects
+-   @classmethod getSelectedCoreObjects -- returns the pitivi core
+    object for every object that has been selected
+-   @classmethod deleteSelected -- deletes all selected objects
+
+## SelectableDraggable(Selectable, Dragable)
+
+This is the explicit merging of the Selectable/Dragable interfaces.
+Objects which are both selectable and dragable should implement this
+interface, rather than the two ancestors independently. The reason is
+that this interface provides support for manipulating selections of
+movable items: i.e., if the user has multiple items selected and moves
+one of them, all the other items should move in unison.
+
+### Methods
+
+-   dragStart -- relays dragStart message to all other selected
+    SelectableDraggable objects
+-   dragEnd -- relays dragEnd message to all other selected
+    SelectableDraggable objects
+-   dragMove -- relays dragmove message to all other selected
+    SelectableDraggable objects
+-   (abstract) setPos -- implemented by derived objects, sets the
+    position of the core object represented by this object
+-   @classmethod selectedDragStart
+-   @classmethod selectedDragEnd
+-   @classmethod selectedDragMove
+
+## Magnetic
+
+Encapsulates the concept of an important point on the timeline to which
+timestamps should be snapped during mouse operations. The class keeps
+track of all its instances in a sorted list, and uses binary search to
+implement the class method snapTime(), and snapObj, which actually
+implement magnetic edge snaping.
+
+### Properties
+
+-   flags -- when the control point is magnetic to the cursor, values
+    are RESIZE, MOVE, RAZOR, COMMAND, ALL
+
+The flags property is a bit-field defining when a magnetic point will be
+used.
+
+-   RESIZE -- control point is magnetic during resize operations
+-   MOVE -- control point is magnetic during drag operations
+-   RAZOR -- control point is magnetic to razor tool, or during trimming
+-   COMMAND -- control point can be the input to a command which
+    operates on current selection
+-   ALL -- equal to RESIZE | MOVE | RAZOR | COMMAND
+
+### Methods
+
+-   setTime -- update this magnet's time value
+-   @classmethod snapTime(time, flags) -- snap the input time to the
+    nearest magnet according to flags
+-   @classmethod snapObj(start, duration, flags) -- snap start or end
+    time to the nearest magnet, according to flags)
+
+# Classes
+
+These classes implement the majority of the pitivi's advanced (or
+complex) user interface, and can be found in complextimeline.py.
+
+## History
+
+This class manages the command history for the user interface. It
+maintains a stack of actions and their inverses.
+
+### Properites
+
+-   undo\_actions -- stack of (function, data, inverse\_function,
+    inverse\_data) tuples
+-   redo\_actions -- stack of (function, data, inverse\_function,
+    inverse\_data) tuples
+
+### Methods
+
+-   undoLast -- pop the top of the undo stack, push onto the redo stack
+    and execute the inverse operation
+-   redoLast -- pop the redo stack, push the undo stack, and execute the
+    non-inverse operation
+-   pushAction -- add a new tuple to the top of the history stack.
+-   peek -- return the top of the undo stack
+-   poke -- update the top of the undo stack in place
+-   pop -- pop from the undo stack without performing any action or
+    pushing the redo stack (for example, to clear a canceled operation
+    from the undo stack)
+-   clear -- clears the undo/redo stack
+
+## ComplexTimelineWidget(gtk.HBox)
+
+This widget contains the timeline canvas and the ruler. It is also
+responsible for showing and hiding toolbar actions associated with the
+complex timeline.
+
+## ComplexTimelineCanvas(goocanvas.Canvas, Zoomable)
+
+(currently called ComplexLayers, will be renamed before the next
+release)
+
+This class *is* the timeline. The canvas creates one ComplexTrack item
+for ComplexTrack item for each top-level composition within a timeline.
+PiTiVi core doesn't yet support multi-track editing, but this support is
+planned. ComplexTracks should be able to handle creating/destroying
+tracks dynamically.
+
+In addition to the timeline itself, this widget keeps track of a number
+of important details about the timeline: current edit points, playhead
+position, current tool (only razor or pointer, at present), and the
+current selection.
+
+Mouse and pointer events received by this widget are routed to the
+selection or the current active tool. Keyboard events are handled here
+directly depending on the current active tool.
+
+### The Selection
+
+The primary goal of the editing canvas is to allow the user to modify
+the selection as they see fit, and then apply changes to the selected
+object. The selection consists of a set of objects implementing the
+Selectable interface.
+
+The canvas keeps track of whether or not objects are selected. Objects
+in the timeline always pass pointer events up to their parent group. If
+an event reaches the root item group, a test is performed to determine
+if the object should be added to the current selection. If this test
+passes, the objects select() method is called.
+
+The selection also identifies a primary object: this is the object with
+which the user is directly interacting with, i.e. the source of the
+pointer event. Certain operations make the most sense in the context of
+a single active object. For example, if the user selects several sources
+and then drags one of them, this object will be used as a reference
+point for edge snapping.
+
+Finally, the user is provided with a few tool-bar commands which
+manipulate the selection explicitly.
+
+### Selection Management Methods
+
+-   deleteSelected()
+-   copySelected()
+-   moveSelected()
+-   clearSelection()
+-   selectBeforeCurrent()
+-   selectAfterCurrent()
+
+### Selection Manipulation Methods
+
+-   copySelected()
+-   deleteSelected()
+-   moveSelected()
+-   linkSelected()
+-   unlinkSelected()
+-   collapseSelected()
+
+Commands which operate on the selection are sent to this widget, which
+iterates over the selection and performs operations on every element
+contained therein.
+
+### Other
+
+-   activateRazor()
+-   deactivateRazor()
+
+## ComplexTrack(SmartGroup, Zoomable)
+
+This class is a container for pitivi tracks.
+
+-   Time is represented by horizontal position, in proportion to the
+    current zoom ratio
+-   Priority is represented by vertical position, with the top of the
+    canvas representing the highest priority.
+
+This class encapsulates an internal view of a TimelineComposition
+object. Each ComplexTrack manages exactly one TimelineComposition, and
+connects to the following signals:
+
+-   source-added
+-   source-removed
+-   effect-added
+-   effect-removed
+-   transition-added
+-   transition-removed
+
+These signals are all sent to the same pair of signal handlers,
+\_objectAdded, \_objectRemoved, respectively. This function takes an
+additional parameter, klass, which is a reference to the sublclass of
+ComplexTimelineObject which should be instantiated.
+
+## Handle(Rect, Dragable, Magnetic)
+
+This object is used by ComplexTimelineObject to represent the in/out
+edit points of the object. A handle is a goocanvas.Rect item which
+implements the Dragable, and Magnetic interfaces. It is not directly
+selectable. A handle object does not directly set its position, but
+instead hands off mouse events to a callback function, motion\_callback.
+
+### Properties
+
+-   width
+-   height
+-   active\_color
+-   normal\_color
+-   motion\_callback
+-   cursor
+
+### Methods
+
+-   \_\_init\_\_ -- sets up initial properties, and stores the
+    motion\_callback
+-   dragBegin -- sets item's color to the active color
+-   dragEnd -- sets item to the the normal color, updates magnet
+    timestamp
+-   dragMotion -- calls the motion\_callback, after performing some
+    transformations
+
+## ComplexTimelineObject(Group, Zoomable, SelectableDragable)
+
+Corresponds to pitivi.timeline.objects.TimelineObject. It is a base
+class for all objects represented in the ComplexTimeline. When created,
+it is given a reference to a TimelineObject, and connects to that
+object's `start-duration-changed` signal. When the core object's start
+and duration change, the UI object's horizontal position and width are
+updated. When the core object's layer position changes, the vertical
+position is updated.
+
+Every TimelineObject has a reference to a Content object which is
+displayed inside of the TimelineObject. This object may be audio or
+video. The Content object can change height or visibility depending on
+its state. The parent ComplexTimelineObject must keep track of the
+height of its content region and adjust its height accordingly.
+
+ComplexTimelineObjects have drag handles which allow them to be directly
+resized. See the Handle class documentation for more information.
+
+### Properties
+
+-   background -- background rectangle
+-   coreobject -- the core PiTiVi object which this timelineobject
+    represents
+-   content -- Content object
+-   inpoint -- Handle, representing the in point of the source
+-   outpoint -- Handle, representing the out point of the source
+
+### Methods
+
+-   dragMotion -- calls setStartPoint, Magnetic.snapTime(), and
+    selectable.dragMotion() to adjust the object's position.
+-   (private) startDurationChanged -- handler for the coreobject's
+    start-duration-changed signal
+-   setStartPoint -- sets coreobject's start property
+-   setInPoint -- callback given to inpoint as its motion callback,
+    which sets coreobject's start/duration properties
+-   setOutPoint -- callback given to outpoint as its motion callback
+    which sets coreobject's duration property
+
+## TimelineFileObject(TimelineObject)
+
+This class derives from TimelineObject. It overrides the signal handlers
+which set the in/out edit points so that they also set the
+media-start/media-duration points.
+
+### Methods
+
+-   setInPoint
+-   setOutPoint
+
+## Content(Smartgroup)
+
+Abstract base class for the content region of ComplexTimelineObject. The
+content region displays a representation of the core object associated
+with the Content object's parent ComplexTimelineObject. Content regions
+may be expanded, contracted, or minimized. When expanded, the full
+preview image is visible, and the widget is expanded to maximum height
+so that the keyframe editor can be used. When contracted, only the
+preview image is visible. When minimized, the content region is
+completely hidden.
+
+### Properties
+
+-   width
+-   height
+-   name
+-   content\_image
+-   keyframes
+-   coreobject
+
+### Methods
+
+-   expand()
+-   contract()
+-   minimize()
+-   make\_content\_image -- creates a generic image thumbnail.
+
+## AudioContent(Content)
+
+Overrides make\_content\_image to create an audio waveform from audio
+stream data.
+
+### Methods
+
+-   make\_content\_image
+
+## VideoContent(Content)
+
+Overrides make\_content\_image to create a thumbnail sequence.
+
+### Methods
+
+-   make\_content\_image
+
+## Marker(goocanvas.Polygon, SelectableDragable, Magnetic)
+
+Similar to a handle, but can be the selected, which implies that it
+contains a reference to a core object.
+
+## ScaleRuler(gtk.Layout, Zoomable)
+
+This file contains the ScaleRuler class, a zoomable timeline ruler. It
+should share the same gtk.Adjustment objects for both zooming and
+horizontal scrolling.
diff --git a/docs/design/2007_design/2007_Simple_UI_Mockups.md 
b/docs/design/2007_design/2007_Simple_UI_Mockups.md
new file mode 100644
index 0000000..ff0d651
--- /dev/null
+++ b/docs/design/2007_design/2007_Simple_UI_Mockups.md
@@ -0,0 +1,214 @@
+# 2007 Simple UI Mockups
+
+Here are a collection of UI Mockups for various actions possible with
+the Simple UI. Also, you might be interested to see
+[Advanced\_UI\_Mockups](Advanced_UI_Mockups.md).
+
+## Add Media
+
+### Add medias
+
+Medias can be added to the source list by several means:
+
+-   clicking on the 'Add Media' button (shown in mockup below)
+-   Dragging from desktop, nautilus, or anything supporting the uri-list
+    DND protocol
+
+![](Deroule-addmedia1.png "Deroule-addmedia1.png")
+
+### Medias added
+
+The medias are all shown with an icon and some details in the source
+list
+
+![](Deroule-addmedia2.png "Deroule-addmedia2.png")
+
+## Add Scene
+
+### Select scene
+
+The user selects the desired scene from the source list and drags it
+onto the timeline
+
+![](Deroule-addscene1.png "Deroule-addscene1.png")
+
+### Scene added
+
+The dropped scene appears on the timeline.
+
+All scenes are colour-coded (random colours) so that you can easily see
+in the timeline slider where you sources are. Here, the scene is
+coloured in green, and it takes up the whole timeline.
+
+Also notice that the new scene is automatically selected, this is
+visible here because it is highlighted in red both in the timeline
+slider and in the simple timeline.
+
+![](Deroule-addscene2.png "Deroule-addscene2.png")
+
+### Select another scene
+
+![](Deroule-addscene3.png "Deroule-addscene3.png")
+
+### Other scene added
+
+Just like for the first scene, the new scene is added, with a colour
+code, and you can see in the timeline slider that it takes up more room
+than the first one since it is longer.
+
+A transition is automatically added between new scenes and existing
+ones. This is a sensible default choice, since hard-transitions are
+really ugly to look at. The default choice is a fade transition that
+takes 1 second.
+
+![](Deroule-addscene4.png "Deroule-addscene4.png")
+
+## Remove Scene
+
+To remove a scene, just press on the cross/delete button at the top
+right of the scene.
+
+![](Deroule-removescene1.png "Deroule-removescene1.png")
+
+## Editing Video
+
+These are the various steps for editing a scene, that is : modify the
+start/stop duration of a scene.
+
+### Switching to editing mode
+
+To edit a scene, you need to activate the editing mode for that video.
+You can do so by clicking on the **Edit** button (highlighted in red in
+the mockup below).
+
+![](Deroule-editingvideo1.png "Deroule-editingvideo1.png")
+
+### Editing mode layout
+
+Once in editing mode, the scene takes all the width of the timeline, and
+the timeline slider shows which source is selected by highlighting it in
+red.
+
+The two viewers at the left and right of the editing view represent the
+start and stop position of the scene. The three buttons below each
+viewers are:
+
+-   -/+ to move the stop/start position forward or backward by one frame
+-   a button to set the current position in the editing slider to the
+    start/stop position.
+
+The editing slider represents the whole scene, with the position of the
+start/stop points.
+
+![](Deroule-editingvideo2.png "Deroule-editingvideo2.png")
+
+### Moving through the scene
+
+Using the editing slider, it is possible to seek through the scene to
+find the adequate start/stop points. Notice that the position is
+synchronous with the position in the timeline slider.
+
+![](Deroule-editingvideo3.png "Deroule-editingvideo3.png")
+
+### Setting the start position
+
+Once the user has chosen where the scene should start, you can click on
+the 'set start point' button. The editing slider will represent the
+start point by graying out everything before that point.
+
+The width of the scene also changes in the timeline slider (FIXME : this
+should be visible here, and not in the following mockup).
+
+![](Deroule-editingvideo4.png "Deroule-editingvideo4.png")
+
+### Choosing the stop position
+
+In the same way we did previously, we can seek through the editing
+slider to find an adequate stop position.
+
+![](Deroule-editingvideo5.png "Deroule-editingvideo5.png")
+
+### Setting the stop position
+
+Pressing the 'set stop position' (highlighted in red below) will mark
+the stop position on the editing slider by graying out everything after
+that position.
+
+The duration in the timeline slider will also be changed to show the
+modification (FIXME: It is in fact only visible on the following mockup)
+
+![](Deroule-editingvideo6.png "Deroule-editingvideo6.png")
+
+### Leaving the editing mode
+
+To leave the editing mode, simply press the **Done** button (highlited
+in red below).
+
+![](Deroule-editingvideo7.png "Deroule-editingvideo7.png")
+
+### Back to timeline view
+
+The scene has shrinked back to the normal size.
+
+![](Deroule-editingvideo8.png "Deroule-editingvideo8.png")
+
+## Add Effect
+
+To apply an effect on a scene, select one from the effect list and drag
+it onto a scene.
+
+![](Deroule-addeffect1.png "Deroule-addeffect1.png")
+
+Once added, the effect will appear in the scene's effect slot.
+
+![](Deroule-addeffect2.png "Deroule-addeffect2.png")
+
+## Remove Effect
+
+To remove an effect, click on the remove button in the effect slot
+(shown in red below).
+
+![](Deroule-removeeffect1.png "Deroule-removeeffect1.png")
+
+## Add Transition
+
+To add a transition between two scenes, select one from the transitions
+list and drag it between two scenes.
+
+![](Deroule-addtransition1.png "Deroule-addtransition1.png")
+
+Once added, it will appear between the two scenes in the timeline.
+
+![](Deroule-addtransition2.png "Deroule-addtransition2.png")
+
+## Change Transition
+
+To modify a transition, select one from the transitions list and drop it
+onto an existing transition...
+
+![](Deroule-changetransition1.png "Deroule-changetransition1.png")
+
+... and voila
+
+![](Deroule-changetransition2.png "Deroule-changetransition2.png")
+
+## Remove Transition
+
+To remove an existing transition, click on the cross/delete button at
+the top-right of the transition (hightlighted in red).
+
+![](Deroule-removetransition1.png "Deroule-removetransition1.png")
+
+![](Deroule-removetransition2.png "Deroule-removetransition2.png")
+
+## Add Starting
+
+![](Deroule-addstarting1.png "fig:Deroule-addstarting1.png")
+![](Deroule-addstarting2.png "fig:Deroule-addstarting2.png")
+![](Deroule-addstarting3.png "fig:Deroule-addstarting3.png")
+
+## Add Ending
+
+![](Deroule-addending1.png "fig:Deroule-addending1.png")
+![](Deroule-addending2.png "fig:Deroule-addending2.png")
+![](Deroule-addending3.png "fig:Deroule-addending3.png")
diff --git a/docs/design/2008_design/2008_7_28_interview_notes.md 
b/docs/design/2008_design/2008_7_28_interview_notes.md
new file mode 100644
index 0000000..8990f95
--- /dev/null
+++ b/docs/design/2008_design/2008_7_28_interview_notes.md
@@ -0,0 +1,65 @@
+# 2008 7 28 interview notes
+
+I'll call my friend M. M. Is a 3D animator working for a gaming company,
+so his editing needs are somewhat different than the average
+videographer or editor. His duties include producing high-quality stills
+and shorts for promotional purposes, as well as in-game cinematics
+(ICG). Most of his sequences are pre-rendered, and brought in as
+sequenced images. In general, the sequences are rendered to their
+finished length and only occasionally are the sequences trimmed down.
+
+After lunch with M, he showed me how he performed simple editing tasks
+in Adobe Premiere. He discussed how Premiere differed from its
+alternatives. For comparison he also performed similar tasks in After
+Effects. He commented that Premiere doesn't focus on individual frames.
+After Effects is much more focused on frame-accurate editing and
+keyframing. M. said that he actually preferred using After Effects for
+most editing tasks. He also showed me how Maya handles animation through
+two separate interfaces: the dope sheet, and the graph. The dope sheet
+hearkens back to traditional 2D animation as a means of timing lip
+movements to speech sounds. The property graph directly displays the
+mathematics of a property as they change over time.
+
+# M.s Comments
+
+-   When moving one source affects all the sources after it, this is
+    called a “ripple edit”.
+-   The project's framerate and resolution are completely determined by
+    the output media. Usually, the editor \[person\] knows in advance
+    what their output format is. Changing these settings is not usually
+    done, and when it is, a loss in quality is expected.
+-   FCP tries to provide direct manipulation of more abstract editing
+    concepts, and high degree of immediate feedback, which is what
+    people like about it. It gets the job done, but things don't seem to
+    feel as tactile or immediate.(\*)
+-   M. claims to have an intuitive feel for “numbers”, meaning numeric
+    property values. When he sets a key-frame value on a cross-fade, for
+    example, he has a fairly good idea of what 35% means.
+-   It's rare that an editor would first move the play-head position to
+    a point in the timeline that they wanted to see, and then make a cut
+    or an edit.
+
+# My Observations
+
+-   Premiere didn't render effects or transitions in real time even on a
+    powerful machine.
+-   Premiere doesn't allow sources to overlap each other in the
+    timeline. Dropping one source onto another causes the new source to
+    be spliced into the existing one. There's no easy way to rejoin the
+    source, though you can always stretch the existing source back to
+    its original length.
+-   Applying a time stretch in premiere was somewhat difficult. In after
+    effects, the time remapping feature made complicated frame-rate
+    manipulations a fairly straightforward keyframing process.
+
+# M's Suggestions for PiTiVi
+
+-   When moving a source, the viewer should show the frame before the
+    source cuts in, rather than the play-head position
+-   When trimming a source, the viewer window should show the start
+    point in that source, rather than where the play-head position.
+-   Put as much functionality directly in the timeline as possible, as
+    it's often easier to manipulate.\*
+
+(\*) Statements marked with an asterisk are speculations about other
+user's preferences, and should be taken with a grain of salt.
diff --git a/docs/design/2008_design/2008_Architectural_Redesign.md 
b/docs/design/2008_design/2008_Architectural_Redesign.md
new file mode 100644
index 0000000..1f48a85
--- /dev/null
+++ b/docs/design/2008_design/2008_Architectural_Redesign.md
@@ -0,0 +1,48 @@
+# 2008 Architectural Redesign
+
+New architectural redesign for PiTiVi done in 2008. This page (and its
+children) are obsolete and kept mostly for historical purposes.
+
+## Components
+
+The following documents are supposed to be read in order:
+
+1.  [High Level
+    design](2008_Architectural_Redesign/High-level_Design.md)
+    This is an overview of the new design of PiTiVi. Read this first.
+2.  [Project](2008_Architectural_Redesign/Project.md)
+    Specifications of the **Project** object
+3.  [ObjectFactory](2008_Architectural_Redesign/ObjectFactory.md)
+    Specifications of **ObjectFactory** and it's known
+    subclasses/interfaces.
+4.  [Streams](2008_Architectural_Redesign/Streams.md)
+    Specifications of **Stream**s.
+5.  [Pipeline](2008_Architectural_Redesign/Pipeline.md)
+    Specifications of **Pipeline**, and the interaction between
+    **Pipeline** and **Action/Consumer/Producer**.
+6.  [Timeline](2008_Architectural_Redesign/Timeline.md)
+    Specifications of the **Timeline** and the **TimelineObject**s
+7.  [Tracks](2008_Architectural_Redesign/Tracks.md)
+    Specifications of the timeline's **Track**s and the **TrackObject**s
+8.  [Formatter](2008_Architectural_Redesign/Formatter.md)
+    Specifications of the **Formatter**(s) and the interaction with
+    other parts of Core.
+9.  [Browsers](2008_Architectural_Redesign/Browsers.md)
+    Specifications of the various **Browsers**s and their interaction
+    with other parts of Core.
+
+## Other pages
+
+-   [Design
+    Thoughts](2008_Architectural_Redesign/Design_Thoughts.md)
+-   [2008 UI Design](2008_UI_Design.md)
+
+Yet more historical pages that predated this redesign initiative:
+
+-   [UI Implementation](UI_Implementation.md)
+-   [Multi-Layer Editing](Multi-Layer_Editing.md)
+-   [Plugins](Plugins.md)
+-   [2008 Plugin Interface
+    development](2008_Plugin_Interface_development.md)
+-   [Project loading and saving](Project_loading_and_saving.md)
+-   [Project file format](Project_file_format.md)
diff --git a/docs/design/2008_design/2008_Architectural_Redesign/Browsers.md 
b/docs/design/2008_design/2008_Architectural_Redesign/Browsers.md
new file mode 100644
index 0000000..9771490
--- /dev/null
+++ b/docs/design/2008_design/2008_Architectural_Redesign/Browsers.md
@@ -0,0 +1,78 @@
+# Goal
+
+`Browser`s are meant to assist in three things:
+
+-   Media Asset Management, here called **Content Browsers**,
+-   Operation Management, here called **Operation Browsers**,
+-   Device Management, here called **Device Browsers**
+
+All `Browser`s produce/consume ObjectFactory in output/input . They are
+the main providers/consumers (along with
+[Formatter](New_Design_2008/Formatter.md)) for ObjectFactory
+anywhere else in the Application.
+
+New types of `Browsers` can be created through the plugin interface to:
+
+-   Offer access to a new type of MAM (for storing/retrieving/searching
+    content)
+-   Offer discoverability of devices through a new system (HAL doesn't
+    exist on windows !)
+-   ...
+
+# Browser types
+
+## Content Browsers
+
+These Browsers can be listed individually for access to specific
+services.
+
+They only return content of type `SourceFactory`
+
+-   Local content
+    -   <file://> (standard system)
+    -   F-Spot catalog browsing
+    -   Tracker
+    -   ...
+-   Remote content
+    -   Tape catalog, or any other kind of professional MAM system
+    -   Flickr
+    -   Youtube
+    -   ...
+
+These browsers MUST offer at least the following functionality:
+
+-   `getFactory(`*`uri`*`)` , returns the `ObjectFactory` for the given
+    uri.
+
+The browsers CAN also offer these functionality:
+
+-   `storeFactory(`*`factory`*`, `*`uri`*`)`, stores the given
+    `ObjectFactory` with the given uri. It returns an `ObjectFactory`
+    which might be the same as the input, or a new one, or a a temporary
+    new one.
+-   Searching/Browsing functionnalities
+
+Browsers should use the **UI Bundle** system to provide adequate UI
+interfaces if needed.
+
+## Operation Browser
+
+They only return content of type `OperationFactory`.
+
+The default implementation will just look for all available GstElement
+of a given type and return simple OperationFactory objects wrapping
+them.
+
+Another implementation will be in charge of handling all the pitivi
+plugins providing different OperationFactory.
+
+## Device Browser
+
+Only returns content of type `DeviceFactoryInterface`.
+
+It MUST provide the following functionality:
+
+-   `getDefaultSinks()` , which should return the default usable
+    SinkDeviceFactory.
+-   `getDefaultSources()`, which should return the default usable
+    SourceDeviceFactory.
diff --git a/docs/design/2008_design/2008_Architectural_Redesign/Design_Thoughts.md 
b/docs/design/2008_design/2008_Architectural_Redesign/Design_Thoughts.md
new file mode 100644
index 0000000..8e8ca30
--- /dev/null
+++ b/docs/design/2008_design/2008_Architectural_Redesign/Design_Thoughts.md
@@ -0,0 +1,451 @@
+# 2008 Architectural Redesign/Design Thoughts
+
+This is a listing, not entirely sorted, of thoughts, remarks, things to
+do, regarding PiTiVi's design, uses, etc...
+
+Eventually, these ideas/thoughts/remarks ... will end up being split up
+for a full-size (re)design/refactor document.
+
+They could be sorted as following:
+
+-   Coding Style : Urgent
+-   Core Features
+-   (long term) goals
+-   Vision (use cases ?)
+
+## Code Review
+
+-   What is too slow ?
+-   What is not flexible enough ?
+-   What is not re-usable ?
+-   What is hard to use ?
+-   What is unclear ?
+-   What is not needed ?
+-   What is in the wrong location ?
+    -   Split up code
+
+Actual inline-review done in the 'code-review' branch here :
+<http://gitorious.org/projects/pitivi/repos/mainline>
+
+## Fundamental issues and goals
+
+These issues/goals are not ordered, since they are all equally
+important.
+
+-   **No code shall access private values directly**
+    -   Use setter/getter and python 'property' mapper
+    -   Ex: `myprop = property(_get_myprop,_set_myprop)`
+
+<!-- -->
+
+-   **Core code shall NOT contain any UI-specific code** (and
+    vice-versa)
+    -   This breaks the fundamental Core/UI separation
+    -   Any code in *core* that has ui-specific code should be moved to
+        pitivi.ui modules
+    -   And the opposite for core code in the UI (ex.
+        `pitivi.ui.plumber`)
+
+<!-- -->
+
+-   **All Core/UI classes can be subclassable for specific usage**
+    -   This is essential for full pitivi flexibility, for having all
+        kinds of plugins, for having different UI, etc...
+
+<!-- -->
+
+-   **Splitup code in subdirectories/submodules**
+    -   Maybe not as much as one class per file... but that would be a
+        good goal
+    -   Definitely ONE base class per file though
+
+<!-- -->
+
+-   **UI is NOT compulsory** ==&gt; **pitivi can be used as a LIBRARY**
+    -   There are several tools for which we need all the code from
+        pitivi core without a UI implementation
+    -   Ex : rendering backends, command-line/scripting tools, ....
+    -   Disambiguate the naming somewhere
+        -   `pitivi` : python module/library
+        -   `PiTiVi` : application using the `pitivi` module
+    -   Still, we should have most of the UI logic in that library, but
+        without any forced implementation (like qt/gtk/win32...)
+
+<!-- -->
+
+-   **No gnome/gtk/gobject/gst specific code in base classes**
+    -   This should go in subclasses
+    -   Create our own event-based interface (to remove dependency on
+        gobject.GObject)
+        -   Johan might have ideas about this
+
+<!-- -->
+
+-   **Use `generators/yield` wherever it can be applied**
+    -   Speedup and memory usage improvement
+
+<!-- -->
+
+-   **The only HARD DEPENDENCIES of pitivi are python core libraries and
+    gstreamer**
+    -   All other dependencies are optional and should be used from
+        plugins
+
+<!-- -->
+
+-   **Remove the global instance code**
+    -   No code should depend on a single instance of application and
+        project
+    -   Needed to be able to load many projects in one instance (amongst
+        other things)
+    -   The majority of the pitivi module should be non-application
+        modules
+
+<!-- -->
+
+-   **Unit tests for pitivi core**
+
+<!-- -->
+
+-   **Prepare for Python 3**
+    -   Article/presentation by Guido about this :
+        <http://www.artima.com/weblogs/viewpost.jsp?thread=227041>
+
+## Code Review
+
+Not at all sorted
+
+### File save/load
+
+It seriously needs to be rethinked.
+
+-   Allow formats to create their own subclasses of core classes
+    -   Subclassing FileSource to add format-specific information
+    -   Subclassing FileSourceWidget to show that format-specific
+        information in the UI
+-   Pluggable format support
+-   See Undo/Redo
+-   We need a native PiTiVi format
+-   Need to be able to save files used in the project
+-   Handle files/directories being moved, or loading the project on a
+    different computer
+-   Simple support for playlists (ELD, PLS, ASX ?)
+
+### Undo/Redo
+
+-   Some actions might be specific to a plugin
+
+### Layer support in compositions
+
+-   This is currently implemented using hacks
+
+### TimelineObjects
+
+-   Actually use ObjectFactory for producing its content
+-   Remove limitation of only one brother per object
+-   Allow re-using indentical source/composition many times in a
+    composition
+    -   Fully synchronized (modifications to one instance are spread to
+        all instances)
+    -   Not synchronized (they're copies)
+    -   Half synchronized (only some properties modifications are
+        synchronized to all instances)
+
+### ObjectFactory
+
+-   Clarify its usage
+    -   It contains the global information of objects you can use in the
+        timeline
+    -   For \*any\* object you can use in the timeline (source, fx,
+        transition, composition, etc....)
+-   Create notion of `SubObjectFactory`
+    -   They use a smaller area/time of the *parent* object (cutting a
+        captured video)
+    -   Or they could be **corrected/modified** versions of the original
+        source (i.e. they have extra effects applied to the source)
+        -   Colour balance correction
+        -   Audio Correction
+        -   Media conversion (ex : Use `goom` to make a video stream out
+            of an audio track)
+            -   The 'media-converted' ones could maybe done on the fly
+                if you add a file of a given media type (ex:audio) into
+                a track of anothe media type (ex:video).
+-   Allow easy transcoding, re-rendering or re-muxing of
+    SubObjectFactory.
+-   Allow adding extra (meta)data
+
+### Logging
+
+-   Switch to a smarter and more efficient debugging system
+    -   Use logging module ?
+    -   do as `flumotion` ?
+
+### Plugin system
+
+-   Figure out how to cleanly solve the problem of plugins extending
+    both CORE and UI classes
+    -   flumotion use some kind of bundles for this
+
+### SmartBin and Playground
+
+This was originally created to cope with 0.8 issues
+
+-   Do we still need the playground ??
+-   SmartBin isn't flexible enough
+    -   We might need to have more than two running at the same time
+    -   Doesn't support being connected to more than one sink
+    -   Need to support features like Viewing Video while recording
+        Video AND Audio
+
+An idea might be to have `Producer`s and `Consumer`s.
+
+-   Producer
+    -   Can be a Timeline, live stream, File source, camera, webcam ,...
+        (more or less like SmartBin now)
+    -   It has a clean way of querying what it can produce
+    -   We can connect multiple times to a stream (Audio, Video, ...) it
+        produces
+-   Consumer
+    -   Can be an Encoder, Hardware sinks, Raw File renderer, Network
+        Stream renderer, ...
+    -   Has a buffering property
+
+### Naming inconsistencies
+
+Make sure the naming is coherent and comprehensible
+
+-   Get rid of the notions of 'threads' in bins (sooooo 0.8)
+-   Use proper naming from the editing world
+-   Add a glossary in the documentation
+
+### Temporary files
+
+Thumbnails, captures, etc...
+
+-   Where do we store them ?
+-   How do we manage them ?
+
+### Hardware source and sinks
+
+-   Move plumber to core
+-   Have some discovery utility (i.e. several audio/video sinks)
+    -   Have it subclassable
+        -   Use HAL on linux
+        -   Use ??? on win, etc....
+-   Have some generic classification system (os/system agnostic)
+    -   Audio
+    -   Video
+    -   Source
+        -   Local
+        -   Camera
+        -   Network
+    -   Sink
+        -   Local
+        -   Network
+    -   ???
+-   See SmartBin and Playground above
+
+### Cache rendering
+
+-   needed for complex videos/operation
+-   Have a caching system for frame forward/backward operation
+    -   Would act like a queue, except it would intercept seeks, do the
+        original one, then do a second \[1s before, 1s after\] seek to
+        have the data available straight away for step-by-step seeking
+
+### Losless editing
+
+-   For I-frame only codecs (DV, JPEG,...), we should be able to only
+    decode/process/encode parts that have be modified
+    -   Would require gnonlin and core pitivi classes to support non-raw
+        streams
+
+### Capture support
+
+-   Have base classes for capture support in core
+-   See Hardware source and sinks
+-   We **absolutely** need support for DV and HDV
+
+### Flexible 'source provider/browser' support
+
+Currently we only get sources from local files (even worse, it's using
+gnome-specific things)
+
+-   Make it generic
+-   It provides ObjectFactory objects
+-   Allow acces to various kinds of source provider
+    -   Local providers (filesystem, F-Spot, Gnome media (SoC project),
+        ...)
+    -   Network providers (Media Asset Management)
+    -   P2P ? Using telepathy and tubes ?
+-   Source providers might have extra information ==&gt; ObjectFactory
+    subclasses
+-   Figure out what's the best way to solve this issue
+    1.  Use a source provider (let's say youtube) and grab some files
+    2.  You want to modify those files (let's say apply a colourbalance,
+        or cut out what you need) to have SubObjectFactory
+    3.  You save your project (where/how do you save those files ? Do we
+        leave them as a youtube link ?)
+    4.  You reload your project... but you don't need the youtube
+        browser anymore (you've already got your sources)
+
+    -   -   **PROBLEM** Disambiguate SourceProvider and SourceBrowser.
+            I'd say the difference is that stuff from SourceProvider(s)
+            have to be moved in the SourceBrowser before being used in
+            the timeline.
+
+-   See also the ideas in ObjectFactory above
+
+### Marker points / KeyFrames
+
+Here keyframes are not I-frames but 'key positions'
+
+-   Add support in:
+    -   ObjectFactory (interesting points, user-introduced data, could
+        be stored with/along the file...)
+    -   TimelineObject (instance specific property modification)
+    -   UI
+
+### Source flexibility
+
+-   Support multiple versions of one source
+    -   Ex :
+        -   low resolution versus HD/4K
+        -   Distributed/P2P files (first download lowest resolution)
+    -   Use thumbnail when file not available yet.
+-   if it's a network URI, option to save it locally
+    -   detect if remote source has changed
+-   Support for separate index (save/load support)
+-   Add basic tests to make sure the sources will behave properly with
+    pitivi
+    -   ex : testing seeking support
+    -   If not, propose transcoding, or plugin to download, etc...
+
+### Multiple Video support
+
+There's two different use-cases in fact
+
+-   Steroscopic or multi-angle support (multiple video tracks)
+-   Editing together multiple videos from the same scene (one video
+    track)
+    -   You want a way to view all the input videos at the same time,
+        synchronized, so you know which ones to select at any given
+        point
+    -   This of it as a non-live mixing-desk
+
+### Effect support
+
+-   Have a `gst_launch` plugin where users can create their own freeform
+    effect pipeline
+-   Allow concatenation/coupling of existing effects into a bigger one
+    -   Bonus for adding some scripting in it !
+-   Have Audio+Video effects
+    -   They're in fact two/more separate effects that have
+        synchronization
+    -   Ex : photo flash effect : you want to have the 'flash' sound in
+        sync with the 'whiteout'/still frame on the video side
+
+### Scripting/Template/Scenario system
+
+Allow easy creation of (parts of) the Timeline
+
+-   Should have a clean content/Script separation
+    -   Ex : Interview script : have the interview person's name
+        separated from the actual video on which to overlay his name
+-   Allow subclassing
+    -   Ex : You can create different ways of displaying the
+        interviewee's name, different ways to blend in/out, ...
+-   Have a repository for those scripts/scenarios
+    -   People can easily share/use/reuse existing scenarios
+
+### Text/Subtitle support
+
+How do we handle this properly ?
+
+-   Text track ?
+-   Use case : karaoke/subtitle overlay
+
+### Missing feature support
+
+Allow cleanly support Projects using unavailable
+subclasses/plugins/effects.
+
+-   Might not be available
+-   Might be proprietary/custom
+-   Older version of PiTiVi
+    -   Provide a way to upgrade the feature/plugin
+
+### Central/Distributed repository of PiTiVi plugins
+
+### Missing (GStreamer) plugin support
+
+Distributions should support this !
+
+### Easy transcoding of sources
+
+-   Allow transcoding sources only
+-   Useful also for making sources more editing-friendly
+-   Or to have lower resolution versions to work with
+
+### GNonLin
+
+Optimize the following use cases
+
+-   Resizing/Trimming
+    -   By end (modifying media\_duration + duration)
+    -   By beginning (modifying
+        media\_start+start+media\_duration+duration)
+-   Moving many objects at once
+
+One idea for this would be to have a 'block-rebuild' property on
+GnlComposition that would mark down that is has (or not) to rebuild the
+internal stack, but postpone it until the property has been set back to
+False.
+
+### GStreamer
+
+-   interlaced support
+    -   caps (differentiate raw frame/fields)
+    -   Buffer Flags (TFF, Repeat)
+    -   ... and obviously support in virtually all relevent plugins
+-   Perfect Profesionnal Colourspace support
+    -   Various Subsampling + Chroma placement (right now we don't make
+        a difference between 4:2:0 jpeg/mpeg2/dv-ntsc ... whereas they
+        have different chroma placement)
+    -   Various Clamping matrices (HDYC for example)
+    -   FAST and bit-accurate converters
+        -   This might require making a generic colourspace converter
+            bin which searches all required/available colourspace
+            converters
+
+### Website
+
+-   We need more screenshots
+-   Propose nightly builds
+
+## Use Cases
+
+These are some (long term) ideas I have
+
+### Effect ideas
+
+-   GoogleMaps/OpenStreetMap plugin
+    -   Use maps to show a trip
+    -   Zoom-in/zoom-out/move from location to location between the
+        various steps
+    -   Could use photo geotags to automatically known where to go
+
+<!-- -->
+
+-   Photo Flash
+    -   Could be a nice way to do transitions when doing slideshows
+    -   Could have a 'flash' sound on the audio track, sync-ed with it
+
+<!-- -->
+
+-   Film-reel at slow-speed
+    -   Start from a still frame/picture
+    -   Gradually speed up the movie
+    -   You see the 'film-reel border' moving (i.e. at some points the
+        inter-frame black borders will be visible)
+    -   Have a flickering soundtrack
diff --git a/docs/design/2008_design/2008_Architectural_Redesign/Formatter.md 
b/docs/design/2008_design/2008_Architectural_Redesign/Formatter.md
new file mode 100644
index 0000000..4585fa2
--- /dev/null
+++ b/docs/design/2008_design/2008_Architectural_Redesign/Formatter.md
@@ -0,0 +1,38 @@
+# Goal
+
+A **Formatter** is responsible for :
+
+-   Storing a [Project](New_Design_2008/Project.md) and all of
+    its contents for later usage, **and/or**
+-   Creating a [Project](New_Design_2008/Project.md) and all of
+    its contents.
+
+A default `Formatter` will always be available for storing/creating
+projects under the internal PiTiVi project file format.
+
+New `Formatter`s can be provided through plugins.
+
+A non-exhaustive list of potential `Formatter`s:
+
+-   AAF, used by FCP, Avid, ...
+-   Playlists:
+    -   EDL
+    -   ASX
+    -   ...
+-   Application specific formats for Cinelerra, kino, kdenlive, ...
+-   Application specific formats for FCP, Premiere Pro, Sony Vegas, ...
+-   Online storages
+    -   MetaVid
+
+A `Formatter` can provide its own type of ObjectFactory provided it is a
+subclass of a known valid ObjectFactory (SourceFactory,
+OperationFactory).
+
+# Capabilities
+
+-   `loadProject(`*`location`*`)` : returns a new
+    [Project](New_Design_2008/Project.md) fully loaded.
+-   `storeProject(`*`project`*`, `*`location`*`)` : stores the given
+    [Project](New_Design_2008/Project.md) at the given location.
+-   `canHandle(`*`location`*`)` : Test whether the `Formatter` can
+    handle the given location.
diff --git a/docs/design/2008_design/2008_Architectural_Redesign/High-level_Design.md 
b/docs/design/2008_design/2008_Architectural_Redesign/High-level_Design.md
new file mode 100644
index 0000000..ca68bb1
--- /dev/null
+++ b/docs/design/2008_design/2008_Architectural_Redesign/High-level_Design.md
@@ -0,0 +1,138 @@
+# 2008 Architectural Redesign/High-level Design
+
+**High Level overview**
+
+# Overall
+
+![Top-level organisation](Top-level-uicore.png "Top-level organisation")
+
+PiTiVi is comprised of two main parts:
+
+-   The **Core**, containing all the project- and timeline-related
+    components, a plugin-system and various tools.
+-   The **User Interface**, optional, offering a graphical interface to
+    use Core
+
+# Core
+
+![Contents of
+Core](Top-level-core-only.png "Contents of Core"){width="300"}
+
+Core contains several essential components, of which the most important
+are:
+
+-   The **Application**, which organizes the projects and pipelines, as
+    well as general application settings.
+-   The **Projects**, centralizing information on editing projects,
+    including timeline, sources used, settings, ...
+-   The [**Pipelines**](New_Design_2008/Pipeline.md), allowing
+    combining some Actions (View, Record, Stream,...) with Producers
+    (Timeline, File, Camera, VCR, ...) and Consumers (Loudspeakers,
+    Screen, File, Network stream,...)
+-   A **Plugin System**, allowing adding/modifying/extending features in
+    various parts of PiTiVi.
+-   Some **Tools**, amongst which Browsers (To search/organize/discover
+    content) and Formatters (To handle various editing projects file
+    formats).
+-   Some **utilities**, use by various components of core, like a
+    Discoverer (to discover the multimedia properties of contents) and
+    Thumbnailer (To generically produce thumbnails of contents)
+
+## Application
+
+This object represents a running instance of PiTiVi.
+
+It contains:
+
+-   The **Settings** of the application, user-interface and plugins
+-   One or more **Project**(s), corresponding to the various
+    [Timelines](New_Design_2008/Timeline.md) currently opened.
+-   One or more [**Pipeline**(s)](New_Design_2008/Pipeline.md),
+    corresponding to the various processing pipelines currently used.
+
+If a User Interface is used, the Application object is its core
+counterpart.
+
+![Project/Pipeline relationship and
+contents](Top-level-project-pipeline.png "Project/Pipeline relationship and contents"){width="300"}
+
+### Project
+
+Represents an editing project, corresponding to ONE
+[Timeline](New_Design_2008/Timeline.md).
+
+It contains:
+
+-   The **Settings** of the project and timeline
+-   The **History** of all events that happened on the Project and the
+    Timeline.
+-   The **SourceBin** which are a list of the SourceFactory being used
+    in this project. All sources used in the Timeline are present in
+    that list, but it can also contains sources not (yet) used in the
+    Timeline.
+-   The [**Timeline**](New_Design_2008/Timeline.md). All the
+    timeline editing is done through this object.
+
+### Pipeline
+
+Pipelines are where the media processing takes place. It is the grouping
+of three things:
+
+-   **Producer**(s) which are generally the contents we're using (Ex:
+    Timeline, File, Network Stream, WebCam, DV VCR, ...)
+-   **Consumer**(s) which convert/process/display streams from the
+    Producers (Ex: Encoding to File, Ouputting to Screen/Speakers,
+    Streaming, recording to DV VCR, ...)
+-   **Action**(s) which represent meaningful usage of the various
+    producers and consumers (Ex: Record from Webcam, (Pre)View timeline,
+    Render Timeline, Capture from DV VCR, ...)
+
+## Plugin System
+
+**TO BE DEFINED**
+
+## Tools
+
+### Browser
+
+![Browser](Browser-functional.png "Browser")
+
+Browser are a unified way of searching/browsing for contents and
+devices, or more generally speaking *Media Assets*.
+
+This includes, but is not limited to:
+
+-   Local File Browser
+-   Hardware Device Browser
+-   Effect/Operations Browser
+-   Media Asset Management Browser
+-   Online Service Browser (ex: youtube, flickr, archive.org, ...)
+
+See [New\_Design\_2008/Browser](New_Design_2008/Browser.md) for
+more details.
+
+### Formatter
+
+![Formatter](Formatter-functional.png "Formatter")
+
+Formatter are responsible for loading/storing Projects from/to various
+file formats.
+
+Formatters can also provide subclasses of existing core objects in order
+to store/provide format-specific information.
+
+See [New\_Design\_2008/Formatter](New_Design_2008/Formatter.md)
+for more details.
+
+## Utilities
+
+### Discoverer
+
+### Thumbnailer
+
+# Issues still not clear
+
+## UI bundles
+
+We need to provide some kind of mapping for which UI widget should be
+used for which core component, including subclasses.
diff --git a/docs/design/2008_design/2008_Architectural_Redesign/ObjectFactory.md 
b/docs/design/2008_design/2008_Architectural_Redesign/ObjectFactory.md
new file mode 100644
index 0000000..ccb686a
--- /dev/null
+++ b/docs/design/2008_design/2008_Architectural_Redesign/ObjectFactory.md
@@ -0,0 +1,151 @@
+# Overall
+
+> **ObjectFactory are the descriptions of objects producing and/or
+> consuming data streams.**
+
+-   They contain a list of the Stream(s) they can produce and/or
+    consume.
+
+> This implies **ALL** The potential streams the factory can
+> provide/consume.
+
+> Ex: A **FileSourceFactory** of a raw DV File will list the following
+> streams:
+>
+> -   `video/x-dv,systemstream=True`, The container stream,
+> -   `video/x-dv,systemstream=False`, The I-Frame only DV video stream,
+> -   `video/x-raw-yuv`, The decoded raw video stream
+> -   `audio/x-raw-int`, The audio stream
+
+-   They produce GStreamer elements for all, or a selected number of,
+    streams.
+
+> Some factories will be able to produce a different GStreamer element
+> every time, some will only be able to produce one at a time (Ex:
+> Video4Linux source, or audio sink with retarded backend that can have
+> multiple sockets opened).
+
+## Properties
+
+-   `Name`, unique for that given ObjectFactory instance type.
+-   `InputStreams`, a list of Stream(s) the given factory can consume.
+    Empty for SourceFactory.
+-   `OutputStreams`, a list of Stream(s) the given factory can produce.
+    Empty for SinkFactory.
+
+## Class Properties
+
+-   `Description` , a description of the ObjectFactory
+
+## Methods
+
+-   `makeBin(streams=[])`, returns a gst.Bin for the given Streams. If
+    no Streams are specified, then a gst.Bin for all the available
+    streams is returned. If only one Stream is specified, then the
+    gst.Bin returned will not contain any `queue` in it.
+
+# Examples
+
+## FileSource
+
+Describes the properties of a file specified by:
+
+-   A URI
+-   A list of streams the file can provide (This information can come
+    from the Discoverer, or some other source)
+-   Metadata regarding the file
+
+This might be one of the most commonly used ObjectFactory. A single
+instance of a FileSourceFactory can be used for:
+
+-   Previewing the file
+-   Using it many times in the timeline (which have different position,
+    in/out points, streams used, etc...)
+
+## SourceDeviceFactory
+
+Describes a Hardware Device that can produce streams. This ObjectFactory
+will most likely be provided by the HardwareBrowser.
+
+-   A description of the hardware
+-   A list of streams it can provide (An local SoundCard could provide
+    several streams if it has several inputs).
+
+This will be used most likely when recording or capturing.
+
+## OperationFactory
+
+Describes any kind of operation, which can be an A/V Effect, an Encoding
+container, or even a Hardware processing effect (like OpenGL powered),
+or even more complex effect.
+
+-   A list of streams it can process
+-   A list of resulting streams it can/will output
+
+# Interfaces
+
+## LinkedFactoryInterface
+
+This allows aggregating streams from various factories at the same time,
+with an eventual offset between each streams.
+
+### Examples
+
+-   Audio and Video captured on separate devices during a shoot. We
+    could link all those separate A/V content into one source, allowing
+    fixing of synchronization, and then be usable as one item in a
+    timeline.
+
+<!-- -->
+
+-   LocalSourceDevicesFactory : SourceDeviceFactory aggregating all
+    available LocalSourceDevice on the current system. We can then
+    easily switch between the various devices, while keeping track of
+    one consistent object.
+
+<!-- -->
+
+-   LocalSinkDevicesFactory : Same as above but for all available A/V
+    sinks on the device.
+
+<!-- -->
+
+-   LinkedOperationFactory : Synchronized effect for use in the
+    pipeline. Imagine a 'thunder' effect that has synchronized audio and
+    video effect.
+
+<!-- -->
+
+-   MultipleQualitySourceFactory : SourceFactory that can provide a
+    variety of different 'qualities' off the content. This could enable
+    switching between a lower-quality (fast for editing) and a
+    higher-quality (needed for final rendering).
+
+## GroupedFactoryInterface
+
+This allows creation groupings of different factories with:
+
+-   time offsets for each factory,
+-   different in-out points per factory,
+-   priorities of placement of each factory
+
+# Ideas
+
+Maybe we should have a way to specify the properties/methods/... of some
+of these use-case:
+
+-   OnlineFactoryInterface : For sources (or sinks/destinations) which
+    correspond to non-local content, which requires doing an action
+    (Download/Upload) to get/use a local content. Ex : Youtube sources,
+    which requires downloading a local copy to edit it. DV VCR, which
+    requires doing a capture.
+
+<!-- -->
+
+-   LiveFactoryInterface : This applies to all factories that only
+    consumes/processes/produces live. Ex: a Webcam source, or a
+    StreamingSink. They too require a 'record' phase in order to produce
+    a local, editable, copy.
+
+![ObjectFactory
+hierarchy](Objectfactory-hierarchy.png "ObjectFactory hierarchy"){width="600"}
diff --git a/docs/design/2008_design/2008_Architectural_Redesign/Pipeline.md 
b/docs/design/2008_design/2008_Architectural_Redesign/Pipeline.md
new file mode 100644
index 0000000..994ba37
--- /dev/null
+++ b/docs/design/2008_design/2008_Architectural_Redesign/Pipeline.md
@@ -0,0 +1,142 @@
+# 2008 Architectural Redesign/Pipeline
+
+![Pipeline functional
+view](Pipeline-functional.png "Pipeline functional view")
+
+# Functional Description
+
+A **Pipeline** is where all the media processing takes place in PiTiVi.
+
+In order to hide the complexity of the underlying GStreamer pipeline, we
+only have to work with 3 concepts:
+
+-   **Producer**(s), responsible for providing data streams and the
+    associated GStreamer elements
+-   **Consumer**(s), responsible for consuming data streams and the
+    associated GStreamer elements
+-   **Action**(s), which brings in the combination of:
+    -   Which Consumer(s) and Producer(s) to use, and how to link the
+        associated GStreamer elements
+    -   What the overall Action is, useful for the UI to provide the
+        adequate interface for each action
+
+## Pipeline
+
+### Properties
+
+-   Actions, the list of Actions currently being used in the pipeline
+-   Producers, the list of Producers being used
+-   Consumers, the list of Consumers being used
+
+### Signals
+
+-   `action-added`, a new Action was added to the pipeline
+-   `action-removed`, an Action was removed to the pipeline
+
+## Producer
+
+### Properties
+
+-   Factory, the ObjectFactory being controlled by this Producer
+-   Pipeline, the Pipeline in which this Producer is being used
+
+### Class Properties
+
+-   CompatibleFactory, a list of ObjectFactory types this Producer can
+    manage
+
+### Signals
+
+-   `factory-changed`
+
+## Consumer
+
+### Properties
+
+-   Factory, the ObjectFactory being controlled by this Consumer
+-   Pipeline, the Pipeline in which this Consumer is being used
+
+### Class Properties
+
+-   CompatibleFactory, a list of ObjectFactory types this Consumer can
+    manage
+
+### Signals
+
+-   `factory-changed`
+
+## Action
+
+### Properties
+
+-   Pipeline, on which it is being used, or going to be used
+-   Producers, that this Action is controlling
+-   Consumers, that this Action is controlling
+-   State, whether it is activated or not
+
+### Class Properties
+
+-   CompatibleProducer, a list of Producer types this Action can handle
+-   CompatibleConsumer, a list of Consumer types this Action can handle
+
+### Signals
+
+-   `state-changed`
+
+# Use Cases
+
+## Viewing a File
+
+![Example: Viewing a
+File](Pipeline-viewing-file.png "Example: Viewing a File"){width="200"}
+
+This is the simplest use-case for a Pipeline, which is viewing a File.
+
+As can be seen in the Schema, there is only one action (**ViewAction**)
+which connects a SourceProducer to a LocalSinksConsumer.
+
+## Rendering a Timeline
+
+![Example: Rendering a
+Timeline](Pipeline-rendering-timeline.png "Example: Rendering a Timeline"){width="200"}
+
+In this example, we are doing 2 actions at the same time:
+
+-   **View**ing the Timeline and,
+-   **Render**ing the Timeline.
+
+### Setting up the render
+
+Supposing we already had our Timeline Pipeline (With the
+TimelineProducer, LocalSinksConsumer and ViewAction), we just had to:
+
+-   Create a 'RenderAction' with our existing TimelineProducer as that
+    action's producer,
+-   Set that Action on the Timeline
+    -   **UI**: We get notified of a new Action set on the Pipeline, we
+        open the adequate UI for that Action (if needed).
+-   Configure the newly created 'LocalRenderConsumer' which is the
+    Consumer to which our RenderAction is linked to.
+    -   **UI**: The Render Timeline interface linked to our action has
+        access to the configured Consumer and can open the adequate
+        Configuration Widget for that Consumer.
+
+### Actually Rendering
+
+-   We **activate** the Action on the pipeline
+    -   The pipeline gets reconfigured with all activated actions
+-   We set the pipeline to PLAYING
+
+### Finish rendering
+
+When we are done rendering (because we got an EOS or such), we can then:
+
+-   Remove that Action from the Pipeline (which will deactivate the
+    action first, resetting the pipeline internally at the same time)
+    -   **UI**: We get notified an action has been removed, we close the
+        related interface/widgets.
+
+# Relationship with GStreamer
+
+![Relationship with
+GStreamer](Pipeline-gstreamer-relationship.png "Relationship with GStreamer"){width="200"}
diff --git a/docs/design/2008_design/2008_Architectural_Redesign/Project.md 
b/docs/design/2008_design/2008_Architectural_Redesign/Project.md
new file mode 100644
index 0000000..ebfc504
--- /dev/null
+++ b/docs/design/2008_design/2008_Architectural_Redesign/Project.md
@@ -0,0 +1,58 @@
+# Description
+
+A **Project** is the object containing everything specific to an
+*editing project*.
+
+**Project**s are loaded and saved using the Formatters.
+
+## Contents
+
+-   The **Settings** of the `Project`.
+-   The **History** of the actions that brought us to the current state
+    of the Project.
+-   The **Content Bin**, containing all the `SourceFactory` used in the
+    `Timeline`.
+-   The [**Timeline**](design/2008_design/2008_Architectural_Redesig/Timeline.md), describing
+    how the various objects (sources, operations) are laid out (through
+    time and priority).
+
+# Settings
+
+Here we will store the settings of the project, which contains, amongst
+other things:
+
+-   Metadata
+    -   Description
+    -   Author
+    -   Project file location/directory
+    -   ...
+-   Rendering settings
+    -   These are the description of the streams
+        -   Remark : ... maybe we don't need them since we just need to
+            look at the timeline streams to know that ?
+-   Project file-format specific settings
+    -   Remark : It might actually be better to have those stored in
+        `Project` subclasses since the formatter allows that.
+
+**TODO** : Brainstorm what else could be stored there remembering it's
+project specific.
+
+# History
+
+The generic idea is that we store every action done on the **Timeline**
+and **Content Bin** along with the arguments, and we can then:
+
+-   undo an action
+-   redo an action
+-   serialize that list of actions
+
+There shouldn't be any (practical) limits to the history.
+
+**TODO** : Create a new page specific to History/Undo/Redo since it has
+implications bigger than just for the Project.
+
+# Content Bin
+
+It can only contain *discovered* SourceFactory. That means they contain
+*at least* the description of all the contained `Stream`s, its duration.
+Remark : A *thumbnail* representing the source might also be enforced.
diff --git a/docs/design/2008_design/2008_Architectural_Redesign/Streams.md 
b/docs/design/2008_design/2008_Architectural_Redesign/Streams.md
new file mode 100644
index 0000000..587ab2a
--- /dev/null
+++ b/docs/design/2008_design/2008_Architectural_Redesign/Streams.md
@@ -0,0 +1,36 @@
+# Description
+
+**Stream** objects help to solve two problems:
+
+-   Identifying a data stream
+-   Describing a data stream
+
+## Identifying data streams
+
+**ObjectFactories** can produce and/or consume data streams. But we need
+some help for the following cases:
+
+-   How many **Stream**s can it handle ?
+-   How to differentiate between the different **Stream**s an
+    ObjectFactory handles ?
+    -   A SourceFactory might provide several audio streams, we need to
+        be able to:
+        -   List them
+        -   Pick one
+        -   Use that **Stream** with a SingleStreamDecodebin and have it
+            pick THAT stream (and not another one)
+-   What **Stream** is used upstream/downstream for a given **Stream**
+    (Ex : A DV Video file contains a `Raw Video Stream` which is
+    inherited from a `DV Video Stream`, itself inherited from a
+    `DV System Stream`.)
+
+## Describing data streams
+
+In order to differentiate between Audio and Video data streams (or any
+other media for that matter), **Stream** objects provide a description.
+
+-   The equivalent `gst.Caps` for that given stream
+-   Are two **Stream**s compatible ? If not, what can I use to make them
+    compatible ?
+-   They can have stream-specific metadata (i.e. mp3 bitrate, h264
+    profile, ...)
diff --git a/docs/design/2008_design/2008_Architectural_Redesign/Timeline.md 
b/docs/design/2008_design/2008_Architectural_Redesign/Timeline.md
new file mode 100644
index 0000000..1f912d9
--- /dev/null
+++ b/docs/design/2008_design/2008_Architectural_Redesign/Timeline.md
@@ -0,0 +1,253 @@
+# Overall
+
+The **Timeline** object:
+
+Those TimelineObjects can control one or many TrackObjects from one or
+many Tracks of the Timeline.
+
+The goal of the **Timeline** is to offer an API suited for fast UI
+coding. The UI can then decide whether to listen to events/modifications
+taking place on the overall Timeline, or on the individual Tracks.
+
+> This allows both creating simple and complex UI while offering the
+> same interfaces
+
+.
+
+**All of the following editing actions must be done on the `Timeline`,
+`TimelineObject`(s) or `TimelineSelection`s** and not on the `Track`(s)
+or `TrackObject(s)`:
+
+-   Adding objects to the Timeline
+-   Removing objects from the Timeline
+-   Linking and Unlinking objects
+-   Grouping and Ungrouping objects
+-   Moving objects
+-   Changing objects priority
+-   Trimming, Sliding, Rolling, and all other actions modifying any of
+    `start duration in-point out-point priority`.
+
+## Contents
+
+-   One or many **Track**s corresponding to the **Project Settings**.
+    There is one **Track** per output **Stream**s (Most projects will
+    therefore have 2 Tracks, one for the Audio stream and one for the
+    Video stream).
+-   An ordered collection of **TimelineObjects**. Those objects can be
+    Sources (producing content) or Operations (modifying content).
+-   A list of **Selections**, grouping several existing TimelineObject.
+    -   This is a convenience for modifying several distinct
+        TimelineObjects at the same time.
+    -   A **TimelineObject** can belong to several **TimelineSelection**
+    -   A **TimelineSelection** can control one or many properties to
+        keep the modifications of those properties in sync
+        (start-position, priority, in-point, out-point, ...)
+-   The **TimelineFactory**, used in the
+    [Pipelines](design/2008_design/2008_Architectural_Redesign/Pipeline.md) (for viewing,
+    rendering, ...).
+
+## Timeline properties
+
+`tracks` : Ordered list of `Tracks` controlled by the `Timeline`\
+`selections` : List of `TimelineSelection` in use.\
+`objects` : Ordered list of `TimelineObject` controlled by the `Timeline`. First ordered by `start` 
property, and then by `priority`.\
+`factory` : The `TimelineFactory` to use in `Pipeline`s.
+
+## Track properties
+
+`objects` : Ordered list of `TrackObject`s controlled by the Track.\
+`stream` : The `Stream` of the Track.
+
+## TimelineObject properties
+
+[thumb](image:anatomy_of_timeline_object.png.md)
+
+`factory` : The ObjectFactory this TimelineObject corresponds to.
+:   None is an accepted value
+
+`start` : The position of the TimelineObject.\
+`duration` : The duration of the TimelineObject.\
+`in-point` : The in-point of the contents of the TimelineObject.\
+`out-point` : The out-point of the contents of the TimelineObject.\
+`priority` : The priority of the TimelineObject.\
+`min-start` : The earliest time to which we can set the start property of the TimelineObject with the 
trimStart method\
+`max-duration` : The maximum value we can set the duration property of the TimelienObject to
+
+<!-- -->
+
+; `track-objects` :: The TrackObject(s) it the TimelineObject controls.\
+; `track` : the track to which the object belongs\
+; `object` : The actual TrackObject\
+; `time-offset` : The offset between the TimelineObject `start` position and the TrackObject `start` 
position. ALWAYS POSITIVE.\
+; `priority-offset` : The offset between the TimelineObject `priority` and the TrackObject `priority`. 
ALWAYS POSITIVE.
+
+## TimelineSelection properties
+
+`objects` : The list of TimelineObject controlled by the `TimelineSelection`
+
+## TrackObject properties
+
+[thumb](image:Anatomy_of_trackobject.png.md)
+
+`parent` : The `TimelineObject` controlling this `TrackObject`. All the properties below **MUST NOT BE 
MODIFIED DIRECTLY** but through the `parent` TimelineObject.\
+`start` : The position of the TrackObject.\
+`duration` : The duration of the TrackObject.\
+`in-point` : The in-point of the contents of the TrackObject.\
+`out-point` : The out-point of the contents of the TrackObject.\
+`priority` : The priority of the TrackObject.
+
+# Relationships
+
+## Between Timeline and Track(s)
+
+The diagram below shows the relationship between Timeline, Tracks,
+TimelineObject and TrackObjects.
+
+Each TimelineObject controls at least one TrackObject in any of the
+Timeline's Tracks.
+
+> We can see here that the two first TimelineObject control one
+> TrackObject per Track. But the last TimelineObject only controls a
+> TrackObject in the first Track.
+
+Each TrackObject of a given TimelineObject can have a relative offset
+
+> This can be seen with the 2nd TimelineObject where the TrackObject it
+> controls in the second track doesn't start at the same position.
+
+![Relationship between Timeline and
+Track](Timeline-track-relationship.png "Relationship between Timeline and Track")
+
+## Between containers, TimelineObject and ObjectFactory
+
+The following diagram shows the relationship between:
+
+-   Containers
+    -   Timeline
+    -   Track
+-   Objects
+    -   At the Timeline level : TimelineObject
+    -   At the Track level : TrackObject
+-   ObjectFactory
+    -   At the Timeline level : ObjectFactory
+    -   At the Track level : Streams(s) of an ObjectFactory
+
+![Relationship between TimelineObject, Containers and
+ObjectFactory](Timeline-track-objectfactory-relationship.png "Relationship between TimelineObject, 
Containers and ObjectFactory")
+
+With the diagram above, the use-case of adding a source file to a
+Timeline becomes trivial:
+
+-   Pick the ObjectFactory corresponding to your source file
+-   Add it to the Timeline
+    -   The Timeline creates a TimelineObject compatible with the given
+        ObjectFactory type
+        > Timelines can therefore reject incompatible ObjectFactory like
+        > Live devices
+
+    -   The timeline looks for what Streams the ObjectFactory can
+        consume/provide
+    -   For each of the Streams that the ObjectFactory handles:
+        -   Find a Track with a compatible Stream
+            > The user can of course choose his own Stream&lt;=&gt;Track
+            > mapping
+
+        -   Create a TrackObject for that ObjectFactory Stream
+        -   Add the TrackObject to the Track
+        -   Link the TrackObject to the newly created TimelineObject
+
+## Between TrackObject and GStreamer
+
+The following diagram shows:
+
+-   On the left, the class hierarchy for TrackObject
+-   On the right, the class hierarchy for the various GNonLin GStreamer
+    elements.
+
+The links between TrackObject(s) and GnlObject(s) show their
+relationship. ![Relationship between TrackObject(s) and the GStreamer
+element they
+control](Trackobject-gnonlin-relationship.png "fig:Relationship between TrackObject(s) and the GStreamer 
element they control")
+
+# Use cases
+
+## Unlinking two TrackObjects
+
+![Unlinking two TrackObjects coming from the same
+ObjectFactory](Timeline-object-unlinking.png "Unlinking two TrackObjects coming from the same ObjectFactory")
+
+We have a TimelineObject 'X' controling two TrackObject 'A' and 'B'
+coming from a common ObjectFactory 'O'. This is the most common case
+when adding a Audio+Video File to the Timeline.
+
+We want to handle the TrackObject(s) separately. Maybe to offset them,
+maybe to remove one of the TrackObject, ...
+
+-   We ask to unlink a certain TrackObject (B) from its controlling
+    TimelineObject (X).
+-   The TimelineObject (X) looks for the ObjectFactory (O) from which
+    the TrackObject (B) was created. In this case there's only one
+    ObjectFactory, but there could be several in the case of
+    LinkedSources.
+-   It creates a new empty TimelineObject (Y) for the selected
+    ObjectFactory (O). That new TimelineObject is a complete clone
+    of (X) except for the list of TrackObject(s) it controls.
+-   It removes the TrackObject (B) from the list of objects it's
+    tracking. This means that:
+    -   \(B) temporarily has no controlling TimelineObject.
+    -   The TrackObject (B) has NOT been removed from the Track to which
+        it belonged.
+-   It adds the TrackObject (B) to the list of objects controlled by the
+    new TimelineObject (Y).
+
+## Linking Two TrackObjects
+
+### That come from the same ObjectFactory
+
+![Linking two TrackObjects coming from the same
+ObjectFactory](Timeline-object-linking-simple.png "Linking two TrackObjects coming from the same 
ObjectFactory")
+
+This is the case when we had two TrackObjects originally belonging to
+the same TimelineObject, but which we unlinked.
+
+-   We ask to link a TrackObject (B) to a TimelineObject (X).
+-   The TimelineObject (X) compares the originating ObjectFactory of the
+    TrackObject (B) and sees they are the same.
+-   The TimelineObject (X) unsets the TrackObject (B) from its current
+    parent TimelineObject (Y)
+    -   If (Y) is no longer controlling any TrackObjects, we remove it
+        from the Timeline.
+-   The TimelineObject (X) adds the TrackObject (B) to its list of
+    controlled TrackObject.
+
+### That come from different ObjectFactory
+
+![Linking two TrackObjects coming from different
+ObjectFactory](Timeline-object-linking-advanced.png "Linking two TrackObjects coming from different 
ObjectFactory")
+
+This is for the more generic case of linking two TrackObjects. A common
+example is when we recorded Audio and Video on separate devices/files.
+
+-   We ask to link TrackkObject (B) to TrackObject (A)
+-   We see they belong to originated from completely different
+    ObjectFactory, requiring a new TimelineObject to control the two.
+-   Since we don't want to lose the original relationships between
+    TrackObject and ObjectFactory, we create a LinkedtimelineObject
+    (XY), wrapping the two previously existing TimelineObject (X and Y).
+    -   **Possibility** : Since all TimelineObject have a counterpart
+        ObjectFactory, we could automatically create a
+        LinkedObjectFactory for the LinkedTimelineObject (XY) we just
+        created
+        -   This allows infinit reuse of objects created in the
+            Timeline.
+
+# Remaining issues
+
+-   Does core need to provide some help for the UI's marker/keyframe
+    handling ?
+-   How do we 'properly' handle the different kinds of linkage in
+    LinkedTimelineObject
+    -   Some people might just want to have synchronized 'start'
+        positions, but independent priorities for the TrackObjects.
+    -   Some people might want to have the priorities synchronized, but
+        freely move the positions of the TrackObjects.
diff --git a/docs/design/2008_design/2008_Jog_and_Shuttle_controls_code_experiment.md 
b/docs/design/2008_design/2008_Jog_and_Shuttle_controls_code_experiment.md
new file mode 100644
index 0000000..e6e3011
--- /dev/null
+++ b/docs/design/2008_design/2008_Jog_and_Shuttle_controls_code_experiment.md
@@ -0,0 +1,243 @@
+## Introduction
+
+![wxPython prototype seeker with warning about inaccurate codec and some
+(green)
+markers.](Gst-demo_wx_player-warning.png "wxPython prototype seeker with warning about inaccurate codec and 
some (green) markers.")
+
+![wxPython prototype seeker with selected interval between in & out
+point and visual mouseover effect on
+jog.](Gst-demo_wx_player-interval.png "wxPython prototype seeker with selected interval between in & out 
point and visual mouseover effect on jog.")
+
+![pygtk prototype seeker with hscale for time ruler, shuttle and
+jog.](Schermafdruk-gst-seeker-gtk.png "pygtk prototype seeker with hscale for time ruler, shuttle and jog.")
+
+![pygtk prototype seeker with mouseover effect on blend entry and
+warning with information. There is 12% difference between seek and query
+time in this
+video.](Schermafdruk-gst-seeker-gtk-1.png "pygtk prototype seeker with mouseover effect on blend entry and 
warning with information. There is 12% difference between seek and query time in this video.")
+
+### About
+
+I have been developing pystreamer, a MVC framework for python and
+gstreamer. It provides amongst other things a prototype for better frame
+seeking with gstreamer, which can be a starting point for pitivi. (It is
+not the purpose to put the whole library in pitivi, I will rewrite it
+customized for pitivi so it can be applied as a patch.) The prototype is
+an attempt to deliver the control that serious video editors want. As it
+has just been developed, it might contain some rough edges still. I will
+discuss it following its MVC structure:
+
+Model (gstreamer) &lt;-&gt; Controller (pure python) &lt;-&gt; View
+(pygtk/wxpython)
+
+### Source Code
+
+You can grab the sources with bazaar:
+
+    bzr branch lp:pystreamer
+
+You need both wxpython (sudo apt-get install python-wxgtk) as pygtk to
+explore the demos at the full potential. You can start the demos by:
+
+    ./gst-player-gtk uri
+    ./gst-player-wx uri
+    ./gst-seeker-wx uri
+    ./gst-seeker-gtk uri
+
+uri is for example '<file:///home/user/some> movie.ogg'
+
+== Model = Player (gstreamer) ==
+
+There are two important aspects of frame seeking:
+
+-   stability: if you seek to a certain position, it should always
+    return the same frame
+-   precision: if the framerate is n frames as second, seeking should be
+    possible to each of the n frames
+
+With the right codecs, gstreamer performs well, but with inaccurate
+codecs gstreamer (playbin) will fail on these two issues.
+
+### Frame Stability
+
+#### The Problem
+
+With inaccurate codecs gstreamer behave badly:
+
+1.  seek to position x with gst.SEEK\_FLAG\_ACCURATE
+2.  wait until gstreamer has finished seeking
+3.  query the position which is returned as y
+
+You would expect that x is equal to y, but gstreamer provides different
+values. This makes video editing impossible. (You can see this effect in
+Totem by seeking to the end of the movie with an inaccurate codec. You
+won't go to the end of the movie, but playback resumes much earlier.)
+The most simple solution is to disable frame seeking for inaccurate
+codecs or to transcode it to a better codec.
+
+A better solution would be to find a solution which can guarantee
+stability for any video codec. After doing some experiments and tests I
+found out that:
+
+-   gstreamer always returns the same y for the same x. So it should be
+    possible to find a method so that y = f(x).
+-   x is always bigger than y, so in order to go the last frame we have
+    to seek past the duration of the movie. So the seek timeline is
+    longer than the query timeline.
+
+Based on these two observations, we need an algorithm which does the
+following:
+
+1.  x is corrected to a later position c
+2.  c is seeked
+3.  when seeking is finished, query the position which returns the same
+    x
+
+#### The Solution
+
+So how can we correct x into z? We need to find the reverse method of f,
+let's call it i. This means that x=f(z) and z=i(x). I first thought it
+might be just a linear function, but that was not the case. So I
+developed a frame correction algorithm which uses linear interpolation
+between known values of (x,f(x)) to predict (x,i(x)) or (x, z). You can
+find the source code of this in the
+pystreamer/player/frameMixin/Mixin.seek method. I've tested it with a
+couple of videos with really bad codecs and it always seems to succeed.
+As pitivi will be used by all kinds of end users, it is nice that they
+don't have to worry about codecs or transcode it first in another codec.
+
+The algorithm knows after two seeks if the codec is accurate or not. If
+it is accurate, it will show a succes icon and the correction algorithm
+disables itself. If it is incorrect, it will calculate and show a
+warning sign. By clicking on the warning icon, you can optionally show
+the incorrectness. The incorrectness is the average difference between
+seeked and queried positions in percent.
+
+Of course it makes seeking a bit more slow for inaccurate codecs, but
+the speed remains acceptable. Moreover for video editing, frame
+stability/precision is more important than speed. (I guess because
+gstreamer is mainly used in media players not editors, speed was
+prioritized rather than precision.)
+
+### Frame Precision
+
+Unfortunately AFAIK there is nothing to do about this. The only option
+is here transcode the video to a better codec. However I found out that
+even with bad codecs it is possible to extract some frames out of a
+second instead of all of them. Probably if you work with bad codecs,
+that should be ok.
+
+## Controller
+
+The controller mimics the gobject signal system. Both the Player and the
+View are based on pystreamer/controller/controller\_object.base which
+allows them to emit signals, which are processed by the controller to
+link the two. The controller is 100% python and does not depend on gst,
+gobject, wxpython, pygtk, ...
+
+## View
+
+### Features
+
+The view supports many features, which might be interesting for pitivi:
+
+-   set in & out point
+-   markers
+-   shuttle seeking
+-   jog seeking
+-   buttons for frame navigation (go to or play between in/out point, go
+    to previous/next frame, go to previous/next marker)
+-   support for light and dark themes
+-   special button icons for video editing (svg sources are included)
+
+### Base
+
+The view code which is independent of the toolkit is in pystreamer/view.
+It uses some ui\_\* methods which are overriden by specific toolkit
+methods. The events are buffered with timer threads so that the UI stays
+as responsive as possible. The timer thread will not send seek events
+for every user event, but rather keep track and only request a next seek
+when the previous one was finished.
+
+### wxPython
+
+The wxPython prototype is quite complete. It provides three custom
+controls. The screenshots are working code, not just mock-ups.
+
+#### Blended Text
+
+-   pystreamer/view/uiWx/lib/BlendedTextCtrl.py
+-   this is rather semi-custom as it is a native control which has been
+    extendend
+-   it looks like a StaticTextCtrl (label) but with a mouse over it
+    looks like a TextCtrl (entry)
+-   this is to avoid clutter and to make the view widget more quiet
+-   it is used for the current time, the in and out point.
+
+#### Timeline Ruler
+
+-   pystreamer/view/uiWx/TimeRulerCtrl.py
+-   custom control
+-   this provides a timeline which shows the duration of the clip
+-   it uses native icons for the cursor and for the markers
+-   it shows visual feedback of selected interval between in & out point
+-   intelligent algorithm for showing time labels
+
+#### Jog Control
+
+-   pystreamer/view/uiWx/lib/JogCtrl.py
+-   custom control
+-   supports disabled look
+-   suppors native colour highlight on mouseover
+-   very polished look
+-   support for dragging and mousewheel scrolling
+-   one pixel = one frame (So dragging the mouse 25 pixels, will seek to
+    25 frames away.)
+-   different methods for dragging and scrolling to give the best user
+    experience
+
+### pyGtk
+
+The pygtk prototype is less complete in custom controls, but is equally
+functional.
+
+#### Screenshots
+
+#### Blended Text
+
+-   pystreamer/view/uiGtk/lib/BlendEntry.py
+-   this is rather semi-custom as it is a native control which has been
+    extendend
+-   it looks like a gtk.Label but with a mouse over it looks like a
+    gtk.Entry, what it really is
+-   see also blended text of wxpython
+
+#### Timeline Ruler
+
+-   pystreamer/view/uiGtk/HScaleRuler.py
+-   just a gtk.HScale, so less accurate
+-   no in & outpoint interval feedback
+-   no markers
+-   todo: write a custom control for this
+
+#### Jog Control
+
+-   pystreamer/view/uiGtk/HScaleJog.py
+-   just a gtk.HScale
+-   modified behaviour to make the hscale behave as a jog (eg remains
+    sensitive outside its area)
+-   see also jog control of wxpython
+-   todo: write a custom control for this
+
+## Known issues
+
+-   with inaccurate codecs: sometimes after a difficult seek, the player
+    doesn't start again. A solution could be that seeking pauses the
+    video, but it would be nice if it doesn't have to.
+-   pygtk: I am wondering how I can determine if a dark or normal theme
+    is used. I am only able to retrieve the right background color after
+    the window has been realized with window.get\_style().bg But how can
+    I know this before?
+-   pygtk: How to hide optionally some widgets such as the warning
+    information?
+-   keyboard bindings need to be added
diff --git a/docs/design/2008_design/2008_Jog_and_Shuttle_controls_design.md 
b/docs/design/2008_design/2008_Jog_and_Shuttle_controls_design.md
new file mode 100644
index 0000000..b38fd88
--- /dev/null
+++ b/docs/design/2008_design/2008_Jog_and_Shuttle_controls_design.md
@@ -0,0 +1,60 @@
+## Introduction
+
+This is just a proposal for bringing frame seeking to the user interface
+in advanced mode. If you want to follow the development progress read
+[2008 Jog and Shuttle controls code
+experiment](2008_Jog_and_Shuttle_controls_code_experiment.md)
+
+## Screen Mockups
+
+### With standard gtk controls
+
+![](Frame_player.png "Frame_player.png")
+
+### With a custom jog control
+
+![](Frame_player_jog.png "Frame_player_jog.png")
+
+Glade source file is available upon request.
+
+## Implementation
+
+### Controls
+
+-   current: a linkbutton control with which a random position can be
+    manually entered
+-   zoom: this is of lower priority which allows to set the zooming
+    level of the image (either fit or a percentage)
+-   total: total time of the clip
+-   jog: with the left mouse down you can jump to previous frames by
+    moving left or to next frames by moving right
+-   shuttle: with the left mouse down you can rewind or forward with
+    variable speeds
+
+The current and total controls should be able to display in units of
+frames or time.
+
+### Steps
+
+1.  current & total
+2.  jog (not custom control)
+3.  shuttle
+4.  refactor so that it can work as a widget independently of pitivi
+    with plain pipelines
+5.  zoom
+6.  jog (as custom control)
+
+## About myself
+
+I am willing to work on this but will need mentoring. My background:
+
+-   graduated as architect and visual/video artist (I care about
+    aesthetics and UI design)
+-   experience of python (no C or C++)
+-   plenty of gui experience with wxpython
+-   author of SPE (Python IDE - <http://pythonide.stani.be>), Phatch
+    (Photo Batch Processor - <http://photobatch.stani.be>) & sdxf.
+-   new to pygtk and gstreamer -&gt; mentoring needed
+-   I don't have a lot of time so I prefer to focus on something I need
+    myself and I can finish
+-   working on ubuntu
diff --git a/docs/design/2008_design/2008_Plugin_Interface_development.md 
b/docs/design/2008_design/2008_Plugin_Interface_development.md
new file mode 100644
index 0000000..a6e9f91
--- /dev/null
+++ b/docs/design/2008_design/2008_Plugin_Interface_development.md
@@ -0,0 +1,343 @@
+## Introduction
+
+### About
+
+Pitivi's current interface, whist having a solid base is a little
+lackluster with regards to API compatibility and formality, I
+(--[Gord](User:Gord.md) 16:06, 4 August 2008 (BST)) am currently
+developing a branch that aims to counter that.
+
+### Development
+
+Current development is happening on a launchpad branch (simply for ease
+of development for me) located here:
+[https://code.edge.launchpad.net/\~gordallott/+junk/pitivi-plugininterface
+pitivi-plugininterface](https://code.edge.launchpad.net/~gordallott/+junk/pitivi-plugininterface_pitivi-plugininterface.md)
+
+## Concept
+
+A plugin needs to communicate in two ways, the main application needs to
+be able to talk to plugin code (call methods and such) and plugin code
+needs to be able to communicate back via some sort of API, currently
+pitivi handles the first problem with zope interfaces which works
+nicely, the second problem is ignored, plugins must query pitivi's
+internal code via pitivi.instance.PiTiVi which contains the programs
+instance.
+
+The problem with this direction is that any internal code changes will
+break plugin compatibility and further more it increases the difficulty
+of the casual user writing plugins as they are required to be intimately
+knowledgeable of pitivi's internal code.
+
+The tried and tested solution to this problem is to develop a plugin
+API, the API will handle any communication from the plugin to pitivi by
+abstracting pitivi.instance.PiTiVi with a stable API. The plugin can
+then make simple calls such as api.gui.add\_menu\_item(...) and be
+confident that the API will not change from version to version.
+
+## API
+
+### Design considerations
+
+The api has a slight problem in that it may be initialised before pitivi
+is ready to be modified, This is solved at the moment by 'locking' the
+api (via decorators for ease of use..) until the main pitivi codebase
+emits a 'ready' signal, the api will raise an InterfaceNotReadyError
+exception if its called before then
+
+### Current implementation
+
+The current API uses epydoc for its documentation and is structured as
+follows:
+
+-   pitivi
+    -   PluginInterface
+        -   gui
+            -   show\_gui(self, \*args, \*\*kwargs) shows or hides the
+                main application window depending on the value of
+                'visible'
+            -   add\_menu\_item(self, \*args, \*\*kwargs) Adds a menu
+                item to the appropriate main window menu
+            -   remove\_menu\_item(self, name) removes the given menu
+                item from the user interface
+            -   remove\_ui(self) removes all changes this instance of
+                the plugininterface has made to the user interface
+        -   Project
+            -   add\_source
+
+## Settings
+
+The current api simply requires that plugin.settings exists and
+(un)pickles that data to save/load settings, there is a problem there
+with human readabity and maybe even security, also its not that kind to
+version upgrades.
+
+### Current implementation
+
+The current implementation is inspired by Django's model setup,
+essentially the plugin authors create a class, in that class are Fields
+(special pitivi python objects that can handle validation and such) that
+describe settings.
+
+for example the Field for a setting that must be a single line string
+would be
+
+    mySetting = pluginsettings.CharField('a_string', default='hello world!')
+
+At the moment plugin.settings must be a
+pitivi.pluginsettings.SettingsStore object, this object can then create
+xml data to store and retrive the settings as needed.
+
+a further example for the entire settings store is:
+
+    class ConfigureTest_Settings(pluginsettings.SettingsStore):
+        """ Our plugins settings """
+
+        variable1 = pluginsettings.CharField('astring', default='hello world!')
+        variable2 = pluginsettings.FloatField('float_field', default=10)
+
+#### Fields
+
+This is a list of the current fields available:
+
+-   BooleanField
+-   CharField
+-   FloatField
+-   IntegerField
+-   TextField
+-   NullField
+
+## Configuration
+
+The current api only makes one consideration regarding configuration,
+that is that the plugin class object must be IConfigurable zope
+interface compatible, which essentially means must provide the
+configure() method - this requires plugins to create their own
+configuration dialogs and such, which is a pain for plugin developers
+and a pain for anyone that likes consistency in their applications To
+solve this I am proposing an interface that will be able to take
+settings defined by a plugin and turn that into a sensible gtk
+configuration dialog.
+
+### Current implementation
+
+The current implimentation is a mix-in object that replaces the
+configure() method with our own gui-builder code (plugin authors that
+need more flexability can create their own configure() method)
+
+the gui-builder code simply parses the current settings object and is
+able to build a gui from the fields provided, for example it will
+provide a text entry for CharField objects. what 'widget' is used to
+draw each settings can be further customised by providing the setting
+with a widget argument, for example:
+
+    pw_string = CharField('a password string', default='', max_length=32,
+                          widget=pluginsettings.charField_widget_passworded)
+
+this code will provide an input widget where the characters are starred
+out which is appropriate for a password field. plugins can even provide
+their own widgets by subclassing FieldWidget but this is absolutly not
+nessasserry
+
+#### custom configuration widget example
+
+this will check to see if the current screen is composited and emit a
+warning
+
+    composite_warning = _('Warning: you seem to have compositing enabled, this may \
+    result in a severe slowdown when recording your screencast.')
+    class composite_check(pluginsettings.FieldWidget):
+
+        def __init__(self, field=None):
+            pluginsettings.FieldWidget.__init__(self, field)
+
+            self.container = gtk.HBox(False, 6)
+
+            self.icon = gtk.Image()
+            self.icon.set_from_stock(gtk.STOCK_DIALOG_WARNING, 6)
+            self.container.pack_start(self.icon, False, True, 0)
+            self.icon.show()
+
+            self.label = gtk.Label(composite_warning)
+            self.label.set_line_wrap(True)
+            self.container.pack_start(self.label, True, True, 0)
+            self.label.show()
+
+
+            self.add(self.container)
+            self.container.show()
+
+            if not self.is_composited():
+                #we check for a composited desktop with this
+                self.container.hide()
+
+        def get_value(self):
+
+            return None
+
+
+    class Settings(pluginsettings.SettingsStore):
+
+        warning = NullField('', widget=composite_check, draw_label=False)
+
+        ... more settings go here ...
+
+##### custom configuration widget example - preview
+
+The above example produces the following image
+
+![](Config-custom-widget.png "Config-custom-widget.png")
+
+## Plugin Examples
+
+### Plugin that demonstrates the configuration dialog builder
+
+    #!/usr/bin/env python
+    #       configure_test.py
+    #
+    #       Copyright 2008 Gordon Allott <gordallott gmail com>
+    #
+    #       This program is free software; you can redistribute it and/or modify
+    #       it under the terms of the GNU General Public License as published by
+    #       the Free Software Foundation; either version 3 of the License, or
+    #       (at your option) any later version.
+    #
+    #       This program is distributed in the hope that it will be useful,
+    #       but WITHOUT ANY WARRANTY; without even the implied warranty of
+    #       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    #       GNU General Public License for more details.
+    #
+    #       You should have received a copy of the GNU General Public License
+    #       along with this program; if not, write to the Free Software
+    #       Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    #       MA 02110-1301, USA.
+    #
+    #
+
+
+    from zope.interface import Interface, Attribute
+    import zope.interface as interface
+    from pitivi import plugininterface
+    from pitivi import plugincore
+    from pitivi import pluginsettings
+    from pitivi.pluginsettings import *
+    from random import random
+
+    class Interface_Settings(pluginsettings.SettingsStore):
+
+        # this is a CharField setting, a charfield is used to store simple strings
+        # we set its priority to 0 to make sure that its right at the top of our
+        # settings dialog (lower values = drawn first)
+        astring = CharField('a string', default='hello world!',
+                            max_length=32, priority=0)
+
+        # this is similar to the previous setting apart from that we use a different
+        # 'widget' to draw the settings value, specifically one that will hide the
+        # password from view
+        pw_string = CharField('a password string', default='apassword', max_length=32,
+                              widget=pluginsettings.charField_widget_passworded)
+
+        # this is a FloatField setting, it will store floating point numbers,
+        # by default this uses a 'spinner' widget in the settings dialog
+        afloat = FloatField('put a number in here', default=10.0, priority=200,
+                            min_value=0.0, max_value=20.0)
+
+        # this is similar to the previous setting but instead will only store
+        # integer values
+        anint = IntegerField('put an int in here', default=5, priority=100)
+
+        # this is another floating point setting but we use a different widget
+        # to draw it, the scaleField widget will allow people to configure the
+        # setting by draging a handlebar around
+        arange = FloatField('push this widget around', default=10.0, priority=500,
+                            max_value=100.0, min_value=0.0,
+                            widget=pluginsettings.scaleField_widget)
+
+        airange = IntegerField('integer based range', default=10, priority=499,
+                               max_value=100, min_value=0,
+                               widget=pluginsettings.scaleField_widget)
+
+        # this is a boolean value, it will store True/False values, we set draw_label
+        # to false because the checkbutton thats used to draw this setting already
+        # contains a label inside it
+        truth = BooleanField('this is a truth value', default=True, draw_label=False)
+
+        # second tag here - this is a 'realworld' example,
+        # we pass each item two tags, the first tag indicates a 'major' tag and
+        # the second indicates a 'minor' tag, if there is more than one major tag
+        # given then the settings dialog will use a notebook to draw the settings,
+
+        username = CharField('username', default='Simon', max_length=64,
+                             priority=0, tags=('Realworld', 'user info'))
+        password = CharField('password', default='', max_length=32,
+                              widget=pluginsettings.charField_widget_passworded,
+                              tags=('Realworld', 'user info'))
+
+        fish_size = FloatField('Fish Size', default=15, priority=35,
+                               max_value=100, min_value=1,
+                               tags=('Realworld', 'Fish Configuration'),
+                               widget=pluginsettings.scaleField_widget)
+
+        fish_number = IntegerField('Number of fish', default=15, priority=1,
+                                   max_value=1000, min_value=0,
+                                   tags=('Realworld', 'Fish Configuration'),
+                                   widget=pluginsettings.scaleField_widget)
+
+
+    # this is our main plugin class thats called by pitivi, we subclass it from
+    # ConfigureBuilder so that we can have a settings dialog built for us
+    class Configure_Test(pluginsettings.ConfigureBuilder):
+
+        interface.implements(plugincore.IPlugin, plugincore.IConfigurable)
+
+        name = 'configure test plugin'
+        category = 'test'
+        description = 'a test plugin, just gets the configure test going'
+        version = '1.0'
+        authors = 'Gordon Allott'
+        enabled = True
+
+        # for our settings we must create an instance of our custom settings object
+        settings = Interface_Settings()
+
+        def __init__(self):
+            pass
+
+
+        def __call__(self, manager):
+            """ called when the plugin is loaded """
+            pluginsettings.ConfigureBuilder.__init__(self, manager)
+            self.manager = manager
+
+            # load our saved settings
+            self.manager.loadSettings(self)
+
+            # connect up the 'enabled changed' signal, its a signal thats emitted
+            # when the plugin.enabled state is changed somehow, obviously our
+            # plugin has to take note of that and disable/enable its functionality
+            # accordingly
+            self.manager.connect('plugin-enabled-changed', self._enabled_changed_cb)
+
+
+        def cleanup(self):
+            """ used to remove any items and stuff we have added """
+            self.manager.saveSettings(self)
+
+
+        def initialize(self, ref):
+            """ called when the interface is ready to be manipulated """
+            pass
+
+
+        # -- callbacks --
+        def _enabled_changed_cb(self, manager, plugins):
+            """ called when some plugins state has changed, maybe this one """
+            if self.name in plugins:
+                if self.enabled:
+                    self.initialize(None)
+                else:
+                    self.cleanup()
+
+#### Preview of the previous example
+
+![](Config-example.png "Config-example.png")
diff --git a/docs/design/2008_design/2008_UI_Design.md b/docs/design/2008_design/2008_UI_Design.md
new file mode 100644
index 0000000..ecf2aa3
--- /dev/null
+++ b/docs/design/2008_design/2008_UI_Design.md
@@ -0,0 +1,817 @@
+# 2008 UI Design
+
+[500px](image:mockup.png.md)
+
+# To Be Done
+
+-   Project Render interface description
+-   Capture Interface description
+-   Markers (critical points) and their uses
+    -   multi-point split example
+-   Export Audio EDL
+-   Object add mock-up
+-   Select mock-up
+-   Property Editor mock-up
+-   Timeline Effects mock-up
+-   Compositing mock-up
+-   Grouping
+    -   use cases and illustrations
+-   Linking
+    -   use cases and illustrations
+-   Tweaks
+    -   put track disable control on all mock-ups
+    -   put new toolbar commands on all mock-ups
+        -   select before, after, above, below, entire layer, entire
+            track, all, none
+        -   enable/disable object
+-   Decide which items go in the Preferences dialog or not
+
+## Editing
+
+GIMP file(s) used for creating mockups
+
+<media:base.xcf>
+
+# Design Principles
+
+1.  Use direct manipulation for most common operations.
+2.  Use noun-verb pattern for most other operations (see below)
+3.  Minimize the number of modes. Modes are evil.
+4.  Use quasi-modes instead of modes
+5.  Provide feedback. Change cursor styles, provide real time updates.
+
+## Noun-Verb Interaction
+
+Select what you want, then issue a command to manipulate it.
+
+-   commands are “verbs” which operate on current selection. These
+    commands are only sensitive when valid on the current selection.
+    -   provide an easy way to add new commands of this type
+-   Only conventional “tool” is the split tool. You activate it first,
+    then click where you want to cut.
+    -   and we provide a non-modal variant of this that operates on the
+        current selection.
+    -   don't provide an easy way to create other modal tools
+
+# Representative Tasks
+
+Frequent Tasks
+
+-   finding a specific time in the timeline
+-   shifting a clip's start position
+-   triming a clip's in or out position
+-   spliting a clip into multiple pieces
+-   previewing the project
+-   adjusting audio volume or video alpha
+-   moving sources between layers
+-   adding sources to the timeline
+-   deleting sources from the timeline
+-   adjusting individual object properties
+-   applying an effect to a portion of the timeline
+
+Occasional Tasks
+
+-   moving sources between tracks
+-   editing multiple objects simultaneously
+-   re-using the same sequence of video repeatedly
+    -   possibly with slight-variations
+-   linking two arbitrary objects so they stay in sync
+-   unlinking linked objects
+-   color correcting a source with poor white-balance
+-   filtering noise from audio
+-   marking significant points in a timeline, such as sound bites from
+    an interview or instants at which sound effects should play
+-   cutting a source in multiple places
+
+Special Tasks
+
+-   transcoding from original to editing-friendly codecs
+-   re-conforming a project
+    -   i.e. from work-print quality to full-quality
+-   exporting from native to external project formats
+-   importing external projects to native pitivi projects
+
+# Overview
+
+[500px](image:mockup-annotated.png.md)
+
+There are several primary components:
+
+-   viewer
+-   timeline
+-   clip library (also referred to as sources browser)
+-   property editor
+-   effect library
+-   main toolbar
+-   timeline toolbar
+
+These components all share a single window by default. The Viewer,
+Timeline, Clip Library, and Clip Editor, and Effect Library can be
+detached from the main window by clicking a special “detach” button.
+These windows appear as normal top-level windows. When the user closes
+one of these windows, the component returns to its default location. In
+addition, the clip editor and viwer can be “expanded” so that they
+completely fill their parent windows.
+
+## Keyboard
+
+-   shift, ctrl, alt, and ctrl+alt act as quasi-mode modifiers: they
+    must be held down to activate special modes.
+-   use alphanumeric keys for more esoteric operations: users are used
+    to shift, alt, ctrl acting as modifiers.
+-   provide Ctr+<key> shortcuts for menu items
+-   arrow keys used for seeking
+
+## Selections
+
+<images/gselect2.png>
+
+When the mouse moves over a selectable item, it becomes highlighted to
+indicate its focus.
+
+<images/gselect3.png>
+
+Single-clicking on items sets the selection to that item. Selection is
+indicated by more prominent highlighting.
+
+-   **shift-click** always adds the object to a selection
+-   **ctrl-click** toggles whether the item is selected or not
+-   **alt-click** always removes the object from the selection
+
+Whatever the method used, selection is an undoable action.
+
+<images/gselect4.png> <image:select5.png>
+
+Click and drag on blank canvas activates selection marquee. While
+dragging the selection marquee, objects that will be selected when the
+mouse-button is released indicate focus. It is clear which objects
+touched by the marquee will be selected.
+
+-   **shift** extends the selection over a **range**
+-   **ctrl** sets the selection to the **intersection** of the current
+    selection and the objects under the marquee
+-   **alt** removes the objects under the marquee from the selection
+-   selecting an empty area clears the selection. This means clicking on
+    blank canvas also clears the selection.
+
+<images/gselect_basic.png>
+
+Some tool-bar commands to modify selection. These are track-wise
+operations. The operation will be performed for each track which
+contains a selected clip. These operations to not apply to selections of
+key-frame points within clips, but they do apply to timeline and
+track-level markers.
+
+<images/gselect_before.png>
+
+“Select before” -- select everything between the start of the project
+and the current selection
+
+<images/gselect_after.png>
+
+“Select After” -- select everything between the end of the project and
+the current selection
+
+<images/gselect_above.png>
+
+“Select Above” -- select everything between the top-most layer and the
+current selection
+
+<images/gselect_below.png>
+
+“Select Below”
+
+<images/gselect_layer.png>
+
+“Select Entire Layer” -- selects everything else in the layer(s) of the
+currently selected source(s)
+
+<images/gselect_track.png>
+
+“Select Entire Track” -- selects everything else in the track(s) of the
+currently selected source(s)
+
+<images/gselect_none.png>
+
+“Select None” -- remove all items from the current selection
+
+<images/gselect_all.png>
+
+“Select All” -- select the entire project
+
+# Viewer
+
+Used for playing back video from a variety of sources, primarily the
+timeline. Provides basic playback controls, as well as single-frame
+forward / rewind.
+
+## Functions of the Viewer
+
+-   displays output of timeline at current position of playhead
+-   temporary playback of sources from the browser.
+-   temporary feedback of editing operations
+
+## Automatic Preview
+
+During certain edit operations, the it would be useful if the viewer
+could show visual feedback of the edit in progress. After operation
+ends, viewer returns to previous state.
+
+-   during a roll edit between two sources A, B, viewer should split
+    between out point of source A and in point of source B
+-   during a drag operation, viewer should show the instant just
+    before/after the new source will cut in/out. Based on overlap. If no
+    overlap, no preview. If overlap of one source, show that source. If
+    overlapping one source at each end, split viewer between them.
+
+## Continuous Loop
+
+The user can lock the viewer into a continuous loop over a portion of
+the timeline. In this case, all other seeking behavior is disabled. The
+user can make continuous adjustments while the loop plays.
+
+-   need some mechanism to define the area over which to loop.
+    -   one thought is to place markers. User can select two markers to
+        define an an area and then press the loop command.
+
+# Timeline
+
+<images/gtimeline_detail.png>
+
+The primary component of the UI. This is where the user directly
+manipulates sources and effects which will appear in the final output.
+It is a time-proportional representation of the edit decision list.
+Clips appear as horizontal rectangles, their with proportional to their
+duration, and their position along the x axis proportional to the time
+at which they start. The metaphor is of virtual strips of film. The user
+can “cut” (meaning split), move, resize, and group (splice?) these
+strips.
+
+## Seeking and Navigation Controls
+
+-   scrubbing directly on the timeline ruler will seek to that place in
+    the timeline
+-   left and right arrow keys seek forward/back single frames at the
+    current project framerate.
+-   Holding down keys causes repeated seeking.
+-   Shift + arrow key seeks over 1/2 second interval
+-   Alt + arrow key seeks over 30 interval
+-   Ctrl multiplies current seek interval by factor of 10
+-   Whenever play-head moves out of view, the Timeline widget should
+    scroll to center the play-head in view.
+
+## Tracks
+
+<images/gMulti_track_editing.png>
+
+The timeline is subdivided into **tracks**. Tracks represent separate
+output channels with a single media type. Within a track, all objects
+have the same media type, and there is at least one track in the
+timeline for every type of media that the timeline contains. The user
+does not add or remove tracks directly: the user adds objects to the
+timeline, and tracks are created as appropriate. Most projects will only
+have one audio and one video track.
+
+Tracks can be expanded or contracted. Expanded tracks stack their clips
+vertically, according to the clips' layer position (priority). When a
+track is collapsed, all sources appear at the same vertical position, as
+if contained within a single layer. This single layer can then be
+further collapsed.
+
+### Layers
+
+Tracks are themselves subdivided into layers. Layers are priority levels
+within a track. For audio, all layers within a track are mixed together
+into a single stream. For video, all sources within a track are
+composited together in a single stream. The layer position determines
+the order in which videos are composited, with the visually topmost
+layer appearing as the top-most source in the stream.
+
+<images/glayer_addition.png> The user can add layers to a given track by
+dragging the track's separator bar downward. Similarly, the user can
+remove tracks by dragging the layer's separator bar upward; however,
+removal of the bottom layer will only be permitted if the layer is
+empty. Objects within layers can be stacked arbitrarily. This is
+particularly useful for effects, which operate lower-priority objects
+within the timeline.
+
+### Managing Vertical Complexity
+
+[expanded layer|Expanded Layer](image:expanded_layer.png.md)
+
+Ordinarily, layers take up a fair amount of space. This is to make room
+for thumbnails, waveforms, and keyframes.
+
+[collapsed layer|Collapsed Layer](image:contracted_layer.png.md)
+
+Layers and tracks can be contracted to save space. The user can contract
+a layer by clicking their expander widgets on the far left side of the
+timeline.
+
+<images/gcontracted_track.png>
+
+This can also be done for entire tracks
+
+### Sources and Effects
+
+<images/gtimelineobject_detail.png>
+
+Sources and effects (within a track) are content streams of a single
+media type. Sources are clips which provide data. Effects are filters
+which consume lower priority clips as input and produce filtered output.
+
+Both Source and effect objects have properties. All properties can be
+manipulated via the property browser, but some of properties, like audio
+volume or video alpha, will be so commonly used that they are embedded
+directly onto the widget. These “embedded” interpolation curves are
+manipulated in exactly the same way as interpolation curves in the
+property editor (see the Default Property Editor section) for more info.
+
+### Moving Timeline Objects
+
+Objects in the timeline can move in both horizontal and vertical axis.
+The semantics, however, change depending on the type of object. For all
+objects, the horizontal (x) axis is interpreted as the time axis. For
+sources an effects, the vertical (y) axis the source's layer position
+within a track (tracks are shown visually stacked, but moving a source
+between tracks is accomplished through a different mechanism).
+
+### Moving Horizontally
+
+-   All objects in the current selection move simultaneously.
+-   Edge snapping when moving multiple items needs to be carefully
+    designed so that it is not destructive. A conservative approach
+    would be to snap only the beginning and end of the entire selection.
+
+### Edge / Frame Snapping
+
+All objects have edge snapping enabled during horizontal motion. At this
+point, we believe this is the most common use case. This edge snapping
+effect is intended to be subtle, with a deaband of only a few pixels.
+
+-   Active by default, disabled while holding shift.
+-   Exact behavior defined in core. Basic idea is that certain
+    timestamps in the timeline act as “magnetic” points which objects
+    will tend to “stick” to when they get close enough.
+    -   this is already implemented. Just needs to be refined a bit.
+
+### Temporary Deactivation
+
+<images/gdeactivated_objects>
+
+Objects in the timeline can be temporarily deactivated. The deactivate
+command is in found in the timeline toolbar, and will deactivate
+whatever objects are in the current selection. The reactivate command
+undoes this operation.
+
+An entire track can also be suppressed. To do this, click the disable
+toggle near the track's name on the left side of the timeline.
+
+## Adding Objects
+
+### Adding a Clip
+
+<images/gadd_clip1.png> The user chooses the clip from the clip browser by
+clicking and dragging.
+
+<images/gadd_clip2.png> When the object enters the timeline, the timeline
+responds by showing how the timeline will change. In this case the clip
+has both audio and video streams, so objects appear in both audio and
+video tracks.
+
+<images/gadd_clip3.png> The user can move objects to desired layers and
+time offsets.
+
+<images/gadd_clip4.png> By holding the appropriate modifier key, the user
+can push existing objects out of the way...
+
+<images/gadd_clip5.png> ...or add a source into a new layer.
+
+### Adding an Effect
+
+Effects can be dropped into the timeline in almost exactly the same way
+as clips. The main difference is that effects come from the effects
+library.
+
+<images/gadd_effect1.png> User selects the effects library from the tab.
+
+<images/gadd_effect2.png> When adding effects into a new layer, the layer
+is initially collapsed.
+
+## Fine Tuning: Trimming Objects
+
+Trimming a clip is always possible by clicking/dragging on source
+trimming handles. By default, the in or out point of a clip should be
+edge-snapped (so that it is easy to put the clip back the way it was).
+The UI should constrain the the settingof in/out point so that sources
+can't be stretched beyond maximum native duration. **clicking and
+dragging a trimming handle should not change the current selection**
+
+<images/gtrim1.png>
+
+First, the user moves the mouse over the desired clip's trimming handle
+
+<images/gtrim2.png>
+
+The cursor changes to a left- or right-edge trimming cursor.
+
+<images/gtrim3.png>
+
+Click-and drag sets the in or out point of the clip as appropriate.
+
+### Roll Edits
+
+A variant of trimming, which works when two clips are adjacent in the
+same layer. Sets the in-point of the left clip an the out-point of the
+right clip, keeping the total duration of both sources the constant.
+Roll edits are activated by holding the appropriate modifier key while
+dragging a trimming handle. Note that this is only expected to work when
+it is possible to set the in/out points of both sources to the same
+point in time.
+
+<images/groll1.png>
+
+First the user places the mouse over the appropriate trimming handle.
+
+<images/groll2.png>
+
+The user holds down the appropriate modifier key. Cursor changes from
+trimming to roll-edit cursor.
+
+<images/groll3.png>
+
+When the user drags the mouse, the edit points are set as appropriate.
+
+<images/gtrim3.png>
+
+However, if the user releases the roll-edit modifier key, the edit
+reverts to the default trimming operation.
+
+### Ripple Edits
+
+This is another variant on basic trimming. The source who's trimming
+handle is being manipulated is trimmed as usual, however the adjacent
+source(s) are rightward in the appropriate direction, so that the
+trimming does not create a gap between the sources. This shifting
+carries down the entire length of the track, keeping sources in the same
+relative position.
+
+<images/gripple1.png>
+
+User places cursor over the desired source's trimming handle.
+
+<images/gripple2.png>
+
+User holds the appropriate modifier key. Cursor changes to ripple cursor
+
+<images/gripple3.png>
+
+User drags the the mouse. Adjacent sources are shifted.
+
+<images/gripple4.png>
+
+The user can also hold an additional modifier key to make the ripple
+edit work across multiple layers.
+
+If the user releases the ripple-edit modifier key, the edit reverts to
+the default trimming operation.
+
+### Time Stretch
+
+Another variant on basic trimming. The source's in/out points are not
+set as normal, but rather the source keeps the same in/out points and
+the source is sped up or slowed down to accommodate the new duration.
+Timestretch only applies to sources of finite length, such as files.
+
+## Linking
+
+There are two methods of combining timeline objects together: linking
+and grouping. Linking allows the user to keep distinct timeline objects
+synchronized. Moving one object causes all of its linked “sibling”
+objects to move. The relative offset between siblings is preserved.
+
+<images/glink1.png> <image:link2.png>
+
+Some clips will be linked by default (for example, audio and video from
+the same file).
+
+<images/glink1.png> <image:link3.png>
+
+But the user can link arbitrary objects together as well.
+
+To link objects:
+
+-   set the selection to the objects you wish to link
+-   click the “link” command from the timeline toolbar
+-   the objects will now remain synchronized
+
+To unlink objects:
+
+-   select one or more objects
+-   choose the “unlink” command
+-   each object will be unlinked from its siblings separately (the rest
+    of the siblings remain linked).
+
+## Grouping
+
+Grouping is similar to linking in that multiple objects are combined,
+but different in that the resulting group is treated as a single object.
+The user can make multiple “clones” of a single “master”, and changes to
+the master will ripple out to each of the clones. Unlike linking,
+grouping creates a new “clip” in the Clip Library. Effects applied to
+the group apply to the output of the group as a whole, rather than the
+topmost object in the group.
+
+<images/ggrouping1.png><image:grouping2.png>
+
+To group objects:
+
+-   select one or more objects
+-   choose the “group” command
+-   the original objects are removed from timeline, and the resulting
+    group object is substituted.
+
+To ungroup objects:
+
+-   select one or more groups
+-   choose the “ungroup” command
+
+TODO: how will we edit the groups? Two approaches: recursive editing, or
+“expanding” in place. What are the pros and cons of each? Other issues:
+full, partial, or no synchronization of clones.
+
+# Clip Library (formerly Source Browser)
+
+<images/gclip_library.png>
+
+Contains a list of all the clips in the project. The user can drag
+external files onto this component to add them to the project (an import
+tool bar command also works. The user adds clips to the Timeline by
+dragging them them from the Clip Library and dropping them onto the
+Timeline.
+
+The Clip Library also provides commands to manipulate the clips in the
+project:
+
+-   remove clips from the library
+-   set default edit (in/out) points of a clip
+-   convert clips from one media type to another:
+    -   e.g. convert audio stream to video stream with a visualization
+        filter
+    -   e.g. convert midi stream to audio stream with synthesizer plugin
+-   re-conform or transcode clips
+    -   e.g. re-capture material from a tape at a different resolution
+    -   e.g. convert a file “in-place” from MPEG to MJPEG
+        -   doesn't replace original file on disk, just in project
+        -   and you can revert to the original at any time
+-   pre-process and filter clips
+    -   e.g. video color correction
+    -   e.g. audio noise filtering
+
+# Property Editor
+
+Sharing the same tab view as the source browser is the property editor.
+While the timeline is meant to provide a film-strip metaphor, the
+property interface allows the user to change the more abstract
+properties of the currently selected timeline object(s) (for example,
+audio balance, or image color correction). The type of controls
+presented are determined by the current selection:
+
+-   accessable at all times by clicking on its tab
+-   default interface which simply presents a control for every
+    available property should work in the majority of cases
+    -   time-varying properties are presented on an interpolation graph
+-   but we also need custom editors for specific media types:
+    -   still images require a custom interface
+    -   animations (image collections) require still another
+    -   advanced compositing tools
+    -   many effect plug-ins will want to define their own UI
+-   In addition, the property editor is displayed whenever the current
+    selection changes (unless the change has cleared the selection, in
+    which case you see the source library instead).
+
+## Default Property Editor
+
+![](images/gdefault_property_editor.png)
+
+**Goals**
+
+-   auto-generated for arbitrary objects
+-   useful in the majority of cases
+-   better than nothing when no specific UI exists
+-   useful when multiple objects of different types are selected -- the
+    common properties can be presented and edited simultaneously.
+
+**Features** The default editor lets you set all of the otherwise hidden
+properties of an object. It's will be most usable when the mapping
+between an object's properties and their effect on the output is
+straightforward. For example, audio volume, our video alpha. The current
+implementation of the videobox element is a good example of what won't
+work well with this module (a more dedicated UI focused on
+cropping/panning would needed).
+
+A few object properties will be static (i.e. they are time invariant).
+These will be displayed as standard GTK+ Widgets. Other properties are
+“controllable” (i.e. time-varying). The user can directly manipulate the
+interpolation curves for these properties through curve control points
+objects, which we refer to as “key-frames.” A [partial
+prototype](Keyframe_Editing.md) of this design is available.
+
+-   all curves will be plotted on a single graph
+-   key-frames points define critical points of an interpolation curve
+    -   moving a key-frame horizontally changes its time-stamp
+    -   the curve is always plotted between keyframes in sorted order
+        (see the key-frame demo)
+    -   moving a key-frame vertically sets its value
+-   graph supports exactly the same selection idioms as the timeline
+-   curves have different colors so they can be visually separated
+-   a legend maps colors to curves (labels also appear alongside each
+    curve)
+    -   click-and-drag on a curve moves all its points vertically by the
+        same delta
+
+<images/gproperties_curve.png>
+
+The user can add key-frames in two different ways ways:
+
+-   double-clicking the curve
+-   selecting two key-frames on the same curve and clicking the
+    “add-point” command in the tool-bar. this adds a point half-way
+    between the two selected points.
+
+The user can delete key-frame points in two different ways:
+
+-   double-clicking a point
+-   selecting one or more points and pressing the delete-point button in
+    the tool-bar
+
+GStreamer supports different interpolation modes, but only for the
+entire curve. Changing the interpolation mode for a single point isn't
+possible (we'll have to write our own interpolation code). On the other
+hand, it makes sense to treat interpolation mode as a per-point option.
+For now setting the interpolation mode on a point will simply set the
+interpolation mode on its parent curve.
+
+-   select the desired curve, or a single keyframe of a curve
+-   set the desired mode by choosing from the interpolation mode pop-up
+    menu in the timeline toolbar.
+-   this should also work if multiple curves / key-frames from multiple
+    curves are selected.
+
+## Image Property Editor
+
+The user can add still images to the timeline. By default the image is
+letterboxed to the current project resolution, but these defaults can be
+changed to suit the users's needs.
+
+<images/gimage_source1.png> First the user selects the image in the
+timeline
+
+<images/gimage_source2.png> The image property editor appears in the
+property browser.
+
+<images/gimgage_source3.png> The user can crop the image to an arbitrary
+region.
+
+<images/gimage_source4.png>
+
+<images/gimage_source5.png> The user can scale the image as appropriate.
+
+<images/gimage_source6.png> The user can also set the orientation of the
+image.
+
+## Animation Property Editor
+
+NEEDS WORK
+
+Specify sets of pictures which will be displayed in sequence:
+
+-   set duration or framerate
+-   set cropping, rotation, scaling
+-   transitions between frames? (Ray Harryhausen famously used
+    cross-fading between frames for smoother motion)
+
+Other Ideas:
+
+-   backround / cell paradigm -- user chooses a back drop, and can
+    composite multiple layers of translucent/transparent cells
+
+## Motion Transform Editor
+
+NEEDS WORK
+
+For the “motion transform” effect object (yet to be implemented)
+
+Needs to support the following properties over time
+
+-   cropping
+-   scaling
+-   rotation
+
+Also need to be able to set the color and/or alpha of the “background”.
+
+Ideas...parametric curves on a 2-d plane? Looping previews?
+
+## Advanced Compositing Editor
+
+NEEDS WORK
+
+Chroma key
+
+-   set thresholds, choos key color (eye-dropper?)
+
+Blue/Green/Red screen
+
+-   set thesholds
+
+Should thresholds and key-color be time varying? Definitely need at
+least a local preview. Using the viewer would be better.
+
+## Title Card Editor
+
+[image:title card editor](image:title_card_editor.md) The title
+card editor might look something like this.
+
+# Effect Library
+
+The effect library lists all of the available effects, whether delivered
+through plug-ins or internal to PiTiVi. The user can drag-and-drop
+effects into the timeline in the same way they can with clips.
+
+# Toolbars
+
+## Main Toolbar
+
+Provides application-level commands:
+
+-   new project
+-   open project
+-   save project
+-   render project
+-   full-screen/window mode
+-   import clips to project
+
+## Timeline Toolbar
+
+Flush with the edge of the screen in full-screen mode, for easy access
+to commands.
+
+Finally, there is one modal tool -- the split tool -- which splits a
+clip or effect object into two segments.
+
+Zooming Controls:
+
+-   zoom in
+-   zoom out
+-   ??
+
+Provides a list of commands which operate on the current selection.
+
+-   delete
+-   link
+-   unlink
+-   group
+-   ungroup
+-   collapse
+-   select right of
+-   select left of
+
+In addition, other commands will appear or become sensitive depending on
+context - i.e. the current selection.
+
+When one or more curves is in the selection:
+
+-   interpolation mode combo box
+-   add and delete point commands
+
+### Zooming and Scrolling
+
+-   Center on scroll position
+-   Provide “center on playhead” command
+-   Zoom control should provide meaningful zoom levels: 1, 5, 10 frames,
+    1, 5, 10, seconds, 1, 5, 10 minutes.
+    -   or would we rather have continuous zoom?. After Effects / vegas
+        seem to have a very slick continuous zoom.
+
+# Preferences Dialog
+
+This is a list of every imaginable setting that could possibly go in
+there. It is intended to be reviewed mercilessly, so that we decide to
+accept/deny their inclusion.
+
+-   thumbnail height, expanded/collapsed
+-   whether thumbnails are visible
+-   whether waveforms are visible
+-   previewing options
+    -   to be elaborated. May just be part of the menus so that it can
+        be accessed in real-time?
+-   location of scratch disks
+-   default project format (for new projects)
+-   hotkey configuration
+-   direct manipulation
+-   autosave
+-   default location to use when optening a file or importing clips
+    (last forlder, arbitrary location)
+-   color values for the timeline ruler and the backround of clips
+-   whether edge snapping is enabled by default
+-   the size of deadband to use for edge snapping
diff --git a/docs/design/2012_Layer_Controls_Redesign.md b/docs/design/2012_Layer_Controls_Redesign.md
new file mode 100644
index 0000000..5161c6e
--- /dev/null
+++ b/docs/design/2012_Layer_Controls_Redesign.md
@@ -0,0 +1,34 @@
+## Solutions from other software
+
+Sony Vegas Pro 11
+
+![](images/03-02-trackmanage.jpg "03-02-trackmanage.jpg")
+
+OpenShot
+
+![](images/Openshot_layercontrol.jpg "Openshot_layercontrol.jpg")
+
+Premiere CS 4
+
+![](images/Premiere-layercontrol.jpg "Premiere-layercontrol.jpg")
+
+Kdenlive
+
+![](images/Kdenlive-layercontrols.jpg "Kdenlive-layercontrols.jpg")
+
+Avid DS
+
+![](images/Avid-layercontrols.jpg "Avid-layercontrols.jpg")
+
+## Own sketches
+
+![](images/Glade-1.png "Glade-1.png")
+
+![](images/Layers.png "Layers.png")
+
+## Key ideas
+
+-   don't eat to much horizontal space
+-   show type of layer
+-   show/edit layer name
+-   provide fold action
diff --git a/docs/design/Grouping_and_nesting.md b/docs/design/Grouping_and_nesting.md
new file mode 100644
index 0000000..171ad2c
--- /dev/null
+++ b/docs/design/Grouping_and_nesting.md
@@ -0,0 +1,160 @@
+# Grouping and nesting
+
+This page is intended to discuss the following concepts:
+
+-   Infinite clip grouping (vs the old “grouping vs linking” approach)
+-   “Compound” clips (a more visual form of grouping)
+-   Nested timelines/projects
+
+For the following objects:
+
+-   Management of clips on the timeline canvas
+-   Project management in general
+
+# Proposal: Recursive Pitivi
+
+When managing video projects of more than trivial complexity, it is
+often crucial to be able to treat a group of objects on the timeline as
+a unified object, from a user interface perspective. We are interested
+in finding methods of grouping that provide maximum user productivity at
+minimum development cost.
+
+## Recursion via GStreamer
+
+At one extreme, the minimum development cost approach is one that
+requires exactly no code within Pitivi (or GES). Instead, we may create
+a new gstreamer decoder element (e.g. pitividec) that takes as its input
+the contents of a Pitivi project file. This decoder would reuse the GES
+core to expose an interface equivalent to decodebin.
+
+Once such an element is appropriately registered, decodebin,
+uridecodebin, and playbin will be able to play Pitivi project files as
+if they were video clips. This means that Pitivi project files would,
+with no additional code, become playable in gstreamer-based players such
+as Totem (subject to CPU limitations, of course). Naturally, it also
+means that they are importable as clips into Pitivi itself, for use in
+higher-level timelines.
+
+In effect, this approach is equivalent to rendering out the project to
+an intermediate clip that is then imported into another project, except
+that it avoids the cost in disk space and compression loss. A
+sufficiently advanced implementation might also negotiate output
+parameters such as resolution to avoid unnecessary scaling.
+
+### Limitations
+
+The disadvantage of this approach is that it does not provide the full
+flexibility of traditional grouping mechanisms. There is no way to
+“ungroup” (i.e. to flatten a part of the group hierarchy). There is no
+way to edit a group within the context of the larger project. This
+functionality may be worth implementing but it is not sufficient on its
+own to satisfy all our group management needs.
+
+## Internal Recursion
+
+To provide more advanced functionality, we will require recursion that
+is not opaque to the Pitivi user interface. In Pitivi, source clips are
+immutable, and this invariant seems worth preserving for the sake of
+predictable behavior. Therefore, if groups are to be editable (and
+distinct from ordinary clips), they should not be implemented via the
+standard clip mechanism as described above.
+
+To allow the user interface to behave differently for groups than for
+individual clips, while still preserving a simple recursive structure,
+one solution is to have entire Pitivi sub-projects defined within a
+single project file, and inserted into the timeline as a
+timeline-object. Then the “group” action generates a subproject
+equivalent to the selected items, deletes those items from the timeline,
+and adds the subproject-object to the timeline in their place. “Ungroup”
+does the reverse.
+
+### Possible implementation in GES
+
+We should have a GESTimelineTimelineObject class (better name to be
+found?), This class is a subclass of GESTimelineSource thus it is a
+wrapper around GnlSource (which is a GstBin itself), this bin would
+contain a GESTimeline. Then the TrackObject of this TimelineObject
+contain GESTrack themselves. We should have 3 ways of creating a
+GESTimelineTimelineObject:
+
+`   ges_timeline_timeline_object_new()`\
+`   ges_timeline_timeline_object_new_from_objects (GList *timeline_object) /*So we can group them easyly */`\
+`   ges_timeline_timeline_object_new_from_project (const gchar *project_file_uri)`
+
+The timeline contained in a GESTimelineTimelineObject can obviously also
+contain themselves a GESTimelineTimelineObject so we can infinitely
+recurse.
+
+#### New Classes
+
+`   GESTimelineSource`\
+`       +---- GESTimelineTimelineObject`
+
+`   GESTrackSource`\
+`       +---- GESTrackTrackObject`
+
+### UI Niceties
+
+Because the UI can easily determine that a timeline-object is in fact a
+group, that object may be treated specially for UI purposes. In addition
+to exposing an Ungroup action, the object may also present an “Edit
+Group” option. This would open a new timeline (perhaps a new Pitivi
+window) showing the contents of the group, allowing the user to make
+alterations without the clutter of the entire super-project.
+
+### Open Questions
+
+Should it be possible to cut, stretch, or apply effects to a group?
+Doing so potentially makes it impossible to “ungroup” (if, for example,
+effects are applied on top of transitions), and certainly makes
+ungrouping require a certain amount of tricky logic to propagate global
+actions (like chopping out a chunk in time) down to the source clips. (I
+think that it should be possible to apply such effects and arbitrary
+operations to a group, and that Ungroup should simply be disabled until
+all modifications to the group are removed.)
+
+Should groups be displayed in the superproject with “holes” in time
+where there is an empty time in the subproject timeline, or should they
+simply be continuous? Should there be a mode where even more of the
+internal structure is visible? (I think that, for a first
+implementation, leaving them as continuous in the superproject UI is
+entirely sufficient and dramatically simpler to implement than the
+alternatives.)
+
+Is the duration of a group fixed or variable? If it is fixed, then we
+will need some UI to indicate a timeline of fixed duration (in the
+subproject editor). If it is variable, then what happens when the user
+uses the subproject editor to make the contents of the group longer?
+Should it expand in the super-project, or should excess time be ignored.
+(I think excess time should be ignored, with duration controlled
+exclusively from the super-project. Ideally, it should be possible to
+modify duration (and start-point) non-destructively from the
+super-project, and the subproject editor UI should indicate which
+portions of its timeline are actually in use in the super-project.)
+
+Should it be possible to copy a group by reference or only by value?
+i.e. can there exist multiple objects in a timeline that refer to the
+same subproject? (I think copy-by-reference is too valuable to give up,
+but careful UI design will be required to avoid creating massive
+confusion. A unique name for each subproject, displayed in every
+superproject timeline-object that references it, might help.)
+
+### Limitations
+
+If a group is representable as a single object, then it cannot span
+non-contiguous layers in the timeline. Specifically, in current video
+editors it is possible to create a group that contains (partially
+transparent) content at Layer 1 and Layer 3 but none at Layer 2, so that
+a timeline object that is not part of the group may be blended between
+two objects that are part of the group. (In my view, this behavior is
+not really desirable, and the simplicity of “a group is a timeline
+object” is worth the loss of functionality.)
+
+# Infinite clip grouping
+
+The notion of grouping/linking as it was in [0.15](releases/0.15.md) and
+earlier is nonsensical from a user's point of view. More details in [bug
+583266](https://bugzilla.gnome.org/show_bug.cgi?id=583266).
+
+As a user, I want infinite grouping (like in Inkscape), not have to make
+a theoretical distinction between linking and grouping.
diff --git a/docs/design/Multi-Layer_Editing.md b/docs/design/Multi-Layer_Editing.md
new file mode 100644
index 0000000..015da2e
--- /dev/null
+++ b/docs/design/Multi-Layer_Editing.md
@@ -0,0 +1,85 @@
+# Multi-Layer is not Multi-Track
+
+PiTiVi distinguishes between multi-layer and multi-track editing. In
+PiTiVi at 'track' is a separate channel of output. A layer is a separate
+input stream within a track. Multiple layers in a track combined into a
+single output stream. Layers within a track have the same media type as
+the track itself.
+
+Tracks, on the other hand, may be retained as separate output streams in
+the final output. All sources in a track have the same media type, but
+different tracks can have any media type that PiTiVi supports. For
+example, a project might involve a DVD featuring multiple angles. The
+alternate angles are kept on separate video tracks. Or, a project might
+feature separate audio tracks in foreign languages. But there is no
+limit to what you can achieve with multiple tracks. For example, a
+plug-in might allow creating stereoscopic movies using two synchronized
+video tracks. But that's not all: future releases of PiTiVi will support
+other media types. Subtitle information could be kept on a subtitle
+track, or midi data used to control synthesizers and/or lighting systems
+could be kept on a score track and edited alongside the video.
+
+# Multi-Layer Editing
+
+Multi-layer editing is how the notion of priority is handled in the UI.
+Numeric priority is mapped to the vertical position of an object in the
+timeline. The higher the source, the higher the priority. The lower the
+source, the lower the priority. The object with the highest priority is
+the output for the track. This object will frequently be a source, but
+it may also be an effect. So, for example, two sources can be mixed
+together with a superimpose effect.
+
+The user can change the priority of an object by moving it up or down. A
+new visual layer will be created if necessary.
+
+# Multi-Track Editing
+
+The current implementation supports a limited form of multi-track
+editing: there is one audio and one video track per project. Future
+releases will support not just multiple audio and video tracks, but
+other media types as well. The key concept of tracks is *linking*.
+Linking allows sources within separate tracks to work together.
+Individual tracks can also be enabled or disabled for preview and
+project rendering. Also, Moving sources between tracks is not ordinarily
+possible.
+
+## Linking and Brothers Objects
+
+Linking means that two sources are associated so that whatever is done
+to one source is also done to the other. A source can have one linked
+source for every separate output track in the project. Currently this
+means that video sources can be linked to audio sources, and audio
+sources can be linked to video sources. Along with support for variable
+numbers of tracks will come support for multi-clip linking. Finally, one
+track can be linked to another track, in which case everything that is
+done to one track is also done to in accordance with the *brother*
+principle. This is the case, for example, between the default audio and
+video tracks.
+
+A single file might provide audio and video streams, but these are each
+handled separately within PiTiVi. In order to maintain some coherence
+between the two streams, we use the concept of a brother. There is a
+familial link between the two sources: some piece of genetic information
+is shared. An object with siblings always knows how to create or find
+its siblings. When an objects siblings are cerated, they are
+automatically linked together. So, for example, if a video source is
+added to a video track which is linked to an audio track, the video
+source's brother(s) are created, and then linked together.
+
+### Linking in the UI
+
+To link sources, the sources must first be selected. Each source must be
+in a different output channel, or the link tool will not be active. Once
+active, clicking on the link tool links sources together. If any
+property common to both sources does not match, the difference between
+them will be preserved across multiple edits. So, for example, if an
+audio clip leads a video clip by a few seconds, both sources will move
+together when dragged, but the offset will be preserved. If one source
+is of higher priority (i.e. lower in the timeline), the relative
+priority difference will be maintained if one source changes priority.
+
+To unlink sources, select one or more sources. If it is linked, the
+unlink tool will become active. Clicking the unlink tool will break the
+link between it and any sources to which it is linked. If the sources to
+which it is linked are in turn linked to other sources, they're links
+will be left intact (unless they too are in the current selection).
diff --git a/docs/design/Proxy_editing_requirements.md b/docs/design/Proxy_editing_requirements.md
new file mode 100644
index 0000000..60da66f
--- /dev/null
+++ b/docs/design/Proxy_editing_requirements.md
@@ -0,0 +1,268 @@
+# Proxy editing requirements
+
+See [T2455](https://phabricator.freedesktop.org/T2455) to learn about
+proxy editing and why we want this in [GES](GES.md) and Pitivi.
+This page is meant to brainstorm:
+
+-   User interface/user experience (UX) possibilities and requirements
+-   GES API requirements deriving from that. This also touches on media
+    assets management in general.
+
+Prior art if you don't know what proxy editing “feels” like:
+
+-   [In Edius](http://www.youtube.com/watch?v=SyUvp0YqLpc). This is an
+    interesting example of a badly designed UI: pretty much all the
+    options/preferences presented there are useless, the application
+    should be smart enough to make those choices!
+-   [In FCP X](http://www.youtube.com/watch?v=MnZx3JxoR-A) (alternative
+    [longer version](http://www.youtube.com/watch?v=aL7gE-my4_c))
+-   [In Sony Vegas](http://www.youtube.com/watch?v=4PE6tDjgDEY)
+-   Others we should be looking at in particular? Some particularly
+    great (short and to the point) video tutorials of other apps we
+    ought to see? Let us know.
+
+# User experience
+
+As [T2455](https://phabricator.freedesktop.org/T2455) indicates, we can
+envision two types of user experience: a semi-automatic and a
+fully-automated one. Since Pitivi is not the only application (now and
+in the future) using GES, we need to design the GES API to be flexible
+enough to accomodate the design needs of both kinds of applications.
+
+In both cases, the experience must be:
+
+-   Intuitive: it should be a very easily discoverable feature
+-   With good visual indications of the process and progress. We should
+    probably have some sort of “yellow/green light” (red for errors)
+    icons somewhere near each clip in the media library to indicate the
+    status of individual proxies. Remains to be seen how we can do this
+    with iconview mode and listview mode without going insane.
+-   Fluid, with no negative performance impacts from the act of
+    generating the clip “proxies”
+
+## Icons representation
+
+Since the Media Library's iconview is meant to be compact and
+minimalistic (and has a fair amount of technical limitations), we could
+use the following icon metaphor system to indicate the states of proxies
+for assets:
+
+  Status icon   Icon's opacity   Thumbnail's opacity   Meaning
+  ------------- ---------------- --------------------- 
----------------------------------------------------------
+  None          N/A              100%                  Proxies are disabled for this asset
+  Gears/sync?   100%             50%                   A proxy is currently being generated for this asset
+  Checkmark     70%?             100%                  Proxies are present and ready for this asset
+  ⚠ (warning)   100%             100%                  The proxy could not be generated for this asset
+  ⚠ or X        100%             50%                   A proxy file is present, but the original file is 
absent
+
+## Manual/semi-automated UX
+
+In this mode, users would manually select which assets/clips use
+proxies, and when the proxies are generated. There would be no
+“automated” background processing. This is probably not what we want in
+Pitivi in terms of the default user experience, however the GES API
+should support that scenario. We could still provide this feature in
+pitivi by:
+
+1.  Having an option in the preferences, under the “Performance”
+    section: “Automatically create proxies for clips in the media
+    library”
+2.  If that option is disabled, show a toolbar button in the media
+    library that, when clicked, generates the proxies for selected
+    clips.
+
+However this also means temporarily providing a “Cancel” button while
+those clips' proxies are being generated. Additionally to the “status
+lights” icons mentioned earlier, we could perhaps show a progressbar
+(with a “Stop” button on its right) below the media library (similar to
+when we're importing clips).
+
+Jakub commented:
+
+> “Semi-automatic - I don't grok this experience. Why would I want to
+> explicitly hold the burden of being a transcoding manager? I like the
+> validity checking and ability to explicitly re-render a proxy though.
+> Ran into issues in both kdenlive and FCPX where I spent ages looking
+> for a faulty proxy.”
+
+To balance things, Bassam commented:
+
+> "manual vs. automatic: however the ui is chosen, this should be a per
+> project setting, not a choice of a different application. both
+> workflows are valid, and the same person might opt for one or another
+> depending on the specifics of the project. \[...\]
+
+## Fully-automated UX
+
+Otherwise, the default behavior would be to transparently (and
+intelligently) create proxies for everything, in the background. When a
+proxy file does not exist for an asset (clip), create it and use it as
+soon as it has been created.
+
+Performance requirements in the automated scenario are even more
+important than in the semi-automated scenario; while users can expect
+some delay (as long as there is a visual progress indication) when they
+manually trigger an action, they must absolutely *not* feel
+delays/sluggishness when such actions are triggered automatically. The
+generation of proxy clips in the background should not negatively impact
+system performance.
+
+Jakub has a different opinion than Jeff's or Bassam's, suggesting (?)
+that we make proxy generation a modal (blocking, in terms of UI)
+operation:
+
+> "You mention the problem of indicating the transcoding process as if
+> you could continue working with original assets and have that not stop
+> you from editing work with original media. In case of offline editing
+> (either having assets on external drive, or networked/cloud storage),
+> the indication can be summed up to “tell me when my assets are safe to
+> disconnect and I'm able to proceed editing offline”. For low
+> performing systems, the background transcoding is just an illusion,
+> you cannot really edit until your assets are transcoded. So I think
+> both cases are best addressed by providing an aggregate progressbar
+> telling me when all assets referenced from the project are transcoded,
+> rather than colorcoding individual clips, or worrying about preview
+> overlays. \[...\] For offline editing I would agree not choking the
+> system competely with transcoding might be a good thing, but for the
+> low performing system case you want the transcoding process to take
+> the foreground so that the assets are ready sooner. You really can't
+> do any 4k editing on a laptop and expect to also transcode proxies in
+> the background."
+
+# GES API requirements
+
+## Control
+
+-   Proxies generation/processing needs to be pause-able
+    -   When pitivi starts playback (or render) and needs the system's
+        resources
+    -   When the user pauses proxy generation (in the case of the
+        semi-automated UX)
+-   Proxies generation needs to be cancel-able
+    -   When the user asks to stop generating proxies for selected clips
+        (in the case of the semi-automated UX)
+-   The ability to “force” regenerating the proxies for a given asset
+    (for whatever reason)
+-   Delete a proxy (or all proxies) for a given asset
+-   Relocate/move proxies for a given asset or for all assets
+-   Ability to manually replace an offline asset.
+
+## Data integrity checking
+
+-   Need a way to detect incomplete or invalid proxies, to handle
+    various scenarios:
+    -   The user has quit the application before it was done processing
+    -   The application crashed
+    -   The source file has changed (use a md5 on the first few bytes of
+        the file like in pitivi/previewers.py and store that hash in the
+        GES Asset?)
+
+## Signalling/notifying
+
+-   For each asset, report the proxies' encoding progress, so the
+    application UI can show progressbars or some other form of visual
+    indications
+-   Provide a way to signal to the application that an asset has its
+    original offline, or its proxy offline, or whatever situation we can
+    imagine, so the UI can let the user know about it.
+-   Tolerate and signal errors/failures.
+
+## Fault tolerance and sandboxing
+
+-   Tolerate and signal errors/failures.
+-   Processing should probably happen in a separate/sandboxed process,
+    to ensure that GES/applications can't crash because of something
+    going wrong during the processing of a proxy
+-   GES needs to handle the notion that an asset and/or any of its
+    proxies can go offline/online. For example, if the original clip is
+    not available but the proxy version is present, consider the
+    original “offline” and use the proxy version.
+    -   The way we handle “missing” media needs to change: currently
+        Pitivi just refuses to handle “partial” projects, but in theory
+        it should “deal with it”. Even if all the assets of a clip
+        (including proxies) are offline.
+    -   If an asset or its proxies were moved/renamed externally, allow
+        specifying the new location (already mostly implemented in GES
+        assets?), but don't force it. Proxies/assets for which the user
+        has not provided replacements are to be marked as temporarily
+        “offline” (we should also save info about the last time it was
+        seen, its metadata/attributes, etc.).
+
+## Additional API flexibility
+
+-   Multiple ways to handle offline assets for rendering and export:
+    -   “Draft render” mode (low quality render using only the proxies
+        instead of the original clips), as some applications might like
+        to offer that feature.
+    -   Rendering to a multimedia output file requires original assets
+        to be “online”. Otherwise, if only proxies are available, we
+        can:
+        -   Warn the user about reduced quality. If some assets have no
+            originals and no proxies, show a serious warning.
+        -   Export only an EDL (edit decision list), but that's [another
+            story](https://bugzilla.gnome.org/show_bug.cgi?id=674605)
+-   Provide a way to specify which containers, codecs and settings (ex:
+    video resolution, bitrate/quality) to use for proxies. This will
+    probably use a technology similar to what we see in Pitivi's render
+    dialogs.
+-   Allow multiple proxies per asset (for multiple resolutions, for
+    example). The application should be able to request a proxy to match
+    a particular context (ex: a maximum resolution or something); for
+    example, multicam editing could use very small versions if there is
+    a big number (ex: 16) of camera angles to be displayed
+    simultaneously. Or the media library could automatically show a
+    playing thumbnail-sized video preview when putting the mouse over a
+    clip.
+-   Ability to save, in a project formatter's data, the following
+    per-project overrides of the global app settings:
+    -   A custom folder path for the proxies for that project (see also
+        the “where to store the proxies?” item in the “outstanding
+        questions” section on this page).
+    -   Whether this project prefers fully-automated (or manual)
+        handling of proxies (Bassam said: “However the ui is chosen,
+        this should be a per project setting, not a choice of a
+        different application. Both workflows are valid, and the same
+        person might opt for one or another depending on the specifics
+        of the project.”)
+
+# Outstanding questions
+
+-   Where to store the proxies? (beyond the obvious question of disk
+    space and tidiness, there's the question of people working across
+    networks that raises interesting questions)
+    -   In pitivi we could default to the XDG user cache dir (which in
+        this case would turn out to be \~/.cache/pitivi/proxies/)
+    -   ...but Bassam insists that this can be overridden on a
+        per-project basis. So in the project settings UI, we could have
+        a checkbox to “Use a custom directory to store proxies” that
+        enables a gtk folder chooser button right besides it. Unchecking
+        the checkbox would clear the project's custom directory.
+-   Filenames of the actual proxy files depending on their location
+    (global cache folder vs project folder?). For example, if a clip is
+    called “foo.MOV”, should the proxies be called foo-360p.gesproxy, or
+    foo--proxy-360p.webm, or C462NTH353.webm in the hidden cache folder,
+    or...?
+-   Codecs? So far we're hesitating between MJPEG and VP8. MJPEG is
+    handsdown the fastest codec to seek and to encode, since it is so
+    simple and every frame is a keyframe - however, the filesize is
+    rather big. VP8 is more configurable and can be made to approximate
+    MJPEG's seeking performance, but it is significantly more expensive
+    to encode.
+-   Resolutions, and how to handle aspect ratios. That is, how do you
+    determine the appropriate resolution depending on the aspect ratio
+    and resolution of the source material?
+    -   Going with a hardcoded percentage (ex: 50% of the original's
+        resolution) can be bound to fail in scenarios where the original
+        has a huge native resolution (such as 4K).
+    -   Alternatively, one can imagine a hardcoded (or configurable)
+        “max resolution”, where clips bigger than that resolution will
+        have proxies created to “fit the box” (in terms of width and
+        height, whichever comes first). Hardcoding the box resolution
+        might be problematic as computers become more powerful and
+        screen resolutions increase.
+    -   Ideally, we need a clever algorithm to figure out all of this
+        automatically. Any rough ideas of the logic here? Let us know.
+        Solutions where the software can be smart enough to figure the
+        optimal resolution to use, instead of having the user deal with
+        it, are preferred.
+-   Handling “tarball export” in Pitivi
diff --git a/docs/design/Rendering_Profiles.md b/docs/design/Rendering_Profiles.md
new file mode 100644
index 0000000..532367a
--- /dev/null
+++ b/docs/design/Rendering_Profiles.md
@@ -0,0 +1,53 @@
+# Rendering Profiles
+
+Here is a first attempt at defining a list of useful “common scenarios”
+exporting profiles. Each profile serves to limit the incredible amount
+of codecs/settings combinations to keep them relevant to the user's
+intended publishing medium. If the user doesn't fit in those presets, he
+probably knows what he is doing/what he wants and will use the
+“Custom...” approach, or perhaps make his own preset for later reuse.
+
+See also: [Rendering Profiles
+Implementation](Rendering_Profiles_Implementation.md)
+
+-   Tapes and disks / (“publishing”?)
+    -   DVD
+        -   NTSC, PAL, etc.
+    -   ~~VCD and SVCD~~
+        -   Obsolete. Who still uses them these days, when you can burn
+            inexpensive DVDs and you can even burn Blu-ray?
+    -   DV
+        -   (intended for almost-lossless editing, for back-up, or
+            exporting to tape...)
+    -   HDV
+    -   High Definition / Bluray
+        -   (don't know if bluray has anything specific compared to
+            regular HD)
+-   Devices
+    -   iPod / iPhone / iWhatever
+    -   PlayStation 3
+-   Internet
+    -   HTML 5 streaming video
+        -   Theora + Vorbis with the streaming-friendly switches
+        -   ~~Maybe H.264~~
+        -   Webm VP8
+        -   A bitrate calculator that takes into amount the server's
+            available upload bandwidth and amount of simultaneous
+            connections would be a nice feature
+    -   Youtube / Vimeo / Blip / DailyMotion / Google Video / Facebook /
+        Myspace
+        -   Support limitations of each? For example, filesize and
+            duration. Timelines longer than the maximum duration could
+            be automatically split into multiple parts if the user
+            wishes it.
+    -   Email
+        -   (I see “normal” people emailing themselves videos quite
+            often)
+        -   maybe the same as for HTML 5 video
+    -   Flash video (for embedding in Flash files)
+-   Other
+    -   Video for OpenOffice presentations (intended for easy embedding
+        in an Impress slideshow)
+    -   Preview/draft (low resolution, low quality, optimized for speed,
+        intended for rendering quickly and having a preview)
+    -   Custom...
diff --git a/docs/design/Rendering_Profiles_Implementation.md 
b/docs/design/Rendering_Profiles_Implementation.md
new file mode 100644
index 0000000..4e9f093
--- /dev/null
+++ b/docs/design/Rendering_Profiles_Implementation.md
@@ -0,0 +1,95 @@
+# Rendering Profiles Implementation
+
+This is a page to track all the **issues related to the general
+redesign/refactoring of project “profiles”** (a.k.a. presets or
+templates) and all the related user interfaces (Project settings dialog,
+Rendering dialog, Startup wizard). There are **dozens of bug reports and
+mockups** scattered in the bug tracker. This page is an attempt to bring
+those into a **cohesive whole**.
+
+See **[tracker bug
+630751](https://bugzilla.gnome.org/show_bug.cgi?id=630751)** for the
+meta-bug that tracks all the other bugs related to this.
+
+# Current overall status
+
+-   emdash's rework of project settings and rendering has been merged as
+    of december 2010:
+    <http://jeff.ecchi.ca/blog/2010/12/10/new-project-settings-and-rendering-ui/>
+-   the “startup wizard” has also been implemented:
+    <http://jeff.ecchi.ca/blog/2010/11/23/startup-assistant/>
+-   Two-pass rendering is currently [not
+    easy](https://bugzilla.gnome.org/show_bug.cgi?id=603070)
+
+As such, this page is mostly obsolete.
+
+# Project profiles (emdash's branch)
+
+The goal is to allow [Rendering
+Profiles](Rendering_Profiles.md), and allow the user to save
+custom profiles.
+
+Waiting for emdash to finish the job :)
+
+## Project settings dialog
+
+-   “Save as default” button ([bug
+    622079](https://bugzilla.gnome.org/show_bug.cgi?id=622079)):
+    obsolete/useless, we should implement a “Last used settings” profile
+    instead, selected by default.
+
+Should allow/calculate any framerates [bug
+584048](https://bugzilla.gnome.org/show_bug.cgi?id=584048)
+
+-   also affects render dialog
+-   already implemented in emdash's branch?
+
+Do not block settings when applying a template [bug
+580167](https://bugzilla.gnome.org/show_bug.cgi?id=580167)
+
+-   already obsoleted in emdash's branch?
+
+### Mockups
+
+by Andreas Nilsson (in bug
+[615337](https://bugzilla.gnome.org/show_bug.cgi?id=615337)
+
+![](Project-settings-mockup-andreas.png "Project-settings-mockup-andreas.png")
+
+by nekohayo:
+
+![](Project-settings-mockup-nekohayo-2010-04.png "Project-settings-mockup-nekohayo-2010-04.png")
+
+Note: the selected preset must default to “Last settings”, except if the
+last settings were == one of the presets.
+
+### Current implementation
+
+Old and needs work:
+
+![](Project-settings-emdash-2010-04.png "Project-settings-emdash-2010-04.png")
+
+## Rendering dialog
+
+Should basically be a clone of the project settings dialog with a couple
+of additional options.
+
+### Current implementation
+
+Needs work:
+![](Render-project-emdash-2010-04.png "fig:Render-project-emdash-2010-04.png")
+
+# Startup wizard
+
+![](Startup_wizard.png "Startup_wizard.png")
+
+-   Implement the first part (the start wizard itself; see the
+    screenshot above and [bug
+    615570](https://bugzilla.gnome.org/show_bug.cgi?id=615570))
+-   When clicking “Create new project...”, simply call the **new**
+    “Project settings” window (see mockup above). That dialog defaults
+    its preset to the “Last used settings” project preset/profile, this
+    way the user doesn't have to do more than 2 clicks.
+    -   If the user cancels out that window, come back to the startup
+        wizard,
+    -   If the user OKs that window, then we're done.
diff --git a/docs/design/The_XGES_File_Format.md b/docs/design/The_XGES_File_Format.md
new file mode 100644
index 0000000..f8c5bf4
--- /dev/null
+++ b/docs/design/The_XGES_File_Format.md
@@ -0,0 +1,278 @@
+# XGES Examples
+
+This is a list of XGES Examples. For a description of the file format
+see [The XGES File Format](The_XGES_File_Format.md).
+
+### Effect
+
+``` xml
+<ges version='0.1'>\
+   <project properties='properties;' metadatas='metadatas;'>\
+     <ressources>\
+       <asset
+        id='file:///video.mp4'
+        extractable-type-name='GESUriClip' />\
+     </ressources>\
+     <timeline>\
+       <track
+        caps='video/x-raw'
+        track-type='4'
+        track-id='0' />\
+       <layer priority='0' >\
+         <clip id='0'
+          asset-id='file:///video.mp4'
+          type-name='GESUriClip'
+          layer-priority='0'
+          track-types='6'
+          start='0'
+          duration='23901027520'
+          inpoint='0' >\
+           <effect
+            asset-id='revtv'
+            clip-id='0'
+            type-name='GESEffect'
+            track-type='4'
+            track-id='0'
+            properties='properties, priority=(uint)0, active=(boolean)false, track-type=(int)4;'
+            metadatas='metadatas;'
+            children-properties='properties, gain=(int)100, line-space=(int)100;'>\
+             <binding
+              type='direct'
+              source_type='interpolation'
+              property='line-space'
+              mode='1'
+              track_id='-1'
+              values =' 0:1  23901027520:100 '/>\
+           </effect>\
+         </clip>\
+       </layer>\
+     </timeline>\
+ </project>\
+ </ges>
+```
+
+
+### Audio Volume and Alpha Keyframes
+
+
+``` xml
+ <ges version='0.1'>\
+   <project>\
+     <ressources>\
+       <asset id='file:///video.mp4' extractable-type-name='GESUriClip' />\
+     </ressources>\
+     <timeline>\
+       <track caps='video/x-raw' track-type='4' track-id='0' />\
+       <track caps='audio/x-raw' track-type='2' track-id='1' />\
+       <layer priority='0' >\
+         <clip id='0' asset-id='file:///video.mp4' type-name='GESUriClip' layer-priority='0' track-types='6' 
start='0' duration='10000000000' inpoint='0' >\
+             <binding type='direct' source_type='interpolation' property='volume' mode='1' track_id='1' 
values =' 0:0.0  10000000000:1.0 '/>\
+             <binding type='direct' source_type='interpolation' property='alpha' mode='1' track_id='0' 
values =' 0:0  10000000000:1 '/>\
+         </clip>\
+       </layer>\
+     </timeline>\
+ </project>\
+ </ges>
+```
+
+
+### Clip Position and Size
+
+``` xml
+ <ges version='0.1'>\
+   <project properties='properties;'>\
+     <ressources>\
+       <asset
+          id='file:///video.mp4'
+          extractable-type-name='GESUriClip' />\
+     </ressources>\
+     <timeline>\
+       <track caps='video/x-raw' track-type='4' track-id='0' />\
+       <layer priority='0'>\
+         <clip
+            id='0'
+            asset-id='file:///video.mp4'
+            type-name='GESUriClip'
+            layer-priority='0'
+            track-types='6'
+            start='0' duration='2000000000' inpoint='3000000000'
+            rate='0'>\
+           
+
+
+
+         </clip>\
+       </layer>\
+     </timeline>\
+   </project>\
+ </ges>
+```
+
+### Transition with Restriction Caps
+
+``` xml
+ <ges version='0.1'>\
+   <project>\
+     <ressources>\
+       <asset id='file:///video1.mp4'
+          extractable-type-name='GESUriClip' />\
+       <asset id='file:///video2.ogg'
+          extractable-type-name='GESUriClip'/>\
+     </ressources>\
+     <timeline>\
+       <track caps='video/x-raw' track-type='4' track-id='0' properties='properties, 
caps=(string)video/x-raw, restriction-caps=(string)&quot;video/x-raw\,\ width\=\(int\)720\,\ 
height\=\(int\)576\,\ framerate\=\(fraction\)25/1&quot;;'/>\
+       <track caps='audio/x-raw' track-type='2' track-id='1' />\
+       <layer priority='0' properties='properties, auto-transition=(boolean)true;' >\
+         <clip id='0'
+            asset-id='file:///video1.mp4'
+            type-name='GESUriClip' layer-priority='0' track-types='6'
+            start='0' duration='10000000000' inpoint='0' >\
+         </clip>\
+         <clip id='3'
+            asset-id='file:///video2.ogg'
+            type-name='GESUriClip' layer-priority='0' track-types='6'
+            start='7000000000' duration='10000000000' inpoint='5000000000' >\
+         </clip>\
+       </layer>\
+     </timeline>\
+ </project>\
+ </ges>
+```
+
+
+### Constant Layer Volume
+
+
+``` xml
+ <ges version='0.1'>\
+   <project>\
+     <ressources>\
+       <asset
+        id='file:///music.flac'
+        extractable-type-name='GESUriClip'
+        properties='properties, supported-formats=(int)2;' />\
+     </ressources>\
+     <timeline>\
+       <track caps='audio/x-raw' track-type='2' track-id='0' />\
+       <layer priority='0' metadatas='metadatas, volume=(float)2.0;'>\
+         <clip id='0'
+          asset-id='file:///music.flac'
+          type-name='GESUriClip'
+          layer-priority='0'
+          track-types='2'
+          start='0' duration='1000000000' inpoint='0'
+          rate='0' >\
+         </clip>\
+       </layer>\
+       <layer priority='1' metadatas='metadatas, volume=(float)0.5;'>\
+         <clip id='1'
+          asset-id='file:///music.flac'
+          type-name='GESUriClip'
+          layer-priority='1'
+          track-types='2'
+          start='1000000000' duration='1000000000' inpoint='1000000000'
+          rate='0' >\
+         </clip>\
+       </layer>\
+     </timeline>\
+ </project>\
+ </ges>
+```
+
+
+### Encoding Profiles for MP4, WebM and OGV
+
+
+``` xml
+ <ges version='0.1'>\
+   <project>\
+     <encoding-profiles>\
+       <encoding-profile
+          name='ogg'
+          description=''
+          type='container'
+          preset-name='oggmux'
+          format='application/ogg' >\
+         <stream-profile
+            parent='ogg'
+            id='0' type='video' presence='0'
+            format='video/x-theora'
+            preset-name='theoraenc'
+            restriction='video/x-raw, width=(int)720, height=(int)576, framerate=(fraction)25/1, 
pixel-aspect-ratio=(fraction)1/1'
+            pass='0' variableframerate='0' />\
+         <stream-profile
+            parent='ogg' id='1' type='audio' presence='0'
+            format='audio/x-vorbis'
+            preset-name='vorbisenc'
+            restriction='audio/x-raw, channels=(int)2, rate=(int)44100' />\
+       </encoding-profile>
+
+       <encoding-profile
+          name="mp4"
+          description=""
+          type="container"
+          preset-name="qtmux"
+          format="video/quicktime,variant=iso">\
+         <stream-profile
+            parent="mp4"
+            id="0"
+            presence="0"
+            type="video"
+            preset-name="x264enc"
+            format="video/x-h264"
+            restriction="video/x-raw, format=I420, width=(int)1280, height=(int)720, 
framerate=(fraction)25/1" />\
+         <stream-profile
+            parent="mp4"
+            id="1"
+            presence="0"
+            type="audio"
+            preset-name="lamemp3enc"
+            format="audio/mpeg,mpegversion=1,layer=3"
+            restriction="audio/x-raw, channels=(int)2, rate=(int)44100" />\
+       </encoding-profile>
+
+       <encoding-profile
+          name="webm"
+          description=""
+          type="container"
+          preset-name="webmmux"
+          format="video/webm">\
+         <stream-profile
+            parent="webm"
+            id="0"
+            presence="0"
+            type="video"
+            preset-name="vp8enc"
+            format="video/x-vp8"
+            restriction="video/x-raw, width=(int)1280, height=(int)720, framerate=(fraction)25/1" />\
+         <stream-profile
+            parent="webm"
+            id="1"
+            presence="0"
+            type="audio"
+            preset-name="vorbisenc"
+            format="audio/x-vorbis"
+            restriction="audio/x-raw, channels=(int)2, rate=(int)44100" />\
+       </encoding-profile>\
+     </encoding-profiles>\
+     <ressources>\
+       <asset
+          id='file:///C:/Users/bmonkey/workspace/ges/data/sd/Mandelbox.mp4'
+          extractable-type-name='GESUriClip' />\
+     </ressources>\
+     <timeline>\
+       <track caps='video/x-raw' track-type='4' track-id='0' />\
+       <layer priority='0'>\
+         <clip
+            id='1'
+            asset-id='file:///C:/Users/bmonkey/workspace/ges/data/sd/Mandelbox.mp4'
+            type-name='GESUriClip'
+            layer-priority='0'
+            track-types='6'
+            start='0' duration='2000000000' inpoint='0'>\
+         </clip>\
+       </layer>\
+     </timeline>\
+   </project>\
+ </ges>
+```
diff --git a/docs/design/Title_editor_design.md b/docs/design/Title_editor_design.md
new file mode 100644
index 0000000..da94e05
--- /dev/null
+++ b/docs/design/Title_editor_design.md
@@ -0,0 +1,44 @@
+# Title editor design
+
+Here's an attempt at summarizing the current situation for adding text
+on video with gstreamer. **Please improve/correct this page with your
+knowledge**.
+
+The question in everyone's mind:
+
+> “What we should do in case of titles and text overlays with video
+> compositing? Will be they considered as a video clip with
+> corresponding properties?”
+
+In the [GES](GES.md) API reference manual, we can see
+[GES.TitleSource](http://lazka.github.io/pgi-docs/#GES-1.0/classes/TitleSource.html#GES.TitleSource)
+and
+[GES.TextOverlay](http://lazka.github.io/pgi-docs/#GES-1.0/classes/TextOverlay.html#GES.TextOverlay).
+
+-   [GES.TitleSource](http://lazka.github.io/pgi-docs/#GES-1.0/classes/TitleSource.html#GES.TitleSource)
+    is a title clip/object as you'd imagine it. This is what we are
+    using now.
+-   [GES.TextOverlay](http://lazka.github.io/pgi-docs/#GES-1.0/classes/TextOverlay.html#GES.TextOverlay),
+    on the other hand, is something that is meant to be used really as
+    an “overlay on top of an existing video stream” (ex: for subtitles).
+    This probably corresponds to the [GStreamer text overlay
+    
element](http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-plugins/html/gst-plugins-base-plugins-textoverlay.html).
+
+In Pitivi, we would need one UI that does it all: allow creating a title
+clip/timeline object that may have a transparent background color. That
+way, if the user wants to use it as an overlay on video, he simply needs
+to set the background color to be fully transparent. Only one UI, only
+one workflow. More flexibility for the user and less confusion. As you
+can see in some other applications [like
+this](http://jeff.ecchi.ca/public/vegas-title-editor.webm) (or even in
+kdenlive, I think), having a single UI to do everything feels great. We
+can do a much better design than them, however!
+
+We need to extend titlesource to be able to set a background color, or
+even a text border color:
+
+-   This is probably easy/trivial to fix in GES, you just need to expose
+    the background-color property of GstVideoTestSrc into
+    GESTrackVideoTestSource and the expose that in GESTitleSource.
+-   That way, we can ignore textoverlay completely (titlesource will
+    just depend on video compositing being reimplemented later on)
diff --git a/docs/design/UI_Design_Variants.md b/docs/design/UI_Design_Variants.md
new file mode 100644
index 0000000..b4ff75f
--- /dev/null
+++ b/docs/design/UI_Design_Variants.md
@@ -0,0 +1,4 @@
+# UI Design Variants
+
+<image:alternate_layout_viewer.png> <image:alternate_layout_source.png>
+<image:alternate_layout_image.png>
diff --git a/docs/design/UI_Implementation.md b/docs/design/UI_Implementation.md
new file mode 100644
index 0000000..c5bdd2f
--- /dev/null
+++ b/docs/design/UI_Implementation.md
@@ -0,0 +1,110 @@
+# UI Implementation
+
+For the previous design document, see [Obsolete: Advanced UI
+Implementation](Obsolete:_Advanced_UI_Implementation.md)
+
+This document **does not reflect the existing codebase**, but rather a
+road map for future development, and a general introduction to the
+PiTiVi design philosophy.
+
+# Todo
+
+-   document markers
+-   document keyframes
+-   explain the concept of a receiver.
+
+# Concepts
+
+The goal of the design is to build a UI which supports the following
+features:
+
+-   basic editing
+-   basic effects
+-   compositing
+-   multi-track editing
+-   multi-layer editing\*
+-   multiple selection
+-   noun-verb interaction
+-   direct manipulation wherever possible
+-   leaving behavior up to the core implementation
+
+(\*) It is important to distinguish between a **track**, and a **layer**
+in application terminology. Existing video editors use the term
+**track** to refer to a UI object which represents a stream of video
+with a sequence of sources. PiTiVi refers to this as a **composition**.
+The term **track** in PiTiVi means a separate channel of output: for
+example, audio and video are in separate tracks.
+
+This is distinguished from the concept of a **layer** which is directly
+related to the notion of **compositing**. Within a track, sources have a
+property called **priority** which determines what will appear when the
+play-head reaches a given position in the timeline. By default, the
+source with the lowest numerical priority is displayed. Adding effects
+to a composition enables multiple sources to be composited together.
+Priority is used to determine which sources will be used by an effect as
+input.
+
+## The MVC/Observer Design Pattern
+
+PiTiVi relies heavily on MVC and Observer design patterns to decouple
+the core of the application from the user interface. Core objects emit
+signals which prompt changes in the UI. UI elements wrap core objects to
+manipulate data, which in turn emit signals. The observer pattern allows
+the user interface to listen for changes in the core without coupling
+the core to the UI.
+
+In core, we have our own pure-python implementation of “signals”. The
+user interface depends on pygtk and pygoocanvas, both of which are based
+on GObject. We use “receivers” to automatically connect appropriate
+signal handler methods to objects which emit them.
+
+# UI Framework Design
+
+The majority of the UI uses pygtk. The timeline portion also relies on
+goocanvas. This section is about the pygoocanvas portion of the UI.
+
+Objects visible in the timeline will either descend from or mix-in the
+View class, available in the view module. Instances of the view class
+create an instance of Controller which handles low-level input events
+and translates these into higher-level commands which it passes onto the
+model.
+
+## Views
+
+View objects appear exclusively in the time-line component of the UI.
+Each view represents some object in the current timeline. Views must
+update their appearance when the object they represent changes. While in
+most cases, this will be accomplished by connecting to model signals, it
+is up to the individual view object to do this. No infrastructure is
+provided by the View base class. In general, views should multiply from
+View and some subclass of goocanvas.Item. The controller code connects
+to specific signals, and expects that these signals will have the same
+signature as defined in goocanvas.Item.
+
+Views provide a public interface for controlling appearance. There are 3
+independent visual states:
+
+-   focused/unfocused
+-   active/inactive
+-   selected/deselected.
+
+A fourth state, normal, is defined as being simultaneously unfocused,
+inactive, and deselected.
+
+## Controllers
+
+View classes have a class attribute, Controller, which can be reference
+to BaseController. Views automatically instantiate and connect to an
+instance of this class during initialization. Derived Views can redefine
+this attribute to any subclass of Controller -- even one defined as an
+inner class -- if they wish to override default functionality. This
+design is intended to keep a tight integration between a View and its
+Controller.
+
+Controllers provide a high-level public interface for handling the
+following kinds of interaction
+
+-   key press events
+-   mouse clicks
+-   mouse drags
+-   focus changes
diff --git a/docs/design/UI_components.md b/docs/design/UI_components.md
new file mode 100644
index 0000000..2965688
--- /dev/null
+++ b/docs/design/UI_components.md
@@ -0,0 +1,8 @@
+# UI components
+
+These documents describe the appearance and implementation of PiTiVi's
+user interface. Pages linked here can only be “actual” stuff.
+
+-   [UI Implementation](UI_Implementation.md)
+-   [Compositing Interface](Compositing_Interface.md)
+-   [Compositing Subinterface](Compositing.md) (needs work)
diff --git a/docs/design/Why_python.md b/docs/design/Why_python.md
new file mode 100644
index 0000000..de41882
--- /dev/null
+++ b/docs/design/Why_python.md
@@ -0,0 +1,23 @@
+# Why python ?
+
+We like Python. It is a simple, fast and elegant programming language.
+It allows **faster**, **agile** and **robust** software development.
+Some people wrongly assume that Python applications are automatically
+slow and bloated. This is untrue for many reasons:
+
+-   Python is actually surprisingly fast in many cases.
+-   Python is **not the performance bottleneck** here. Seriously.
+    **GStreamer and [GES](GES.md) are the components doing the
+    heavy work, and they are written in C**. Pitivi is basically just a
+    pretty user interface on top of those.
+-   Most performance issues on desktop apps are not micro-optimization
+    problems, but I/O bound operations or “stupid algorithms/methods
+    that do unnecessary work”. Federico Mena Quintero did a great
+    presentation
+    ([video](http://video.fosdem.org/2007/FOSDEM2007-ProfilingDesktopApplication.ogg),
+    [slides](http://people.gnome.org/~federico/docs/2007-02-FOSDEM/html/index.html))
+    along those lines a couple of years ago.
+
+Most of what I highlighted above can also be found in Python's page on
+[speed](http://wiki.python.org/moin/PythonSpeed) and [performance
+tips](http://wiki.python.org/moin/PythonSpeed/PerformanceTips).
diff --git a/docs/design/XGES_Examples.md b/docs/design/XGES_Examples.md
new file mode 100644
index 0000000..f8c5bf4
--- /dev/null
+++ b/docs/design/XGES_Examples.md
@@ -0,0 +1,278 @@
+# XGES Examples
+
+This is a list of XGES Examples. For a description of the file format
+see [The XGES File Format](The_XGES_File_Format.md).
+
+### Effect
+
+``` xml
+<ges version='0.1'>\
+   <project properties='properties;' metadatas='metadatas;'>\
+     <ressources>\
+       <asset
+        id='file:///video.mp4'
+        extractable-type-name='GESUriClip' />\
+     </ressources>\
+     <timeline>\
+       <track
+        caps='video/x-raw'
+        track-type='4'
+        track-id='0' />\
+       <layer priority='0' >\
+         <clip id='0'
+          asset-id='file:///video.mp4'
+          type-name='GESUriClip'
+          layer-priority='0'
+          track-types='6'
+          start='0'
+          duration='23901027520'
+          inpoint='0' >\
+           <effect
+            asset-id='revtv'
+            clip-id='0'
+            type-name='GESEffect'
+            track-type='4'
+            track-id='0'
+            properties='properties, priority=(uint)0, active=(boolean)false, track-type=(int)4;'
+            metadatas='metadatas;'
+            children-properties='properties, gain=(int)100, line-space=(int)100;'>\
+             <binding
+              type='direct'
+              source_type='interpolation'
+              property='line-space'
+              mode='1'
+              track_id='-1'
+              values =' 0:1  23901027520:100 '/>\
+           </effect>\
+         </clip>\
+       </layer>\
+     </timeline>\
+ </project>\
+ </ges>
+```
+
+
+### Audio Volume and Alpha Keyframes
+
+
+``` xml
+ <ges version='0.1'>\
+   <project>\
+     <ressources>\
+       <asset id='file:///video.mp4' extractable-type-name='GESUriClip' />\
+     </ressources>\
+     <timeline>\
+       <track caps='video/x-raw' track-type='4' track-id='0' />\
+       <track caps='audio/x-raw' track-type='2' track-id='1' />\
+       <layer priority='0' >\
+         <clip id='0' asset-id='file:///video.mp4' type-name='GESUriClip' layer-priority='0' track-types='6' 
start='0' duration='10000000000' inpoint='0' >\
+             <binding type='direct' source_type='interpolation' property='volume' mode='1' track_id='1' 
values =' 0:0.0  10000000000:1.0 '/>\
+             <binding type='direct' source_type='interpolation' property='alpha' mode='1' track_id='0' 
values =' 0:0  10000000000:1 '/>\
+         </clip>\
+       </layer>\
+     </timeline>\
+ </project>\
+ </ges>
+```
+
+
+### Clip Position and Size
+
+``` xml
+ <ges version='0.1'>\
+   <project properties='properties;'>\
+     <ressources>\
+       <asset
+          id='file:///video.mp4'
+          extractable-type-name='GESUriClip' />\
+     </ressources>\
+     <timeline>\
+       <track caps='video/x-raw' track-type='4' track-id='0' />\
+       <layer priority='0'>\
+         <clip
+            id='0'
+            asset-id='file:///video.mp4'
+            type-name='GESUriClip'
+            layer-priority='0'
+            track-types='6'
+            start='0' duration='2000000000' inpoint='3000000000'
+            rate='0'>\
+           
+
+
+
+         </clip>\
+       </layer>\
+     </timeline>\
+   </project>\
+ </ges>
+```
+
+### Transition with Restriction Caps
+
+``` xml
+ <ges version='0.1'>\
+   <project>\
+     <ressources>\
+       <asset id='file:///video1.mp4'
+          extractable-type-name='GESUriClip' />\
+       <asset id='file:///video2.ogg'
+          extractable-type-name='GESUriClip'/>\
+     </ressources>\
+     <timeline>\
+       <track caps='video/x-raw' track-type='4' track-id='0' properties='properties, 
caps=(string)video/x-raw, restriction-caps=(string)&quot;video/x-raw\,\ width\=\(int\)720\,\ 
height\=\(int\)576\,\ framerate\=\(fraction\)25/1&quot;;'/>\
+       <track caps='audio/x-raw' track-type='2' track-id='1' />\
+       <layer priority='0' properties='properties, auto-transition=(boolean)true;' >\
+         <clip id='0'
+            asset-id='file:///video1.mp4'
+            type-name='GESUriClip' layer-priority='0' track-types='6'
+            start='0' duration='10000000000' inpoint='0' >\
+         </clip>\
+         <clip id='3'
+            asset-id='file:///video2.ogg'
+            type-name='GESUriClip' layer-priority='0' track-types='6'
+            start='7000000000' duration='10000000000' inpoint='5000000000' >\
+         </clip>\
+       </layer>\
+     </timeline>\
+ </project>\
+ </ges>
+```
+
+
+### Constant Layer Volume
+
+
+``` xml
+ <ges version='0.1'>\
+   <project>\
+     <ressources>\
+       <asset
+        id='file:///music.flac'
+        extractable-type-name='GESUriClip'
+        properties='properties, supported-formats=(int)2;' />\
+     </ressources>\
+     <timeline>\
+       <track caps='audio/x-raw' track-type='2' track-id='0' />\
+       <layer priority='0' metadatas='metadatas, volume=(float)2.0;'>\
+         <clip id='0'
+          asset-id='file:///music.flac'
+          type-name='GESUriClip'
+          layer-priority='0'
+          track-types='2'
+          start='0' duration='1000000000' inpoint='0'
+          rate='0' >\
+         </clip>\
+       </layer>\
+       <layer priority='1' metadatas='metadatas, volume=(float)0.5;'>\
+         <clip id='1'
+          asset-id='file:///music.flac'
+          type-name='GESUriClip'
+          layer-priority='1'
+          track-types='2'
+          start='1000000000' duration='1000000000' inpoint='1000000000'
+          rate='0' >\
+         </clip>\
+       </layer>\
+     </timeline>\
+ </project>\
+ </ges>
+```
+
+
+### Encoding Profiles for MP4, WebM and OGV
+
+
+``` xml
+ <ges version='0.1'>\
+   <project>\
+     <encoding-profiles>\
+       <encoding-profile
+          name='ogg'
+          description=''
+          type='container'
+          preset-name='oggmux'
+          format='application/ogg' >\
+         <stream-profile
+            parent='ogg'
+            id='0' type='video' presence='0'
+            format='video/x-theora'
+            preset-name='theoraenc'
+            restriction='video/x-raw, width=(int)720, height=(int)576, framerate=(fraction)25/1, 
pixel-aspect-ratio=(fraction)1/1'
+            pass='0' variableframerate='0' />\
+         <stream-profile
+            parent='ogg' id='1' type='audio' presence='0'
+            format='audio/x-vorbis'
+            preset-name='vorbisenc'
+            restriction='audio/x-raw, channels=(int)2, rate=(int)44100' />\
+       </encoding-profile>
+
+       <encoding-profile
+          name="mp4"
+          description=""
+          type="container"
+          preset-name="qtmux"
+          format="video/quicktime,variant=iso">\
+         <stream-profile
+            parent="mp4"
+            id="0"
+            presence="0"
+            type="video"
+            preset-name="x264enc"
+            format="video/x-h264"
+            restriction="video/x-raw, format=I420, width=(int)1280, height=(int)720, 
framerate=(fraction)25/1" />\
+         <stream-profile
+            parent="mp4"
+            id="1"
+            presence="0"
+            type="audio"
+            preset-name="lamemp3enc"
+            format="audio/mpeg,mpegversion=1,layer=3"
+            restriction="audio/x-raw, channels=(int)2, rate=(int)44100" />\
+       </encoding-profile>
+
+       <encoding-profile
+          name="webm"
+          description=""
+          type="container"
+          preset-name="webmmux"
+          format="video/webm">\
+         <stream-profile
+            parent="webm"
+            id="0"
+            presence="0"
+            type="video"
+            preset-name="vp8enc"
+            format="video/x-vp8"
+            restriction="video/x-raw, width=(int)1280, height=(int)720, framerate=(fraction)25/1" />\
+         <stream-profile
+            parent="webm"
+            id="1"
+            presence="0"
+            type="audio"
+            preset-name="vorbisenc"
+            format="audio/x-vorbis"
+            restriction="audio/x-raw, channels=(int)2, rate=(int)44100" />\
+       </encoding-profile>\
+     </encoding-profiles>\
+     <ressources>\
+       <asset
+          id='file:///C:/Users/bmonkey/workspace/ges/data/sd/Mandelbox.mp4'
+          extractable-type-name='GESUriClip' />\
+     </ressources>\
+     <timeline>\
+       <track caps='video/x-raw' track-type='4' track-id='0' />\
+       <layer priority='0'>\
+         <clip
+            id='1'
+            asset-id='file:///C:/Users/bmonkey/workspace/ges/data/sd/Mandelbox.mp4'
+            type-name='GESUriClip'
+            layer-priority='0'
+            track-types='6'
+            start='0' duration='2000000000' inpoint='0'>\
+         </clip>\
+       </layer>\
+     </timeline>\
+   </project>\
+ </ges>
+```
diff --git a/docs/extra/images/favicon.png b/docs/extra/images/favicon.png
new file mode 100644
index 0000000..db622ab
Binary files /dev/null and b/docs/extra/images/favicon.png differ
diff --git a/docs/extra/templates/navbar.html b/docs/extra/templates/navbar.html
new file mode 100644
index 0000000..518af9e
--- /dev/null
+++ b/docs/extra/templates/navbar.html
@@ -0,0 +1,24 @@
+@require(assets_path)
+
+<nav class="navbar navbar-fixed-top navbar-default">
+       <div class="container-fluid">
+               <div class="navbar-header">
+                       <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" 
data-target="#navbar-wrapper" aria-expanded="false">
+                               <span class="sr-only">Toggle navigation</span>
+                               <span class="icon-bar"></span>
+                               <span class="icon-bar"></span>
+                               <span class="icon-bar"></span>
+                       </button>
+            <div>
+                <a href="Main_Page.html" class="hotdoc-navbar-brand">
+                    <img src="@assets_path/images/favicon.png" alt="Home"> Pitivi
+                </a>
+            </div>
+               </div>
+               <div class="navbar-collapse collapse" id="navbar-wrapper">
+                       <ul class="nav navbar-nav" id="menu">
+                               @include("navbar_links.html")
+                       </ul>
+               </div>
+       </div>
+</nav>
diff --git a/docs/hotdoc.json b/docs/hotdoc.json
new file mode 100644
index 0000000..ac8680d
--- /dev/null
+++ b/docs/hotdoc.json
@@ -0,0 +1,11 @@
+{
+    "extra_assets": [ "images/" ],
+    "include_directories": [ "design/", "attic/" ],
+    "index": "index.md",
+    "output": "output",
+    "project_name": "Pitivi",
+    "project_version": "1.0",
+    "sitemap": "sitemap.txt",
+    "syntax_highlighting_activate": true,
+    "html_extra_theme": "extra"
+}
diff --git a/docs/images/03-02-trackmanage.jpg b/docs/images/03-02-trackmanage.jpg
new file mode 100644
index 0000000..c96d931
Binary files /dev/null and b/docs/images/03-02-trackmanage.jpg differ
diff --git a/docs/images/Actions-hierarchy.png b/docs/images/Actions-hierarchy.png
new file mode 100644
index 0000000..55b6cd3
Binary files /dev/null and b/docs/images/Actions-hierarchy.png differ
diff --git a/docs/images/Advaced_ui_separated_keyframes.png b/docs/images/Advaced_ui_separated_keyframes.png
new file mode 100644
index 0000000..5cc680a
Binary files /dev/null and b/docs/images/Advaced_ui_separated_keyframes.png differ
diff --git a/docs/images/Advanced_box_and_pointer.jpg b/docs/images/Advanced_box_and_pointer.jpg
new file mode 100644
index 0000000..40f790c
Binary files /dev/null and b/docs/images/Advanced_box_and_pointer.jpg differ
diff --git a/docs/images/Advanced_box_and_pointer.png b/docs/images/Advanced_box_and_pointer.png
new file mode 100644
index 0000000..a03348e
Binary files /dev/null and b/docs/images/Advanced_box_and_pointer.png differ
diff --git a/docs/images/Advanced_inheritance.png b/docs/images/Advanced_inheritance.png
new file mode 100644
index 0000000..8e39397
Binary files /dev/null and b/docs/images/Advanced_inheritance.png differ
diff --git a/docs/images/Advanced_ui_basic.png b/docs/images/Advanced_ui_basic.png
new file mode 100644
index 0000000..6e96ee8
Binary files /dev/null and b/docs/images/Advanced_ui_basic.png differ
diff --git a/docs/images/Advanced_ui_direct_keyframes.png b/docs/images/Advanced_ui_direct_keyframes.png
new file mode 100644
index 0000000..fe8132c
Binary files /dev/null and b/docs/images/Advanced_ui_direct_keyframes.png differ
diff --git a/docs/images/Advanced_ui_expanded_contracted.png b/docs/images/Advanced_ui_expanded_contracted.png
new file mode 100644
index 0000000..0fbf102
Binary files /dev/null and b/docs/images/Advanced_ui_expanded_contracted.png differ
diff --git a/docs/images/Advancedmode-small-0.10.1.1.png b/docs/images/Advancedmode-small-0.10.1.1.png
new file mode 100644
index 0000000..6b52903
Binary files /dev/null and b/docs/images/Advancedmode-small-0.10.1.1.png differ
diff --git a/docs/images/Alternate_layout_image.png b/docs/images/Alternate_layout_image.png
new file mode 100644
index 0000000..d6ed473
Binary files /dev/null and b/docs/images/Alternate_layout_image.png differ
diff --git a/docs/images/Alternate_layout_source.png b/docs/images/Alternate_layout_source.png
new file mode 100644
index 0000000..f6b9537
Binary files /dev/null and b/docs/images/Alternate_layout_source.png differ
diff --git a/docs/images/Alternate_layout_viewer.png b/docs/images/Alternate_layout_viewer.png
new file mode 100644
index 0000000..311f1fe
Binary files /dev/null and b/docs/images/Alternate_layout_viewer.png differ
diff --git a/docs/images/Anatomy_of_timeline_object.png b/docs/images/Anatomy_of_timeline_object.png
new file mode 100644
index 0000000..544efc8
Binary files /dev/null and b/docs/images/Anatomy_of_timeline_object.png differ
diff --git a/docs/images/Anatomy_of_trackobject.png b/docs/images/Anatomy_of_trackobject.png
new file mode 100644
index 0000000..a2e73c1
Binary files /dev/null and b/docs/images/Anatomy_of_trackobject.png differ
diff --git a/docs/images/Annotated.png b/docs/images/Annotated.png
new file mode 100644
index 0000000..62b9d43
Binary files /dev/null and b/docs/images/Annotated.png differ
diff --git a/docs/images/Application_logic.png b/docs/images/Application_logic.png
new file mode 100644
index 0000000..4913f4e
Binary files /dev/null and b/docs/images/Application_logic.png differ
diff --git a/docs/images/Approved.jpg b/docs/images/Approved.jpg
new file mode 100644
index 0000000..d3e6983
Binary files /dev/null and b/docs/images/Approved.jpg differ
diff --git a/docs/images/Architecture_2012.png b/docs/images/Architecture_2012.png
new file mode 100644
index 0000000..6d33694
Binary files /dev/null and b/docs/images/Architecture_2012.png differ
diff --git a/docs/images/Architecture_2013.png b/docs/images/Architecture_2013.png
new file mode 100644
index 0000000..cf1ef3e
Binary files /dev/null and b/docs/images/Architecture_2013.png differ
diff --git a/docs/images/Architecture_2015.png b/docs/images/Architecture_2015.png
new file mode 100644
index 0000000..f874757
Binary files /dev/null and b/docs/images/Architecture_2015.png differ
diff --git a/docs/images/Audio_crossfade_chain.png b/docs/images/Audio_crossfade_chain.png
new file mode 100644
index 0000000..9d8c532
Binary files /dev/null and b/docs/images/Audio_crossfade_chain.png differ
diff --git a/docs/images/Audio_video_crossfade_pipeline.png b/docs/images/Audio_video_crossfade_pipeline.png
new file mode 100644
index 0000000..b9725ee
Binary files /dev/null and b/docs/images/Audio_video_crossfade_pipeline.png differ
diff --git a/docs/images/Audio_video_playback_pipeline.png b/docs/images/Audio_video_playback_pipeline.png
new file mode 100644
index 0000000..066981a
Binary files /dev/null and b/docs/images/Audio_video_playback_pipeline.png differ
diff --git a/docs/images/Avi_mjpeg_mp3_audio.png b/docs/images/Avi_mjpeg_mp3_audio.png
new file mode 100644
index 0000000..5ec5908
Binary files /dev/null and b/docs/images/Avi_mjpeg_mp3_audio.png differ
diff --git a/docs/images/Avid-layercontrols.jpg b/docs/images/Avid-layercontrols.jpg
new file mode 100644
index 0000000..96ef45b
Binary files /dev/null and b/docs/images/Avid-layercontrols.jpg differ
diff --git a/docs/images/BSP Auto - Confirmation.pdf b/docs/images/BSP Auto - Confirmation.pdf
new file mode 100644
index 0000000..aaa5bef
Binary files /dev/null and b/docs/images/BSP Auto - Confirmation.pdf differ
diff --git a/docs/images/Browser-functional.png b/docs/images/Browser-functional.png
new file mode 100644
index 0000000..44e7426
Binary files /dev/null and b/docs/images/Browser-functional.png differ
diff --git a/docs/images/Capture-PiTiVi_v0.13.0.1.jpg b/docs/images/Capture-PiTiVi_v0.13.0.1.jpg
new file mode 100644
index 0000000..d2449fa
Binary files /dev/null and b/docs/images/Capture-PiTiVi_v0.13.0.1.jpg differ
diff --git a/docs/images/Cartola-cuatrimestral-resumida-AFPModelo.pdf 
b/docs/images/Cartola-cuatrimestral-resumida-AFPModelo.pdf
new file mode 100644
index 0000000..f8e3c90
Binary files /dev/null and b/docs/images/Cartola-cuatrimestral-resumida-AFPModelo.pdf differ
diff --git a/docs/images/Challenge-Accepted.png b/docs/images/Challenge-Accepted.png
new file mode 100644
index 0000000..b04ce9f
Binary files /dev/null and b/docs/images/Challenge-Accepted.png differ
diff --git a/docs/images/Cineticket1.pdf b/docs/images/Cineticket1.pdf
new file mode 100644
index 0000000..b425115
Binary files /dev/null and b/docs/images/Cineticket1.pdf differ
diff --git a/docs/images/Cineticket2.pdf b/docs/images/Cineticket2.pdf
new file mode 100644
index 0000000..777619f
Binary files /dev/null and b/docs/images/Cineticket2.pdf differ
diff --git a/docs/images/Clip_transformation_keyframes.png b/docs/images/Clip_transformation_keyframes.png
new file mode 100644
index 0000000..7e914f8
Binary files /dev/null and b/docs/images/Clip_transformation_keyframes.png differ
diff --git a/docs/images/Close_flowchart.png b/docs/images/Close_flowchart.png
new file mode 100644
index 0000000..35483ee
Binary files /dev/null and b/docs/images/Close_flowchart.png differ
diff --git a/docs/images/Color_balance_pipeline.png b/docs/images/Color_balance_pipeline.png
new file mode 100644
index 0000000..df99497
Binary files /dev/null and b/docs/images/Color_balance_pipeline.png differ
diff --git a/docs/images/Complex_layers_whiteboard_mockup_from_desktop_summit_2011.png 
b/docs/images/Complex_layers_whiteboard_mockup_from_desktop_summit_2011.png
new file mode 100644
index 0000000..6db230e
Binary files /dev/null and b/docs/images/Complex_layers_whiteboard_mockup_from_desktop_summit_2011.png differ
diff --git a/docs/images/Complex_timeline_schema.png b/docs/images/Complex_timeline_schema.png
new file mode 100644
index 0000000..604aa9b
Binary files /dev/null and b/docs/images/Complex_timeline_schema.png differ
diff --git a/docs/images/Complicated_composition.png b/docs/images/Complicated_composition.png
new file mode 100644
index 0000000..f5b2b11
Binary files /dev/null and b/docs/images/Complicated_composition.png differ
diff --git a/docs/images/Composition-Pipeline.png b/docs/images/Composition-Pipeline.png
new file mode 100644
index 0000000..e9824b3
Binary files /dev/null and b/docs/images/Composition-Pipeline.png differ
diff --git a/docs/images/Config-custom-widget.png b/docs/images/Config-custom-widget.png
new file mode 100644
index 0000000..ee0cc99
Binary files /dev/null and b/docs/images/Config-custom-widget.png differ
diff --git a/docs/images/Config-example.png b/docs/images/Config-example.png
new file mode 100644
index 0000000..27a3ca0
Binary files /dev/null and b/docs/images/Config-example.png differ
diff --git a/docs/images/Contracted_layer.png b/docs/images/Contracted_layer.png
new file mode 100644
index 0000000..367f4c4
Binary files /dev/null and b/docs/images/Contracted_layer.png differ
diff --git a/docs/images/Crossfade.png b/docs/images/Crossfade.png
new file mode 100644
index 0000000..74b071f
Binary files /dev/null and b/docs/images/Crossfade.png differ
diff --git a/docs/images/Crossfade_pipeline.png b/docs/images/Crossfade_pipeline.png
new file mode 100644
index 0000000..a33b8ff
Binary files /dev/null and b/docs/images/Crossfade_pipeline.png differ
diff --git a/docs/images/Default_bg_hline_separator.png b/docs/images/Default_bg_hline_separator.png
new file mode 100644
index 0000000..47bcbeb
Binary files /dev/null and b/docs/images/Default_bg_hline_separator.png differ
diff --git a/docs/images/Default_bg_hline_separator_etched_in_shadow_outline.png 
b/docs/images/Default_bg_hline_separator_etched_in_shadow_outline.png
new file mode 100644
index 0000000..dbc4170
Binary files /dev/null and b/docs/images/Default_bg_hline_separator_etched_in_shadow_outline.png differ
diff --git a/docs/images/Default_bg_shadow_in_box_separator.png 
b/docs/images/Default_bg_shadow_in_box_separator.png
new file mode 100644
index 0000000..bc53214
Binary files /dev/null and b/docs/images/Default_bg_shadow_in_box_separator.png differ
diff --git a/docs/images/Default_bg_shadow_in_box_separator_etched_box_outline.png 
b/docs/images/Default_bg_shadow_in_box_separator_etched_box_outline.png
new file mode 100644
index 0000000..4fb511f
Binary files /dev/null and b/docs/images/Default_bg_shadow_in_box_separator_etched_box_outline.png differ
diff --git a/docs/images/Default_bg_shadow_out_box_handle_separator.png 
b/docs/images/Default_bg_shadow_out_box_handle_separator.png
new file mode 100644
index 0000000..8068103
Binary files /dev/null and b/docs/images/Default_bg_shadow_out_box_handle_separator.png differ
diff --git a/docs/images/Default_bg_shadow_out_box_separator.png 
b/docs/images/Default_bg_shadow_out_box_separator.png
new file mode 100644
index 0000000..ce5a88b
Binary files /dev/null and b/docs/images/Default_bg_shadow_out_box_separator.png differ
diff --git a/docs/images/Default_bg_tracks_are_shadow_etched_in_boxes.png 
b/docs/images/Default_bg_tracks_are_shadow_etched_in_boxes.png
new file mode 100644
index 0000000..e3a093a
Binary files /dev/null and b/docs/images/Default_bg_tracks_are_shadow_etched_in_boxes.png differ
diff --git a/docs/images/Default_bg_tracks_are_shadow_etched_out_boxes.png 
b/docs/images/Default_bg_tracks_are_shadow_etched_out_boxes.png
new file mode 100644
index 0000000..1546a4f
Binary files /dev/null and b/docs/images/Default_bg_tracks_are_shadow_etched_out_boxes.png differ
diff --git a/docs/images/Extension_schema.png b/docs/images/Extension_schema.png
new file mode 100644
index 0000000..e2ca72e
Binary files /dev/null and b/docs/images/Extension_schema.png differ
diff --git a/docs/images/Glade-1.png b/docs/images/Glade-1.png
new file mode 100644
index 0000000..495dbc2
Binary files /dev/null and b/docs/images/Glade-1.png differ
diff --git a/docs/images/Kdenlive-layercontrols.jpg b/docs/images/Kdenlive-layercontrols.jpg
new file mode 100644
index 0000000..e336df5
Binary files /dev/null and b/docs/images/Kdenlive-layercontrols.jpg differ
diff --git a/docs/images/Layers.png b/docs/images/Layers.png
new file mode 100644
index 0000000..1da0f30
Binary files /dev/null and b/docs/images/Layers.png differ
diff --git a/docs/images/Openshot_layercontrol.jpg b/docs/images/Openshot_layercontrol.jpg
new file mode 100644
index 0000000..80e8f2b
Binary files /dev/null and b/docs/images/Openshot_layercontrol.jpg differ
diff --git a/docs/images/Premiere-layercontrol.jpg b/docs/images/Premiere-layercontrol.jpg
new file mode 100644
index 0000000..df37815
Binary files /dev/null and b/docs/images/Premiere-layercontrol.jpg differ
diff --git a/docs/images/back.gif b/docs/images/back.gif
new file mode 100644
index 0000000..a694ae1
Binary files /dev/null and b/docs/images/back.gif differ
diff --git a/docs/images/blank.gif b/docs/images/blank.gif
new file mode 100644
index 0000000..0ccf01e
Binary files /dev/null and b/docs/images/blank.gif differ
diff --git a/docs/index.md b/docs/index.md
new file mode 100644
index 0000000..1d28e90
--- /dev/null
+++ b/docs/index.md
@@ -0,0 +1 @@
+# Pitivi documentation
diff --git a/docs/releases.md b/docs/releases.md
new file mode 100644
index 0000000..a136ffd
--- /dev/null
+++ b/docs/releases.md
@@ -0,0 +1,3 @@
+# Releases
+
+List of releases so far
diff --git a/docs/releases/0.10.1.md b/docs/releases/0.10.1.md
new file mode 100644
index 0000000..e93f810
--- /dev/null
+++ b/docs/releases/0.10.1.md
@@ -0,0 +1,51 @@
+# 0.10.1 Release : Sister and friend
+
+The PiTiVi team is proud to announce the second release of the 0.10.x
+series of the PiTiVi opensource video editor.
+
+The 0.10.x series is an unstable series with 3-week release cycles. The
+goal of this series is to allow users to test new versions often, give
+their feedback, and remove bugs more often.
+
+## Features of this release
+
+-   More UI improvements for usability
+-   Works with X11/Imagesink
+-   Handles more formats
+-   More startup checks
+
+## Bugs Fixed
+
+-   [335500](http://bugzilla.gnome.org/show_bug.cgi?id=335500) : Render
+    dialog never goes away
+-   [339993](http://bugzilla.gnome.org/show_bug.cgi?id=339993) :
+    \[i18n\] use stock labels included with stock items
+-   [339998](http://bugzilla.gnome.org/show_bug.cgi?id=339998) : Gnome
+    button order
+-   [340382](http://bugzilla.gnome.org/show_bug.cgi?id=340382) : current
+    position should be ui-independent
+-   [342674](http://bugzilla.gnome.org/show_bug.cgi?id=342674) :
+    Segmentation fault on load
+
+[List of bugs fixed on
+Bugzilla](http://bugzilla.gnome.org/buglist.cgi?product=pitivi&target_milestone=0.10.1)
+
+## Requirements
+
+-   gstreamer &gt;= 0.10.4
+-   gst-python &gt;= 0.10.0
+-   gnonlin &gt;= 0.10.2
+-   pygtk &gt;= 2.8.0
+
+## Contributors
+
+-   Edward Hervey
+
+## Information and Feedback
+
+-   Information for users and developers can be found on the PiTiVi
+    website : <http://www.pitivi.org/>
+-   Comments and feedback are welcome.
+    -   Mailing-list : pitivi-pitivi lists sourceforge net
+    -   PiTiVi bug-tracker :
+        <http://bugzilla.gnome.org/browse.cgi?product=pitivi>
diff --git a/docs/releases/0.10.2.md b/docs/releases/0.10.2.md
new file mode 100644
index 0000000..91a6a15
--- /dev/null
+++ b/docs/releases/0.10.2.md
@@ -0,0 +1,86 @@
+# 0.10.2 Release : A New Toy
+
+The PiTiVi team is proud to announce the third release of the 0.10.x
+series of the PiTiVi opensource video editor.
+
+## Features of this release
+
+-   UI improvements for usability
+-   i18n support, translated in 12 languages
+-   Rendering improvements
+-   decodebin2 support
+-   Critical bugfixes
+
+## Bugs Fixed
+
+-   [353859](http://bugzilla.gnome.org/show_bug.cgi?id=353859) :
+    \[discoverer\] Use 'no-more-pads' information
+-   [335699](http://bugzilla.gnome.org/show_bug.cgi?id=335699) : Pitivi
+    fails to work if project created at wrong time
+-   [335822](http://bugzilla.gnome.org/show_bug.cgi?id=335822) :
+    Transcoding WMV creates tiny file
+-   [335826](http://bugzilla.gnome.org/show_bug.cgi?id=335826) : Cancel
+    and restarting rendering not possible
+-   [336332](http://bugzilla.gnome.org/show_bug.cgi?id=336332) : Can't
+    play a file in pitivi until i scrub forward
+-   [337990](http://bugzilla.gnome.org/show_bug.cgi?id=337990) :
+    \[Tracker\] Need internationalization/localization
+-   [338065](http://bugzilla.gnome.org/show_bug.cgi?id=338065) :
+    combobox next to time is useless and should go
+-   [339994](http://bugzilla.gnome.org/show_bug.cgi?id=339994) : follow
+    the gnome toolbar and menu settings
+-   [346584](http://bugzilla.gnome.org/show_bug.cgi?id=346584) : pitivi
+    should have intltool and gettext support
+-   [346585](http://bugzilla.gnome.org/show_bug.cgi?id=346585) : Don't
+    use whitespace before punctuation in pitivi messages
+-   [348232](http://bugzilla.gnome.org/show_bug.cgi?id=348232) : hang
+    when loading an ogg
+-   [350562](http://bugzilla.gnome.org/show_bug.cgi?id=350562) : Error
+    message when transcoding
+-   [352400](http://bugzilla.gnome.org/show_bug.cgi?id=352400) :
+    \[importing\] Allow importing (sub)folders
+-   [353861](http://bugzilla.gnome.org/show_bug.cgi?id=353861) : Don't
+    close filechooser dialog box immediatly
+-   [377117](http://bugzilla.gnome.org/show_bug.cgi?id=377117) : pitivi
+    won't start
+-   [378865](http://bugzilla.gnome.org/show_bug.cgi?id=378865) : Windows
+    media transcoding borks with audio
+-   [381959](http://bugzilla.gnome.org/show_bug.cgi?id=381959) :
+    Pressing Alt-F to activate file menu toggles fullscreen
+-   [381970](http://bugzilla.gnome.org/show_bug.cgi?id=381970) : Make
+    pitivi work uninstalled from SVN repositories
+-   [382249](http://bugzilla.gnome.org/show_bug.cgi?id=382249) :
+    configure on ubuntu edgy fails to find pygtk
+-   [383826](http://bugzilla.gnome.org/show_bug.cgi?id=383826) : Pitivi
+    can't scroll one 0.5 sec tic at a time
+-   [392204](http://bugzilla.gnome.org/show_bug.cgi?id=392204) : pitivi
+    crash when objectfactory doesn't have valid thumbn...
+-   [396808](http://bugzilla.gnome.org/show_bug.cgi?id=396808) : Split
+    up code from pitivi/ to subdirectories
+
+[List of bugs fixed on
+Bugzilla](http://bugzilla.gnome.org/buglist.cgi?product=pitivi&target_milestone=0.10.2&resolution=FIXED)
+
+## Requirements
+
+-   gstreamer &gt;= 0.10.8
+-   gst-python &gt;= 0.10.6
+-   gnonlin &gt;= 0.10.7
+-   pygtk &gt;= 2.8.0
+
+## Contributors
+
+-   Christophe Sauthier
+-   Edward Hervey
+-   Ernst Persson
+-   Laszlo Pandy
+-   Richard Boulton
+
+## Information and Feedback
+
+-   Information for users and developers can be found on the PiTiVi
+    website : <http://www.pitivi.org/>
+-   Comments and feedback are welcome.
+    -   Mailing-list : pitivi-pitivi lists sourceforge net
+    -   PiTiVi bug-tracker :
+        <http://bugzilla.gnome.org/browse.cgi?product=pitivi>
diff --git a/docs/releases/0.10.3.md b/docs/releases/0.10.3.md
new file mode 100644
index 0000000..15442f0
--- /dev/null
+++ b/docs/releases/0.10.3.md
@@ -0,0 +1,91 @@
+# 0.10.3 Release : Got some new t-shirts
+
+The PiTiVi team is proud to announce the fourth release of the 0.10.x
+series of the PiTiVi opensource video editor.
+
+## Features of this release
+
+-   Improvement of first time user experience.
+-   Frame-by-frame seeking
+-   UI improvements for usability
+-   New graphics
+-   i18n support, translated in 14 languages
+-   Critical bugfixes
+-   Unit tests
+-   Advanced view disabled by default
+
+## Bugs Fixed
+
+-   [353857](http://bugzilla.gnome.org/show_bug.cgi?id=353857) :
+    \[feature request\] Frame-by-frame seeking
+-   [383402](http://bugzilla.gnome.org/show_bug.cgi?id=383402) : Add
+    explanatory text in empty sourcelist and timeline
+-   [403877](http://bugzilla.gnome.org/show_bug.cgi?id=403877) : Can't
+    drag from nautilus and drop on source list
+-   [405467](http://bugzilla.gnome.org/show_bug.cgi?id=405467) :
+    \[i18n\] pitivi/ui/timeline.py isn't included in translatable files
+-   [406341](http://bugzilla.gnome.org/show_bug.cgi?id=406341) :
+    \[configure\] Don't stop build if runtime-dependencies are not
+    available
+-   [415060](http://bugzilla.gnome.org/show_bug.cgi?id=415060) : various
+    toolbar HIG fixes
+-   [416702](http://bugzilla.gnome.org/show_bug.cgi?id=416702) : Moving
+    clips in simple view is broken
+-   [420847](http://bugzilla.gnome.org/show_bug.cgi?id=420847) : do not
+    grow the timeline length if no clip was added or moved
+-   [421652](http://bugzilla.gnome.org/show_bug.cgi?id=421652) : render
+    button should be in the main toolbar
+-   [421672](http://bugzilla.gnome.org/show_bug.cgi?id=421672) : remove
+    the separator between video preview and playback controls
+-   [424228](http://bugzilla.gnome.org/show_bug.cgi?id=424228) :
+    regression, cannot add a clip to the timeline
+-   [430686](http://bugzilla.gnome.org/show_bug.cgi?id=430686) :
+    \[Simple Timeline\] Clips are not painted when switching from
+    advanced timeline
+-   [430954](http://bugzilla.gnome.org/show_bug.cgi?id=430954) : Fix
+    terminology and naming.
+-   [432204](http://bugzilla.gnome.org/show_bug.cgi?id=432204) :
+    \[Rendering dialog\] Gettext issue, and button not disabled when
+    rendering
+-   [432644](http://bugzilla.gnome.org/show_bug.cgi?id=432644) :
+    \[Advanced Timeline\] Disable alltogether until it works
+-   [432655](http://bugzilla.gnome.org/show_bug.cgi?id=432655) :
+    \[Importing Files\] Blocking and progress indication
+-   [432656](http://bugzilla.gnome.org/show_bug.cgi?id=432656) : Source
+    List explanation message gets cropped
+-   [432682](http://bugzilla.gnome.org/show_bug.cgi?id=432682) :
+    \[Simple Timeline\] Explanation message doesn't come back if we
+    don't drop
+-   [432714](http://bugzilla.gnome.org/show_bug.cgi?id=432714) :
+    \[Source List\] Remove buttons
+-   [432724](http://bugzilla.gnome.org/show_bug.cgi?id=432724) :
+    \[Simple Timeline\] Don't show explanation message too soon
+-   [441784](http://bugzilla.gnome.org/show_bug.cgi?id=441784) :
+    \[Simple Timeline\] Make video-only clips work
+
+[List of bugs fixed on
+Bugzilla](http://bugzilla.gnome.org/buglist.cgi?product=pitivi&target_milestone=0.10.3&resolution=FIXED)
+
+## Requirements
+
+-   gstreamer &gt;= 0.10.8
+-   gst-python &gt;= 0.10.6
+-   gnonlin &gt;= 0.10.7
+-   pygtk &gt;= 2.8.0
+
+## Contributors
+
+-   Edward Hervey
+-   Thibaut Girka
+-   Jeff Fortin
+-   Johan Dahlin
+-   Brandon Lewis
+
+## Information and Feedback
+
+-   Information for users and developers can be found on the PiTiVi
+    website : <http://www.pitivi.org/>
+-   Comments and feedback are welcome.
+    -   Mailing-list : pitivi-pitivi lists sourceforge net
+    -   PiTiVi bug-tracker :
+        <http://bugzilla.gnome.org/browse.cgi?product=pitivi>
diff --git a/docs/releases/0.11.0.md b/docs/releases/0.11.0.md
new file mode 100644
index 0000000..e1fbab0
--- /dev/null
+++ b/docs/releases/0.11.0.md
@@ -0,0 +1,77 @@
+# 0.11.0 Release : A hooligan's game played by gentlemen
+
+The PiTiVi team is proud to announce the first release in the unstable
+0.11 PiTiVi series.
+
+Expect a new release every 3-weeks, regardless of current code status.
+
+This release series is not intended to be production-ready, but instead
+to allow users to try more often new features that will be available in
+the next stable series.
+
+The developers will not be held accountable for any work lost, flooding
+or war caused by this unstable series.
+
+## Features of this release
+
+-   Merging of all the 2007 Summer-Of-Code branch
+-   Simple timeline improvements : trimming and moving of sources
+-   Simple timeline improvement : volume change
+-   Advanced timeline re-activated
+-   Advanced timeline features : cutting and moving of sources
+-   Plugin framework added
+-   File save/load framework added, not activated yet
+-   i18n support, translated in 16 languages
+
+## Bugs Fixed
+
+-   [335505](http://bugzilla.gnome.org/show_bug.cgi?id=335505) :
+    \[Simple Timeline\] No obviosu way to remove a clip
+-   [405462](http://bugzilla.gnome.org/show_bug.cgi?id=405462) :
+    Dragging from nautilus over sourceliste and timeline makes pitivi
+    crash
+-   [430685](http://bugzilla.gnome.org/show_bug.cgi?id=430685) :
+    \[Simple Timeline\] Shuffling clips around repeatedly hangs PiTiVi
+-   [430695](http://bugzilla.gnome.org/show_bug.cgi?id=430695) :
+    \[Advanced Timeline\] cannot move clips around
+-   [456260](http://bugzilla.gnome.org/show_bug.cgi?id=456260) : Use
+    decodebin2 for temporary clips.
+-   [456289](http://bugzilla.gnome.org/show_bug.cgi?id=456289) :
+    Progressbar assertion failed when rendering project
+-   [456297](http://bugzilla.gnome.org/show_bug.cgi?id=456297) :
+    ZeroDivisionError when rendering a project
+
+[List of bugs fixed on
+Bugzilla](http://bugzilla.gnome.org/buglist.cgi?product=pitivi&target_milestone=0.11.0&resolution=FIXED)
+
+## Requirements
+
+-   gstreamer &gt;= 0.10.14
+-   gst-python &gt;= 0.10.6
+-   gnonlin &gt;= 0.10.9
+-   pygtk &gt;= 2.8.0
+-   zope-interface
+-   python setuptools
+
+## Contributors
+
+-   Edward Hervey
+-   Brandon Lewis
+-   Luca Della Santina
+-   Thijs Vermeir
+
+## Download
+
+PiTiVi source tarballs are available on gnome FTP:
+<http://ftp.gnome.org/pub/GNOME/sources/pitivi/0.11/>
+
+See the website for distribution-specific packages.
+
+## Information and Feedback
+
+-   Information for users and developers can be found on the PiTiVi
+    website : <http://www.pitivi.org/>
+-   Comments and feedback are welcome.
+    -   Mailing-list : pitivi-pitivi lists sourceforge net
+    -   PiTiVi bug-tracker :
+        <http://bugzilla.gnome.org/browse.cgi?product=pitivi>
diff --git a/docs/releases/0.11.1.md b/docs/releases/0.11.1.md
new file mode 100644
index 0000000..856de26
--- /dev/null
+++ b/docs/releases/0.11.1.md
@@ -0,0 +1,65 @@
+# 0.11.1 Release : A gentlemen game played by hooligans
+
+The PiTiVi team is proud to announce the second release in the unstable
+0.11 PiTiVi series.
+
+Expect a new release every 3-weeks, regardless of current code status.
+
+This release series is not intended to be production-ready, but instead
+to allow users to try more often new features that will be available in
+the next stable series.
+
+The developers will not be held accountable for any work lost, flooding
+or war caused by this unstable series.
+
+## Features of this release
+
+-   More work on project save/load, use PITIVI\_FILE\_SUPPORT=1 to try
+    it.
+-   Be more flexible with encoding caps, should fix more issues when
+    encoding.
+-   Fixed issues for non icon-theme-spec compliant systems
+-   Misc fixes
+
+## Bugs Fixed
+
+-   [461913](http://bugzilla.gnome.org/show_bug.cgi?id=335505) : Error:
+    Icon not present in theme
+-   [486271](http://bugzilla.gnome.org/show_bug.cgi?id=405462) : crash
+    in Pitivi Video Editor: I close the PiTiVI windo...
+-   [487455](http://bugzilla.gnome.org/show_bug.cgi?id=430685) :
+    Dragging multichannel .mov file onto timeline produce err...
+
+[List of bugs fixed on
+Bugzilla](http://bugzilla.gnome.org/buglist.cgi?product=pitivi&target_milestone=0.11.1&resolution=FIXED)
+
+## Requirements
+
+-   gstreamer &gt;= 0.10.14
+-   gst-python &gt;= 0.10.6
+-   gnonlin &gt;= 0.10.9
+-   pygtk &gt;= 2.8.0
+-   zope-interface
+-   python setuptools
+
+## Contributors
+
+-   Edward Hervey
+-   Brandon Lewis
+-   Tommy
+
+## Download
+
+PiTiVi source tarballs are available on gnome FTP:
+<http://ftp.gnome.org/pub/GNOME/sources/pitivi/0.11/>
+
+See the website for distribution-specific packages.
+
+## Information and Feedback
+
+-   Information for users and developers can be found on the PiTiVi
+    website : <http://www.pitivi.org/>
+-   Comments and feedback are welcome.
+    -   Mailing-list : pitivi-pitivi lists sourceforge net
+    -   PiTiVi bug-tracker :
+        <http://bugzilla.gnome.org/browse.cgi?product=pitivi>
diff --git a/docs/releases/0.11.2.md b/docs/releases/0.11.2.md
new file mode 100644
index 0000000..555ce4e
--- /dev/null
+++ b/docs/releases/0.11.2.md
@@ -0,0 +1,92 @@
+# 0.11.2 Release : Milanesa de Lomo
+
+The PiTiVi team is proud to announce the third release in the unstable
+0.11 PiTiVi series.
+
+This release series is not intended to be production-ready, but instead
+to allow users to try more often new features that will be available in
+the next stable series.
+
+The developers will not be held accountable for any work lost, flooding
+or war caused by this unstable series.
+
+## Features of this release
+
+-   New advanced timeline interface by Brandon Lewis (SoC)
+-   Capture interface for webcams and network sources by Sarath Lakshman
+    (SoC).
+-   Simple Timeline is gone.
+-   Project save/load now activated by default
+-   Cutting/Trimming/Removing features added to advanced timeline.
+-   Misc fixes and improvements
+
+## Bugs Fixed
+
+-   [552777](http://bugzilla.gnome.org/show_bug.cgi?id=552777) :
+    \[ruler.py\] BadAlloc error with big sources
+-   [353870](http://bugzilla.gnome.org/show_bug.cgi?id=353870) :
+    Save/Load project from/to file
+-   [332473](http://bugzilla.gnome.org/show_bug.cgi?id=332473) : Capture
+    from given gstreamer input source
+-   [334631](http://bugzilla.gnome.org/show_bug.cgi?id=334631) : xvsink
+    crash with python in pitivi
+-   [339895](http://bugzilla.gnome.org/show_bug.cgi?id=339895) :
+    \[Advanced Timeline\] Zooming in too much causes X error
+-   [432678](http://bugzilla.gnome.org/show_bug.cgi?id=432678) :
+    \[discoverer\] Files that report a duration of 0s is BUGGY !!!
+-   [458944](http://bugzilla.gnome.org/show_bug.cgi?id=458944) :
+    Cancelling while rendering does not work
+-   [461738](http://bugzilla.gnome.org/show_bug.cgi?id=461738) :
+    \[Advanced Timeline\] Scrollbar always comes back to beginning
+-   [498071](http://bugzilla.gnome.org/show_bug.cgi?id=498071) :
+    \[Simple Timeline\] Drag and Drop puts clips in the wrong slot
+-   [498904](http://bugzilla.gnome.org/show_bug.cgi?id=498904) :
+    incorrect indentation: some tabs are mixed with spaces in...
+-   [501028](http://bugzilla.gnome.org/show_bug.cgi?id=501028) : Missing
+    files from POTFILES.in
+-   [501068](http://bugzilla.gnome.org/show_bug.cgi?id=501068) : Uses
+    make instead of \$(MAKE)
+-   [518301](http://bugzilla.gnome.org/show_bug.cgi?id=518301) : Pitivi
+    won't start under KDE: " Icon 'misc' not present in...
+-   [547095](http://bugzilla.gnome.org/show_bug.cgi?id=547095) :
+    \[Export Settings\] Filter unusable muxers
+-   [554544](http://bugzilla.gnome.org/show_bug.cgi?id=554544) :
+    net\_capture.glade not installed
+-   [554602](http://bugzilla.gnome.org/show_bug.cgi?id=554602) : seeking
+    is not working correctly ...
+
+[List of bugs fixed on
+Bugzilla](http://bugzilla.gnome.org/buglist.cgi?product=pitivi&target_milestone=0.11.2&resolution=FIXED)
+
+## Requirements
+
+-   gstreamer &gt;= 0.10.14
+-   gst-python &gt;= 0.10.6
+-   gnonlin &gt;= 0.10.9
+-   pygtk &gt;= 2.8.0
+-   zope-interface
+-   python setuptools
+-   pygoocanvas (http://live.gnome.org/GooCanvas)
+-   dbus and HAL for capture support
+
+## Contributors
+
+-   Edward Hervey
+-   Sarath Lakshman
+-   Brandon Lewis
+
+## Download
+
+PiTiVi source tarballs are available on gnome FTP:
+<http://ftp.gnome.org/pub/GNOME/sources/pitivi/0.11/>
+
+See the website for distribution-specific packages.
+
+## Information and Feedback
+
+-   Information for users and developers can be found on the PiTiVi
+    website : <http://www.pitivi.org/>
+-   Comments and feedback are welcome.
+    -   Mailing-list : pitivi-pitivi lists sourceforge net
+    -   PiTiVi bug-tracker :
+        <http://bugzilla.gnome.org/browse.cgi?product=pitivi>
diff --git a/docs/releases/0.11.3.md b/docs/releases/0.11.3.md
new file mode 100644
index 0000000..2ae261f
--- /dev/null
+++ b/docs/releases/0.11.3.md
@@ -0,0 +1,78 @@
+# 0.11.3 Release : Paella Cubana
+
+The PiTiVi team is proud to announce the fourth release in the unstable
+0.11 PiTiVi series.
+
+This release series is not intended to be production-ready, but instead
+to allow users to try more often new features that will be available in
+the next stable series.
+
+The developers will not be held accountable for any work lost, flooding
+or war caused by this unstable series.
+
+## Features of this release
+
+-   Remove usage of gobject as much as possible from non-ui components
+-   Make smarter choices about audio/video sinks
+-   Fix issues with seeking in ruler/viewer
+-   general pylint cleanup
+-   Picture support in the timeline
+-   Improve viewer for proper Display Aspect Ratio
+-   Timeline : Unlink-ing sources is now possible
+-   Fix some issues when using very long sources
+-   SourceList now detachable from main window
+-   Now requires GNonLin 0.10.10 and python &gt;= 2.5
+
+## Bugs Fixed
+
+-   [535374](http://bugzilla.gnome.org/show_bug.cgi?id=535374) : missing
+    pitivi-sound.png
+-   [557998](http://bugzilla.gnome.org/show_bug.cgi?id=557998) : Runtime
+    checks for goocanvas done too late
+-   [560150](http://bugzilla.gnome.org/show_bug.cgi?id=560150) : Error
+    when clicking on nothing
+-   [560330](http://bugzilla.gnome.org/show_bug.cgi?id=560330) : Pitivi
+    dont import any video (python trouble)
+-   [560844](http://bugzilla.gnome.org/show_bug.cgi?id=560844) :
+    timecode is incorrectly displayed
+-   [560850](http://bugzilla.gnome.org/show_bug.cgi?id=560850) : font
+    homogeneity
+-   [563444](http://bugzilla.gnome.org/show_bug.cgi?id=563444) : Render
+    dialog's filename request dialog has buttons reversed
+
+[List of bugs fixed on
+Bugzilla](http://bugzilla.gnome.org/buglist.cgi?product=pitivi&target_milestone=0.11.3&resolution=FIXED)
+
+## Requirements
+
+-   gstreamer &gt;= 0.10.14
+-   gst-python &gt;= 0.10.6
+-   gnonlin &gt;= 0.10.10
+-   pygtk &gt;= 2.8.0
+-   Python &gt;= 2.5
+-   zope-interface
+-   python setuptools
+-   pygoocanvas (http://live.gnome.org/GooCanvas)
+-   dbus and HAL for capture support
+
+## Contributors
+
+-   Edward Hervey
+-   Brandon Lewis
+-   Alessandro Decina
+
+## Download
+
+PiTiVi source tarballs are available on gnome FTP:
+<http://ftp.gnome.org/pub/GNOME/sources/pitivi/0.11/>
+
+See the website for distribution-specific packages.
+
+## Information and Feedback
+
+-   Information for users and developers can be found on the PiTiVi
+    website : <http://www.pitivi.org/>
+-   Comments and feedback are welcome.
+    -   Mailing-list : pitivi-pitivi lists sourceforge net
+    -   PiTiVi bug-tracker :
+        <http://bugzilla.gnome.org/browse.cgi?product=pitivi>
diff --git a/docs/releases/0.13.1.md b/docs/releases/0.13.1.md
new file mode 100644
index 0000000..ef758ad
--- /dev/null
+++ b/docs/releases/0.13.1.md
@@ -0,0 +1,274 @@
+# 0.13.1 Release : L'Aquila Immota Manet : The eagle remains unmoved
+
+The PiTiVi team is proud to announce the first release in the unstable
+0.13 PiTiVi series.
+
+This release is in memory of those who have lost their lives, friends,
+houses in the April 6th 2009 earthquake in l'Aquila, Italy.
+
+Due to its dependency on GStreamer, The PiTiVi team strongly recommends
+users have all official latest gstreamer libraries and plugins installed
+for the best user experience.
+
+## Features of this release
+
+-   core rewrite
+-   multi-layered timeline
+-   trimming features
+-   audio waveforms and video thumbnails in timeline
+-   picture support
+-   New project file format support
+
+## Requirements
+
+-   gstreamer &gt;= 0.10.23
+-   gst-python &gt;= 0.10.15
+-   gnonlin &gt;= 0.10.11
+-   pygtk &gt;= 2.12.0
+-   Python &gt;= 2.5
+-   zope-interface
+-   python setuptools
+-   pygoocanvas (http://live.gnome.org/GooCanvas)
+-   dbus and HAL for capture support
+
+## Contributors
+
+Ranked by commits:
+
+`  327  Edward Hervey`\
+`  203  Alessandro Decina`\
+`  164  Brandon Lewis`\
+`    6  Claude Paroz`\
+`    6  Mario Blättermann`\
+`    3  Sandeep Shedmake`\
+`    2  Ankitkumar Patel`\
+`    2  Chao-Hsiung Liao`\
+`    2  Daniel Nylander`\
+`    2  Jean-François Fortin Tam`\
+`    1  Antón Méixome`\
+`    1  Bruce Cowan`\
+`    1  Chris Ball`\
+`    1  Dmitriy Kodanev`\
+`    1  Gianvito Cavasoli`\
+`    1  Jorge Gonzalez`\
+`    1  Nathan Samson`\
+`    1  Simos Xenitellis`\
+`    1  Stéphane Maniaci`\
+`    1  Timo Jyrinki`
+
+## Download
+
+PiTiVi source tarballs are available on gnome FTP:
+<http://ftp.gnome.org/pub/GNOME/sources/pitivi/0.13/>
+
+Packages for Ubuntu 9.04 (Jaunty Jackalope) are available on [this PPA
+repository](https://launchpad.net/~gstreamer-developers/+archive/ppa).
+
+## Information and Feedback
+
+-   Information for users and developers can be found on the PiTiVi
+    website : <http://www.pitivi.org/>
+-   Comments and feedback are welcome.
+    -   Mailing-list : pitivi-pitivi lists sourceforge net
+    -   PiTiVi bug-tracker :
+        <http://bugzilla.gnome.org/browse.cgi?product=pitivi>
+
+## Bugs Fixed
+
+-   [572099](http://bugzilla.gnome.org/show_bug.cgi?id=572099) :
+    \[Viewer\] Doesn't take project settings into account
+-   [430694](http://bugzilla.gnome.org/show_bug.cgi?id=430694) : Cannot
+    play a timeline with only audio or only video
+-   [434614](http://bugzilla.gnome.org/show_bug.cgi?id=434614) :
+    \[Timeline\] don't display scrollbar if timeline is empty
+-   [456147](http://bugzilla.gnome.org/show_bug.cgi?id=456147) : Image
+    support
+-   [541038](http://bugzilla.gnome.org/show_bug.cgi?id=541038) : Add
+    missing-plugins support
+-   [569732](http://bugzilla.gnome.org/show_bug.cgi?id=569732) : QOS is
+    deactivated in video sinks, causing slow playback
+-   [573772](http://bugzilla.gnome.org/show_bug.cgi?id=573772) : MP3
+    file import fails
+-   [573884](http://bugzilla.gnome.org/show_bug.cgi?id=573884) : Seeking
+    is different from Viewer or Ruler
+-   [573887](http://bugzilla.gnome.org/show_bug.cgi?id=573887) : Source
+    list: Re-enable playback from the sourcelist
+-   [573890](http://bugzilla.gnome.org/show_bug.cgi?id=573890) : Viewer:
+    Don't forget to reset the limits
+-   [573892](http://bugzilla.gnome.org/show_bug.cgi?id=573892) :
+    Timeline: Don't forget to reset the scroll limits
+-   [573894](http://bugzilla.gnome.org/show_bug.cgi?id=573894) : Viewer:
+    Ugly when nothing is displayed
+-   [573897](http://bugzilla.gnome.org/show_bug.cgi?id=573897) :
+    Single-stream encoding doesn't work
+-   [573898](http://bugzilla.gnome.org/show_bug.cgi?id=573898) :
+    EncodingDialog: Closing the dialog box doesn't properly s...
+-   [573899](http://bugzilla.gnome.org/show_bug.cgi?id=573899) : Can't
+    use the timeline/pipeline after rendering
+-   [574595](http://bugzilla.gnome.org/show_bug.cgi?id=574595) :
+    sourcelist: Exception raised in beautify\_stream
+-   [574655](http://bugzilla.gnome.org/show_bug.cgi?id=574655) :
+    command\_line branch
+-   [575022](http://bugzilla.gnome.org/show_bug.cgi?id=575022) :
+    problems with audio-only files
+-   [575123](http://bugzilla.gnome.org/show_bug.cgi?id=575123) :
+    Problems pausing timeline
+-   [576568](http://bugzilla.gnome.org/show_bug.cgi?id=576568) : more
+    varied list of default project presets
+-   [576577](http://bugzilla.gnome.org/show_bug.cgi?id=576577) :
+    removing clips does not work with multiple tracks
+-   [577106](http://bugzilla.gnome.org/show_bug.cgi?id=577106) : DV file
+    causes hang when seeked
+-   [578665](http://bugzilla.gnome.org/show_bug.cgi?id=578665) :
+    \[LGM2009\] ability to mass-unlink
+-   [580191](http://bugzilla.gnome.org/show_bug.cgi?id=580191) :
+    \[usability\] mouse cursor not reset when exiting clip hand...
+-   [580192](http://bugzilla.gnome.org/show_bug.cgi?id=580192) :
+    removing a clip from the project doesn't work
+-   [580657](http://bugzilla.gnome.org/show_bug.cgi?id=580657) : stream
+    not linked error on project load in a jaunty virtu...
+-   [580915](http://bugzilla.gnome.org/show_bug.cgi?id=580915) : PiTiVi
+    segfaults on 64-bit ubuntu 9.04
+-   [581042](http://bugzilla.gnome.org/show_bug.cgi?id=581042) : speex
+    files cannot be imported
+-   [583432](http://bugzilla.gnome.org/show_bug.cgi?id=583432) :
+    importer hangs when importing a clip with subtitles
+-   [335547](http://bugzilla.gnome.org/show_bug.cgi?id=335547) :
+    \[configuration\] Use XDG (freedesktop) locations
+-   [336348](http://bugzilla.gnome.org/show_bug.cgi?id=336348) :
+    \[Advanced Timeline\] Zoom should be possible with scroll w...
+-   [503842](http://bugzilla.gnome.org/show_bug.cgi?id=503842) : Audio
+    waveform display when in complex timeline
+-   [557575](http://bugzilla.gnome.org/show_bug.cgi?id=557575) : Doesn't
+    load relative filenames
+-   [563351](http://bugzilla.gnome.org/show_bug.cgi?id=563351) :
+    translation issues
+-   [563443](http://bugzilla.gnome.org/show_bug.cgi?id=563443) : Render
+    dialog action button should say 'Render', not 'Rec...
+-   [569896](http://bugzilla.gnome.org/show_bug.cgi?id=569896) : special
+    entities in file paths are not converted
+-   [569941](http://bugzilla.gnome.org/show_bug.cgi?id=569941) : padding
+    around thumbnail items
+-   [569975](http://bugzilla.gnome.org/show_bug.cgi?id=569975) : the "
+    thumbnailing in progress " icon is not pretty
+-   [569981](http://bugzilla.gnome.org/show_bug.cgi?id=569981) : kill
+    fuzzy icons
+-   [569988](http://bugzilla.gnome.org/show_bug.cgi?id=569988) :
+    \[ui/gstwidget\] Can't modify element properties.
+-   [570116](http://bugzilla.gnome.org/show_bug.cgi?id=570116) :
+    dragging a clip onto the timeline should take into accoun...
+-   [572098](http://bugzilla.gnome.org/show_bug.cgi?id=572098) :
+    \[LGM2009\] dragging a clip should move all selected clips
+-   [572328](http://bugzilla.gnome.org/show_bug.cgi?id=572328) : do not
+    pre-emptively generate thumbnails and waveforms wh...
+-   [396804](http://bugzilla.gnome.org/show_bug.cgi?id=396804) : Write
+    unit tests
+-   [403880](http://bugzilla.gnome.org/show_bug.cgi?id=403880) :
+    Importing high resolution content is slow
+-   [458943](http://bugzilla.gnome.org/show_bug.cgi?id=458943) :
+    Rendering a project twice don't work
+-   [554603](http://bugzilla.gnome.org/show_bug.cgi?id=554603) : not
+    exposing video-widget while in paused state
+-   [559463](http://bugzilla.gnome.org/show_bug.cgi?id=559463) : Video
+    freeze on inter-clip border
+-   [560148](http://bugzilla.gnome.org/show_bug.cgi?id=560148) : Handle
+    audio-only or video-only files
+-   [563458](http://bugzilla.gnome.org/show_bug.cgi?id=563458) : Pitivi
+    a bit buggy in playing back
+-   [569974](http://bugzilla.gnome.org/show_bug.cgi?id=569974) : audio
+    and video tracks order is reversed
+-   [573775](http://bugzilla.gnome.org/show_bug.cgi?id=573775) : FLAC
+    files cannot be seeked
+-   [573997](http://bugzilla.gnome.org/show_bug.cgi?id=573997) : no svg
+    sources for the icons
+-   [575970](http://bugzilla.gnome.org/show_bug.cgi?id=575970) : first
+    zoom level stepping is too drastic
+-   [575982](http://bugzilla.gnome.org/show_bug.cgi?id=575982) : pitivi
+    has syntax errors when using Python 2.6
+-   [576212](http://bugzilla.gnome.org/show_bug.cgi?id=576212) : full
+    screen checkbox isn't signaled when using F11 for to...
+-   [577759](http://bugzilla.gnome.org/show_bug.cgi?id=577759) : UI
+    support for file load and save (formatter)
+-   [578676](http://bugzilla.gnome.org/show_bug.cgi?id=578676) :
+    \[LGM2009\] render codec settings are ignored
+-   [579288](http://bugzilla.gnome.org/show_bug.cgi?id=579288) :
+    dragging audio clips fails
+-   [579321](http://bugzilla.gnome.org/show_bug.cgi?id=579321) : saving
+    again does not work
+-   [579324](http://bugzilla.gnome.org/show_bug.cgi?id=579324) : loading
+    a saved project does not allow manipulating the t...
+-   [579534](http://bugzilla.gnome.org/show_bug.cgi?id=579534) : source
+    list sorting is messed up on project load
+-   [579537](http://bugzilla.gnome.org/show_bug.cgi?id=579537) : cannot
+    insert new clips in the timeline after loading a s...
+-   [580172](http://bugzilla.gnome.org/show_bug.cgi?id=580172) :
+    dragging a clip's in/end point should snap to other clips
+-   [580671](http://bugzilla.gnome.org/show_bug.cgi?id=580671) :
+    \[LGM2009\] subtle gradients for clips
+-   [580673](http://bugzilla.gnome.org/show_bug.cgi?id=580673) :
+    \[LGM2009\] ability to disable/enable thumbnailing and wave...
+-   [580884](http://bugzilla.gnome.org/show_bug.cgi?id=580884) : clips
+    do not snap by the ends
+-   [581112](http://bugzilla.gnome.org/show_bug.cgi?id=581112) : cannot
+    separate audio from video (broken unlink)
+-   [583041](http://bugzilla.gnome.org/show_bug.cgi?id=583041) :
+    GStreamer error pops-up
+-   [583147](http://bugzilla.gnome.org/show_bug.cgi?id=583147) :
+    unmatched encoder settings prevent rendering
+-   [583310](http://bugzilla.gnome.org/show_bug.cgi?id=583310) :
+    Forward/Rewind buttons not implemented
+-   [583472](http://bugzilla.gnome.org/show_bug.cgi?id=583472) :
+    1024x768 is XGA, not WXGA
+-   [583487](http://bugzilla.gnome.org/show_bug.cgi?id=583487) :
+    automatic missing codec search
+-   [575955](http://bugzilla.gnome.org/show_bug.cgi?id=575955) :
+    human-readable duration times in the media library
+-   [575957](http://bugzilla.gnome.org/show_bug.cgi?id=575957) : some
+    clips have reverse metadata ordering in the media li...
+-   [576872](http://bugzilla.gnome.org/show_bug.cgi?id=576872) : crash
+    when importing a clip with an esoteric file name
+-   [579410](http://bugzilla.gnome.org/show_bug.cgi?id=579410) :
+    formatter doesn't like unicode
+-   [579541](http://bugzilla.gnome.org/show_bug.cgi?id=579541) :
+    \[LGM2009\] seeking images doesn't work
+-   [580646](http://bugzilla.gnome.org/show_bug.cgi?id=580646) :
+    trimming endpoint edge snapping overlaps the next clip
+-   [580962](http://bugzilla.gnome.org/show_bug.cgi?id=580962) :
+    restarting playback requires 2 activations after scrubbing
+-   [580972](http://bugzilla.gnome.org/show_bug.cgi?id=580972) : refuses
+    to load a project file with unicode path
+-   [558823](http://bugzilla.gnome.org/show_bug.cgi?id=558823) : " save
+    as " button is useless
+-   [569834](http://bugzilla.gnome.org/show_bug.cgi?id=569834) : render
+    settings are constantly reset
+-   [572327](http://bugzilla.gnome.org/show_bug.cgi?id=572327) :
+    dragging multiple clips to the timeline should be possible
+-   [572346](http://bugzilla.gnome.org/show_bug.cgi?id=572346) : clips
+    can be duplicated in the media library
+-   [573531](http://bugzilla.gnome.org/show_bug.cgi?id=573531) : pitivi
+    does not start
+-   [576326](http://bugzilla.gnome.org/show_bug.cgi?id=576326) : better
+    timeline mouse scroll wheel usage
+-   [579238](http://bugzilla.gnome.org/show_bug.cgi?id=579238) :
+    \[LGM2009\] slow / laggy dragging : do not update the previ...
+-   [579319](http://bugzilla.gnome.org/show_bug.cgi?id=579319) : global
+    keyboard shortcuts should apply only when the time...
+-   [579638](http://bugzilla.gnome.org/show_bug.cgi?id=579638) :
+    remember the last used folder for rendering
+-   [579666](http://bugzilla.gnome.org/show_bug.cgi?id=579666) :
+    \[LGM2009\] saved timeline renders incorrectly
+-   [580654](http://bugzilla.gnome.org/show_bug.cgi?id=580654) : don't
+    die on missing project media, allow locating it
+-   [582419](http://bugzilla.gnome.org/show_bug.cgi?id=582419) : images
+    don't seek and cause desynch when rendering
+-   [583242](http://bugzilla.gnome.org/show_bug.cgi?id=583242) : PiTiVi
+    GUI freezes
+-   [583514](http://bugzilla.gnome.org/show_bug.cgi?id=583514) :
+    clickable URL in the About dialog
+-   [583592](http://bugzilla.gnome.org/show_bug.cgi?id=583592) : strange
+    error importing filenames with markups
+-   [583595](http://bugzilla.gnome.org/show_bug.cgi?id=583595) : cannot
+    load a saved project with multiple streams
+
+[List of bugs fixed on
+Bugzilla](http://bugzilla.gnome.org/buglist.cgi?product=pitivi&target_milestone=0.13.1)
diff --git a/docs/releases/0.13.2.md b/docs/releases/0.13.2.md
new file mode 100644
index 0000000..7b2bbf8
--- /dev/null
+++ b/docs/releases/0.13.2.md
@@ -0,0 +1,205 @@
+# 0.13.2 Release : Jailbreak (out of Deadlock City)
+
+The PiTiVi team is proud to announce the second release in the unstable
+0.13 PiTiVi series.
+
+Due to its dependency on GStreamer, The PiTiVi team strongly recommends
+users have all official latest gstreamer libraries and plugins installed
+for the best user experience.
+
+## Features of this release
+
+-   Undo/Redo support
+-   Audio mixing
+-   Ripple/Roll edit
+-   misc fixes everywhere
+
+## Requirements
+
+-   gstreamer &gt;= 0.10.24
+-   gst-python &gt;= 0.10.16
+-   gnonlin &gt;= 0.10.12
+-   pygtk &gt;= 2.14.0
+-   Python &gt;= 2.5
+-   zope-interface
+-   python setuptools
+-   pygoocanvas (http://live.gnome.org/GooCanvas)
+-   dbus and HAL for capture support
+
+## Contributors
+
+Ranked by commits:
+
+`  148  Alessandro Decina`\
+`  102  Brandon Lewis`\
+`   61  Edward Hervey`\
+`    7  Claude Paroz`\
+`    5  Mario Blättermann`\
+`    4  Per Kongstad`\
+`    3  António Lima`\
+`    2  Daniel Nylander`\
+`    2  Jan Gerber`\
+`    1  Bruce Cowan`\
+`    1  Gianvito Cavasoli`\
+`    1  Gil Forcada`\
+`    1  Jesse Aviles`\
+`    1  Jesse Avilés`
+
+## Download
+
+PiTiVi source tarballs are available on gnome FTP:
+<http://ftp.gnome.org/pub/GNOME/sources/pitivi/0.13/>
+
+Packages for Ubuntu 9.04 (Jaunty Jackalope) are available on [this PPA
+repository](https://launchpad.net/~gstreamer-developers/+archive/ppa).
+
+## Information and Feedback
+
+-   Information for users and developers can be found on the PiTiVi
+    website : <http://www.pitivi.org/>
+-   Comments and feedback are welcome.
+    -   Mailing-list : pitivi-pitivi lists sourceforge net
+    -   PiTiVi bug-tracker :
+        <http://bugzilla.gnome.org/browse.cgi?product=pitivi>
+
+## Bugs Fixed
+
+-   [584023](http://bugzilla.gnome.org/show_bug.cgi?id=584023) : Import
+    Folder of Clips menu item not working
+-   [589814](http://bugzilla.gnome.org/show_bug.cgi?id=589814) :
+    \[keyframe\] should have percentage labels
+-   [566486](http://bugzilla.gnome.org/show_bug.cgi?id=566486) :
+    \[Segmentation fault\] (py)goocanvas 0.13 and python 2.6
+-   [576276](http://bugzilla.gnome.org/show_bug.cgi?id=576276) :
+    contextual toolbar buttons should be insensitive when not...
+-   [579536](http://bugzilla.gnome.org/show_bug.cgi?id=579536) : source
+    list thumbnails are not shown when loading a project
+-   [583637](http://bugzilla.gnome.org/show_bug.cgi?id=583637) : Change
+    command line interface to be more compatible with ...
+-   [584049](http://bugzilla.gnome.org/show_bug.cgi?id=584049) : PiTiVi
+    doesn't keep the " Nothing yet " status on render wi...
+-   [584093](http://bugzilla.gnome.org/show_bug.cgi?id=584093) :
+    selecting overlapping clips selected clips moves to top
+-   [584899](http://bugzilla.gnome.org/show_bug.cgi?id=584899) :
+    \[Formatter\] Fix .pls/.m3u Formatters
+-   [585181](http://bugzilla.gnome.org/show_bug.cgi?id=585181) : no
+    thumbnails for existing sources after loading .xptv
+-   [586786](http://bugzilla.gnome.org/show_bug.cgi?id=586786) : Trying
+    to dispose element pngenc0, but it is not in the N...
+-   [587332](http://bugzilla.gnome.org/show_bug.cgi?id=587332) : undo
+    forgets about volume keyframes
+-   [587333](http://bugzilla.gnome.org/show_bug.cgi?id=587333) : no way
+    to remove volume node/keyframe
+-   [587334](http://bugzilla.gnome.org/show_bug.cgi?id=587334) : volume
+    operations can not be undone
+-   [587371](http://bugzilla.gnome.org/show_bug.cgi?id=587371) : crash
+    on start if \~/.local does not exist
+-   [587377](http://bugzilla.gnome.org/show_bug.cgi?id=587377) : Command
+    line -i flag broken
+-   [587411](http://bugzilla.gnome.org/show_bug.cgi?id=587411) :
+    keyframes broken with trimmed clips
+-   [587945](http://bugzilla.gnome.org/show_bug.cgi?id=587945) :
+    editing\_context and advanced\_editing\_modes branches
+-   [588258](http://bugzilla.gnome.org/show_bug.cgi?id=588258) : undo
+    and redo should be in the main toolbar
+-   [588415](http://bugzilla.gnome.org/show_bug.cgi?id=588415) :
+    Traceback after dropping new clips onto the timeline
+-   [589694](http://bugzilla.gnome.org/show_bug.cgi?id=589694) : trimmed
+    clips can be extended under/over clips next to them
+-   [589695](http://bugzilla.gnome.org/show_bug.cgi?id=589695) : adding
+    several clips with mouse, they overlap if moving t...
+-   [589725](http://bugzilla.gnome.org/show_bug.cgi?id=589725) : don't
+    block the user from overlapping clips
+-   [589784](http://bugzilla.gnome.org/show_bug.cgi?id=589784) : default
+    pane positions are fail sauce
+-   [589803](http://bugzilla.gnome.org/show_bug.cgi?id=589803) :
+    Problems while moving a clip to a different layer
+-   [589807](http://bugzilla.gnome.org/show_bug.cgi?id=589807) :
+    Double-clicking a clip in source-list has no effect
+-   [378597](http://bugzilla.gnome.org/show_bug.cgi?id=378597) :
+    Multiple-resolution logo
+-   [518689](http://bugzilla.gnome.org/show_bug.cgi?id=518689) : "
+    Internal data stream error " with OGG video
+-   [568749](http://bugzilla.gnome.org/show_bug.cgi?id=568749) : Choppy
+    Audio with some .avi files
+-   [575945](http://bugzilla.gnome.org/show_bug.cgi?id=575945) : mix
+    concurrent audio clips on different layers
+-   [575952](http://bugzilla.gnome.org/show_bug.cgi?id=575952) : better
+    spacing around thumbnail frames in the timeline
+-   [576575](http://bugzilla.gnome.org/show_bug.cgi?id=576575) : clips
+    can only be added to first layer
+-   [577451](http://bugzilla.gnome.org/show_bug.cgi?id=577451) : Text
+    doesn't fit into the box
+-   [583226](http://bugzilla.gnome.org/show_bug.cgi?id=583226) : can't
+    render, clowns will eat me
+-   [583241](http://bugzilla.gnome.org/show_bug.cgi?id=583241) : better
+    default filechooser size for the " missing media " d...
+-   [583474](http://bugzilla.gnome.org/show_bug.cgi?id=583474) : Use
+    named placeholders when string contains more than one
+-   [583861](http://bugzilla.gnome.org/show_bug.cgi?id=583861) :
+    Translation of /pitivi/utils.py:234
+-   [584056](http://bugzilla.gnome.org/show_bug.cgi?id=584056) : Minor
+    string fixes
+-   [584084](http://bugzilla.gnome.org/show_bug.cgi?id=584084) : File
+    filter menu not translated in open dialog
+-   [584086](http://bugzilla.gnome.org/show_bug.cgi?id=584086) : Button
+    labels not translatable
+-   [584123](http://bugzilla.gnome.org/show_bug.cgi?id=584123) : Some
+    strings in encoding dialog are not translatable
+-   [584128](http://bugzilla.gnome.org/show_bug.cgi?id=584128) : Most
+    labels in Preferences are untranslatable
+-   [584415](http://bugzilla.gnome.org/show_bug.cgi?id=584415) : Cairo -
+    &gt; cairo
+-   [584416](http://bugzilla.gnome.org/show_bug.cgi?id=584416) :
+    Ambigous string
+-   [586184](http://bugzilla.gnome.org/show_bug.cgi?id=586184) :
+    formatter cant find all streams on project load
+-   [587327](http://bugzilla.gnome.org/show_bug.cgi?id=587327) : write
+    all temp files into one folder in /tmp
+-   [587378](http://bugzilla.gnome.org/show_bug.cgi?id=587378) : Ctrl +
+    Click broken
+-   [589513](http://bugzilla.gnome.org/show_bug.cgi?id=589513) :
+    timeline requests too much space when loading files
+-   [589628](http://bugzilla.gnome.org/show_bug.cgi?id=589628) : Media
+    clip thumbnails not loaded if you re-open a project
+-   [589689](http://bugzilla.gnome.org/show_bug.cgi?id=589689) :
+    keyframe curves go through the roof
+-   [589715](http://bugzilla.gnome.org/show_bug.cgi?id=589715) :
+    implement ripple trims
+-   [589799](http://bugzilla.gnome.org/show_bug.cgi?id=589799) : Sound
+    cuts out replaying mp4
+-   [589820](http://bugzilla.gnome.org/show_bug.cgi?id=589820) :
+    \[keyframes\] audio volume curves don't allow amplifying th...
+-   [590195](http://bugzilla.gnome.org/show_bug.cgi?id=590195) :
+    0.13.1.1 - &gt; 0.13.1.2 needs newer python-gtk
+-   [591149](http://bugzilla.gnome.org/show_bug.cgi?id=591149) :
+    regression in the project settings dialog
+-   [579323](http://bugzilla.gnome.org/show_bug.cgi?id=579323) : save
+    button should be insensitive when no changes have be...
+-   [579531](http://bugzilla.gnome.org/show_bug.cgi?id=579531) : warn
+    about unsaved changes on close
+-   [580680](http://bugzilla.gnome.org/show_bug.cgi?id=580680) : toolbar
+    settings not applied on startup
+-   [585653](http://bugzilla.gnome.org/show_bug.cgi?id=585653) :
+    regression: simple save has been replaced by save as
+-   [585794](http://bugzilla.gnome.org/show_bug.cgi?id=585794) :
+    regression: render button/menu item is insensitive
+-   [582327](http://bugzilla.gnome.org/show_bug.cgi?id=582327) :
+    playhead resets the timeline scroll position on clicking ...
+-   [575364](http://bugzilla.gnome.org/show_bug.cgi?id=575364) :
+    \[LGM2009\] first 4 seconds of OGV (theora) clips cannot be...
+-   [579237](http://bugzilla.gnome.org/show_bug.cgi?id=579237) : search
+    as you type doesn't work in the media library
+-   [585926](http://bugzilla.gnome.org/show_bug.cgi?id=585926) :
+    importing a DV-in-avi file fails
+-   [587008](http://bugzilla.gnome.org/show_bug.cgi?id=587008) :
+    keyframes not saved
+-   [589812](http://bugzilla.gnome.org/show_bug.cgi?id=589812) : the
+    mouse cursor should change when over a curve/keyframe
+-   [589813](http://bugzilla.gnome.org/show_bug.cgi?id=589813) :
+    \[keyframe\] dragging a curve segment between two keyframes...
+-   [589817](http://bugzilla.gnome.org/show_bug.cgi?id=589817) : cancel
+    accidental movement when double-clicking on a curve
+
+[List of bugs fixed on
+Bugzilla](http://bugzilla.gnome.org/buglist.cgi?product=pitivi&target_milestone=0.13.2)
diff --git a/docs/releases/0.13.3.md b/docs/releases/0.13.3.md
new file mode 100644
index 0000000..c10907b
--- /dev/null
+++ b/docs/releases/0.13.3.md
@@ -0,0 +1,112 @@
+# 0.13.3 Release : ... we shall never (sur)render
+
+The PiTiVi team is proud to announce the second release in the unstable
+0.13 PiTiVi series.
+
+Due to its dependency on GStreamer, The PiTiVi team strongly recommends
+users have all official latest gstreamer libraries and plugins installed
+for the best user experience.
+
+Title is from a quote by Winston Churchill “We shall defend our island,
+whatever the cost may be, we shall fight on the beaches, we shall fight
+on the landing grounds, we shall fight in the fields and in the streets,
+we shall fight in the hills; we shall never surrender.”
+
+## Features of this release
+
+-   Fix rendering failures
+-   UI beautifications
+-   Switch to themeable ruler
+-   Speed optimisations
+-   Show the project name in the window title
+
+## Requirements
+
+-   gstreamer &gt;= 0.10.24
+-   gst-python &gt;= 0.10.16
+-   gnonlin &gt;= 0.10.13
+-   pygtk &gt;= 2.14.0
+-   Python &gt;= 2.5
+-   zope-interface
+-   python setuptools
+-   pygoocanvas (http://live.gnome.org/GooCanvas)
+-   dbus and HAL for capture support
+
+## Contributors
+
+Ranked by commits:
+
+`   39  Alessandro Decina`\
+`   32  Brandon Lewis`\
+`   22  Edward Hervey`\
+`    2  Hendrik Richter`\
+`    2  Jorge González`\
+`    2  Michael Terry`\
+`    1  Antón Méixome`\
+`    1  Claude Paroz`\
+`    1  Daniel Nylander`\
+`    1  Petr Kovar`
+
+## Download
+
+PiTiVi source tarballs are available on gnome FTP:
+<http://ftp.gnome.org/pub/GNOME/sources/pitivi/0.13/>
+
+Packages for Ubuntu 9.04 (Jaunty Jackalope) are available on [this PPA
+repository](https://launchpad.net/~gstreamer-developers/+archive/ppa).
+
+## Information and Feedback
+
+-   Information for users and developers can be found on the PiTiVi
+    website : <http://www.pitivi.org/>
+-   Comments and feedback are welcome.
+    -   Mailing-list : pitivi-pitivi lists sourceforge net
+    -   PiTiVi bug-tracker :
+        <http://bugzilla.gnome.org/browse.cgi?product=pitivi>
+
+## Bugs Fixed
+
+-   [520653](http://bugzilla.gnome.org/show_bug.cgi?id=520653) :
+    pitivi.desktop fixes and more
+-   [575311](http://bugzilla.gnome.org/show_bug.cgi?id=575311) : clips
+    appear to be duplicated at high zoom levels when the timeline cursor
+    is near the edge
+-   [576576](http://bugzilla.gnome.org/show_bug.cgi?id=576576) : not
+    possible to add clip at end of timeline
+-   [584170](http://bugzilla.gnome.org/show_bug.cgi?id=584170) : Video
+    Playback Fails, Without Program Crash
+-   [589809](http://bugzilla.gnome.org/show_bug.cgi?id=589809) :
+    \[performance\] zooming (even without thumbnails/waveforms) is slow
+-   [590114](http://bugzilla.gnome.org/show_bug.cgi?id=590114) :
+    rendering never finishes
+-   [590153](http://bugzilla.gnome.org/show_bug.cgi?id=590153) : Zoom to
+    optimum level when loading projects
+-   [590203](http://bugzilla.gnome.org/show_bug.cgi?id=590203) : image
+    hang during playback (auriga)
+-   [590440](http://bugzilla.gnome.org/show_bug.cgi?id=590440) : Strings
+    not marked for translation in check.py
+-   [591571](http://bugzilla.gnome.org/show_bug.cgi?id=591571) :
+    Removing a keyframe is not easy
+-   [591616](http://bugzilla.gnome.org/show_bug.cgi?id=591616) : crashes
+    when creating a new project after loading a project
+-   [591617](http://bugzilla.gnome.org/show_bug.cgi?id=591617) :
+    regression: centering on playhead when zooming broke
+-   [593736](http://bugzilla.gnome.org/show_bug.cgi?id=593736) : play
+    button is empty
+-   [594114](http://bugzilla.gnome.org/show_bug.cgi?id=594114) : Sound
+    curves not taken into account when rendering
+-   [594311](http://bugzilla.gnome.org/show_bug.cgi?id=594311) :
+    Clicking the timeline leads to a TypeError
+-   [575975](http://bugzilla.gnome.org/show_bug.cgi?id=575975) :
+    project-centric window title
+-   [582363](http://bugzilla.gnome.org/show_bug.cgi?id=582363) : huge
+    tabs the size of a hallway
+-   [594181](http://bugzilla.gnome.org/show_bug.cgi?id=594181) :
+    playhead/seeking broken by latest changes to factory cache in
+    singledecodebin
+-   [594396](http://bugzilla.gnome.org/show_bug.cgi?id=594396) : " save
+    as " confuses pitivi; subsequent saves are on the original project
+    file
+
+...and more. See the [list of bugs fixed on
+Bugzilla](http://bugzilla.gnome.org/buglist.cgi?product=pitivi&target_milestone=0.13.3)
diff --git a/docs/releases/0.13.4.md b/docs/releases/0.13.4.md
new file mode 100644
index 0000000..7a9a06e
--- /dev/null
+++ b/docs/releases/0.13.4.md
@@ -0,0 +1,226 @@
+# 0.13.4 Release : Cabernet d'Anjou
+
+The PiTiVi team is proud to announce the third release in the 0.13
+PiTiVi series.
+
+Due to its dependency on GStreamer, The PiTiVi team strongly recommends
+users have all official latest gstreamer libraries and plugins installed
+for the best user experience.
+
+See also [Performance problems in
+0.13.4](Performance_problems_in_0.13.4.md).
+
+## Features of this release
+
+`* video mixing/transparency support`\
+`* icon view in source list`\
+`* smoother scrolling`\
+`* modeless splitting`\
+`* seek on click`\
+`* faster waveforms`\
+`* zoom slider`\
+`* UI beautifications`\
+`* Speed optimisations`\
+`* dbus/hal dependency now optional`\
+`* translated in 30 languages`
+
+## Requirements
+
+`* gstreamer >= 0.10.28`\
+`* gst-python >= 0.10.16`\
+`* gnonlin >= 0.10.15`\
+`* pygtk >= 2.14.0`\
+`* Python >= 2.5`\
+`* zope.interface (http://www.zope.org/Products/ZopeInterface)`\
+`* setuptools (http://peak.telecommunity.com/DevCenter/setuptools)`\
+`* pygoocanvas (http://live.gnome.org/GooCanvas)`\
+`* (optional) dbus and HAL for capture support`
+
+## Contributors
+
+Ranked by commits:
+
+`  176  Brandon Lewis`\
+`   49  Alessandro Decina`\
+`   27  Edward Hervey`\
+`    4  Andrej Å½nidarÅ¡ič`\
+`    4  Gabor Kelemen`\
+`    4  Gianvito Cavasoli`\
+`    4  Jorge González`\
+`    4  Marek ÄŒernocký`\
+`    4  Mario Blättermann`\
+`    3  António Lima`\
+`    3  Jean-François Fortin Tam`\
+`    3  Karl Palsson`\
+`    3  Timo Jyrinki`\
+`    2  Adi Roiban`\
+`    2  Alexandre Prokoudine`\
+`    2  Claude Paroz`\
+`    2  Flamarion Jorge`\
+`    2  Jesse Avilés`\
+`    2  Rudolfs Mazurs`\
+`    2  Xandru Armesto Fernandez`\
+`    1  Aleksander Åukasiewicz`\
+`    1  Aron Xu`\
+`    1  Daniel Nylander`\
+`    1  Dimitris Tsiolis`\
+`    1  Fran Diéguez`\
+`    1  Greg Auger`\
+`    1  Ivaylo Valkov`\
+`    1  Jan Drábek`\
+`    1  Jennie Petoumenou`\
+`    1  Lucian Adrian Grijincu`\
+`    1  Matej Urbančič`\
+`    1  Philip Withnall`\
+`    1  Robin Norwood`\
+`    1  Rodolfo Ribeiro Gomes`\
+`    1  Stephen Griffiths`\
+`    1  Tim Waugh`\
+`    1  dumol`
+
+## Download
+
+PiTiVi source tarballs are available on gnome FTP:
+<http://ftp.gnome.org/pub/GNOME/sources/pitivi/0.13/>
+
+See [the website](http://www.pitivi.org) for distribution-specific
+packages.
+
+## Information and Feedback
+
+-   Information for users and developers can be found on the PiTiVi
+    website : <http://www.pitivi.org/>
+-   Comments and feedback are welcome.
+    -   Mailing-list : pitivi-pitivi lists sourceforge net
+    -   PiTiVi bug-tracker :
+        <http://bugzilla.gnome.org/browse.cgi?product=pitivi>
+
+## Bugs Fixed
+
+-   [589814](http://bugzilla.gnome.org/show_bug.cgi?id=589814) :
+    keyframe should have percentage labels
+-   [610072](http://bugzilla.gnome.org/show_bug.cgi?id=610072) : crash
+    when crossing trimming handles
+-   [354647](http://bugzilla.gnome.org/show_bug.cgi?id=354647) : Use
+    gtk.IconView for sources
+-   [432647](http://bugzilla.gnome.org/show_bug.cgi?id=432647) : Viewer
+    slider should be clickable
+-   [558019](http://bugzilla.gnome.org/show_bug.cgi?id=558019) :
+    Import/Open is a bit confusing
+-   [604699](http://bugzilla.gnome.org/show_bug.cgi?id=604699) : broken
+    link to Brandon's wiki in the gnonlin docs
+-   [337967](http://bugzilla.gnome.org/show_bug.cgi?id=337967) : avoid
+    black frames as video thumbnails in the source list
+-   [575356](http://bugzilla.gnome.org/show_bug.cgi?id=575356) : timeout
+    on importing large clip
+-   [575983](http://bugzilla.gnome.org/show_bug.cgi?id=575983) : pitivi
+    doesn't find Python 2.6 well
+-   [576289](http://bugzilla.gnome.org/show_bug.cgi?id=576289) : tagging
+    PiTiVi's audio streams for pulseaudio
+-   [579544](http://bugzilla.gnome.org/show_bug.cgi?id=579544) : cannot
+    add layers above existing ones
+-   [584135](http://bugzilla.gnome.org/show_bug.cgi?id=584135) : " No
+    audio " gets changed to some audio improperly; handle properly
+    timelines without audio or without video
+-   [585735](http://bugzilla.gnome.org/show_bug.cgi?id=585735) : patch
+    Use different colors for video and audio clips
+-   [585738](http://bugzilla.gnome.org/show_bug.cgi?id=585738) :
+    Difference between mounted videos / different layers
+-   [586025](http://bugzilla.gnome.org/show_bug.cgi?id=586025) : use a
+    slider instead of 2 zoom buttons
+-   [589691](http://bugzilla.gnome.org/show_bug.cgi?id=589691) :
+    keyframes outside trimmed regions cannot be adjusted
+-   [590569](http://bugzilla.gnome.org/show_bug.cgi?id=590569) : lack of
+    consistency : icon for razor is a pair of scissor
+-   [590632](http://bugzilla.gnome.org/show_bug.cgi?id=590632) : hide
+    the previewer's slider widget when not previewing something directly
+    in the source list
+-   [590784](http://bugzilla.gnome.org/show_bug.cgi?id=590784) : shift +
+    click should select a horizontal range of clips
+-   [593663](http://bugzilla.gnome.org/show_bug.cgi?id=593663) :
+    Preference window initial size is too small
+-   [593962](http://bugzilla.gnome.org/show_bug.cgi?id=593962) : Bad
+    string concatenation in gettext call (mainwindow.py)
+-   [593977](http://bugzilla.gnome.org/show_bug.cgi?id=593977) : loading
+    projects is slow
+-   [594389](http://bugzilla.gnome.org/show_bug.cgi?id=594389) : move
+    playhead on click - better splitting metaphor
+-   [594826](http://bugzilla.gnome.org/show_bug.cgi?id=594826) : alpha
+    channel for PNG images
+-   [595362](http://bugzilla.gnome.org/show_bug.cgi?id=595362) : default
+    empty timeline length is way too long
+-   [595402](http://bugzilla.gnome.org/show_bug.cgi?id=595402) : delete
+    key on a clip in the source list should remove it.
+-   [595960](http://bugzilla.gnome.org/show_bug.cgi?id=595960) :
+    thumbnails are slow to generate when zooming
+-   [596134](http://bugzilla.gnome.org/show_bug.cgi?id=596134) : render
+    sound is desynched
+-   [596267](http://bugzilla.gnome.org/show_bug.cgi?id=596267) :
+    division by zero when trying to load a timeline that starts with a
+    still image
+-   [596948](http://bugzilla.gnome.org/show_bug.cgi?id=596948) : Can't
+    grab waveform extremities
+-   [597243](http://bugzilla.gnome.org/show_bug.cgi?id=597243) : delete
+    key on a clip in the source list should remove it only if the
+    timeline is not focused
+-   [597703](http://bugzilla.gnome.org/show_bug.cgi?id=597703) : Trim
+    handles can get glued together
+-   [597704](http://bugzilla.gnome.org/show_bug.cgi?id=597704) :
+    Traceback when undoing 'split' operation
+-   [597711](http://bugzilla.gnome.org/show_bug.cgi?id=597711) :
+    Traceback when undoing 'ungroup' operation
+-   [597790](http://bugzilla.gnome.org/show_bug.cgi?id=597790) :
+    Traceback while previewing audio stream
+-   [598342](http://bugzilla.gnome.org/show_bug.cgi?id=598342) : OGG
+    Theora ignores rendering resolution
+-   [602892](http://bugzilla.gnome.org/show_bug.cgi?id=602892) : clips
+    deleted in the source list are not restored in the timeline when
+    undoing deletion
+-   [603045](http://bugzilla.gnome.org/show_bug.cgi?id=603045) : viewer
+    no longer displays after dropping files
+-   [603102](http://bugzilla.gnome.org/show_bug.cgi?id=603102) : cannot
+    render until the timeline has been seeked, and traceback if trying
+    to seek after trying to render directly
+-   [603107](http://bugzilla.gnome.org/show_bug.cgi?id=603107) :
+    keyframes are hard to manipulate near trimming handles/clips edges
+-   [603148](http://bugzilla.gnome.org/show_bug.cgi?id=603148) :
+    unlinking clips resets the playhead position
+-   [603149](http://bugzilla.gnome.org/show_bug.cgi?id=603149) :
+    splitting resets the playhead position
+-   [603202](http://bugzilla.gnome.org/show_bug.cgi?id=603202) : PiTiVi
+    can't load its own project format/file
+-   [603203](http://bugzilla.gnome.org/show_bug.cgi?id=603203) : More
+    frame rate support
+-   [603424](http://bugzilla.gnome.org/show_bug.cgi?id=603424) : first
+    seek doesn't work until you used the ruler to seek
+-   [603425](http://bugzilla.gnome.org/show_bug.cgi?id=603425) : video
+    curves' hitbox eats kittens
+-   [604381](http://bugzilla.gnome.org/show_bug.cgi?id=604381) :
+    tracebacks when trying to open an old project (0.13.1 release
+    screencast)
+-   [607408](http://bugzilla.gnome.org/show_bug.cgi?id=607408) : Pitivi
+    does not respect theme settings
+-   [607614](http://bugzilla.gnome.org/show_bug.cgi?id=607614) : downmix
+    channels for drawing audio waveforms on the timeline
+-   [608949](http://bugzilla.gnome.org/show_bug.cgi?id=608949) :
+    keyboard shortcuts for scrubbing/frame seeking broke
+-   [609426](http://bugzilla.gnome.org/show_bug.cgi?id=609426) :
+    traceback when importing an MPEG2-TS file (.mts, .m2ts)
+-   [611761](http://bugzilla.gnome.org/show_bug.cgi?id=611761) : some
+    mpeg files get detected as sound-only
+-   [611915](http://bugzilla.gnome.org/show_bug.cgi?id=611915) : Timeout
+    not configurable
+-   [611946](http://bugzilla.gnome.org/show_bug.cgi?id=611946) : some
+    clips randomly cause pitivi to segfault on import since changes in
+    thumbnailing
+-   [611996](http://bugzilla.gnome.org/show_bug.cgi?id=611996) : Files
+    with % and \# in the file name can't be imported by drag and drop
+-   [581816](http://bugzilla.gnome.org/show_bug.cgi?id=581816) : render
+    output filename not in unicode
+-   [593465](http://bugzilla.gnome.org/show_bug.cgi?id=593465) :
+    changing project settings does not mark the project as changed
+-   [594312](http://bugzilla.gnome.org/show_bug.cgi?id=594312) : convert
+    entities in filenames in the render dialog
+
+...and more. See the [list of bugs fixed on
+Bugzilla](http://bugzilla.gnome.org/buglist.cgi?product=pitivi&target_milestone=0.13.4)
diff --git a/docs/releases/0.13.5.md b/docs/releases/0.13.5.md
new file mode 100644
index 0000000..39f2a24
--- /dev/null
+++ b/docs/releases/0.13.5.md
@@ -0,0 +1,116 @@
+# 0.13.5 Release : I Missed My Lunch
+
+The PiTiVi team is proud to announce the fifth release in the 0.13
+PiTiVi series.
+
+Due to its dependency on GStreamer, The PiTiVi team strongly recommends
+users have all official latest gstreamer libraries and plugins installed
+for the best user experience.
+
+## Features of this release
+
+-   periodic backup of the current project file
+-   easy crossfading transitions of overlapping clips
+-   better icons for link and group operations
+-   new add keyframe button
+-   fixed support for the missing plugins installer
+-   improved support for pictures
+-   various performance improvements (less conversions, faster linking)
+
+## Requirements
+
+-   gstreamer &gt;= 0.10.28
+-   gst-python &gt;= 0.10.19
+-   gnonlin &gt;= 0.10.16
+-   pygtk &gt;= 2.14.0
+-   Python &gt;= 2.5
+-   zope.interface (http://www.zope.org/Products/ZopeInterface)
+-   setuptools (http://peak.telecommunity.com/DevCenter/setuptools)
+-   pygoocanvas (http://live.gnome.org/GooCanvas)
+-   (optional) dbus and HAL for capture support
+
+## Known Issues
+
+-   If using gst-plugins-good &lt; 0.10.25 scaling will not add black
+    borders. You will need to set the proper width and height in the
+    project settings
+-   Some files might not respond when seeking in them the first time
+-   Keyframe percentage labels are sometimes shown at the wrong position
+-   See also [Performance problems in
+    0.13.4](Performance_problems_in_0.13.4.md).
+
+## Contributors
+
+Ranked by commits:
+
+`   56  Brandon Lewis`\
+`   33  Edward Hervey`\
+`   29  Alessandro Decina`\
+`   14  Robert Swain`\
+`    9  Luis de Bethencourt`\
+`    9  Andoni Morales Alastruey`\
+`    7  Andrej Žnidaršič`\
+`    5  Nils-Christoph Fiedler`\
+`    5  Jorge González`\
+`    5  Mario Blättermann`\
+`    4  Pier Carteri`\
+`    3  António Lima`\
+`    3  Volker Sobek`\
+`    3  Mattias Põldaru`\
+`    3  Bruno Brouard`\
+`    2  Gabor Kelemen`\
+`    2  Ivaylo Valkov`\
+`    2  Cheng-Chia Tseng`\
+`    2  Tomasz Dominikowski`\
+`    2  Petr Kovar`\
+`    2  Marek Černocký`\
+`    2  Joe Hansen`\
+`    2  Daniel Nylander`\
+`    2  Fran Diéguez`\
+`    1  Xandru Armesto Fernandez`\
+`    1  YunQiang Su`\
+`    1  Alexey Fisher`\
+`    1  Andrew Higginson`\
+`    1  Antonio Fernandes C. Neto`\
+`    1  Baris Cicek`\
+`    1  Benjamin Otte`\
+`    1  Bruce Cowan`\
+`    1  Chris Ball`\
+`    1  Claude Paroz`\
+`    1  Dimitris Tsiolis`\
+`    1  Erdai Ronahi`\
+`    1  Gianvito Cavasoli`\
+`    1  Jean-François Fortin Tam`\
+`    1  Jeroen Hoolmans`\
+`    1  Kang Bundo`\
+`    1  Maxim V. Dziumanenko`\
+`    1  Neil Jagdish Patel`\
+`    1  OKANO Takayoshi`\
+`    1  Priit Laes`\
+`    1  Sebastian Dröge`\
+`    1  Shushi Kurose`\
+`    1  Simos Xenitellis`\
+`    1  Stephen Irons`\
+`    1  Thibault Saunier`
+
+## Download
+
+PiTiVi source tarballs are available on gnome FTP:
+<http://ftp.gnome.org/pub/GNOME/sources/pitivi/0.13/>
+
+See [the website](http://www.pitivi.org) for distribution-specific
+packages.
+
+## Information and Feedback
+
+-   Information for users and developers can be found on the PiTiVi
+    website : <http://www.pitivi.org/>
+-   Comments and feedback are welcome.
+    -   Mailing-list : pitivi-pitivi lists sourceforge net
+    -   PiTiVi bug-tracker :
+        <http://bugzilla.gnome.org/browse.cgi?product=pitivi>
+
+## Bugs Fixed
+
+See the [list of bugs fixed in 0.13.5 on
+Bugzilla](http://bugzilla.gnome.org/buglist.cgi?product=pitivi&target_milestone=0.13.5)
diff --git a/docs/releases/0.14.md b/docs/releases/0.14.md
new file mode 100644
index 0000000..2604701
--- /dev/null
+++ b/docs/releases/0.14.md
@@ -0,0 +1,140 @@
+---
+title: 0.14.0
+...
+
+# 0.14 Release : **No longer kills kittens**
+
+The PiTiVi team is proud to announce the first release of the 0.14
+series.
+
+Due to its dependency on GStreamer, The PiTiVi team strongly recommends
+users have all official latest gstreamer libraries and plugins installed
+for the best user experience.
+
+## Features of this release
+
+-   Audio and video effects
+-   Completely redesigned project settings dialog, with the ability to
+    create presets
+-   Completely redesigned rendering dialog
+-   Welcome dialog that helps you start a project or load recent
+    projects in two clicks
+-   Ability to preview video, audio and image files before importing
+-   Add a “best fit” zoom button
+-   Ability to jump to an exact position in the timeline
+-   Ability to specify custom aspect ratios and framerates
+-   Show a progress bar when loading projects
+-   300% faster project timeline loading
+-   Search bar in the Media Library
+-   Ability to detach all the tabs and the previewer
+-   New manpage
+-   Commandline render mode
+-   Use the standard infobar widget all around
+
+## Requirements
+
+-   gstreamer &gt;= 0.10.28
+-   gst-python &gt;= 0.10.19
+-   gnonlin &gt;= 0.10.16
+-   pygtk &gt;= 2.18.0
+-   Python &gt;= 2.5
+-   zope.interface (http://www.zope.org/Products/ZopeInterface)
+-   setuptools (http://peak.telecommunity.com/DevCenter/setuptools)
+-   pygoocanvas (http://live.gnome.org/GooCanvas)
+-   pyxdg (http://www.freedesktop.org/wiki/Software/pyxdg)
+
+## Known Issues
+
+-   Everything listed in
+    
[here](https://bugzilla.gnome.org/buglist.cgi?query_format=advanced;bug_status=NEW;bug_status=ASSIGNED;bug_status=REOPENED;version=0.14;product=pitivi)
+-   See also [Performance problems in
+    0.13.4](Performance_problems_in_0.13.4.md).
+
+## Contributors
+
+Ranked by commits:
+
+`  239  Thibault Saunier`\
+`   94  Brandon Lewis`\
+`   77  Jean-François Fortin Tam`\
+`   39  Alessandro Decina`\
+`   33  Edward Hervey`\
+`   27  Alex Băluț`\
+`   19  Andrej Žnidaršič`\
+`   18  Pier Carteri`\
+`   12  Mario Blättermann`\
+`    9  Daniel Mustieles`\
+`    9  Luis de Bethencourt`\
+`    9  Marek Černocký`\
+`    7  Alexandre Prokoudine`\
+`    7  Jorge González`\
+`    6  Mathieu Duponchelle`\
+`    5  Bruno Brouard`\
+`    5  Robert Swain`\
+`    4  Gabor Kelemen`\
+`    4  Petr Kovar`\
+`    3  Djavan Fagundes`\
+`    3  Gianvito Cavasoli`\
+`    3  Hannie Dumoleyn`\
+`    3  Jesse Aviles`\
+`    3  Yaron Shahrabani`\
+`    2  António Lima`\
+`    2  Bruce Cowan`\
+`    2  Daniel Korostil`\
+`    2  Fran Diéguez`\
+`    2  Karl Palsson`\
+`    2  Kjartan Maraas`\
+`    2  Mattias Põldaru`\
+`    2  Maxim V. Dziumanenko`\
+`    2  Stéphane Maniaci`\
+`    2  Volker Sobek`\
+`    2  Мирослав Николић`\
+`    1  7 Stéphane Maniaci`\
+`    1  Aron Xu`\
+`    1  Arun Raghavan`\
+`    1  Ben Asselstine`\
+`    1  Benjamin Berg`\
+`    1  Benjamin M. Schwartz`\
+`    1  Carles Ferrando`\
+`    1  Cheng-Chia Tseng`\
+`    1  Claude Paroz`\
+`    1  Daniel Nylander`\
+`    1  Hicham HAOUARI`\
+`    1  Ivaylo Valkov`\
+`    1  Joe Hansen`\
+`    1  Jordi Estrada`\
+`    1  Kang Bundo`\
+`    1  Khaled Hosny`\
+`    1  Kim Boram`\
+`    1  Kristjan SCHMIDT`\
+`    1  Mateus Zenaide`\
+`    1  Miroslav Nikolić`\
+`    1  Nguyễn Thái Ngọc Duy`\
+`    1  Peter Mráz`\
+`    1  Rudolfs Mazurs`\
+`    1  Takayuki KUSANO`\
+`    1  Wouter Bolsterlee`\
+`    1  Yinghua Wang`\
+`    1  Yuri Myasoedov`
+
+## Download
+
+PiTiVi source tarballs are available on gnome FTP:
+<http://ftp.gnome.org/pub/GNOME/sources/pitivi/0.14/>
+
+See [the website](http://www.pitivi.org) for distribution-specific
+packages.
+
+## Information and Feedback
+
+-   Information for users and developers can be found on the PiTiVi
+    website : <http://www.pitivi.org/>
+-   Comments and feedback are welcome.
+    -   Mailing-list : pitivi-pitivi lists sourceforge net
+    -   PiTiVi bug-tracker :
+        <http://bugzilla.gnome.org/browse.cgi?product=pitivi>
+
+## Bugs Fixed
+
+See the [list of bugs fixed in 0.14 on
+Bugzilla](http://bugzilla.gnome.org/buglist.cgi?product=pitivi&target_milestone=0.14)
diff --git a/docs/releases/0.15.1.md b/docs/releases/0.15.1.md
new file mode 100644
index 0000000..fab66a8
--- /dev/null
+++ b/docs/releases/0.15.1.md
@@ -0,0 +1,45 @@
+# 0.15.1 Release “Endless Excursion”
+
+**Warning**: do not use this release, see [0.15.2](releases/0.15.2.md)
+instead.
+
+This was a special bug fix release to prevent PiTiVi from entering an
+endless recursion, due to a change introduced in the GStreamer “good”
+plugins. It was meant to ensure that PiTiVi keeps working with the
+latest gst releases.
+
+Translations have also been updated.
+
+Dependencies/requirements have been unchanged since the
+[0.15](releases/0.15.md) release.
+
+## Contributors
+
+Ranked by commits:
+
+`    4  Jean-François Fortin Tam`\
+`    3  Matej Urbančič`\
+`    2  Bruno Brouard`\
+`    2  Cheng-Chia Tseng`\
+`    2  Daniel Mustieles`\
+`    2  Marek Černocký`\
+`    2  Mario Blättermann`\
+`    2  Sylvia Sánchez`\
+`    1  Brian Grohe`\
+`    1  Daniel Korostil`\
+`    1  Daniel Nylander`\
+`    1  Gabor Kelemen`\
+`    1  Gil Forcada`\
+`    1  Joan Duran`\
+`    1  René Stadler`\
+`    1  Server Acim`\
+`    1  Stas Solovey`\
+`    1  Taijuin`\
+`    1  Timo Jyrinki`\
+`    1  Мирослав Николић`
+
+## Bugs Fixed
+
+-   662311 Upgrading to git master of plugins-good breaks pitivi and
+    jokosher
+-   656652 Bad strings for translation
diff --git a/docs/releases/0.15.2.md b/docs/releases/0.15.2.md
new file mode 100644
index 0000000..16d527f
--- /dev/null
+++ b/docs/releases/0.15.2.md
@@ -0,0 +1,45 @@
+# 0.15.2 Release “I accidentally... the whole render”
+
+This is a one-liner bug fix release to allow rendering to work again.
+
+The regression was introduced by a fix in [0.15.1](releases/0.15.1.md) to
+prevent an endless recursion due to a change introduced in the GStreamer
+“good” plugins.
+
+Translations have also been updated.
+
+Dependencies/requirements have been unchanged since the
+[0.15](releases/0.15.md) release.
+
+## Contributors
+
+Ranked by commits:
+
+`    6  Milagros Infante Montero`\
+`    3  Daniel Korostil`\
+`    3  Milagros Alessandra Infante`\
+`    3  Milagros Alessandra Infante Montero`\
+`    2  Daniel Mustieles`\
+`    2  Jean-François Fortin Tam`\
+`    1  Adolfo Jayme Barrientos`\
+`    1  Andrej Žnidaršič`\
+`    1  António Lima`\
+`    1  Breno Felipe Morais de Santana`\
+`    1  Bruno Brouard`\
+`    1  Cheng-Chia Tseng`\
+`    1  Daniel Nylander`\
+`    1  Marek Černocký`\
+`    1  Matej Urbančič`\
+`    1  OKANO Takayoshi`\
+`    1  Peter Mráz`\
+`    1  René Stadler`\
+`    1  Rudolfs Mazurs`\
+`    1  Мирослав Николић`
+
+## Download
+
+PiTiVi source tarballs are available on gnome FTP:
+<http://ftp.gnome.org/pub/GNOME/sources/pitivi/0.15/>
+
+See [the website](http://www.pitivi.org) for distribution-specific
+packages.
diff --git a/docs/releases/0.15.md b/docs/releases/0.15.md
new file mode 100644
index 0000000..54966e8
--- /dev/null
+++ b/docs/releases/0.15.md
@@ -0,0 +1,122 @@
+# 0.15 Release “Ich bin ein berliner”
+
+The PiTiVi team is proud to announce the 0.15 release.
+
+This will be the last release using the “traditional” core/engine of
+PiTiVi. The next releases will be based on GStreamer Editing Services
+(GES) and should thus depart significantly from this release in terms of
+performance, features and stability.
+
+For the best user experience, the PiTiVi team strongly recommends that
+users have all the latest official GStreamer libraries and plugins
+installed.
+
+## Features of this release
+
+-   A new transformation feature allows resizing, panning and cropping
+    clips directly in the previewer
+-   Automatic clip alignment by analyzing soundtracks to sync
+    multicamera footage
+-   Ability to have presets for rendering
+-   Default set of project settings and rendering presets
+-   Cleaner preferences dialog
+-   Integrated offline user manual
+-   Cleaner advanced codec settings dialog
+-   Improved video thumbnailing performance
+-   “Soft depedencies” manager to warn the user of features requiring
+    additional packages
+-   Port to gtkbuilder
+-   Respect GNOME's button icons setting
+-   Improved startup time
+-   Code cleanups and remove dead code
+-   Properly show property descriptions (blurbs) for advanced codec
+    settings
+
+## Hard requirements
+
+-   gstreamer &gt;= 0.10.28
+-   gst-python &gt;= 0.10.19
+-   gnonlin &gt;= 0.10.16
+-   pygtk &gt;= 2.18.0
+-   gtk &gt;= 2.24.0
+-   Python &gt;= 2.5
+-   zope.interface (http://www.zope.org/Products/ZopeInterface)
+-   setuptools (http://peak.telecommunity.com/DevCenter/setuptools)
+-   pygoocanvas (http://live.gnome.org/GooCanvas)
+-   pyxdg (http://www.freedesktop.org/wiki/Software/pyxdg)
+
+## Soft requirements
+
+-   frei0r for the transformation feature
+-   Numpy for the auto aligner feature
+
+The PiTiVi team recommends satisfying those dependencies as much as
+possible for an optimal user experience.
+
+## Known Issues
+
+-   Everything listed in
+    
[here](https://bugzilla.gnome.org/buglist.cgi?query_format=advanced;bug_status=NEW;bug_status=ASSIGNED;bug_status=REOPENED;version=0.15;product=pitivi)
+-   See also [Performance problems in
+    0.13.4](Performance_problems_in_0.13.4.md).
+
+## Contributors
+
+Ranked by commits:
+
+`   108 Alex Băluț`\
+`   88  Jean-François Fortin Tam`\
+`   52  Thibault Saunier`\
+`   25  Feroze Naina`\
+`   10  Lubosz Sarnecki`\
+`   10  Daniel Mustieles`\
+`   10  Mario Blättermann`\
+`   8   Marek Černocký`\
+`   7   Benjamin M. Schwartz`\
+`   7   Andrej Žnidaršič`\
+`   6   Stéphane Maniaci`\
+`   4   Hicham HAOUARI`\
+`   4   Kjartan Maraas`\
+`   3   Daniel Korostil`\
+`   3   ipraveen`\
+`   2   António Lima`\
+`   2   Brandon Lewis`\
+`   2   Bruno Brouard`\
+`   2   Gianvito Cavasoli`\
+`   2   Daniel Nylander`\
+`   2   Matej Urbančič`\
+`   2   Мирослав Николић`\
+`   1   Edward Hervey`\
+`   1   Gabriel Speckhahn`\
+`   1   Gil Forcada`\
+`   1   James Putt`\
+`   1   Jorge González`\
+`   1   Luis de Bethencourt`\
+`   1   Martin Srebotnjak`\
+`   1   Peter Mráz`\
+`   1   Peteris Krisjanis`\
+`   1   Piotr Drąg`\
+`   1   Yuri Myasoedov`
+
+## Download
+
+PiTiVi source tarballs are available on gnome FTP:
+<http://ftp.gnome.org/pub/GNOME/sources/pitivi/0.15/>
+
+See [the website](http://www.pitivi.org) for distribution-specific
+packages.
+
+## Information and Feedback
+
+-   Information for users and developers can be found on the PiTiVi
+    website : <http://www.pitivi.org>
+-   Comments and feedback are welcome.
+    -   Mailing-list : pitivi-pitivi lists sourceforge net
+    -   PiTiVi bug-tracker :
+        <http://bugzilla.gnome.org/browse.cgi?product=pitivi>
+
+## Bugs Fixed
+
+See the
+\[<http://bugzilla.gnome.org/buglist.cgi?product=pitivi;target_milestone=0.14.1;target_milestone=0.14.2;target_milestone=0.15>
+list of bugs fixed in 0.15 on Bugzilla
diff --git a/docs/releases/0.91.md b/docs/releases/0.91.md
new file mode 100644
index 0000000..df9e995
--- /dev/null
+++ b/docs/releases/0.91.md
@@ -0,0 +1,579 @@
+# 0.91 Release “Charming Defects”
+
+This is the first alpha release for the new version of Pitivi based on
+[GES](GES.md), the GStreamer Editing Services library.
+
+It is a major rework of the entire Pitivi
+[architecture](Architecture.md. It includes:
+
+-   Replacing the core of Pitivi by GES; 20 thousand lines of code
+    removed
+-   Porting to GStreamer 1.x
+-   Porting to GTK+ 3.x
+-   Replacing GooCanvas by Clutter for the timeline
+-   An automated UI test suite, with many checks for mission-critical
+    parts
+-   Fixing hundreds of bugs and implementing many new features
+-   UI polish all over the place
+-   Refactoring pretty much the entire codebase
+
+To give you a visual idea of what this meant:
+<http://jeff.ecchi.ca/blog/wp-content/uploads/2012-02-28-12.42.44-levelled.jpg>
+
+<span style="background:#FF0000">**WARNING**</span>: Please keep in mind
+that this is an *alpha* release, so there may be some bugs we haven't
+found yet. We appreciate your feedback, so try it out, let us know how
+well it works for you and report detailed bugs for issues you may
+encounter. Again, this is <span style="color:#FF0000">not yet considered
+production-ready software</span>. We can't be sure until we test and
+iron out the bugs! With your help, we will follow up with a beta release
+and eventually a [1.0](releases/1.0.md) release.
+
+## Top features of this release
+
+These features have been documented throughout many blog posts from
+January 2012 to September 2013. Take a look at the [“Pitivi” category of
+Jeff's blog](http://jeff.ecchi.ca/blog/category/pitivi) for additional
+details and historical context.
+
+### Media Library
+
+-   The redesigned clip previewing feature gives you more space to view
+    a video from the media library, yet stays out of your way. It now
+    opens a separate window that tries to show the clip at 1:1 size
+    whenever possible. This window can be dismissed by clicking the
+    close button or clicking anywhere outside the window, so there is no
+    reduction of efficiency compared to the old approach.
+-   Use Nautilus/Totem’s thumbnails and conform to the new version of
+    the Freedesktop specification for thumbnail directories. The result
+    is prettier and we don’t have to do processing in most cases, which
+    means even faster import/loading times.
+-   Asynchroneous (non-blocking) and much faster clip importing
+-   The media library keeps itself sorted alphabetically as you import
+    files, without any additional performance hit.
+-   Prevent playing back clip previews in double (that was a subtle one,
+    as windows were exactly on top of each other)
+-   Make special characters show up correctly in the media library’s
+    iconview mode, remove the ancient filename shortening code and rely
+    on Pango instead.
+-   Avoid excessive work when searching clips in the media library,
+    improving performance
+-   Handle special characters in the media library’s search entry
+-   Use the system’s default image viewer to preview images
+
+### Timeline and Playback
+
+![](images/Complex_layers_whiteboard_mockup_from_desktop_summit_2011.png 
"Complex_layers_whiteboard_mockup_from_desktop_summit_2011.png"){width="700"}
+
+-   Smooth, modern Clutter-based timeline with animations to enhance
+    usability
+-   Smooth autoscrolling while playing
+-   [Live preview of what you are
+    trimming](http://jeff.ecchi.ca/blog/2012/03/07/trim-like-a-professional-hair-stylist/).
+    No more trial and error, no more fuzzying around and moving the
+    playhead all the time to figure out if you cut your scene right.
+-   Playback performance back to the 0.13.1 levels (or possibly better).
+    Want to play a 1080p clip? A 2K clip? Not a problem anymore (unless
+    you're still running on a 286 or something).
+-   Much faster and prettier video thumbnails on the timeline, with
+    two-stage caching and adaptive CPU usage throttling
+-   Much faster and more accurate audio waveforms, with on-disk caching
+-   Manual layers management interface, layer reordering
+-   The timeline toolbar is now vertical and sports improved “Split”,
+    “Group” and “Ungroup” icons. It also does away with obsolete
+    buttons.
+-   Automatic rippling (a.k.a. “magnetic”, elastic, fantastic) timeline
+    mode: this makes your clips behave like magnets and prevents needing
+    to re-arrange them manually all the time.
+-   Automatically adjust the zoom when inserting to the end of the
+    timeline
+-   New icons for split, group/ungroup and align
+-   Clip snapping indicator
+
+### For contributors and distributors
+
+-   Infinitely cleaner and easier to navigate codebase. See [this blog
+    post](http://jeff.ecchi.ca/blog/2012/01/12/spring-clean-up-in-january/)
+    and [this blog
+    post](http://jeff.ecchi.ca/blog/2012/02/02/aventuras-en-malaga-y-ronda/)
+    for an explanation and some numbers, or just look at [this
+    screenshot](http://jeff.ecchi.ca/blog/wp-content/uploads/pitivi-tree-cleanup.png)
+    comparing the old and new amount of source files.
+-   An awesome [test suite](Testing.md)
+-   A revised and simplified API has been implemented in GES and
+    integrated in Pitivi.
+-   A small [brand
+    adjustment](https://git.gnome.org/browse/pitivi/commit/?id=549e1e3b).
+    From now on, PiTiVi should simply be called “Pitivi”.
+-   Dependencies are defined and checked in only one, centralized place:
+    check.py
+-   We now use yelp-tools instead of gnome-doc-utils
+-   New format for which a mimetype needs to be registered: xges
+-   Commandline rendering, scripting and batch processing is now GES'
+    job
+-   New high-resolution logo icon
+-   Various pieces of documentation (README, HACKING, AUTHORS, etc.)
+    were updated
+-   We ship an AppData file in order to show up with the correct
+    description in GNOME Software
+-   We dropped the ChangeLog file, it weighs a ton and we have this
+    thing called version control systems now.
+
+### General
+
+-   In addition to the good old “crossfade”, you can now choose from 70
+    industry-standard
+    ([SMPTE](https://en.wikipedia.org/wiki/Society_of_Motion_Picture_and_Television_Engineers))
+    transitions. This number doubles to 140 if you consider that each
+    transition can also be reversed.
+-   Pitivi now inhibits the screensaver when playing and inhibits
+    suspend when rendering.
+-   The automated backup feature now works. See [this blog
+    post](http://jeff.ecchi.ca/blog/2012/01/25/restoring-from-backups/)
+    and [its
+    sequel](http://jeff.ecchi.ca/blog/2013/09/04/fix-it-thrice/)
+-   Simplified menus
+-   Fix many, many, many problems with the Media Library, project
+    management, keyboard shortcuts, etc.
+-   Ability to save/export the current frame as an image file
+-   Much faster application startup
+-   Auto-hiding toolbar in fullscreen mode
+-   Improved error dialogs
+-   Automatically saving and restoring the state of our dynamic
+    detachable tabs/components.
+-   Redesigned rendering progress dialog and post-render user
+    experience. See
+    [this](http://jeff.ecchi.ca/blog/2012/11/15/persistent-tab-states-render-ux-polish-and-other-things/),
+    [this](http://jeff.ecchi.ca/blog/2013/04/28/no-more-stuck-render-dialogs/)
+    and [this](http://jeff.ecchi.ca/blog/2013/09/04/fix-it-thrice/).
+-   Enforce unicode in preset names, preventing a bug with non-ASCII
+    chars are used in the name of a preset
+-   Allow presets with “/” in their name
+-   Fix a race between clicks on the preview widget’s slider and
+    position updates. When using it in the media library/file chooser,
+    the slider would often “jump” back to its previous position instead
+    of seeking. The new behavior is now smooth and reliable.
+-   When the viewer is undocked, provide a button to toggle fullscreen
+    mode
+-   Specify the duration of missing/moved files when prompting the user
+    about their new location
+-   Update effect categories, merge “Noise” and “Blur”, add a
+    “Compositing” category, categorize new effects
+-   Automatically save the last used render directory
+-   Stop rendering when the user presses Escape
+-   Use symbolic icons everywhere where it makes sense (in the media
+    library toolbar, property reset buttons, lists, etc.)
+-   Update the preview widget slider on a more frequent basis, giving it
+    a snappier feeling
+-   Automatically save and restore the main window’s position. This is
+    especially useful when using detached utility windows.
+-   Hide the effects toolbar when nothing is selected
+-   Add a contextual help button in the render dialog to explain
+    container formats
+-   Allow entering a frame number into the time widget
+-   Keyframable (animatable) properties for all effects
+-   Scale down effects thumbnails to fit better in the new listview
+    arrangement
+-   Various improvements to the robustness of the import dialog's video
+    previewer
+-   Ability to pause and resume rendering
+-   A basic title editor
+-   Filter the project loading or media file importing dialogs to only
+    show relevant/supported files by default
+-   Only show codecs and containers with a high-enough GStreamer “rank”
+    to reduce the possibility of rendering problems
+
+This is just the beginning, of course. See the “Bugs fixed (and even
+more features)” section further below if you're hungry for more.
+
+## Requirements
+
+Dependencies/requirements have changed significantly since the 0.15
+series.
+
+Generally speaking, you can refer to Pitivi's check.py for the
+dependencies' versions specific to a given release. For 0.91, those are:
+
+Hard requirements:
+
+-   cairo &gt;= 1.10.0
+-   clutter &gt;= 1.12.0
+-   gnonlin &gt;= 1.1.90
+-   gobject-introspection &gt;= 1.34.0
+-   gst-python &gt;= 1.1.90
+-   gstreamer &gt;= 1.2.0
+-   gstreamer-editing-services &gt;= 1.1.90
+-   gtk &gt;= 3.8.0
+-   numpy (static bindings)
+-   pygobject &gt;= 3.4.0
+-   pyxdg (static bindings)
+
+Soft requirements:
+
+-   gstreamer-libav
+-   libnotify
+-   pycanberra (static bindings)
+-   frei0r
+
+See also [dependencies](Dependencies.md) for additional tips.
+
+## Known issues
+
+-   Layer management interface is missing features.
+-   The title editor UI is very primitive and probably buggy. Please
+    join us to make it work up to your expectations! See the existing
+    [title editor
+    
bugs](https://bugzilla.gnome.org/buglist.cgi?product=pitivi&bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&component=Title%20editor).
+-   The transformation box has been disabled (we need someone to [fix
+    it](https://bugzilla.gnome.org/show_bug.cgi?id=708495)).
+-   The user manual is completely outdated (it references the
+    [0.15](releases/0.15.md) series). We are looking for someone to take
+    on the role of writing the Pitivi user guide. Please get in touch if
+    you love writing and are interested in helping out.
+-   Translations are not all fully up to date.
+-   The Media Library does not generate missing thumbnails. See
+    [GStreamer bug
+    667203](https://bugzilla.gnome.org/show_bug.cgi?id=667203) for
+    details.
+-   The [ruler has not been ported to
+    Clutter](https://bugzilla.gnome.org/show_bug.cgi?id=708491), so it
+    will not be in sync with the rest of the timeline while
+    autoscrolling.
+-   The automated codecs installer is (still) broken. See [bug
+    686182](https://bugzilla.gnome.org/show_bug.cgi?id=686182) and [GES
+    bug 686181](https://bugzilla.gnome.org/show_bug.cgi?id=686181).
+-   The automatic clip aligner feature does not work. We need someone to
+    [port it to use our new audio waveforms processing
+    module](https://bugzilla.gnome.org/show_bug.cgi?id=708401).
+-   If xptv file support is important to you, we urgently need someone
+    to get involved in fixing/refactoring the xptv formatter module in
+    GES. If no interest is shown after a few releases, support for this
+    legacy file format may be dropped.
+-   [No dialog to install missing codecs after discovering
+    clips](https://bugzilla.gnome.org/show_bug.cgi?id=686182), and no
+    error gets raised in that case. This means that the clip will
+    “appear” to have imported correctly, but if you try inserting it
+    into the timeline you may get errors in the background or Pitivi's
+    UI may hang.
+
+See the list of [currently known
+issues](https://bugzilla.gnome.org/buglist.cgi?query_format=advanced;bug_severity=blocker;bug_severity=critical;bug_severity=major;bug_severity=normal;bug_severity=minor;bug_severity=trivial;bug_status=NEW;bug_status=ASSIGNED;bug_status=REOPENED;product=pitivi),
+the [0.91-specific
+issues](https://bugzilla.gnome.org/buglist.cgi?query_format=advanced&version=0.91&resolution=---&product=pitivi)
+and the list of [bugs that need re-testing with
+0.91](https://bugzilla.gnome.org/buglist.cgi?query_format=advanced;bug_status=NEEDINFO;target_milestone=0.91;product=pitivi)
+(you can help!)
+
+## Bugs fixed (and even more features)
+
+It is difficult to evaluate the amount of commits directly related to
+Pitivi in GStreamer. However:
+
+-   At least 50 bugs in GStreamer have been fixed by Mathieu Duponchelle
+    between January and September 2013:
+-   At least [96
+    
bugs](https://bugzilla.gnome.org/buglist.cgi?chfieldto=2013-09-30;query_format=advanced;chfieldfrom=2011-08-01;longdesc=pitivi;longdesc_type=allwordssubstr;product=GStreamer)
+    in GStreamer since [0.15](releases/0.15.md) mention Pitivi
+
+In GStreamer Editing Services, the Pitivi team has made 975 commits in
+preparation for this release.
+
+In Pitivi:
+
+-   [Hundreds of bug
+    
reports](https://bugzilla.gnome.org/buglist.cgi?query_format=advanced&target_milestone=0.91&product=pitivi)
+    were resolved
+-   There were 1348 commits between 0.15.2 and 0.91.
+
+Since you're reading the release notes of an an alpha release, we
+suspect you might be pretty geeky, so here are roughly 150 (of the 1300+
+commits) that are “interesting” but were not necessarily big enough to
+be mentioned in the “top features” above.
+
+`   0d21848 Kill ChangeLog with fire`\
+`   c07dc1b mediafilespreviewer: Remove sync-message handler and add proper xid handling`\
+`   a0a21e6 viewer: Use the `“`realize`”` GTK callback to asynchronously obtain window handle`\
+`   6f4c58f viewer: Disable GTK double buffering to prevent flickering and black images`\
+`   351a833 project, timeline: Set restriction caps on tracks.`\
+`   e2c59ca timeline: Reimplement the seeking and framestepping keyboard shortcuts`\
+`   1362142 pitivi: Rely on timeline widgets' focus to set actions/shortcuts sensitivity`\
+`   81cd77c check: Drop the GooCanvas dependency`\
+`   e956801 Redesign the rendering progress dialog`\
+`   a568665 render: Provide an estimation of the output file size`\
+`   6b2e69b mainwindow: Make context tabs (2nd child of the 2nd hpane) not resize themselves`\
+`   d276be2 pitivi: Implement the notion of `“`read-only`”` projects`\
+`   0008538 project: Refactor and fix saveProject`\
+`   054489a Conform to the AppData spec so we show up properly in the GNOME Software Center`\
+`   88ebb08 Fix .desktop file categories so that Pitivi will show up in GNOME Software`\
+`   b61048d mediafilespreviewer: Always use the same videosink`\
+`   54dc09f pipeline: when not in RENDER, the pipeline can and must recover`\
+`   75b96b2 Use yelp-tools instead of gnome-doc-utils`\
+`   24189e4 Properly parent the `“`Render`”` and `“`Project`` ``Settings`”` dialogs`\
+`   a9900d7 medialibrary: Support the new `“`large`”` (256 pixels) thumbnails`\
+`   127e6e6 medialibrary: Handle multiple sizes for fallback icons when there are no thumbs`\
+`   e360b2a mediafilespreviewer: Fix the icon shown when previewing audio files`\
+`   1d1e1ed Make the import filechooser dialog modal so that it works in fullscreen`\
+`   6599953 timeline/elements: Improve the appearance and visibility of the keyframe curves`\
+`   d9f5364 utils/widgets: Fill sliders with color to indicate the default values`\
+`   3d02054 check: Make numpy a hard dependency as we now need it for core audio waveforms`\
+`   43255f6 previewers: Delay initial thumbnail & waveform processing to when the UI is idle`\
+`   b04c221 Regulate the frequency at which thumbnails get created.`\
+`   50546b0 previewers: add saving and loading for the waveforms.`\
+`   caccf69 This commit adds a waveform audio previewer.`\
+`   7154b06 pitivi: Port to the new commit based API in GES`\
+`   ddcee62 previewers: Periodically save clip thumbnails`\
+`   e492dde previewers: Avoid blocking the UI when generating clip thumbnails`\
+`   4a01a2e mainwindow: Ensure `“`Clip`` ``properties`”` is the focused context tab on startup`\
+`   e70b055 render:  Show rendering errors in a dialog`\
+`   62157c7 Do not set titles on modal message dialogs, they are redundant with the contents`\
+`   71a9d45 Define some more harmonized default colors for timeline elements/clips`\
+`   aa64ac9 Save resources by only drawing the visible thumbs`\
+`   4a0cb3c Improve clip thumbnailing performance when scrolling/zooming the timeline`\
+`   f47b1f9 Various performance improvements to the timeline clip thumbnailer`\
+`   ff50eb2 Register mimetypes for the new xges project format`\
+`   c86d33f New X-Large (256x256) logo icon`\
+`   e643fb5 Add a button to toggle a `“`gapless`”` (auto-ripple) timeline mode`\
+`   d5bd8dc clipproperties: Prevent drag and drop `“`ghosts`”` from the effects library`\
+`   cbd8910 Add a contextual help button in the render dialog to explain container formats`\
+`   931a445 clipproperties: Use a symbolic icon for the `“`Remove`` ``effect`”` inline tool button`\
+`   c31a230 Automatically save and restore the main window's position`\
+`   f2389ad Use symbolic icons for the `“`Reset`` ``to`` ``default`` ``value`”` dynamic widget buttons`\
+`   b3be493 mediafilespreviewer: Update the preview widget slider on a more frequent basis`\
+`   1fcbbe6 Use the system's default image viewer to preview images from the media library`\
+`   76573e8 Fix a race between clicks on the preview widget's slider and position updates`\
+`   f67b9ea Use symbolic icons everywhere in the Media Library toolbar`\
+`   1a51f04 render: Stop rendering when the user presses Escape`\
+`   4b4e969 render: Properly save the render directory`\
+`   2f2c92a effects: Scale down thumbnails to fit better in the new listview arrangement`\
+`   3ef1f81 utils/ui: Properly ignore subtitles, including the new DiscovererSubtitleInfo`\
+`   4c10b27 medialibrary: Force quoting URIs right before computing the thumbnail hash`\
+`   89dc28e utils/misc: Use Gst.filename_to_uri instead of manually encoding URIs`\
+`   42587d3 medialibrary: Remove the ancient filename shortening code, rely on Pango instead`\
+`   b2309e9 medialibrary: Make special characters show up correctly in iconview mode`\
+`   1f766ab medialibrary: Rework the way we sort files in the view`\
+`   6b5b009 medialibrary: Respect the fdo spec to find thumbnails`\
+`   1301dab Specify the dependencies version requirements in only one place (check.py)`\
+`   248e0a2 Refactor check.py for faster, better (simpler), stronger dependency checking`\
+`   3ab1026 Remove the pitivi.spec file`\
+`   d52614c Remove the ABOUT-NLS file, it's completely useless`\
+`   2b5ef0c Update AUTHORS to match the About dialog`\
+`   3361da9 New icons for split, group/ungroup and align`\
+`   b0a36cd viewer: When undocked, show a button to toggle fullscreen mode`\
+`   9d50648 mainwindow: Make the medialibrary previewer work even in fullscreen mode`\
+`   c9493f9 medialibrary: Do not emit `“`play`”` twice when double-clicking a clip`\
+`   d9f3034 preset: Allow presets with slash chars in the name`\
+`   bcf90cf Notify and play a sound when rendering is complete`\
+`   b0617ea tabsmanager: Restore the state of undocked utility windows on startup`\
+`   a4c3674 tabsmanager: Save/restore settings from detached tabs`\
+`   5c063a6 Refine the `“`Split`”` icon to be pixel-perfect and closer to a symbolic style`\
+`   4f417ef medialibrary: Use MIME types instead of extensions for filtering the filechooser`\
+`   6bc2427 Make the code compliant with PEP8 1.3`\
+`   0fb0c0e Set widget names for AT-SPI/accessibility`\
+`   6d9a4d0 Remove the code to hide/show toolbars`\
+`   e63d158 Hide the menubar in fullscreen mode`\
+`   3ee3ea5 Auto-hide and show the main toolbar in fullscreen mode`\
+`   ca61a6d timeline: Add missing labels to (un)group and align`\
+`   f7a10b1 timeline: Remove `“`Keyframe`”` from the toolbar, but keep the keyboard shortcut`\
+`   4b4291a mainwindow: Make the timeline toolbar vertical`\
+`   6e70641 Make the filename entry in render dialog activate the Render action`\
+`   1c1807a mainwindow: Filter for the file's extension when prompting for missing files`\
+`   4568997 medialibrary: Only show known file formats by default in the filechooser`\
+`   254f50c mainwindow: Fix the filechooser filter for opening project files`\
+`   b295b6a render: Properly parent the advanced codec settings dialogs`\
+`   55ba545 mediafilespreviewer: Add support for the `“`copyright`”` tag`\
+`   454e65b Move the media and effect library toolbars to the top for consistency`\
+`   e0a04cd transitions: Use a symbolic icon and placeholder text for search`\
+`   67aba11 effects: Use an inline toolbar for searching and categories`\
+`   4240ea5 medialibrary: Use GtkBuilder for infobars`\
+`   70f2ba9 Implement a Media Library toolbar and kill menu items`\
+`   94d7d6b Document our keyboard shortcuts and allow contextual help`\
+`   459532f Implement a title editor`\
+`   c4cb00e medialibrary: Hide the infobar when sources start importing`\
+`   857be52 Increase the amount of recent items in the welcome dialog to 10`\
+`   d6006aa Implement the ability to go a frame forward or backwards`\
+`   508dab0 When space is constrained, allow notebook tabs to scroll`\
+`   16e2087 When not usable, hide widgets in clip properties and transitions`\
+`   1b7cd97 Refactor clipproperties and fix the expansion behavior with GTK3`\
+`   b59af58 Fixes traceback when user double-clicks on an empty row in the treeview`\
+`   c469d35 Use symbolic toolbar icons in Project settings and Render dialog`\
+`   11a4166 Use the GTK3 `“`inline`”` style for toolbars under presets listviews`\
+`   3b63ba3 projectsettings UI: Force some fields to be numeric only`\
+`   1d35ad3 Use the new GTK3 features for the About/credits dialog`\
+`   8e90540 Set the `“`primary-toolbar`”` style on the main toolbar`\
+`   1130ce7 Use a dark theme variant for GTK3`\
+`   d996933 pitivi: Playbin2 is dead, use playbin`\
+`   59b3956 Abort project loading when a clip does not have a replacement`\
+`   edeb4e1 Effects: Merge icon and treeview into a single view`\
+`   2c9e8f5 Make the about dialog's credits future-proof`\
+`   9017fc6 Add tooltips to buttons at the bottom of the Preferences UI`\
+`   d44d440 Implement UI testing with Dogtail`\
+`   b5155c8 Prevent the timeline's Zoom Fit button from expanding`\
+`   d205a51 Add a preference for the default duration of image clips in the timeline`\
+`   493c226 Refactor GTK+ actions and keyboard shortcuts`\
+`   194a714 timeline: Bind Ctrl+0 to the `“`Zoom`` ``fit`”` action`\
+`   d8a09f9 mainwindow: Use standard shortcuts for Help and Fullscreen`\
+`   995cedb medialibrary: Standardize playback in iconview and treeview`\
+`   a63564e Create icons for transitions`\
+`   c429604 Implement SMPTE video transitions`\
+`   426257c Remove old mimetype icons`\
+`   e04a3d2 Merge branch 'ges'`\
+`   df36892 Show a better default progressbar text when starting rendering`\
+`   dbc3a26 render: Set power management only when starting/resuming`\
+`   6c70423 Allow pausing and resuming rendering`\
+`   6886c57 timeline: When autoscrolling, jump to 1/6th of the width, not 1/2`\
+`   f2ff6c3 timeline: Fix the horizontal scrollbar management for zooming`\
+`   20ad0a2 Add a version checker`\
+`   4c0abcb Show a vertical line to indicate clip snapping`\
+`   608ab1a Port to the new GES timeline edition API`\
+`   48b8d46 thumbnailer: Add on disk thumbnail caching`\
+`   c012a2c Add the ability to render video only or audio only`\
+`   f73e918 Add a `“`rule`` ``of`` ``thumb`` ``for`` ``long`` ``lines`”` to coding style conventions`\
+`   2df0743 When run from git, don't show a stable version number in About`\
+`   44787d9 Add version info to the About dialog`\
+`   5b9f1e6 If available, show thumbnails for missing files to help the user`\
+`   4ae8768 Cleanup the translatable strings in project settings`\
+`   96c79e3 Set a better default height for the render dialog`\
+`   98cd55e Allow copying a clip's properties to project settings`\
+`   e8e7296 viewer: Preview the clips being trimmed`\
+`   64fb372 Set the main official repository to be git.gnome.org/pitivi`\
+`   e82764c Offer to to load the autosaved backup instead of the project file`\
+`   4499155 Show the time for the unsaved changes confirmation dialog`\
+`   d971cfc Allow saving a snapshot of the current frame as an image file`\
+`   14ceaa0 medialibrary: Make discovery asynchroneous and show progress`
+
+`   fdb9bd4 Disable timeline accels when focusing Media Library contents`\
+`   6ff7983 Prevent Delete from being sensitive in Media Library and Effects`\
+`   33ab288 Make the search bars use focus-in events to ensure you can't have sensitive actions that prevent 
them from working.`
+
+`   431769b Kill the `“`Preview`”` menu and reorganize the `“`Timeline`”` menu`\
+`   6a5e5df Selectively use the word `“`encoder`”` when talking about codecs`\
+`   8759e58 pitivi/ui/encodingdialog.py: inhibit logging out, inhibit suspend/shutdown etc. when rendering`\
+`   845d911 pitivi/ui/viewer.py: inhibit screensaver whilst previewing videos.`\
+`   b7fcd7c Fix the resolution and framerate parsing in the Media Library`\
+`   94bf5f2 ui: Get source thumbs from the Freedesktop thumbnail cache spec`\
+`   23d08bb Ensure that previewed videos fit within a reasonable size`\
+`   1ee2ada Put the Media Library previewer's playback controls at the top`\
+`   39f271f Automatically set the size of the Media Library previewer`\
+`   d95adeb Prevent the render dialog from having a blank output filename`
+
+What, you want more?! Well, you can use this command in our code
+repository:
+
+`git log RELEASE-0_15_0..RELEASE-0_91_0`
+
+# Contributors for this release
+
+In Pitivi:
+
+`  526  Jean-François Fortin Tam`\
+`  266  Thibault Saunier`\
+`  190  Mathieu Duponchelle`\
+`   72  Paul Lange`\
+`   37  Piotr Drąg`\
+`   26  Alex Băluț`\
+`   24  Daniel Mustieles`\
+`   23  Matas Brazdeikis`\
+`   18  Marek Černocký`\
+`   17  Matej Urbančič`\
+`   17  Nicolas Dufresne`\
+`   14  Daniel Thul`\
+`   12  René Stadler`\
+`   10  Alexandru Băluț`\
+`    8  Stephen Griffiths`\
+`    8  Мирослав Николић`\
+`    7  Luis de Bethencourt`\
+`    5  Lubosz Sarnecki`\
+`    5  Martin Srebotnjak`\
+`    4  Rafael Ferreira`\
+`    3  Aurimas Černius`\
+`    3  Fran Diéguez`\
+`    3  Milagros Infante Montero`\
+`    2  Andrej Žnidaršič`\
+`    2  Anton Belka`\
+`    2  Balázs Úr`\
+`    2  Bruno Brouard`\
+`    2  Dimitris Spingos`\
+`    2  Elad Alfassa`\
+`    2  Joris Valette`\
+`    2  Meenal-goyal`\
+`    2  Pere Orga`\
+`    2  Thiago Santos`\
+`    1  Adonfo Jayme Barrientos`\
+`    1  Antonio Fernandes C. Neto`\
+`    1  Brian Grohe`\
+`    1  Carles Ferrando`\
+`    1  Christian Kirbach`\
+`    1  Danny Piccirillo`\
+`    1  Dominique Leuenberger`\
+`    1  Enrico Nicoletto`\
+`    1  Florêncio Neves`\
+`    1  Gabor Kelemen`\
+`    1  Gianvito Cavasoli`\
+`    1  Jan Gerber`\
+`    1  Javier Jardón`\
+`    1  Jiro Matsuzawa`\
+`    1  Jordi Mas`\
+`    1  Marianne Corvellec`\
+`    1  Mattias Põldaru`\
+`    1  Milagros Alessandra Infante Montero`\
+`    1  Odin Hørthe Omdal`\
+`    1  Oliver Propst`\
+`    1  Olivier Duchateau`\
+`    1  Panagiotis Papadopoulos`\
+`    1  Praveen Illa`\
+`    1  Rūdolfs Mazurs`\
+`    1  Simon Corsin`\
+`    1  Simon Wenner`\
+`    1  Ulisse Perusin`\
+`    1  Yann Pravo`\
+`    1  Yaron Shahrabani`\
+`    1  Yuri Myasoedov`
+
+In GES:
+
+`  596  Thibault Saunier`\
+`   98  Mathieu Duponchelle`\
+`   74  Edward Hervey`\
+`   54  Tim-Philipp Müller`\
+`   34  Sebastian Dröge`\
+`   26  Luis de Bethencourt`\
+`   11  Simon Corsin`\
+`   10  Volodymyr Rudyi`\
+`    8  Stefan Kost`\
+`    6  Mark Nauwelaerts`\
+`    6  Stefan Sauer`\
+`    5  Robert Swain`\
+`    5  Vasilis Liaskovitis`\
+`    5  Руслан Ижбулатов`\
+`    4  Nicolas Dufresne`\
+`    4  Thiago Santos`\
+`    3  Alessandro Decina`\
+`    3  Anton Belka`\
+`    3  Lubosz Sarnecki`\
+`    3  Paul Lange`\
+`    3  Xabier Rodriguez Calvar`\
+`    2  Matas Brazdeikis`\
+`    2  Vincent Penquerc'h`\
+`    1  Alban Browaeys`\
+`    1  Andoni Morales Alastruey`\
+`    1  David Schleef`\
+`    1  Jean-François Fortin Tam`\
+`    1  Joris Valette`\
+`    1  Kerrick Staley`\
+`    1  Kishore Arepalli`\
+`    1  Mateu Batle`\
+`    1  Stéphane Maniaci`\
+`    1  Thomas Vander Stichele`\
+`    1  Wim Taymans`
+
+# Download, additional information and feedback
+
+A tarball is available on
+<http://ftp.gnome.org/pub/GNOME/sources/pitivi/0.91/>
+
+See [the Pitivi website](http://www.pitivi.org) and [building with
+GES](building_with_ges.md for download and installation
+instructions.
+
+Feedback is welcome. See [bug reporting](Bug_reporting.md) for
+tips and tricks.
diff --git a/docs/releases/0.92.md b/docs/releases/0.92.md
new file mode 100644
index 0000000..e2f3d09
--- /dev/null
+++ b/docs/releases/0.92.md
@@ -0,0 +1,118 @@
+# 0.92 Release “Baby Steps”
+
+The Pitivi team is proud to announce the second alpha release of the new
+version of Pitivi based on [GES](GES.md), the GStreamer Editing
+Services library. This is a incremental bugfixing release, so please
+make sure to see the [0.91](releases/0.91.md) release notes to get the
+full picture.
+
+<span style="background:#FF0000">**WARNING**</span>: Please keep in mind
+that this is still an *alpha* release, so there may be some bugs we
+haven't found yet. We appreciate your feedback, so try it out, let us
+know how well it works for you and report detailed bugs for issues you
+may encounter. Again, this is <span style="color:#FF0000">not yet
+considered production-ready software</span>.
+
+That said, one month after [0.91](releases/0.91.md), with the feedback we
+have received so far, we are pretty confident that the new release
+series is of much higher quality than the [0.15](releases/0.15.md) series
+and older.
+
+## Changes and fixed bugs
+
+Executive summary:
+
+-   Fix a bug where transitions would stop working
+-   Fix the handling of rendering parameters
+-   Fixes for the keyframes UI in the timeline
+-   Usability improvements for the welcome dialog
+-   Update the preview immediately when adding an effect
+-   Fixes for AppData XML spec compliance
+-   Various build and packaging fixes
+-   Drop the PyXDG dependency
+-   Translations have been updated
+
+See the list of [reported bugs that have been fixed in
+0.92](https://bugzilla.gnome.org/buglist.cgi?product=pitivi;target_milestone=0.92).
+
+General fixes:
+
+`   e33598c ui/startupwizard: Force ButtonBox items to have a homogeneous/uniform width`\
+`   b9f62d7 Keep the welcome dialog shown when clicking `“`Missing`` ``dependencies...`”\
+`   4dcbf5c elements: Set clip inpoints to prevent keyframes from breaking on split/trim`\
+`   1de8d96 previewers: stop waveforms and thumbnails generation when removing clips`\
+`   2cb9298 mainwindow: Make it possible to save project when an asset moved`\
+`   bfe4154 project: Avoid to work with read only caps`\
+`   79fb9ab render: Take into account video size scaling value when rendering`\
+`   e43c54d project: Always set auto-transition to true on newly created timelines`\
+`   dcb9b68 effects: Commit the timeline when adding an effect.`\
+`   4936135 keyframes: If the length of the line is inferior to one pixel, don't draw it.`
+
+Build/packaging fixes:
+
+`   c316cc1 Apply minor changes to make AppData XML file friendlier to distributions`\
+`   8159d23 Drop dependency on PyXDG, use GLib instead`\
+`   5c94a24 build: Don't attempt locale-uninstalled bits if DESTDIR is set`\
+`   6490a95 bin: Fix GI_TYPELIB_PATH mistakes`\
+`   308f18c bin: Build gst-devtools only if in developer mode`\
+`   078b71b bin: Better handling of gst version and add default scenario path`\
+`   306e880 bin: Do not build GI and PyGobject if not necessary`
+
+## Requirements
+
+Dependencies/requirements have changed significantly since the 0.15
+series, but have stayed mostly the same since [0.91](releases/0.91.md)
+(pyxdg was dropped as a dependency).
+
+Generally speaking, you can refer to Pitivi's check.py for the
+dependencies' versions specific to a given release. See also
+[dependencies](Dependencies.md) for additional tips.
+
+## Known issues
+
+Please see the [0.91](releases/0.91.md) release notes.
+
+See the list of [currently known
+issues](https://bugzilla.gnome.org/buglist.cgi?query_format=advanced;bug_severity=blocker;bug_severity=critical;bug_severity=major;bug_severity=normal;bug_severity=minor;bug_severity=trivial;bug_status=NEW;bug_status=ASSIGNED;bug_status=REOPENED;product=pitivi),
+the [0.91 and 0.92-specific
+issues](https://bugzilla.gnome.org/buglist.cgi?query_format=advanced&version=0.91&version=0.92&resolution=---&product=pitivi)
+and the list of [bugs that need re-testing with 0.91 and
+0.92](https://bugzilla.gnome.org/buglist.cgi?query_format=advanced;bug_status=NEEDINFO;target_milestone=0.91;target_milestone=0.92;product=pitivi)
+(you can help!)
+
+# Contributors for this release
+
+In Pitivi:
+
+`    9  Thibault Saunier`\
+`    6  Jean-François Fortin Tam`\
+`    6  Mathieu Duponchelle`\
+`    3  Colin Walters`\
+`    2  Fran Diéguez`\
+`    1  Cheng-Chia Tseng`\
+`    1  Claude Paroz`\
+`    1  Daniel Mustieles`\
+`    1  Marek Černocký`\
+`    1  Martin Srebotnjak`\
+`    1  Rafael Ferreira`\
+`    1  Rūdolfs Mazurs`\
+`    1  Timo Jyrinki`\
+`    1  Мирослав Николић`
+
+In GES:
+
+`    5  Thibault Saunier`\
+`    2  Kishore Arepalli`\
+`    2  Mathieu Duponchelle`
+
+# Download, additional information and feedback
+
+A tarball is available on
+<http://ftp.gnome.org/pub/GNOME/sources/pitivi/0.92/>
+
+See [the Pitivi website](http://www.pitivi.org) and [building with
+GES](building_with_ges.md for download and installation
+instructions.
+
+Feedback is welcome. See [bug reporting](Bug_reporting.md) for
+tips and tricks.
diff --git a/docs/releases/0.93.md b/docs/releases/0.93.md
new file mode 100644
index 0000000..19b253f
--- /dev/null
+++ b/docs/releases/0.93.md
@@ -0,0 +1,210 @@
+# 0.93 Release “Ra is a happy”
+
+The Pitivi team is proud to announce the third release of the new
+version of Pitivi based on [GES](GES.md), the GStreamer Editing
+Services library. This is a incremental bugfixing release, so please
+make sure to see the [0.91](releases/0.91.md) and [0.92](releases/0.92.md)
+release notes to get the full picture.
+
+This is now considered a **beta** release. As per the feedback we've
+received since 0.91 and the many fixes we've made since then, we are
+confident that the new release series is of much higher quality than the
+0.15 series and older.
+
+This release works well for us and we make nice movies with it. Try it
+out, have fun and report detailed bugs for issues you may encounter!
+
+## Changes and fixed bugs
+
+Executive summary:
+
+-   Port the viewer and media file previewers to use a Clutter video
+    output sink
+-   Visual refinements to the timeline (clip positioning, borders,
+    selections)
+-   Improvements to the ruler and timecode display (cleaner
+    representation, respects user theme colors and fonts, etc.)
+-   Allow importing MPEG-TS/AVCHD files. We are working towards
+    improving the ts demuxer for nonlinear editing usecases.
+-   Fixes and improvements to the timeline's clip thumbnailers
+-   Clip thumbnailing in the media library, better import error handling
+    (see also [this blog
+    post](http://jeff.ecchi.ca/blog/2014/01/04/scratching-some-media-library-itches/))
+-   Various fixes to the application version checking
+-   Rework the way dependencies are checked on startup
+-   Make some features contextual and cleanup menus
+-   Many content updates to the user manual, thanks to Tomas Karger
+-   Papercut fixes to keyframe curves
+-   Various fixes for rendering, including:
+    -   Fix incorrectly setting project settings from clip properties
+    -   Fix playback (and render) of DV files
+    -   Fix rendering to MP4 container formats
+    -   Fix rendering to MPEG-TS container formats (why in the world
+        would you ever want to do that?)
+    -   Fix a bug in GES where files would sometimes be rendered with no
+        video stream
+    -   Usability improvements and minor bug fixes
+-   Fix pylint errors
+-   Various fixes to the automated test suite
+-   Code refactoring and cleanup all over the place
+-   Fixes for AppData XML spec compliance
+-   Various build and packaging fixes
+-   Translations have been updated
+
+See the list of [reported bugs that have been resolved in
+0.93](https://bugzilla.gnome.org/buglist.cgi?product=pitivi;target_milestone=0.93).
+
+Since the 0.92 release, 403 commits were made across 166 files. Here is
+a summary of some noteworthy commits:
+
+`8f5d7a3 timeline: Fix dragging an asset to the ruler`\
+`bbff99d project: Default to a square pixel aspect ratio`\
+`489d514 clipmediaprops: Prevent setting an invalid framerate from a misdetected clip`\
+`6ca7dd0 mainwindow: Actually use DAR (not PAR) to set the viewer's display aspect ratio`\
+`6401261 project: Emit `“`rendering-settings-changed`”` when the pixel aspect ratio changes`\
+`b272f07 project: Flush the pipeline when we set restriction caps`\
+`17fee0c viewer: Add a button to undock the viewer directly instead of using menu actions`\
+`771db7e clipmediaprops: Allow closing the dialog with ESC`\
+`25ab268 Show the full pathname in the tooltip for an asset`\
+`2167d95 elements: Fix lines appearing a bit to the left`\
+`0ff3bae elements: Make sure the line remains straight when adding a keyframe when clicked`\
+`9a71127 mainwindow: Allow pressing ESC or q to close the preview asset window`\
+`dfc908c tests: Skip TestGnomeSystem.testPowerInhibition if the power is inhibited`\
+`5ffd50e timeline: Handle only the key-press/release events on the timeline`\
+`5440803 elements: Fix video clips keyframes and lines vertical position`\
+`e54f0f5 clipproperties: Fix effect selection in the clip properties tab`\
+`7d3268b mainwindow: Short and consistent names for the context tabs`\
+`2a0b442 mainwindow: Show by default the title editor tab`\
+`1df29a8 medialibrary: Add half space unit at the left of the search field`\
+`b41a661 elements: Avoid 0-sized clips to become invisible`\
+`f0e557d widgets: Use the zoom slider tooltip to display the duration of the displayed timeline`\
+`a0b86d8 widgets: Simplify the zoom controls logic`\
+`86eb6ce widgets: Handle smooth scroll events on the zoom slider`\
+`f0f4f33 render: Allow the render progress dialog to close the desktop notification`\
+`fe2d994 mainwindow: Make the version display more robust in the about window`\
+`2b02155 tests: Allow the tests to be run by frameworks like nosetests`\
+`a96c7d6 bin: Make sure we use python2 when python3 is the default`\
+`510354e mediafilespreviewer: Keep the PreviewWidget size fixed`\
+`b1c3d59 mainwindow: Move the preview window size logic to a new method`\
+`0f0bd6b viewer: Make the AspectFrame part of the ViewerWidget`\
+`ea0149f viewer: Focus back the timeline when using the buttons`\
+`bd809c5 ruler: Remove hardcoded background color`\
+`b54e840 ruler: Use the same color for the entire playhead`\
+`614d70f ruler: Fix the play header display`\
+`1c0181b viewer: Add spacing around the play buttons`\
+`7734ff6 widgets: Hide the zero hour in the time widget`\
+`25107dc timeline: Make the timeline toolbar and scrollbars background transparent`\
+`944ff5e render: Fix the video codec settings saving`\
+`7215321 check: Make GnomeDesktop a soft dependency`\
+`946b99f ruler: Use system font`\
+`3f78e85 ruler: Show the hours and millis only if useful`\
+`7a301c8 ruler: Use a smaller font for the millis`\
+`d9ea434 elements: Remove margins between clips`\
+`cb89963 timeline: Fix the scrollbars alignment by using Gtk.Grid`\
+`88790fb elements: Change the border color when a clip is selected`\
+`5cc89e3 elements: Keep the handlebars hidden when the clip is selected`\
+`1af6c48 pipeline: Handle negative position when pausing`\
+`3b6ecb1 timeline: Fix stacktrace when clicking handlebar`\
+`3fd9b9a previewers: Fix stacktrace when removing a clip`\
+`cbe8af7 timeline: Insert the clip at the end of the longest layer`\
+`8551d7d widgets: Fix the zoom slider not showing the initial zoom value`\
+`3d19f44 timeline: Avoid zooming in when setting the best zoom ratio`\
+`ef3f62a timeline: connect to the whole GUI to end marquee selection.`\
+`7395094 project: cast remaining uncasted restriction fields.`\
+`1f3bf84 viewer: Use an AspectFrame widget in the external viewer, like the internal one`\
+`75c01e5 medialibrary: Generate thumbnails in the background`\
+`bf95c04 medialibrary: Automatically generate missing thumbnails`\
+`5cab48d Use icon_name all over the place, as stock icons are deprecated in GTK+ 3.10`\
+`8f031df Make the timeline insensitive during rendering by hijacking all events`\
+`afca76e previewers: Remove duplicated CPU tracking code`\
+`7e6b273 previewers: Set the thumbnail pixbuf in a single place`\
+`c9616fc previewers: Optimize thumbnails reuse`\
+`c296ebf previewers: Do not fail if thumbnail timestamp is not the requested one`\
+`3ef0717 medialibrary: Allow importing MTS files`\
+`e765314 medialibrary: Show the amount of errors with ngettext in warning_infobar`\
+`ccb2ce3 medialibrary.ui: Use a smaller, symbolic label for warning_infobar close button`\
+`7ea7245 medialibrary: Correctly represent imported vs total clips in the progressbar`\
+`7061503 All around: fix positional arguments warnings`\
+`a66be04 bin/pitivi.in : Don't call GObject.threads_init if pygobject is recent enough.`\
+`2e56e51 Update the app icon`\
+`96bc43a system: When the notification daemon is dead get over it`\
+`38861f7 system: Use the system instance for displaying notifications`\
+`c2fb6f8 Render: don't use the caps name for the muxer / encoder caps.`\
+`6933a56 Make pitivi.appdata.xml more translation-friendly and pass appdata-validate`
+
+## Requirements
+
+Dependencies/requirements have changed significantly since the 0.15
+series, but have stayed mostly the same since [0.92](releases/0.92.md).
+For this release, we depend on GStreamer, GNonLin and GES 1.2.
+
+Generally speaking, you can refer to Pitivi's check.py for the
+dependencies' versions specific to a given release. See also
+[dependencies](Dependencies.md) for additional tips.
+
+## Known issues
+
+See the list of [currently known
+issues](https://bugzilla.gnome.org/buglist.cgi?query_format=advanced;bug_severity=blocker;bug_severity=critical;bug_severity=major;bug_severity=normal;bug_severity=minor;bug_severity=trivial;bug_status=NEW;bug_status=ASSIGNED;bug_status=REOPENED;product=pitivi),
+the [0.91, 0.92 and 0.93-specific
+issues](https://bugzilla.gnome.org/buglist.cgi?query_format=advanced&version=0.91&version=0.92&version=0.93&resolution=---&product=pitivi)
+and the list of [bugs that need re-testing with
+0.91](https://bugzilla.gnome.org/buglist.cgi?query_format=advanced;bug_status=NEEDINFO;target_milestone=0.91;product=pitivi)
+(you can help!)
+
+You may also want to see the [0.91](releases/0.91.md) release notes'
+“known issues” section.
+
+# Contributors for this release
+
+In Pitivi:
+
+`  234  Alexandru Băluț`\
+`   44  Mathieu Duponchelle`\
+`   33  Tomas Karger`\
+`   27  Jean-François Fortin Tam`\
+`   16  Marek Černocký`\
+`   10  Piotr Drąg`\
+`    9  Daniel Mustieles`\
+`    6  Thibault Saunier`\
+`    4  Rafael Ferreira`\
+`    3  Enrico Nicoletto`\
+`    2  Aurimas Černius`\
+`    2  Daniel Korostil`\
+`    2  Kristjan SCHMIDT`\
+`    2  Мирослав Николић`\
+`    1  Benjamin Steinwender`\
+`    1  Cheng-Chia Tseng`\
+`    1  Dimitris Spingos`\
+`    1  Gabor Kelemen`\
+`    1  Jakub Steiner`\
+`    1  Marcel Tiede`\
+`    1  Matej Urbančič`\
+`    1  Olivier Duchateau`\
+`    1  Volkan Gezer`
+
+In GES:
+
+`   38  Thibault Saunier`\
+`    4  Alexandru Băluț`\
+`    4  Sebastian Dröge`\
+`    3  Dan Williams`\
+`    3  Mathieu Duponchelle`\
+`    3  Tim-Philipp Müller`\
+`    2  Kishore Arepalli`\
+`    1  Andreas Schwab`\
+`    1  Edward Hervey`\
+`    1  Lubosz Sarnecki`\
+`    1  Stefan Sauer`
+
+# Download, additional information and feedback
+
+A tarball is available on
+<http://ftp.gnome.org/pub/GNOME/sources/pitivi/0.93/>
+
+See [the Pitivi website](http://www.pitivi.org) and [building with
+GES](building_with_ges.md for download and installation
+instructions.
+
+Feedback is welcome. See [bug reporting](Bug_reporting.md) for
+tips and tricks.
diff --git a/docs/releases/0.94.md b/docs/releases/0.94.md
new file mode 100644
index 0000000..e3c2b01
--- /dev/null
+++ b/docs/releases/0.94.md
@@ -0,0 +1,206 @@
+# 0.94 Release “Tricks or Tracebacks?”
+
+The Pitivi team is proud to announce the fourth release of the new
+version of Pitivi based on [GES](GES.md), the GStreamer Editing
+Services library. This is mostly a incremental bugfixing release, so
+make sure to see the [0.91](releases/0.91.md), [0.92](releases/0.92.md)
+and [0.93](releases/0.93.md) release notes to get the full picture.
+
+This is considered a **beta** release. As per the feedback we've
+received since 0.91 and the many fixes we've made since then, we are
+confident that the new release series is of much higher quality than the
+0.15 series and older.
+
+This release works well for us and we make nice movies with it. Try it
+out, have fun and report detailed bugs for issues you may encounter!
+
+## Changes and fixed bugs
+
+Executive summary:
+
+-   The main toolbar and menubar have been replaced by a headerbar and
+    menubutton, saving a significant amount of precious vertical space
+    and using the horizontal space better.
+-   The viewer has been ported to use a GStreamer GL video output sink
+    instead of the Clutter sink. This solves crashes when running Pitivi
+    outside of GNOME Shell and is expected to be a more future-proof
+    solution.
+-   We dropped our use of CoGL APIs, namely path\_round\_rectangle which
+    caused crashes on various Linux distributions shipping a broken
+    version of CoGL
+-   Pitivi has been ported to Python 3
+-   Text wrapping in the rendering progress dialog and title editor has
+    been fixed
+-   Effects can now be reordered within a clip's properties
+-   The default positioning of UI components (when starting from a fresh
+    install) has been improved to be balanced properly
+-   Undocked window components do not shift position on startup anymore
+-   Docked window components do not shift position on startup anymore,
+    when the window is not maximized. When the window is maximized, the
+    issue remains (your help to investigate this problem is very much
+    welcome, see [bug
+    723061](https://bugzilla.gnome.org/show_bug.cgi?id=723061))
+-   The title editor's UI has been simplified, and now supports decimal
+    font sizes
+-   Educational infobars throughout the UI have been tweaked to make
+    their colors less intrusive
+-   Various issues have been corrected regarding:
+    -   Drag and drop in the media library
+    -   Audio waveforms
+    -   Undo/redo
+-   The user manual is now up to date with the state of the new Pitivi
+    series
+-   Pitivi has been ported to GtkApplication, allowing us to remove a
+    lot of old code.
+-   Port deprecated GTK+ widgets to new ones
+-   Timeline UI animations have been tweaked
+-   Code refactoring and cleanup all over the place
+-   Various build and packaging fixes
+-   Various fixes to the test suite
+-   Translations have been updated
+
+See the list of [reported bugs that have been resolved in
+0.94](https://bugzilla.gnome.org/buglist.cgi?product=pitivi;target_milestone=0.94).
+
+Since the 0.93 release, 240 commits were made across 159 files. Here is
+a summary of some noteworthy commits:
+
+`8f252a4 viewer: Do not call the expose function when we set the aspect ratio`\
+`2846425 viewer: Do not forget to set ViewerWidget sink when setting our pipeline`\
+`c6b12b7 Show an error dialog when encountering Unicode decoding errors/broken locales`\
+`8776f73 clipmediaprops: Handle potentially broken framerates such as 1000 fps`\
+`10d82cd pitivi: Remove our hard dependency to GdkX11`\
+`4ef394b timeline: Fix dragging of second clip from the media library to the timeline`\
+`b019640 Make the title editor's infobar more compact to avoid excessive wrapping`\
+`f0d8f4f Make the `“`User`` ``Manual`”` menu item work in the main MenuButton`\
+`4c6e137 Fix the text wrapping in the rendering progress dialog`\
+`8bc597f effects: Allow reordering the effects of a clip`\
+`ba5a7a8 timeline: Fix effects dragged onto clips`\
+`d9e89f8 effects: Display the human names in the list of effects of a clip`\
+`b054f9f clipproperties: Disable sorting of the clip's effects`\
+`e4702c5 clipproperties: Fix effects tooltips`\
+`374aa64 mainwindow: Better default placement for panes`\
+`279b6ed previewers: Avoid removing sources already running`\
+`a1985ae previewers: Always set lastUpdate when computing geometry`\
+`ae0ef1f video previewer: remove unused self._callback_id`\
+`67b9d5c previewers: Fix initial value of AudioPreviewer.lastUpdate`\
+`fb3f3da timeline: Get rid of some clip animations`\
+`9e39466 project: Fix setting of restriction caps values`\
+`e34bbfe Set emblem-system-symbolic for menu icon before gtk 3.13`\
+`c671383 render: Play the rendered file without blocking the UI`\
+`860d904 timeline: make sure not to set a negative size on elements.`\
+`89a9349 Change some infobars to be more discrete`\
+`af65ef5 elements: Don't use Cogl anymore.`\
+`c4c11de elements: Don't use path_round_rectangle.`\
+`9d171bf Use Gio.SimpleActions to handle global app keyboard events`\
+`f7e23b0 Make Pitivi a GtkApplication`\
+`d48a39c mainwindow: Replace the menubar and main toolbar by HeaderBar and MenuButton`\
+`2696f41 Port Pitivi to Python 3`\
+`4c09ca6 mainwindow: Fix main window's panes shifting position`\
+`6e894d8 tabsmanager: Fix utility windows' shifting behaviour`
+
+## Requirements
+
+In this release:
+
+-   We have dropped the dependency on ClutterGst
+-   We now depend on GStreamer 1.4
+-   We now depend on GTK+ 3.10
+
+Generally speaking, you can refer to Pitivi's check.py for the
+dependencies' versions specific to a given release. See also
+[dependencies](Dependencies.md) for additional tips.
+
+## Known issues
+
+-   Layer management interface is missing features.
+-   The title editor UI is still quite primitive. Please join us to make
+    it work up to your expectations! See the existing [title editor
+    
bugs](https://bugzilla.gnome.org/buglist.cgi?product=pitivi&bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&component=Title%20editor).
+-   The transformation box reimplementation is still ongoing (see [bug
+    708495](https://bugzilla.gnome.org/show_bug.cgi?id=708495)).
+-   Translations are not all fully up to date.
+-   The automated codecs installer is (still) broken. See [bug
+    686182](https://bugzilla.gnome.org/show_bug.cgi?id=686182) and [GES
+    bug 686181](https://bugzilla.gnome.org/show_bug.cgi?id=686181).
+-   The automatic clip aligner feature does not work. We need someone to
+    [port it to use our new audio waveforms processing
+    module](https://bugzilla.gnome.org/show_bug.cgi?id=708401).
+-   [No dialog to install missing codecs after discovering
+    clips](https://bugzilla.gnome.org/show_bug.cgi?id=686182), and no
+    error gets raised in that case. This means that the clip will
+    “appear” to have imported correctly, but if you try inserting it
+    into the timeline you may get errors in the background or Pitivi's
+    UI may hang.
+
+See the list of [currently known
+issues](https://bugzilla.gnome.org/buglist.cgi?query_format=advanced;bug_severity=blocker;bug_severity=critical;bug_severity=major;bug_severity=normal;bug_severity=minor;bug_severity=trivial;bug_status=NEW;bug_status=ASSIGNED;bug_status=REOPENED;product=pitivi),
+the [0.91, 0.92, 0.93 and 0.94-specific
+issues](https://bugzilla.gnome.org/buglist.cgi?query_format=advanced&version=0.91&version=0.92&version=0.93&version=0.94&resolution=---&product=pitivi)
+and the list of [bugs that need re-testing with
+0.91](https://bugzilla.gnome.org/buglist.cgi?query_format=advanced;bug_status=NEEDINFO;target_milestone=0.91;product=pitivi)
+(you can help!)
+
+# Contributors for this release
+
+In Pitivi:
+
+`   94  Alexandru Băluț`\
+`   33  Tomas Karger`\
+`   24  Thibault Saunier`\
+`   22  Jean-François Fortin Tam`\
+`   20  Lubosz Sarnecki`\
+`    8  Mathieu Duponchelle`\
+`    5  Marek Černocký`\
+`    5  Piotr Drąg`\
+`    2  Alexandre Franke`\
+`    2  Daniel Mustieles`\
+`    2  Dušan Kazik`\
+`    2  Fabian Orccon`\
+`    2  Georges Basile Stavracas Neto`\
+`    2  Ken MacLeod`\
+`    2  Milagros Alessandra Infante Montero`\
+`    2  Мирослав Николић`\
+`    1  Alexandre Prokoudine`\
+`    1  Aurimas Černius`\
+`    1  Balázs Úr`\
+`    1  Bernd Homuth`\
+`    1  Brion Vibber`\
+`    1  Cheng-Chia Tseng`\
+`    1  Dimitris Spingos`\
+`    1  Dominique Leuenberger`\
+`    1  Lasse Liehu`\
+`    1  Martin Srebotnjak`\
+`    1  Rafael Ferreira`\
+`    1  Tom Tryfonidis`\
+`    1  Yuri Myasoedov`
+
+In GES:
+
+`   53  Thibault Saunier`\
+`   15  Mathieu Duponchelle`\
+`    5  Edward Hervey`\
+`    5  Lubosz Sarnecki`\
+`    4  Sebastian Dröge`\
+`    3  Tim-Philipp Müller`\
+`    2  Christoph Reiter`\
+`    1  Alexandru Băluț`\
+`    1  Lazar Claudiu`\
+`    1  Vincent Penquerc'h`
+
+# Download, additional information and feedback
+
+A tarball is available on
+<https://download.gnome.org/sources/pitivi/0.94/>
+
+A bundle usable on any linux distribution is avalaible at:
+
+` * 64 bits platforms: 
`[`http://pitivi.ecchi.ca/bundles/releases/pitivi-0.94-beta-x86_64.tar`](http://pitivi.ecchi.ca/bundles/releases/pitivi-0.94-beta-x86_64.tar)\
+` * 32 bits platforms: 
`[`http://pitivi.ecchi.ca/bundles/releases/pitivi-0.94-beta-x86.tar`](http://pitivi.ecchi.ca/bundles/releases/pitivi-0.94-beta-x86.tar)
+
+See [the Pitivi website](http://www.pitivi.org) and [building with
+GES](building_with_ges.md for download and installation
+instructions.
+
+Feedback is welcome. See [bug reporting](Bug_reporting.md) for
+tips and tricks.
diff --git a/docs/releases/0.95.md b/docs/releases/0.95.md
new file mode 100644
index 0000000..817407e
--- /dev/null
+++ b/docs/releases/0.95.md
@@ -0,0 +1,147 @@
+# 0.95 Release “Enfant suisse”
+
+As of Nov 19, 2015, the Pitivi team is proud to announce the fifth beta
+release of Pitivi toward the 1.0 version. This is mostly an incremental
+bugfixing release, so make sure to see the [0.91](releases/0.91.md),
+[0.92](releases/0.92.md), [0.93](releases/0.93.md) and
+[0.94](releases/0.94.md) release notes to get the full picture.
+
+This is considered a beta release since the “big picture” remains
+“making Pitivi stable” (that's why the next release will bring proxy
+editing). Note that while we use the word “beta” here, this *is* the
+latest “stable” release, and is the one we recommend over all previous
+ones.
+
+Pitivi works well for us and we make nice movies with it. Try it out,
+have fun and report detailed bugs for issues you may encounter!
+
+Blog post associated with this release:
+<http://jeff.ecchi.ca/blog/2015/11/19/pitivi-0-95-enfant-suisse/>
+
+## Changes and completed tasks
+
+82 tasks have been closed, See the list of [reported tasks that have
+been resolved in
+0.95](https://phabricator.freedesktop.org/maniphest/query/iwzeFEu9xmQG/#R).
+
+Since the 0.94 release, 392 commits were made in Pitivi, fixing many
+bugs and implementing the following features:
+
+### The timeline has been rewritten
+
+The timeline has been rewritten using plain GTK+. This means that we do
+not depend on the Clutter library anymore; it was causing many problems
+for our use cases.
+
+### The clip transformation box has been reimplemented
+
+The transformation tool was previously dropped when Pitivi was ported to
+the GStreamer Editing Services. It has now been reimplemented. While its
+current state means that it lost a few features compared to its previous
+incarnation, it should be more robust and much simpler to maintain.
+
+### New video sink
+
+The glimagesink (video rendering widget) was replaced by the new
+gtk(gl)sink, which integrates more cleanly inside the application and
+avoids various bugs we used to encounter while embedding the old sink
+into Gtk.
+
+### Direct importing to the timeline
+
+It is now possible to import external files directly into the timeline.
+Just drag & drop from your favorite file manager to create a clip on the
+timeline.
+
+### Integration with GstValidate
+
+With this new release, we serialize all the operations done by the user
+as
+[GstValidateScenarios](http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-validate/html/scenarios.html)
+(more details
+[here](https://blogs.gnome.org/tsaunier/2014/04/21/gst-validate-a-suite-of-tools-to-run-integration-tests-for-gstreamer-2/)),
+allowing us to reproduce bugs much more easily. See the [bug
+reporting](Bug_reporting.md) page for details on how to create
+scenario files for testing.
+
+### Fits small screens again
+
+We heard 1024x768 is still a thing, so we added some tricks to adapt the
+UI when running on small screens.
+
+## Requirements changes
+
+-   We dropped our dependency on Clutter
+-   We now depend on GStreamer 1.6
+-   We now depend on the new gtksink (from gst-plugins-bad 1.6)
+
+Generally speaking, you can refer to the bottom of Pitivi's check.py for
+the dependencies' versions specific to a given release. See also
+[dependencies](Dependencies.md) for additional tips.
+
+## Known issues
+
+-   Some users might experience a playback performance regression with
+    the new timeline. See ticket
+    [T3348](https://phabricator.freedesktop.org/T3348#52546) for
+    details, to subscribe yourself or provide feedback for the
+    investigation.
+-   The title editor UI is still quite primitive. Please join us to make
+    it work up to your expectations! See the existing
+    \[<https://phabricator.freedesktop.org/maniphest/?statuses=open>()&projects=PHID-PROJ-ext-TITLEEDITOR\#R
+    title editor bugs\].
+-   Translations are not all fully up to date.
+-   The automatic clip aligner feature does not work. We need someone to
+    [port it to use our new audio waveforms processing
+    module](https://phabricator.freedesktop.org/T3058).
+-   [No dialog to install missing codecs after discovering
+    clips](https://phabricator.freedesktop.org/T2989), and no error gets
+    raised in that case. This means that the clip will “appear” to have
+    imported correctly, but if you try inserting it into the timeline
+    you may get errors in the background or Pitivi's UI may hang.
+
+See the list of [currently known
+issues](https://phabricator.freedesktop.org/project/view/15/)
+
+## Contributors for this release
+
+In Pitivi:
+
+` 213  Thibault Saunier`\
+` 100  Alexandru Băluț`\
+`  18  Mathieu Duponchelle`\
+`  17  Jean-François Fortin Tam`\
+`  14  Piotr Drąg (translations)`\
+`   7  Dušan Kazik (translations)`\
+`   7  Marek Černocký (translations)`\
+`   4  Daniel Mustieles (translations)`\
+`   4  Josef Andersson (translations)`\
+`   2  Balázs Úr (translations)`\
+`   2  Gábor Kelemen (translations)`\
+`   2  Inaki Larranaga Murgoitio (translations)`\
+`   2  Lubosz Sarnecki`\
+`   1  Aurimas Černius (translations)`\
+`   1  Cheng-Chia Tseng (translations)`\
+`   1  Christian Kirbach (translations)`\
+`   1  Jiri Grönroos (translations)`\
+`   1  Jordi Mas (translations)`\
+`   1  Luke Faraone`\
+`   1  Rafael Fontenelle (translations)`\
+`   1  Samir Ribic (translations)`\
+`   1  Tiago S (translations)`\
+`   1  Wim Taymans`\
+`   1  Мирослав Николић (translations)`
+
+In [GES](GES.md) (from 1.4.0 to 1.6.1):
+
+`  244  Thibault Saunier`\
+`  108  Mathieu Duponchelle`\
+`   28  Tim-Philipp Müller`\
+`   13  Justin Kim`\
+`    8  Luis de Bethencourt`\
+`    7  Sebastian Dröge`\
+`    7  Stefan Sauer`\
+`    4  Edward Hervey`\
+`    2  Joris Valette`\
+`    1  Jan Schmidt`\
+`    1  Nicolas Dufresne`
diff --git a/docs/releases/0.96.md b/docs/releases/0.96.md
new file mode 100644
index 0000000..59e1b17
--- /dev/null
+++ b/docs/releases/0.96.md
@@ -0,0 +1,100 @@
+# 0.96 Release “Cogito Ergo Proxy”
+
+As of June 30th, 2016, the Pitivi team is proud to announce the sixth
+beta release of Pitivi toward the 1.0 version.
+
+This is considered a beta release since the “big picture” remains
+“making Pitivi stable”. Note that while we use the word “beta” here,
+this *is* the latest “stable” release, and is the one we recommend over
+all previous ones.
+
+Pitivi works well for us and we make nice movies with it. Try it out,
+have fun and report detailed bugs for issues you may encounter!
+
+Blog post associated with this release:
+<https://pitivi.wordpress.com/2016/06/30/pitivi-0-96-cogito-ergo-proxy/>
+
+## Changes and completed tasks
+
+100 tasks have been closed, See the list of [reported tasks that have
+been resolved in
+0.96](https://phabricator.freedesktop.org/maniphest/query/UutjLGPYN0et/#R).
+
+Since the [0.95](releases/0.95.md) release, 547 commits were made in
+Pitivi, fixing many bugs and implementing the following features:
+
+-   Proxy editing
+-   The clip graphical transformation box has been reimplemented
+-   Some timeline behaviour enhancements
+-   Project settings are now automatically computed if possible (still
+    letting the user full control if he wants)
+-   New project settings and rendering UI
+-   Keyboard shortcuts window
+-   The undo/redo removal has been undone
+
+## Requirements changes
+
+-   We now depend on GStreamer 1.8.2
+-   We now depend on Gtk 3.20
+-   We now depend on gst-transcoder 1.8
+
+Generally speaking, you can refer to the bottom of Pitivi's check.py for
+the dependencies' versions specific to a given release. See also
+[dependencies](Dependencies.md) for additional tips.
+
+## Known issues
+
+See the list of [currently known
+issues](https://phabricator.freedesktop.org/tag/pitivi/)
+
+## Contributors for this release
+
+Pitivi code:
+
+`  306  Alexandru Băluț`\
+`  159  Thibault Saunier`\
+`   10  Fabián Orccón`\
+`    9  Jakub Brindza`\
+`    7  Lubosz Sarnecki`\
+`    2  Richard Hughes`\
+`    1  Maxime Lacroix`\
+`    1  Olav Vitters`\
+`    1  Jean-François Fortin Tam`\
+`    1  Dmitrii Petukhov`
+
+In [GES](GES.md) (from 1.6.0 to 1.8.2 minus 1.6.1):
+
+`   40  Thibault Saunier`\
+`   27  Sebastian Dröge`\
+`   12  Justin Kim`\
+`    8  Aurélien Zanelli`\
+`    3  Lubosz Sarnecki`\
+`    3  Mathieu Duponchelle`\
+`    3  Tim-Philipp Müller`\
+`    2  Sjors Gielen`\
+`    2  Thiago Santos`\
+`    1  Fabian Orccon`\
+`    1  Julien Isorce`\
+`    1  Nicolas Dufresne`\
+`    1  Vineeth TM`
+
+Pitivi translations:
+
+`   cs  Marek Černocký`\
+`   de  Mario Blättermann, Flo H`\
+`   el  Γιάννης Κουτσούκος`\
+`   es  Daniel Mustieles`\
+`   fi  Jiri Grönroos`\
+`   hu  Balázs Meskó, Gábor Kelemen`\
+`   lt  Aurimas Černius`\
+`   oc  Cédric Valmary`\
+`   pl  Piotr Drąg`\
+`pt_BR  Rafael Fontenelle, Gabriel F. Vilar`\
+`   pt  Pedro Albuquerque, Tiago Santos`\
+`   ru  Alexandre Prokoudine`\
+`   sk  Dušan Kazik`\
+`   sr  Мирослав Николић`\
+`   sv  Josef Andersson`\
+`   tr  Necdet Yücel`\
+`   cs  Marek Černocký`\
+`   es  Alejandro Pedraza, Daniel Mustieles`
diff --git a/docs/releases/0.97.md b/docs/releases/0.97.md
new file mode 100644
index 0000000..627205c
--- /dev/null
+++ b/docs/releases/0.97.md
@@ -0,0 +1,62 @@
+# 0.97 Release
+
+As of August 8th, 2016, the Pitivi team is proud to announce the seventh
+beta release of Pitivi toward the 1.0 version.
+
+This is considered a beta release since the “big picture” remains
+“making Pitivi stable”. Note that while we use the word “beta” here,
+this *is* the latest “stable” release, and is the one we recommend over
+all previous ones.
+
+Pitivi works well for us and we make nice movies with it. Try it out,
+have fun and report detailed bugs for issues you may encounter!
+
+## Changes and completed tasks
+
+18 tasks have been closed. See the list of [reported tasks that have
+been resolved in
+0.97](https://phabricator.freedesktop.org/maniphest/query/HD7bqxcGZ0WM/#R).
+
+Since the [0.96](releases/0.96.md) release, 65 commits were made in
+Pitivi, fixing many bugs and implementing the following features:
+
+-   The rendering dialog has been reworked to clearly state what
+    encoders and muxer are officially supported (and GES integration
+    tests have been added to check those)
+-   The build system has been ported to Meson ‐ gst-transcoder is now a
+    subproject
+-   Usual bug fixes
+
+## Requirements changes
+
+-   We still depend on GStreamer 1.8.2
+-   We still depend on Gtk 3.20
+-   We now depend on gst-transcoder 1.8.2
+
+Generally speaking, you can refer to the bottom of Pitivi's check.py for
+the dependencies' versions specific to a given release. See also
+[dependencies](Dependencies.md) for additional tips.
+
+## Known issues
+
+See the list of [currently known
+issues](https://phabricator.freedesktop.org/tag/pitivi/)
+
+## Contributors for this release
+
+Pitivi code:
+
+`   23 Thibault Saunier`\
+`   21 Alexandru Băluț`\
+`    6 Jakub Brindza`\
+`    1 Lubosz Sarnecki`\
+`    1 Mahmoud Khalil`
+
+Pitivi translations:
+
+`   es  Daniel Mustieles`\
+`   hu  Balázs Meskó`\
+`   pl  Piotr Drąg`\
+`pt_BR  Laudivan Freire de Almeida, Rafael Fontenelle`\
+`   pt  Tiago Santos`\
+`   sk  Dušan Kazik`
diff --git a/docs/releases/0.98.md b/docs/releases/0.98.md
new file mode 100644
index 0000000..b46f00c
--- /dev/null
+++ b/docs/releases/0.98.md
@@ -0,0 +1,90 @@
+# 0.98 Release “Getting there”
+
+As of December 5th, 2016, the Pitivi team is proud to announce the
+eighth beta release of Pitivi toward the 1.0 version.
+
+This is considered a beta release since the “big picture” remains
+“making Pitivi stable”. Note that while we use the word “beta” here,
+this *is* the latest “stable” release, and is the one we recommend over
+all previous ones.
+
+Pitivi works well for us and we make nice movies with it. Try it out,
+have fun and [report detailed bugs](Bug_reporting.md) for issues
+you may encounter!
+
+## Changes and completed tasks
+
+35 tasks have been closed. See the list of [reported tasks that have
+been resolved in
+0.98](https://phabricator.freedesktop.org/project/board/108/query/all/).
+
+Since the [0.97](releases/0.97.md) release, 175 commits were made in
+Pitivi, fixing many bugs.
+
+We switched our [official Flatpak
+build](Install_with_flatpak.md) to use Gtk 3.22 and fixed the
+[Gtk warnings](https://phabricator.freedesktop.org/T7573) which showed
+up for good reasons. As a result, the timeline code has been greatly
+improved.
+
+Thanks to Jakub Brindza, our [GSoC](Google_Summer_of_Code.md)
+student this summer, it is now possible to [customize the keyboard
+shortcuts](https://phabricator.freedesktop.org/T7452).
+
+## Known issues
+
+One nasty bug you might hit is the timeline freezing when you work with
+file formats which are not officially supported. To workaround it you
+have to allow the app to create optimized media proxy files when
+importing the files, and wait for the transcoding to finish before
+adding them to the timeline. This issue is tracked in
+[T7626](https://phabricator.freedesktop.org/T7626).
+
+You can see what's left for 1.0 in the list of [currently known
+issues](https://phabricator.freedesktop.org/tag/pitivi/).
+
+## Contributors for this release
+
+Pitivi:
+
+`  152  Alexandru Băluț`\
+`   19  Thibault Saunier`\
+`    2  Jakub Brindza`\
+`    1  Piotr Drąg`\
+`    1  Sebastian Dröge`
+
+In [GES](GES.md) (from 1.8.0 to 1.10.2 minus 1.8.2):
+
+`   58  Thibault Saunier`\
+`   17  Sebastian Dröge`\
+`    5  Aurélien Zanelli`\
+`    3  Tim-Philipp Müller`\
+`    4  Alexandru Băluț`\
+`    4  Edward Hervey`\
+`    3  Justin Kim`\
+`    2  Jan Schmidt`\
+`    2  Nirbheek Chauhan`\
+`    2  Philippe Renon`\
+`    2  Scott D Phillips`\
+`    1  Julien Isorce`\
+`    1  Mathieu Duponchelle`\
+`    1  Mohan R`\
+`    1  Nicolas Dufresne`\
+`    1  Stefan Sauer`\
+`    1  Vineeth TM`
+
+Pitivi translations:
+
+`   ca  Jordi Mas`\
+`   cs  Marek Černocký`\
+`   de  Mario Blättermann`\
+`   es  Daniel Mustieles`\
+`   fr  Claude Paroz`\
+`   hu  Balázs Meskó`\
+`   lt  Aurimas Černius`\
+`   pl  Piotr Drąg`\
+`pt_BR  Rafael Fontenelle`\
+`   pt  Tiago Santos`\
+`   sk  Dušan Kazik`\
+`   sr  Мирослав Николић`\
+`   uk  Daniel Korostil`
diff --git a/docs/releases/0.99.md b/docs/releases/0.99.md
new file mode 100644
index 0000000..282367b
--- /dev/null
+++ b/docs/releases/0.99.md
@@ -0,0 +1,3 @@
+# Pitivi 0.99
+
+Still WIP, follow advancement [on phabricator](https://phabricator.freedesktop.org/project/view/110/)
diff --git a/docs/releases/1.0.md b/docs/releases/1.0.md
new file mode 100644
index 0000000..e5ce9a5
--- /dev/null
+++ b/docs/releases/1.0.md
@@ -0,0 +1,3 @@
+# Pitivi 1.0
+
+Still WIP, follow advancement [on phabricator](https://phabricator.freedesktop.org/project/view/125/)
diff --git a/docs/releases/PiTiVi_on_Windows.md b/docs/releases/PiTiVi_on_Windows.md
new file mode 100644
index 0000000..a7c8aed
--- /dev/null
+++ b/docs/releases/PiTiVi_on_Windows.md
@@ -0,0 +1,164 @@
+# Status
+
+Andoni Morales [sent a post to
+gst-devel](http://www.nabble.com/Re:--gst-devel---PiTiVi-running-on-Windows-XP-td23885580.html)
+with a screenshot of pitivi 0.13.1 running on windows, which got the
+ball rolling. Andoni develops
+[LongoMatch](http://www.longomatch.ylatuya.es/) a gstreamer/gnonlin app
+that runs on windows, even with an installer!
+
+Andoni also set up [WinBuilds for
+Gstreamer](http://www.gstreamer-winbuild.ylatuya.es) which we'll
+definitely need. However, no-one's heard from Andoni since, I guess he's
+busy working on LongoMatch :)
+
+I gave it a go and got fairly close, but not being a hardcore gstreamer
+dev, and with the versions continually moving underneath my feet, I
+didn't get it all the way.
+
+-   Summary: Obscure bug in pygstreamer that may or may not be fixed
+    with fresh builds of winbuilds and python bindings...
+
+# Dependencies
+
+Starting with PiTiVi 0.13.3, you need the latest version of Gstreamer
+for windows you can get. You also need a compatible version of
+GST-python, both of these come from
+[WinBuilds](http://www.gstreamer-winbuild.ylatuya.es/doku.php?id=download)
+
+As of today, you'll need python 2.5, as we'll see in a minute...
+
+You also need GTK for windows, and pygtk. GTK comes from [gnome win32
+binaries](http://ftp.gnome.org/pub/GNOME/binaries/win32/gtk+/) but as
+for what version, that's a rabbit hole we need to follow first.
+
+To use PyGtk, we need PyGObject and PyCairo. Fortunately, these all come
+from [pygtk.org](http://www.pygtk.org/downloads.html) The latest version
+of PyGtk is 2.12 at the time of writing, so that dicatates what bundle
+of GTK we download. The matching version of PyGObject only has a Python
+2.5 installer, which is where our python 2.5 requirement comes from.
+
+For PyCairo, I just picked the latest version with a python 2.5
+installer, but I didn't get far enough to verify that.
+
+You'll also need libglade, which is not part of GTK. You can get it from
+[gnome win32
+binaries](http://ftp.gnome.org/pub/GNOME/binaries/win32/libglade/) I
+just installed the latest.
+
+## Installation
+
+The Py\* packages have installers which “do the right thing” for your
+python intallation. GTK is simply a bundle of dlls, which need to be
+added to your path. From System Properties (winkey-break or right click
+“my computer” and choose properties") click on Advanced, then
+Environment Variables at the bottom. You need to add the path to the
+extract gtk bin directory to the PATH variable, for either the system or
+the user, doesn't matter.
+
+libglade just has a single dll that needs to be in the path as well. I
+found that easiest by just dropping it into the GTK bin directory.
+
+## Verifying the setup
+
+### PyGst and GST
+
+To test that gst and pygst are installed correctly, importing them
+shouldn't give any errors...
+
+    Python 2.5.4 (r254:67916, Dec 23 2008, 15:10:54) [MSC v.1310 32 bit (Intel)] on
+    win32
+    Type "help", "copyright", "credits" or "license" for more information.
+    >>> import pygst
+    >>> pygst.require("0.10")
+    >>> import gst
+    >>>
+
+### PyGtk and GTK and glade
+
+Just like for gst, importing this should work too....
+
+    Python 2.5.4 (r254:67916, Dec 23 2008, 15:10:54) [MSC v.1310 32 bit (Intel)] on
+    win32
+    Type "help", "copyright", "credits" or "license" for more information.
+    >>> import pygtk
+    >>> pygtk.require("2.0")
+    >>> import gtk
+    C:\python25\lib\site-packages\gtk-2.0\gtk\__init__.py:69: Warning: Passing a non
+    -NULL package to g_win32_get_package_installation_directory() is deprecated and
+    it is ignored.
+      _gtk.init_check()
+    >>> from gtk import glade
+    >>>
+
+The warning seeeems to be harmless....
+
+# PiTiVi itself!
+
+PiTiVi uses autotools to generate a few things, mostly detecting the
+libraries and setting up translations. I didn't have autotools, and
+didn't feel like installing them. You can edit bin/pitivi.in to manually
+fix the paths, and if you're happy running without i18n, you can skip
+building the translation files too.
+
+I wasn't clever enough to fix the paths though.... :(
+
+    C:\junk\pitivi-0.13.3>\python25\python bin\pitivi.py
+    Couldn't set locale !, reverting to C locale
+    C:\python25\lib\site-packages\gtk-2.0\gtk\__init__.py:69: Warning: Passing a non
+    -NULL package to g_win32_get_package_installation_directory() is deprecated and
+    it is ignored.
+      _gtk.init_check()
+    Couldn't set locale !, reverting to C locale
+    Traceback (most recent call last):
+      File "bin\pitivi.py", line 118, in <module>
+        _run_pitivi()
+      File "bin\pitivi.py", line 111, in _run_pitivi
+        import pitivi.application as ptv
+      File "C:\junk\pitivi-0.13.3\bin\pitivi.py", line 118, in <module>
+        _run_pitivi()
+      File "C:\junk\pitivi-0.13.3\bin\pitivi.py", line 111, in _run_pitivi
+        import pitivi.application as ptv
+    ImportError: No module named application
+
+I'm sure someone with an ounce of pythonfoo could fix that, so I
+proceeded to do the steps manually, and here we reach the end of the
+line, a bizarre bug in gstreamer? `bilboed-pi` suggests that this is
+caused by PiTiVi 0.13.3 requiring pygst 0.10.16.x, while the current
+winbuilds only provides 0.10.15.1. `laszlok` reported that he gets this
+error singledecodebin in python2.5 and pygst is compiled for python2.6
+So there's possibly another bug there. Bilboed-pi wants to push Andoni
+and co to update winbuilds so we can get 0.10.16.x and we can try again.
+
+    C:\junk\pitivi-0.13.3>\python25\python
+    Python 2.5.4 (r254:67916, Dec 23 2008, 15:10:54) [MSC v.1310 32 bit (Intel)] on
+    win32
+    Type "help", "copyright", "credits" or "license" for more information.
+    >>> import pygtk
+    >>> pygtk.require("2.0")
+    >>> import gtk
+    C:\python25\lib\site-packages\gtk-2.0\gtk\__init__.py:69: Warning: Passing a non
+    -NULL package to g_win32_get_package_installation_directory() is deprecated and
+    it is ignored.
+      _gtk.init_check()
+    >>> import gobject
+    >>> gobject.threads_init()
+    >>> gobject.threads_init()
+    >>> from gtk import glade
+    >>> import pygst
+    >>> pygst.require("0.10")
+    >>> import gst
+    >>> import pitivi.application
+    Traceback (most recent call last):
+      File "<stdin>", line 1, in <module>
+      File "application.py", line 41, in <module>
+      File "pitivi\device.py", line 28, in <module>
+        from pitivi.factories.base import ObjectFactory, SourceFactory
+      File "pitivi\factories\base.py", line 29, in <module>
+        from pitivi.elements.singledecodebin import SingleDecodeBin
+      File "pitivi\elements\singledecodebin.py", line 409, in <module>
+        gobject.type_register(SingleDecodeBin)
+    TypeError: __gsttemplates__ attribute neither a tuple nor a GstPadTemplate!
+    >>>
+
+[Category:Probably obsolete](Category:Probably_obsolete.md)
diff --git a/docs/sitemap.txt b/docs/sitemap.txt
new file mode 100644
index 0000000..fc8435c
--- /dev/null
+++ b/docs/sitemap.txt
@@ -0,0 +1,88 @@
+Main_Page.md
+       Install_with_flatpak.md
+       Bug_reporting.md
+       HACKING.md
+               Git.md
+               Git_repositories.md
+               Command_line_tools.md
+               Pitivi_Love.md
+       The_people.md
+       Roadmap.md
+       Goals.md
+       Architecture.md
+               GES.md
+       crossplatform.md
+               Mac_OS_X.md
+       Plugins.md
+       Praise.md
+       Project_history.md
+       Current_events.md
+               releases/1.0.md
+               releases/0.99.md
+               releases/0.98.md
+               releases/0.97.md
+               releases/0.96.md
+               releases/0.95.md
+               releases/0.94.md
+               releases/0.93.md
+               releases/0.92.md
+               releases/0.91.md
+               releases/0.15.2.md
+               releases/0.15.1.md
+               releases/0.15.md
+               releases/0.14.md
+               releases/0.13.5.md
+               releases/0.13.4.md
+               releases/0.13.3.md
+               releases/0.13.2.md
+               releases/0.13.1.md
+               releases/0.11.3.md
+               releases/0.11.2.md
+               releases/0.11.1.md
+               releases/0.11.0.md
+               releases/0.10.3.md
+               releases/0.10.2.md
+               releases/0.10.1.md
+       Google_Summer_of_Code.md
+               Google_SoC_2007_-_Simple_Timeline.md
+               Past_GSoCs.md
+               Feroze_gsoc.md
+       Testing.md
+               QA_Scenarios.md
+               Test_suite_wishlist.md
+       Troubleshooting.md
+       design.md
+               design/Why_python.md
+               design/Proxy_editing_requirements.md
+               design/Rendering_Profiles.md
+               design/The_XGES_File_Format.md
+               design/XGES_Examples.md
+               design/Rendering_Profiles_Implementation.md
+               design/2007_design/2007_Advanced_UI_Mockups.md
+               design/2007_design/2007_Advanced_UI_implementation.md
+               design/2007_design/2007_Simple_UI_Mockups.md
+               design/2008_design/2008_7_28_interview_notes.md
+               design/2008_design/2008_Architectural_Redesign.md
+               design/2008_design/2008_Architectural_Redesign/Browsers.md
+               design/2008_design/2008_Architectural_Redesign/Design_Thoughts.md
+               design/2008_design/2008_Architectural_Redesign/Formatter.md
+               design/2008_design/2008_Architectural_Redesign/High-level_Design.md
+               design/2008_design/2008_Architectural_Redesign/ObjectFactory.md
+               design/2008_design/2008_Architectural_Redesign/Pipeline.md
+               design/2008_design/2008_Architectural_Redesign/Project.md
+               design/2008_design/2008_Architectural_Redesign/Streams.md
+               design/2008_design/2008_Architectural_Redesign/Timeline.md
+               design/2008_design/2008_Jog_and_Shuttle_controls_code_experiment.md
+               design/2008_design/2008_Jog_and_Shuttle_controls_design.md
+               design/2008_design/2008_Plugin_Interface_development.md
+               design/2008_design/2008_UI_Design.md
+               design/2012_Layer_Controls_Redesign.md
+               design/Grouping_and_nesting.md
+               design/Title_editor_design.md
+               design/UI_Design_Variants.md
+               design/UI_Implementation.md
+               design/UI_components.md
+       attic.md
+               attic/GNonLin.md
+               attic/Building_with_Windows.md
+               attic/Dependencies.md


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]