mapillary-tools 0.13.3__tar.gz → 0.14.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (126) hide show
  1. {mapillary_tools-0.13.3 → mapillary_tools-0.14.0}/PKG-INFO +93 -35
  2. mapillary_tools-0.13.3/mapillary_tools.egg-info/PKG-INFO → mapillary_tools-0.14.0/README.md +67 -45
  3. mapillary_tools-0.14.0/mapillary_tools/__init__.py +1 -0
  4. {mapillary_tools-0.13.3 → mapillary_tools-0.14.0}/mapillary_tools/api_v4.py +198 -55
  5. mapillary_tools-0.14.0/mapillary_tools/authenticate.py +364 -0
  6. mapillary_tools-0.14.0/mapillary_tools/blackvue_parser.py +195 -0
  7. {mapillary_tools-0.13.3 → mapillary_tools-0.14.0}/mapillary_tools/camm/camm_builder.py +55 -97
  8. mapillary_tools-0.14.0/mapillary_tools/camm/camm_parser.py +590 -0
  9. {mapillary_tools-0.13.3 → mapillary_tools-0.14.0}/mapillary_tools/commands/__main__.py +10 -6
  10. {mapillary_tools-0.13.3 → mapillary_tools-0.14.0}/mapillary_tools/commands/authenticate.py +8 -1
  11. {mapillary_tools-0.13.3 → mapillary_tools-0.14.0}/mapillary_tools/commands/process.py +27 -51
  12. mapillary_tools-0.14.0/mapillary_tools/commands/process_and_upload.py +33 -0
  13. {mapillary_tools-0.13.3 → mapillary_tools-0.14.0}/mapillary_tools/commands/sample_video.py +2 -3
  14. mapillary_tools-0.14.0/mapillary_tools/commands/upload.py +81 -0
  15. mapillary_tools-0.14.0/mapillary_tools/commands/video_process_and_upload.py +33 -0
  16. mapillary_tools-0.14.0/mapillary_tools/config.py +110 -0
  17. mapillary_tools-0.14.0/mapillary_tools/constants.py +173 -0
  18. {mapillary_tools-0.13.3 → mapillary_tools-0.14.0}/mapillary_tools/exceptions.py +37 -34
  19. {mapillary_tools-0.13.3 → mapillary_tools-0.14.0}/mapillary_tools/exif_read.py +221 -116
  20. {mapillary_tools-0.13.3 → mapillary_tools-0.14.0}/mapillary_tools/exif_write.py +10 -8
  21. {mapillary_tools-0.13.3 → mapillary_tools-0.14.0}/mapillary_tools/exiftool_read.py +33 -42
  22. {mapillary_tools-0.13.3 → mapillary_tools-0.14.0}/mapillary_tools/exiftool_read_video.py +97 -47
  23. mapillary_tools-0.14.0/mapillary_tools/exiftool_runner.py +57 -0
  24. mapillary_tools-0.14.0/mapillary_tools/ffmpeg.py +626 -0
  25. {mapillary_tools-0.13.3 → mapillary_tools-0.14.0}/mapillary_tools/geo.py +158 -118
  26. mapillary_tools-0.14.0/mapillary_tools/geotag/base.py +147 -0
  27. mapillary_tools-0.14.0/mapillary_tools/geotag/factory.py +307 -0
  28. mapillary_tools-0.14.0/mapillary_tools/geotag/geotag_images_from_exif.py +24 -0
  29. mapillary_tools-0.14.0/mapillary_tools/geotag/geotag_images_from_exiftool.py +160 -0
  30. mapillary_tools-0.14.0/mapillary_tools/geotag/geotag_images_from_gpx.py +161 -0
  31. mapillary_tools-0.14.0/mapillary_tools/geotag/geotag_images_from_gpx_file.py +40 -0
  32. {mapillary_tools-0.13.3 → mapillary_tools-0.14.0}/mapillary_tools/geotag/geotag_images_from_nmea_file.py +4 -5
  33. mapillary_tools-0.14.0/mapillary_tools/geotag/geotag_images_from_video.py +127 -0
  34. mapillary_tools-0.14.0/mapillary_tools/geotag/geotag_videos_from_exiftool.py +123 -0
  35. mapillary_tools-0.14.0/mapillary_tools/geotag/geotag_videos_from_gpx.py +52 -0
  36. mapillary_tools-0.14.0/mapillary_tools/geotag/geotag_videos_from_video.py +32 -0
  37. mapillary_tools-0.14.0/mapillary_tools/geotag/image_extractors/base.py +18 -0
  38. mapillary_tools-0.14.0/mapillary_tools/geotag/image_extractors/exif.py +60 -0
  39. mapillary_tools-0.14.0/mapillary_tools/geotag/image_extractors/exiftool.py +18 -0
  40. mapillary_tools-0.14.0/mapillary_tools/geotag/options.py +182 -0
  41. mapillary_tools-0.14.0/mapillary_tools/geotag/utils.py +62 -0
  42. mapillary_tools-0.14.0/mapillary_tools/geotag/video_extractors/base.py +18 -0
  43. mapillary_tools-0.14.0/mapillary_tools/geotag/video_extractors/exiftool.py +70 -0
  44. mapillary_tools-0.14.0/mapillary_tools/geotag/video_extractors/gpx.py +116 -0
  45. mapillary_tools-0.14.0/mapillary_tools/geotag/video_extractors/native.py +160 -0
  46. {mapillary_tools-0.13.3/mapillary_tools/geotag → mapillary_tools-0.14.0/mapillary_tools/gpmf}/gpmf_parser.py +205 -182
  47. {mapillary_tools-0.13.3/mapillary_tools/geotag → mapillary_tools-0.14.0/mapillary_tools/gpmf}/gps_filter.py +5 -3
  48. mapillary_tools-0.14.0/mapillary_tools/history.py +182 -0
  49. mapillary_tools-0.14.0/mapillary_tools/mp4/__init__.py +0 -0
  50. {mapillary_tools-0.13.3 → mapillary_tools-0.14.0}/mapillary_tools/mp4/construct_mp4_parser.py +17 -10
  51. {mapillary_tools-0.13.3 → mapillary_tools-0.14.0}/mapillary_tools/mp4/io_utils.py +0 -1
  52. {mapillary_tools-0.13.3 → mapillary_tools-0.14.0}/mapillary_tools/mp4/mp4_sample_parser.py +36 -28
  53. {mapillary_tools-0.13.3 → mapillary_tools-0.14.0}/mapillary_tools/mp4/simple_mp4_builder.py +10 -9
  54. {mapillary_tools-0.13.3 → mapillary_tools-0.14.0}/mapillary_tools/mp4/simple_mp4_parser.py +13 -22
  55. mapillary_tools-0.14.0/mapillary_tools/process_geotag_properties.py +422 -0
  56. mapillary_tools-0.14.0/mapillary_tools/process_sequence_properties.py +714 -0
  57. {mapillary_tools-0.13.3 → mapillary_tools-0.14.0}/mapillary_tools/sample_video.py +20 -26
  58. mapillary_tools-0.14.0/mapillary_tools/serializer/description.py +587 -0
  59. mapillary_tools-0.14.0/mapillary_tools/serializer/gpx.py +132 -0
  60. {mapillary_tools-0.13.3 → mapillary_tools-0.14.0}/mapillary_tools/telemetry.py +26 -13
  61. mapillary_tools-0.14.0/mapillary_tools/types.py +208 -0
  62. mapillary_tools-0.14.0/mapillary_tools/upload.py +703 -0
  63. mapillary_tools-0.14.0/mapillary_tools/upload_api_v4.py +260 -0
  64. mapillary_tools-0.14.0/mapillary_tools/uploader.py +959 -0
  65. {mapillary_tools-0.13.3 → mapillary_tools-0.14.0}/mapillary_tools/utils.py +49 -18
  66. mapillary_tools-0.13.3/README.md → mapillary_tools-0.14.0/mapillary_tools.egg-info/PKG-INFO +103 -16
  67. {mapillary_tools-0.13.3 → mapillary_tools-0.14.0}/mapillary_tools.egg-info/SOURCES.txt +20 -24
  68. mapillary_tools-0.14.0/mapillary_tools.egg-info/requires.txt +11 -0
  69. mapillary_tools-0.14.0/pyproject.toml +85 -0
  70. mapillary_tools-0.14.0/setup.cfg +4 -0
  71. mapillary_tools-0.13.3/MANIFEST.in +0 -2
  72. mapillary_tools-0.13.3/mapillary_tools/__init__.py +0 -1
  73. mapillary_tools-0.13.3/mapillary_tools/authenticate.py +0 -102
  74. mapillary_tools-0.13.3/mapillary_tools/camm/camm_parser.py +0 -342
  75. mapillary_tools-0.13.3/mapillary_tools/commands/process_and_upload.py +0 -20
  76. mapillary_tools-0.13.3/mapillary_tools/commands/upload.py +0 -50
  77. mapillary_tools-0.13.3/mapillary_tools/commands/video_process_and_upload.py +0 -19
  78. mapillary_tools-0.13.3/mapillary_tools/config.py +0 -71
  79. mapillary_tools-0.13.3/mapillary_tools/constants.py +0 -50
  80. mapillary_tools-0.13.3/mapillary_tools/ffmpeg.py +0 -451
  81. mapillary_tools-0.13.3/mapillary_tools/geotag/__init__.py +0 -1
  82. mapillary_tools-0.13.3/mapillary_tools/geotag/blackvue_parser.py +0 -118
  83. mapillary_tools-0.13.3/mapillary_tools/geotag/geotag_from_generic.py +0 -22
  84. mapillary_tools-0.13.3/mapillary_tools/geotag/geotag_images_from_exif.py +0 -141
  85. mapillary_tools-0.13.3/mapillary_tools/geotag/geotag_images_from_exiftool.py +0 -109
  86. mapillary_tools-0.13.3/mapillary_tools/geotag/geotag_images_from_exiftool_both_image_and_video.py +0 -93
  87. mapillary_tools-0.13.3/mapillary_tools/geotag/geotag_images_from_gpx.py +0 -225
  88. mapillary_tools-0.13.3/mapillary_tools/geotag/geotag_images_from_gpx_file.py +0 -153
  89. mapillary_tools-0.13.3/mapillary_tools/geotag/geotag_images_from_video.py +0 -90
  90. mapillary_tools-0.13.3/mapillary_tools/geotag/geotag_videos_from_exiftool_video.py +0 -145
  91. mapillary_tools-0.13.3/mapillary_tools/geotag/geotag_videos_from_video.py +0 -197
  92. mapillary_tools-0.13.3/mapillary_tools/geotag/utils.py +0 -26
  93. mapillary_tools-0.13.3/mapillary_tools/history.py +0 -68
  94. mapillary_tools-0.13.3/mapillary_tools/process_geotag_properties.py +0 -652
  95. mapillary_tools-0.13.3/mapillary_tools/process_sequence_properties.py +0 -345
  96. mapillary_tools-0.13.3/mapillary_tools/types.py +0 -721
  97. mapillary_tools-0.13.3/mapillary_tools/upload.py +0 -679
  98. mapillary_tools-0.13.3/mapillary_tools/upload_api_v4.py +0 -235
  99. mapillary_tools-0.13.3/mapillary_tools/uploader.py +0 -439
  100. mapillary_tools-0.13.3/mapillary_tools/video_data_extraction/cli_options.py +0 -22
  101. mapillary_tools-0.13.3/mapillary_tools/video_data_extraction/extract_video_data.py +0 -176
  102. mapillary_tools-0.13.3/mapillary_tools/video_data_extraction/extractors/base_parser.py +0 -75
  103. mapillary_tools-0.13.3/mapillary_tools/video_data_extraction/extractors/blackvue_parser.py +0 -34
  104. mapillary_tools-0.13.3/mapillary_tools/video_data_extraction/extractors/camm_parser.py +0 -38
  105. mapillary_tools-0.13.3/mapillary_tools/video_data_extraction/extractors/exiftool_runtime_parser.py +0 -71
  106. mapillary_tools-0.13.3/mapillary_tools/video_data_extraction/extractors/exiftool_xml_parser.py +0 -53
  107. mapillary_tools-0.13.3/mapillary_tools/video_data_extraction/extractors/generic_video_parser.py +0 -52
  108. mapillary_tools-0.13.3/mapillary_tools/video_data_extraction/extractors/gopro_parser.py +0 -43
  109. mapillary_tools-0.13.3/mapillary_tools/video_data_extraction/extractors/gpx_parser.py +0 -108
  110. mapillary_tools-0.13.3/mapillary_tools/video_data_extraction/extractors/nmea_parser.py +0 -24
  111. mapillary_tools-0.13.3/mapillary_tools/video_data_extraction/video_data_parser_factory.py +0 -39
  112. mapillary_tools-0.13.3/mapillary_tools.egg-info/requires.txt +0 -10
  113. mapillary_tools-0.13.3/requirements.txt +0 -10
  114. mapillary_tools-0.13.3/schema/image_description_schema.json +0 -189
  115. mapillary_tools-0.13.3/setup.cfg +0 -8
  116. mapillary_tools-0.13.3/setup.py +0 -59
  117. {mapillary_tools-0.13.3 → mapillary_tools-0.14.0}/LICENSE +0 -0
  118. {mapillary_tools-0.13.3 → mapillary_tools-0.14.0}/mapillary_tools/commands/__init__.py +0 -0
  119. {mapillary_tools-0.13.3 → mapillary_tools-0.14.0}/mapillary_tools/commands/video_process.py +0 -0
  120. {mapillary_tools-0.13.3 → mapillary_tools-0.14.0}/mapillary_tools/commands/zip.py +0 -0
  121. {mapillary_tools-0.13.3/mapillary_tools/mp4 → mapillary_tools-0.14.0/mapillary_tools/geotag}/__init__.py +0 -0
  122. {mapillary_tools-0.13.3/mapillary_tools/geotag → mapillary_tools-0.14.0/mapillary_tools/gpmf}/gpmf_gps_filter.py +0 -0
  123. {mapillary_tools-0.13.3 → mapillary_tools-0.14.0}/mapillary_tools/ipc.py +0 -0
  124. {mapillary_tools-0.13.3 → mapillary_tools-0.14.0}/mapillary_tools.egg-info/dependency_links.txt +0 -0
  125. {mapillary_tools-0.13.3 → mapillary_tools-0.14.0}/mapillary_tools.egg-info/entry_points.txt +0 -0
  126. {mapillary_tools-0.13.3 → mapillary_tools-0.14.0}/mapillary_tools.egg-info/top_level.txt +0 -0
@@ -1,31 +1,38 @@
1
- Metadata-Version: 2.2
1
+ Metadata-Version: 2.4
2
2
  Name: mapillary_tools
3
- Version: 0.13.3
3
+ Version: 0.14.0
4
4
  Summary: Mapillary Image/Video Import Pipeline
5
- Home-page: https://github.com/mapillary/mapillary_tools
6
- Author: Mapillary
5
+ Author-email: Mapillary <support@mapillary.com>
7
6
  License: BSD
8
- Requires-Python: >=3.8
7
+ Project-URL: Homepage, https://github.com/mapillary/mapillary_tools
8
+ Project-URL: Repository, https://github.com/mapillary/mapillary_tools
9
+ Project-URL: Issues, https://github.com/mapillary/mapillary_tools/issues
10
+ Keywords: mapillary,gis,computer vision,street view
11
+ Classifier: Development Status :: 5 - Production/Stable
12
+ Classifier: Intended Audience :: Developers
13
+ Classifier: Intended Audience :: End Users/Desktop
14
+ Classifier: License :: OSI Approved :: BSD License
15
+ Classifier: Programming Language :: Python :: 3
16
+ Classifier: Programming Language :: Python :: 3.9
17
+ Classifier: Programming Language :: Python :: 3.10
18
+ Classifier: Programming Language :: Python :: 3.11
19
+ Classifier: Programming Language :: Python :: 3.12
20
+ Classifier: Programming Language :: Python :: 3.13
21
+ Requires-Python: >=3.9
9
22
  Description-Content-Type: text/markdown
10
23
  License-File: LICENSE
11
24
  Requires-Dist: appdirs<2.0.0,>=1.4.4
12
- Requires-Dist: construct<3.0.0,>=2.10.0
13
- Requires-Dist: exifread==2.3.2
14
- Requires-Dist: piexif==1.1.3
15
- Requires-Dist: gpxpy<1.6.0,>=1.5.0
25
+ Requires-Dist: construct~=2.10.0
26
+ Requires-Dist: exifread~=3.0
27
+ Requires-Dist: gpxpy~=1.6.0
28
+ Requires-Dist: humanize>=4.12.3
29
+ Requires-Dist: jsonschema~=4.17.0
30
+ Requires-Dist: piexif~=1.1
16
31
  Requires-Dist: pynmea2<2.0.0,>=1.12.0
17
32
  Requires-Dist: requests[socks]<3.0.0,>=2.20.0
18
33
  Requires-Dist: tqdm<5.0,>=4.0
19
- Requires-Dist: typing_extensions
20
- Requires-Dist: jsonschema~=4.17.3
21
- Dynamic: author
22
- Dynamic: description
23
- Dynamic: description-content-type
24
- Dynamic: home-page
25
- Dynamic: license
26
- Dynamic: requires-dist
27
- Dynamic: requires-python
28
- Dynamic: summary
34
+ Requires-Dist: typing-extensions>=4.12.2
35
+ Dynamic: license-file
29
36
 
30
37
  <p align="center">
31
38
  <a href="https://github.com/mapillary/mapillary_tools/">
@@ -57,18 +64,40 @@ mapillary_tools --help
57
64
  <!--ts-->
58
65
 
59
66
  - [Supported File Formats](#supported-file-formats)
67
+ - [Image Formats](#image-formats)
68
+ - [Video Formats](#video-formats)
60
69
  - [Installation](#installation)
70
+ - [Standalone Executable](#standalone-executable)
71
+ - [Installing via pip](#installing-via-pip)
72
+ - [Installing on Android Devices](#installing-on-android-devices)
61
73
  - [Usage](#usage)
62
74
  - [Process and Upload](#process-and-upload)
63
75
  - [Process](#process)
64
76
  - [Upload](#upload)
65
77
  - [Advanced Usage](#advanced-usage)
66
78
  - [Local Video Processing](#local-video-processing)
79
+ - [Install FFmpeg](#install-ffmpeg)
80
+ - [Video Processing](#video-processing)
67
81
  - [Geotagging with GPX](#geotagging-with-gpx)
82
+ - [New video geotagging features (experimental)](#new-video-geotagging-features-experimental)
83
+ - [Usage](#usage-1)
84
+ - [Examples](#examples)
85
+ - [Generic supported videos](#generic-supported-videos)
86
+ - [External GPX](#external-gpx)
87
+ - [Insta360 stitched videos](#insta360-stitched-videos)
88
+ - [Limitations of `--video_geotag_source`](#limitations-of---video_geotag_source)
68
89
  - [Authenticate](#authenticate)
90
+ - [Examples](#examples-1)
69
91
  - [Image Description](#image-description)
70
92
  - [Zip Images](#zip-images)
71
93
  - [Development](#development)
94
+ - [Setup](#setup)
95
+ - [Option 1: Using uv (Recommended)](#option-1-using-uv-recommended)
96
+ - [Option 2: Using pip with virtual environment](#option-2-using-pip-with-virtual-environment)
97
+ - [Running the code](#running-the-code)
98
+ - [Tests](#tests)
99
+ - [Code Quality](#code-quality)
100
+ - [Release and Build](#release-and-build)
72
101
 
73
102
  <!--te-->
74
103
 
@@ -494,29 +523,49 @@ git clone git@github.com:mapillary/mapillary_tools.git
494
523
  cd mapillary_tools
495
524
  ```
496
525
 
497
- Set up the virtual environment. It is optional but recommended:
526
+ ### Option 1: Using uv (Recommended)
527
+
528
+ Use [uv](https://docs.astral.sh/uv/) - a fast Python package manager.
529
+
530
+ Install the project in development mode with all dependencies:
498
531
 
499
532
  ```sh
500
- pip install pipenv
533
+ # Install the project and development dependencies
534
+ uv sync --group dev
535
+
536
+ # Activate the virtual environment
537
+ source .venv/bin/activate # On Windows: .venv\Scripts\activate
501
538
  ```
502
539
 
503
- Install dependencies:
540
+ ### Option 2: Using pip with virtual environment
541
+
542
+ Set up a virtual environment (recommended):
504
543
 
505
544
  ```sh
506
- pipenv install -r requirements.txt
507
- pipenv install -r requirements-dev.txt
545
+ python -m venv .venv
546
+ source .venv/bin/activate # On Windows: .venv\Scripts\activate
508
547
  ```
509
548
 
510
- Enter the virtualenv shell:
549
+ Install the project in development mode:
511
550
 
512
551
  ```sh
513
- pipenv shell
552
+ # Install the project and all dependencies in editable mode
553
+ pip install -e .
554
+
555
+ # Install development dependencies
556
+ pip install --group dev
514
557
  ```
515
558
 
559
+ ## Running the code
560
+
516
561
  Run the code from the repository:
517
562
 
518
563
  ```sh
519
- python3 -m mapillary_tools.commands --version
564
+ # If you have mapillary_tools installed in editable mode
565
+ mapillary_tools --version
566
+
567
+ # Alternatively
568
+ python -m mapillary_tools.commands --version
520
569
  ```
521
570
 
522
571
  ## Tests
@@ -524,19 +573,28 @@ python3 -m mapillary_tools.commands --version
524
573
  Run tests:
525
574
 
526
575
  ```sh
527
- # test all cases
528
- python3 -m pytest -s -vv tests
529
- # or test a single case specifically
530
- python3 -m pytest -s -vv tests/unit/test_camm_parser.py::test_build_and_parse
576
+ # Test all cases
577
+ pytest -s -vv tests
578
+ # Or test a single case specifically
579
+ pytest -s -vv tests/unit/test_camm_parser.py::test_build_and_parse
531
580
  ```
532
581
 
533
- Run linting:
582
+ ## Code Quality
583
+
584
+ Run code formatting and linting:
534
585
 
535
586
  ```sh
536
- # format code
537
- black mapillary_tools tests
538
- # sort imports
587
+ # Format code with ruff
588
+ ruff format mapillary_tools tests
589
+
590
+ # Lint code with ruff
591
+ ruff check mapillary_tools tests
592
+
593
+ # Sort imports with usort
539
594
  usort format mapillary_tools tests
595
+
596
+ # Type checking with mypy
597
+ mypy mapillary_tools
540
598
  ```
541
599
 
542
600
  ## Release and Build
@@ -1,32 +1,3 @@
1
- Metadata-Version: 2.2
2
- Name: mapillary_tools
3
- Version: 0.13.3
4
- Summary: Mapillary Image/Video Import Pipeline
5
- Home-page: https://github.com/mapillary/mapillary_tools
6
- Author: Mapillary
7
- License: BSD
8
- Requires-Python: >=3.8
9
- Description-Content-Type: text/markdown
10
- License-File: LICENSE
11
- Requires-Dist: appdirs<2.0.0,>=1.4.4
12
- Requires-Dist: construct<3.0.0,>=2.10.0
13
- Requires-Dist: exifread==2.3.2
14
- Requires-Dist: piexif==1.1.3
15
- Requires-Dist: gpxpy<1.6.0,>=1.5.0
16
- Requires-Dist: pynmea2<2.0.0,>=1.12.0
17
- Requires-Dist: requests[socks]<3.0.0,>=2.20.0
18
- Requires-Dist: tqdm<5.0,>=4.0
19
- Requires-Dist: typing_extensions
20
- Requires-Dist: jsonschema~=4.17.3
21
- Dynamic: author
22
- Dynamic: description
23
- Dynamic: description-content-type
24
- Dynamic: home-page
25
- Dynamic: license
26
- Dynamic: requires-dist
27
- Dynamic: requires-python
28
- Dynamic: summary
29
-
30
1
  <p align="center">
31
2
  <a href="https://github.com/mapillary/mapillary_tools/">
32
3
  <img src="https://raw.githubusercontent.com/mapillary/mapillary_tools/main/docs/images/logo.png">
@@ -57,18 +28,40 @@ mapillary_tools --help
57
28
  <!--ts-->
58
29
 
59
30
  - [Supported File Formats](#supported-file-formats)
31
+ - [Image Formats](#image-formats)
32
+ - [Video Formats](#video-formats)
60
33
  - [Installation](#installation)
34
+ - [Standalone Executable](#standalone-executable)
35
+ - [Installing via pip](#installing-via-pip)
36
+ - [Installing on Android Devices](#installing-on-android-devices)
61
37
  - [Usage](#usage)
62
38
  - [Process and Upload](#process-and-upload)
63
39
  - [Process](#process)
64
40
  - [Upload](#upload)
65
41
  - [Advanced Usage](#advanced-usage)
66
42
  - [Local Video Processing](#local-video-processing)
43
+ - [Install FFmpeg](#install-ffmpeg)
44
+ - [Video Processing](#video-processing)
67
45
  - [Geotagging with GPX](#geotagging-with-gpx)
46
+ - [New video geotagging features (experimental)](#new-video-geotagging-features-experimental)
47
+ - [Usage](#usage-1)
48
+ - [Examples](#examples)
49
+ - [Generic supported videos](#generic-supported-videos)
50
+ - [External GPX](#external-gpx)
51
+ - [Insta360 stitched videos](#insta360-stitched-videos)
52
+ - [Limitations of `--video_geotag_source`](#limitations-of---video_geotag_source)
68
53
  - [Authenticate](#authenticate)
54
+ - [Examples](#examples-1)
69
55
  - [Image Description](#image-description)
70
56
  - [Zip Images](#zip-images)
71
57
  - [Development](#development)
58
+ - [Setup](#setup)
59
+ - [Option 1: Using uv (Recommended)](#option-1-using-uv-recommended)
60
+ - [Option 2: Using pip with virtual environment](#option-2-using-pip-with-virtual-environment)
61
+ - [Running the code](#running-the-code)
62
+ - [Tests](#tests)
63
+ - [Code Quality](#code-quality)
64
+ - [Release and Build](#release-and-build)
72
65
 
73
66
  <!--te-->
74
67
 
@@ -494,29 +487,49 @@ git clone git@github.com:mapillary/mapillary_tools.git
494
487
  cd mapillary_tools
495
488
  ```
496
489
 
497
- Set up the virtual environment. It is optional but recommended:
490
+ ### Option 1: Using uv (Recommended)
491
+
492
+ Use [uv](https://docs.astral.sh/uv/) - a fast Python package manager.
493
+
494
+ Install the project in development mode with all dependencies:
498
495
 
499
496
  ```sh
500
- pip install pipenv
497
+ # Install the project and development dependencies
498
+ uv sync --group dev
499
+
500
+ # Activate the virtual environment
501
+ source .venv/bin/activate # On Windows: .venv\Scripts\activate
501
502
  ```
502
503
 
503
- Install dependencies:
504
+ ### Option 2: Using pip with virtual environment
505
+
506
+ Set up a virtual environment (recommended):
504
507
 
505
508
  ```sh
506
- pipenv install -r requirements.txt
507
- pipenv install -r requirements-dev.txt
509
+ python -m venv .venv
510
+ source .venv/bin/activate # On Windows: .venv\Scripts\activate
508
511
  ```
509
512
 
510
- Enter the virtualenv shell:
513
+ Install the project in development mode:
511
514
 
512
515
  ```sh
513
- pipenv shell
516
+ # Install the project and all dependencies in editable mode
517
+ pip install -e .
518
+
519
+ # Install development dependencies
520
+ pip install --group dev
514
521
  ```
515
522
 
523
+ ## Running the code
524
+
516
525
  Run the code from the repository:
517
526
 
518
527
  ```sh
519
- python3 -m mapillary_tools.commands --version
528
+ # If you have mapillary_tools installed in editable mode
529
+ mapillary_tools --version
530
+
531
+ # Alternatively
532
+ python -m mapillary_tools.commands --version
520
533
  ```
521
534
 
522
535
  ## Tests
@@ -524,19 +537,28 @@ python3 -m mapillary_tools.commands --version
524
537
  Run tests:
525
538
 
526
539
  ```sh
527
- # test all cases
528
- python3 -m pytest -s -vv tests
529
- # or test a single case specifically
530
- python3 -m pytest -s -vv tests/unit/test_camm_parser.py::test_build_and_parse
540
+ # Test all cases
541
+ pytest -s -vv tests
542
+ # Or test a single case specifically
543
+ pytest -s -vv tests/unit/test_camm_parser.py::test_build_and_parse
531
544
  ```
532
545
 
533
- Run linting:
546
+ ## Code Quality
547
+
548
+ Run code formatting and linting:
534
549
 
535
550
  ```sh
536
- # format code
537
- black mapillary_tools tests
538
- # sort imports
551
+ # Format code with ruff
552
+ ruff format mapillary_tools tests
553
+
554
+ # Lint code with ruff
555
+ ruff check mapillary_tools tests
556
+
557
+ # Sort imports with usort
539
558
  usort format mapillary_tools tests
559
+
560
+ # Type checking with mypy
561
+ mypy mapillary_tools
540
562
  ```
541
563
 
542
564
  ## Release and Build
@@ -0,0 +1 @@
1
+ VERSION = "0.14.0"