Reflections and Projections

Moving to PyQt5 and Releasing Version 2.4

Due to a packaging issue on one of our supported platforms (Debian, to be precise), we have had to radically shift forward the release date of OpenLP 2.4, as well as cut out a whole lot of features we had hoped to include.

The biggest feature of OpenLP 2.4 will be the move to Qt 5.x. Qt is the GUI library we use for OpenLP's interface, and up until now we've been using version 4.8 of Qt. Just like all software projects, Qt has been moving on (they recently released version 5.5), and we've unfortunately been lagging behind.

We had always intended to upgrade to Qt5 in OpenLP 2.4, but thanks to the aforementioned packaging problem, we have to release a version of OpenLP which uses Qt5 by the end of January. With this in mind we decided to cut the release cycle short and just release 2.4 with Qt5 and some bugfixes.

The good news in all of this is that we should be able to make OpenLP's multimedia capabilities more powerful thanks to the reworking of media in Qt5. This should also encourage developers to continue contributing to OpenLP, which means that we all win.

Here's our intended release cycle for OpenLP 2.4:

Date Version
27 Dec 2015 OpenLP 2.3.1 aka Alpha
10 Jan 2016 OpenLP 2.3.2 aka Beta
31 Jan 2016 OpenLP 2.4

If we feel we need it, we may release a second beta on the 24th of January, but this depends on developer availability, and how many bugs we have found and/or fixed.

We Need You

Again, we need you. We've just uploaded some fresh language files to Transifex for OpenLP 2.4 (you may need to be logged in to view this page), and we need your help to translate them into your languages. We'll blog in about a week again with a status update for these translations. Not many strings have changed, but we'd like to give folks whose translations were not able to be included in OpenLP 2.2 to get their translations up to date and included in OpenLP 2.4.

[ Image Credit: FAST by fhirART ]

Contributing to OpenLP Financially

Over the years people have asked us about financial contributions and donations to the project. OpenLP, like many other open source projects, is largely funded by open source project sites (SourceForge.net, etc), donated resources, or (in some cases) the developers themselves. Until recently, this has meant that donations have mostly been unnecessary.

After some upheaval in the open source community recently, we decided to start building our own server infrastructure around the project to reduce our reliance on third parties who can exercise control over our digital assets. This means that OpenLP is now in charge of funding our own servers, bandwidth, build tools and other things.

Now that we are funding a lot more ourselves, we've decided to accept donations from folks. You can either give us a once-off donation, or you can donate on a regular basis (automatically), or you can buy swag (t-shirts, mugs, caps, stickers and more). Take a look at our Donate page for more information on where and how to donate.


Check out some of the stuff you can order from our online store:


[ Image Credit: Money by GotCredit ]

First 2.2 Series Bugfix Release: OpenLP 2.2.1

As with any piece of software, OpenLP is not bug-free. Sadly, in this particular case we didn't pick up some pretty major bugs until just after the release of 2.2.

In this release we have only fixed the most glaring bugs. These are the showstoppers that prevented people from actually using OpenLP. There will be more releases as time goes on to fix other, smaller, bugs.

Bugs fixed in this release:

  • The German, Estonian and Chinese (Taiwan) translations caused OpenLP to crash on startup
  • Error when VLC is not installed on Linux
  • OpenLP on Windows unable to detect VLC
  • ZionWorks import fails in OpenLP 2.2

You can grab this bugfix from the Downloads section on our site.

Download

[ Image Credit: Roadside Bicycle Repair by Erik (HASH) Hersman ]

Translation Errors and The Big Oops

With much fanfare, we released OpenLP 2.2 last Sunday. It's been a roaring success so far, but sadly it has also been plagued by unforseen bugs. A number of users have had OpenLP just crash on startup, and some folks have been unable to play videos. In this blog post, I'll show you how to figure out which issue you're running into, and a workaround for it until we can get a fix out (hopefully in the next 2-3 weeks).

There have been two main problems which cause OpenLP 2.2 to crash on startup. Firstly, three languages were hit by translation errors, and secondly, OpenLP on Linux won't start up due to VLC being missing.

The issues with videos can be divided into two situations. Firstly, our initial build of OpenLP for Windows was unable to detect VLC, and secondly, some folks might have been using video players that are not supported on their platforms anymore.

Translation Issues

The three languages affected by the translation bug are German, Estonian and Chinese (Taiwan). Fortunantely there is a workaround, just change the language back to the default English. But since OpenLP can't start you'll have have to change the settings where the settings are stored, which differs on platform.

Diagnosing the Problem

When this bug hits you'll see an error window opening up on startup, and the following Python traceback will be in there:

Traceback (most recent call last):
   File "<string>", line 44, in <module>
   File "/Users/raoul/Projects/OpenLP/OpenLP-2.2/openlp/core/__init__.py", line 388, in main
   File "/Users/raoul/Projects/OpenLP/OpenLP-2.2/openlp/core/__init__.py", line 141, in run
   File "/Users/raoul/Projects/OpenLP/OpenLP-2.2/openlp/core/ui/mainwindow.py", line 526, in __init__
   File "/Users/raoul/Projects/OpenLP/OpenLP-2.2/openlp/core/ui/aboutform.py", line 44, in __init__
   File "/Users/raoul/Projects/OpenLP/OpenLP-2.2/openlp/core/ui/aboutform.py", line 50, in _setup
   File "/Users/raoul/Projects/OpenLP/OpenLP-2.2/openlp/core/ui/aboutdialog.py", line 82, in setup_ui
   File "/Users/raoul/Projects/OpenLP/OpenLP-2.2/openlp/core/ui/aboutdialog.py", line 264, in retranslate_ui
TypeError: not all arguments converted during string formatting

Fixing the Problem

To change language on Windows:

  1. Click on Start, Run
  2. Type in regedit.exe and press Enter
  3. Navigate down the tree to the OpenLP folder which is located at: HKEY_CURRENT_USER\Software\OpenLP\OpenLP\core
  4. Click the attribute language and change it to en for English
  5. Save and close the Registry Editor
  6. Start OpenLP

To change language on Linux:

  1. Open a text editor (Kate on KDE, Gedit on Gnome or Ubuntu)
  2. Open a file and look for /home/<user>/.config/OpenLP/OpenLP.conf (you may need to tell your file dialog to show hidden files)
  3. In the [core] section find language and change it to en for English
  4. Save the file and close your editor
  5. Start OpenLP

To change language on Mac OS X:

  1. Open Finder and go to Applications
  2. In Applications, open the Utilities folder
  3. Open the Terminal application, this will open up a command prompt
  4. Type in defaults write org.openlp.OpenLP core.language en exactly as you see it here, and press <Enter>
  5. Close Terminal
  6. Start OpenLP

VLC On Linux

In some Linux distributions (notably Ubuntu and its derivatives), you may encounter and error when starting OpenLP.

Diagnosing the Problem

When OpenLP starts, you'll see an error window with the following traceback:

Traceback (most recent call last):
  File "/usr/bin/openlp", line 44, in <module>
    main()
  File "/usr/share/openlp/openlp/core/__init__.py", line 384, in main
    sys.exit(application.run(qt_args))
  File "/usr/share/openlp/openlp/core/__init__.py", line 142, in run
    Registry().execute('bootstrap_initialise')
  File "/usr/share/openlp/openlp/core/common/registry.py", line 137, in execute
    result = function(*args, **kwargs)
  File "/usr/share/openlp/openlp/core/lib/pluginmanager.py", line 60, in bootstrap_initialise
    self.hook_media_manager()
  File "/usr/share/openlp/openlp/core/lib/pluginmanager.py", line 122, in hook_media_manager
    plugin.create_media_manager_item()
  File "/usr/share/openlp/openlp/core/lib/plugin.py", line 204, in create_media_manager_item
    self.media_item = self.media_item_class(self.main_window.media_dock_manager.media_dock, self)
  File "/usr/share/openlp/openlp/plugins/media/lib/mediaitem.py", line 56, in __init__
    super(MediaMediaItem, self).__init__(parent, plugin)
  File "/usr/share/openlp/openlp/core/lib/mediamanageritem.py", line 82, in __init__
    self.setup_item()
  File "/usr/share/openlp/openlp/plugins/media/lib/mediaitem.py", line 86, in setup_item
    self.media_controller.setup_display(self.display_controller.preview_display, False)
  File "/usr/share/openlp/openlp/core/ui/media/mediacontroller.py", line 322, in setup_display
    player.setup(display)
  File "/usr/share/openlp/openlp/core/ui/media/vlcplayer.py", line 147, in setup
    display.vlc_instance = vlc.Instance(command_line_options)
  File "/usr/share/openlp/openlp/core/ui/media/vendor/vlc.py", line 1359, in __new__
    return libvlc_new(len(args), args)
  File "/usr/share/openlp/openlp/core/ui/media/vendor/vlc.py", line 3355, in libvlc_new
    ctypes.c_void_p, ctypes.c_int, ListPOINTER(ctypes.c_char_p))
  File "/usr/share/openlp/openlp/core/ui/media/vendor/vlc.py", line 211, in _Cfunction
    raise NameError('no function %r' % (name,))
NameError: no function 'libvlc_new'

Fixing the Problem

The workaround is really simple: install VLC.

Missing VLC on Windows

If you were previously using VLC in Windows, and now can no longer play any media, this is probably due to a problem that arose when building OpenLP for Windows.

Diagnosing the Problem

When OpenLP starts you'll see an error window appear, and there should be a traceback like the one below:

Traceback (most recent call last):
   File "D:\OpenLP_Development\OpenLP_Code\2.2\openlp\core\ui\servicemanager.py", line 1462, in on_make_live
   File "D:\OpenLP_Development\OpenLP_Code\2.2\openlp\core\ui\servicemanager.py", line 1478, in make_live
   File "D:\OpenLP_Development\OpenLP_Code\2.2\openlp\core\ui\slidecontroller.py", line 808, in add_service_manager_item
   File "D:\OpenLP_Development\OpenLP_Code\2.2\openlp\core\ui\slidecontroller.py", line 896, in _process_item
   File "D:\OpenLP_Development\OpenLP_Code\2.2\openlp\core\ui\slidecontroller.py", line 1360, in on_media_start
   File "D:\OpenLP_Development\OpenLP_Code\2.2\openlp\core\ui\media\mediacontroller.py", line 376, in video
   File "D:\OpenLP_Development\OpenLP_Code\2.2\openlp\core\ui\media\mediacontroller.py", line 532, in _check_file_type
   File "D:\OpenLP_Development\OpenLP_Code\2.2\openlp\core\ui\media\mediacontroller.py", line 345, in resize
   File "D:\OpenLP_Development\OpenLP_Code\2.2\openlp\core\ui\media\vlcplayer.py", line 234, in resize
AttributeError: 'MainDisplay' object has no attribute 'vlc_widget'

Fixing the Problem

The fix for this is really easy. We've already re-built OpenLP for Windows with a fix. Just re-download OpenLP and re-install it.

NB Make sure your are using the 32-bit version of VLC. OpenLP on Windows is a 32-bit application.

Missing Media Player

In some instances you might find that you cannot play any videos.

Diagnosing the Problem

When you try to play media, you get an error message like this:

File type unsupported

Fixing the Problem

Some of the older built-in media players aren't currently supported in Windows and Mac OS X. If you encounter this, simply download and install VLC, restart OpenLP, and you should be able to select VLC as your media player.

NB Make sure your are using the 32-bit version of VLC. OpenLP on Windows is a 32-bit application.

Rolling out Fixes

We're really busy trying to track down and fix these issues, but as you can imagine it's not always that simple or that easy, so please be patient. We are hoping to get a release out by the end of next week. In the case of the translations, if you speak that language, please can you check out the project on Transifex and see if you can help fix it.

Thanks for your patience and your support!

[ Image Credit: Coccinella - Lady bug, Macro ]

OpenLP 2.2 Released!

It's finally here! After almost three years in development, the next major version of OpenLP has arrived!

A lot of work has gone into making this new version more stable, less buggy and easier to use, resulting almost 300 bugfixes and improvements. This version also sees some changes under the hood, in terms of moving to Python 3 and adding unit testing to increase the quality of the codebase.

New Features

But, without further ado, here are the new features you'll find in OpenLP 2.2:

Songs

  • Show active song title in preview and live pane
  • Allow authors to be tagged by their type (words music etc)
  • CCLI SongSelect integration
  • Importers
    • ProPresenter 4
    • Worship Assistant
    • PowerPraise
    • PresentationManager
    • EasyWorship Service Files (.ews)
    • WorshipCenter Pro
  • Songbook can be displayed in footer
  • Duplicate Songs can be identified and removed manually if required.
  • An improve Formatting Tags user interface

Bibles

  • New web bible: Neue evangelistische Übersetzung (German)
  • Importers
    • Zefania XML format
    • OSIS importer rewritten

Presentations

  • Support for presentations created in PDF format
  • Support for LibreOffice 4 and 5

Projector Remote Control

  • Projectors that support the PJLink protocol can be controlled from OpenLP (On/Off/Blank/Source Select)

Images

  • Can be placed in groups and added to services as groups.

Remote

  • Supports SSL for all requests. Certificates will need to be created outside of OpenLP
  • Supports Authentication for all update requests
  • Display thumbnails and notes when available in the Web User Interface

Custom

  • Auto load items from saved services
  • Items can be created from the Service Manager for items like bibles

Media

  • Support for DVD and CD clipselection and playback (requires VLC).

Services

  • Items can be renamed
  • Custom Items generated from Text items like bibles
  • Media items can be configured to autoload and remove screen blank when added to live display
  • Services can be saved without embedding media files. This will limit the portability of the files but reduces the file size (useful when media files are part of the service).

Internals

  • Upgraded the code to Python 3 from Python 2
  • Refactored and improved the internals to:
    • Improve performance and start faster
    • Improve reliability of the media functionality
    • Increase testability and start to introduce a comprehensive test suite
    • Improve consistency of the settings

Important Notes

Incompatibilities

OpenLP 2.2 is not backwards compatible with 2.0.5.

Service Files created in 2.2 cannot be opened in 2.0.

Once you have upgraded from 2.0.5, version 2.0.5 cannot read the upgraded files. OpenLP 2.2 will make a backup on startup, but it is recommended that you make your own backup too.

Upgrading from versions of OpenLP before 2.0.5 are not supported. You need to upgrade to 2.0.5 first, and make sure you run OpenLP at least once before continuing to upgrade to 2.2.

Known Issues

There are some known issues in OpenLP 2.2 that you should know about before upgrading:

  1. Live Backgrounds does not work on Windows and Mac OS X
  2. Playback of linked audio does not work on Mac OS X
  3. OpenLP on Linux will not start up if VLC is not installed. Simply install VLC to get around this problem.

We plan to fix these issues in OpenLP 2.4. We're moving to a faster release cycle, which means that OpenLP 2.4 should be released in 6 to 12 months from now.

Thanks

As leader of the project, I'd like to say a special thank you to the folks involved in this release. A special thank you to Tomas Groth, Jonathan Springer and Tim Bentley for their help, encouragement and preseverence.

So he got up and went to his father. But while he was still a long way off, his father saw him and was filled with compassion for him; he ran to his son, threw his arms around him and kissed him.

Luke 15:20, New International Version

[ Image Credit: Thai Lanterns by Mark Fischer ]

Want OpenLP in Your Language?

If you'd like to see OpenLP in your language, now's the time! We are about 2 weeks away from the release of 2.2, and now is your opportunity to translate OpenLP's interface into your own language.

In order for your langauge to be included you need to have completed the translation of OpenLP 2.2 (you'll need to be logged into Transifex to see this page) by midnight UTC (GMT) on Saturday the 10th of October 2015.

Because we believe strongly in quality over quantity at OpenLP, we will not be including any translations that are incomplete into the final build. This means that if you want your language to be part of the final release of version 2.2, you need to make sure it is 100% done by the end of Saturday the 10th of October. This deadline also gives you just over a week to complete any outstanding translations.

Languages Needing Work

Currently, the following translations are more than 80% complete, but still need some work (ordered from most complete to least complete). My estimate is that none of these should take longer than about 2 hours to complete.

  • Polish
  • French
  • Lithuanian
  • Russian
  • Portuguese (Brazil)
  • Bulgarian

The following translations are between 40% and 80% complete. Unless these are worked on this week, they probably won't make it into the final release of OpenLP.

  • Thai (Thailand)
  • Tamil (Sri-Lanka)
  • Greek
  • Afrikaans
  • Chinese (China)
  • Korean

Lastly, the following translations are less than 40% complete. If any of these translations makes it into the final release, I will be very surprised.

  • Slovenian
  • Italian
  • Macedonian
  • Ukrainian
  • Norweigian Nyorsk
  • Papiamento
  • Turkish
  • Malayalam
  • Latvian
  • Spanish (Colombia)
  • Arabic
  • Albanian
  • Korean (Korea)
  • Ukranian (Ukraine)
  • Khmer (Cambodia)
  • Russian (Russia)
  • Amharic
  • English (United States)
  • Klingon
  • Arabic (Egypt)
  • Spanish (Chile)
  • Vietnamese (Viet Nam)
  • Vietnamese

Get started translating OpenLP 2.2 (you'll need to be logged into Transifex to see this page).

Testing Out Your Translation

To test your translation out, do the following:

  1. Make sure you are running version 2.1.6
  2. Install Qt Linguist
  3. Windows and OS X users need to download Qt Linguist
  4. Ubuntu, Fedora, and other Linux and Unix users can install Qt Linguist from their package manager
  5. Download the language file from Transifex
  6. Open it in Qt Linguist
  7. Open the File menu, select "Release" and save the resulting release file with only your language code as the file name (see Transifex for your language code)
  8. Copy the release file to OpenLP's i18n directory
  9. Windows: C:\Program Files\OpenLP\i18n or C:\Program Files (x86)\OpenLP\i18n
  10. Mac OS X: /Applications/OpenLP.app/Contents/MacOS/i18n/
  11. Linux: /usr/share/openlp/i18n/
  12. *BSD: /usr/local/share/openlp/i18n/
  13. (Re)start Openlp and select your language

[ Image Credit: Arddangosfa o gelf Zimbabwe yn newby Hall, Ripon ]

Almost There: OpenLP 2.1.6 Release Candidate 3

We're very close to releasing OpenLP 2.2 now. We've made a few additional bug fixes and have decided to release another Release Candidate. If we don't find any major bugs in this version, the next release will be 2.2.

These are the bugs we fixed in this release:

  • #1473632: crash on every file dialog
  • #1420356: sending presentation live with libreoffice initially is minimized to taskbar
  • #1463703: When diplaying a presentation from a loaded service the slidecontroller is blank
  • #1465390: Traceback when going from blanked presentation to video
  • #1201293: Unexpected Power Point dialogues triggers exception
  • #1464421: Connection errors in SongSelect are not handled
  • #1450596: Failure to verify SSL cert in SongSelect importer

I'd like to say a special thank you to Tomas G who has been fixing bugs and pushing this release, and to Jonathan S for doing a lot of work on PyInstaller and OpenLP to make OpenLP sail on Mac OS X.

A Windows build will be uploaded during the course of the week.

Translators, now's your chance to finish up the translations for OpenLP 2.2!

As with the previous major release of OpenLP, we will only be bundling translations which are 95% or more complete. If you want to see OpenLP in your language, take a look below and update the translation for your language on Transifex, no download necessary!

OpenLP Translations

Sign up on Transifex and join the community!

For everything there is a season, and a time for every matter under heaven:
  a time to be born, and a time to die;
a time to plant, and a time to pluck up what is planted;
  a time to kill, and a time to heal;
a time to break down, and a time to build up;
  a time to weep, and a time to laugh;
a time to mourn, and a time to dance;
  a time to cast away stones, and a time to gather stones together;
a time to embrace, and a time to refrain from embracing;
  a time to seek, and a time to lose;
a time to keep, and a time to cast away;
  a time to tear, and a time to sew;
a time to keep silence, and a time to speak;
  a time to love, and a time to hate;
a time for war, and a time for peace.

Ecclesiastes 3:1-8

With my grandmother's passing recently, and reading the Bible to my kids at night, these verses have been coming up a lot recently. I think it is important for us to always be aware of the timeousness of what we're doing. Make the best use of your time here on earth, so that you can reap the rewards of your eathly work in Heaven.

Download Now!

[ Image Credit: Road Ends 300 Ft. f/4 by Atomic Taco ]

Android 2 (Alpha Release) through Google Play Store

This new application replaces the existing Android Application. The two versions can be installed side-by-side on the same device.

This code is Alpha so has been tested and, in at least one church it is already being used live but there may still be issues with it.

The new version builds on the Android 5 material design theme and whilst will work on a phone, a tablet is the recommended device.

This new version works with OpenLP 2.0 and 2.1.5.

The following functions are supported:

  • Select Address and Port of running OpenLP instance.
  • Handle user authentication of display changes. - 2.1.5 only
  • Support SSL if implemented on OpenLP - 2.1.5 only
  • View all items in a service
  • Change the slide of a live item
  • Make an item in a service live
  • Blank the display
  • Issue an alert
  • Support a graphical main view - 2.1.5 only

The new version can be found at the Google Play Store.

[ Image Credit: Android Lineup - Beige by Rob Bulmahn ]

Getting Closer to a Stable Release: Version 2.1.5

So we do not lose heart. Though our outer self is wasting away, our inner self is being renewed day by day. For this light momentary affliction is preparing for us an eternal weight of glory beyond all comparison,  as we look not to the things that are seen but to the things that are unseen. For the things that are seen are transient, but the things that are unseen are eternal.

2 Corinthians 4:16-18

Update: The Windows builds are now available on the Download page.

Another step closer to version 2.2, today we have released version 2.1.5, the second release candidate. This release comes with 7 known bugfixes  as well as a few of other fixes.

The PowerPoint integration has recieved a lot of attention and we hope some of the quirks has been fixed. Thanks go to the OpenLP community for quick feedback while testing the changes.

Here are the bug reports we have fixed:

  • #1451237 Remote view: sending image or video live from search results causes traceback
  • #1458056 Traceback when importing a Worship Assistant CSV
  • #1458672 Import of settings file with non-existing keys causes traceback
  • #1460235 Focus doesn't switch to Live when you click in "move to live" button
  • #1395848 OSX Menu Bar
  • #1449041 Main vebview doesn't mirror PowerPoint when using a single-screen setup
  • #1449064 Transitions happens in the same slide

[ Image Credit: Stables by Larry Ewing ]

Woo! Another release! Announcing OpenLP 2.1.4

I press on toward the goal for the prize of the upward call of God in Christ Jesus.

Philippians 3:14

I'm glad to announce another release of the upcoming OpenLP 2.2, version 2.1.4 Release Candidate 1. This release comes with 31 known bug fixes, as well as a bunch of other fixes that don't have specific bug reports.

There's also been a renewed focus on Mac OS X, with bugs like the dock icon problem fixed, and the menu bar fix in the works.

Here are the bug reports we have fixed:

  • #1419300: OpenLP freezes when double clicking an image in media manager
  • #1424297: Renaming a theme causes a crash
  • #1247661: Cannot restore OpenLP after minimising on OSX
  • #1411433: Media disappears on upgrade
  • #1413324: Going live on songs too quickly causes hang
  • #1424330: OpenLP Loops Presentations on start up
  • #1432418: delete PowerPoint presentation before removing from service
  • #1438563: Saving theme with unicode letters in the name causes traceback
  • #1441055: Webkitplayer (and video background) doesn't work on Windows and Mac
  • #1081807: Inconsistent verse ranges
  • #1194847: Clicking on a PowerPoint slide doesn't advance animations on that slide
  • #1195694: Presentations error: RPC server is unavailable
  • #1389149: Traceback when switching PPT presenter
  • #1412216: ccli traceback when the lyrics aren't present
  • #1423699: CCLI SongSelect Import - import more logs out
  • #1423913: PowerPoint steals focus when a PowerPoint presentation goes live
  • #1424555: When editing a single verse, the number is always 1
  • #1424972: Powerpoint with unicode characters makes OpenLP crash
  • #1425035: Wrong use of translation causes crash in opensong bible import
  • #1431476: Exception when playing a mpg file with webkit
  • #1431478: Size of media slider should not change
  • #1433245: Error message when start playing a video with vlc
  • #1437771: CCLISongSelect import saves multiple copies of same song
  • #1439311: Print service does not always put a blank line between verses
  • #1439671: Edit button on preview toolbar disappears when editing custom
  • #1440571: Drag and drop powerpoint file to mediamanager fails to load file
  • #1446491: OpenLP shows wrong thumbnail when new and old image has the same name
  • #1056652: Service item selection bug in Service Manager
  • #1254190: Can no longer add Bible verses
  • #1315917: [Web stage] native android web browser causes text to compress affects Android app as well
  • #1410774: OpenLP fails to start on first run
  • #1414990: Menu - language list

A number of translations have been updated and nearing full coverage.

UPDATE: All the files have been uploaded, and are available on the Download page.

[ Image Credit: Balloon release by Jennie Rainsford ]