Visualize a collection of georeferenced panoramic photos. Celutz allows users to upload/share/visualize panoramic photos, using an intuitive HTML5 interface. It has been created for easily evaluating line-of-sight links in radio networks.

Baptiste Jonglez cc57880556 Fix missing clustering change on minimap 1 year ago
altitude 07b261d2c5 altitude: Fix commit 455b941eb1 for python2 and add more validation 2 years ago
api 58e6a8fcdf Allow to limit API usage to logged-in users only 3 years ago
celutz a587263b95 settings: Add localhost to ALLOWED_HOSTS 1 year ago
media b4aa8e6e56 Initial commit (WIP) 4 years ago
panorama cc57880556 Fix missing clustering change on minimap 1 year ago
upgrade cb6c0af949 Add a simple shell script to ease migration 3 years ago
.gitignore 3f2db5465a Add toplevel static/ directory to .gitignore 2 years ago 266b65a4de Update changelog 3 years ago a8d8888075 map: Make map bounds optional, and cleanup code 2 years ago 48f57d7f67 Add a link to wiki page with tips on using celutz 1 year ago
TODO fbf472d8d6 Remove TODO items that got migrated to 3 years ago 95523b995d Automatically generate tiles when importing a panorama manually 3 years ago 310ad0cf3a Rename ztulec to celutz 3 years ago
requirements.txt f6a77377ac requirements: Update pytz to 2017.2 1 year ago 9782b02fca Add a script to update a production installation 2 years ago


Visualize a collection of panoramic photos.

Celutz allows you to upload/share/visualize/reference panoramic photos. It has been created for evaluating lines-of-sight for radio networks.

The first version of this tool was written in PHP/js by Marc Souviron, Victor Pongnian, and subsequent work by Jocelyn Delalande. The project originated at, a non-profit radio ISP in France.

This is version 2 of celutz, with a backend rewritten in Django. For more information, see


  • upload panoramas to a web server (i.e: made with Hugin);
  • visualize, pan and zoom panoramas, as if you were on site;
  • georeference panoramas : set GPS coordinates and elevation of known reference points, and calibrate orientation of panoramas by visually pointing at these reference points;
  • visualize a point by its lat/lon/altitude on your panorama;
  • see other panoramas locations to evaluate the lines-of-sight;
  • locate a point on all panoramas simultaneously.

Getting started: basic usage of celutz

See also some tips on FAImaison wiki (french)

Add reference points

If this is a new installation, you first need to add reference points to the database.

Reference points are needed to visually calibrate panoramic photos: they can be high buildings, clock towers, radio towers, or even natural features such as mountains. In short, reference points should be easily and accurately recognisable when seen on a picture.

To add new reference points, go to the Django admin, for instance at http://localhost:8000/admin/panorama/referencepoint.

You need a name, GPS coordinates, and an altitude. The altitude is relative to the sea level. Celutz queries ground elevation from geonames api, you still have to add the height of the reference point (e.g. height of the building).

Hint: it is better to set the altitude of the topmost part of a building. This is because it will be much easier to aim when viewing a panorama.

Upload a new panoramic photo

You can upload a new panoramic photo from the home page. Besides the actual picture, you need to specify the GPS coordinates where the picture has been made, and the altitude (exactly like reference points). If the picture encompasses 360° (i.e. the left-most edge connects to the right-most edge), then tick the appropriate box.

Once the picture is uploaded, it may take a while for the tiles to be generated. If the visualisation only show grey squares, wait a bit and try to refresh. Depending on the size of the picture and the CPU of the server, generating tiles can take from a few seconds to a minute.

Calibrate the panoramic photo

Now, you should be able to zoom and pan in your picture. But the azimuth and elevation are completely wrong, because the panorama is not yet calibrated.

To calibrate it, you need to do the following:

  1. Find a known reference point on your picture
  2. Right-click on its location, and in the menu, select its name

You should repeat these steps for as much reference points as possible, since it will increase the accuracy of the interpolation. The minimum number of reference points is two for normal pictures, and one for 360° pictures.

Once the panorama is calibrated, the azimuth and elevation should be meaningful! You should also see colored circle indicating the location of other panoramas.

Panorama view

This is the main view, where you can pan and scroll a panorama.

Color code

In a calibrated panorama, you should see colored circles:

  • Blue circle: reference point that was referenced by a user during calibration;
  • Green circle: estimated location of a reference point, determined by interpolation between known reference points (the blue circles);
  • Red circle: estimated location of another panorama. You can click on the circle to switch to the view from this panorama!

Mouse interaction for panorama view

  • drag image to move around
  • scroll to zoom in/out
  • right-click to get the Reference points menu, where you can add and remove reference points

Keyboard shortcuts for panorama view

  • Pgup/Pgdown: zoom in/out
  • ///: pan the image
  • Home/End: turn backwards (180°)

Locating a point

You can use the "Locate a point" feature from the homepage. It allows you to locate a point (given its GPS coordinates) on all panoramas at the same time.

For each panorama that can "see" the target point, a direct link is provided to orient the view to the estimated position. This allows you to quickly ascertain whether the target point is actually visible from at least one existing location.

Contributing translations

You can help translating celutz in your language! So far, English, French and Spanish translations are available.

To create or update a message file in your language:

./ makemessages -l fr

You can then edit the PO file in panorama/locale/fr/LC_MESSAGES/django.po.

Once you are done, you need to compile your translation:

./ compilemessages

Then, add both the django.po and files to git.

For more information, see

Installing celutz