Problèmes pour télécharger/transférer des séquences en ligne de commande

Bonjour,

Je rencontre des difficultés avec le transfert de séquences via panoramax_cli.

J’ai deux instances de “test”. Alors que l’upload fonctionne bien, le download et transfert d’une instance vers l’autre ne fonctionnent pas.

panoramax_cli download --api-url https://panoramax-dev.toto.fr --collection "f5d341bb-c668-496a-92ab-6d9cd8171064" --path ./downloaded_pictures 

 ⬇️  Downloading sequence Weddels-2 (f5d341bb-c668-496a-92ab-6d9cd8171064)
╸━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 0:00:00 [1/74] ⏳ --:-- remaining  
  📷 Downloading GSAG2150.JPG .  
╭─────────────────────────────────────────────────────────────────────────────────────────────────────────────── Error while downloading pictures ───────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ Request URL is missing an 'http://' or 'https://' protocol.                                                                                                                                                                                                    │
╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
ℹ️ You can find more details in the file trace_panoramax_cli_20260309-15_34_13.txt

Le message d’erreur est le même pour les transferts.

Le fichier de log généré affiche ce genre de blocs

Traceback (most recent call last):
  File "/home/me/.local/pipx/venvs/panoramax-cli/lib/python3.12/site-packages/httpx/_transports/default.py", line 101, in map_httpcore_exceptions
    yield
  File "/home/me/.local/pipx/venvs/panoramax-cli/lib/python3.12/site-packages/httpx/_transports/default.py", line 250, in handle_request
    resp = self._pool.handle_request(req)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/me/.local/pipx/venvs/panoramax-cli/lib/python3.12/site-packages/httpcore/_sync/connection_pool.py", line 207, in handle_request
    raise UnsupportedProtocol(
httpcore.UnsupportedProtocol: Request URL is missing an 'http://' or 'https://' protocol.

Enfin, pas de logs du côté des conteneurs.

Quelqu’un aurait-il une idée ?

Bonjour @adripa45 , est ce que tu pourrais m’envoyer un example de ce que retourne l’api de ton instance pour une collection ?

https://panoramax-dev.toto.fr/api/collections?limit=1

et avec l’id retourné dans la réponse (ou alors il y a un links associé dans la première collection de la réponse):

https://panoramax-dev.toto.fr/api/collections/<id_de_la_collection>/items?limit=1

Je me demande si les liens de téléchargement sont bons vu l’erreur.

Bonjour,

Merci pour ce retour, voici le retour des commandes suivantes

curl --header “Authorization: Bearer TOTO“ -X GET https://panoramax-dev.toto.fr/api/collections\\?limit\\=1 | json_pp

% Total % Received % Xferd Average Speed Time Time Time Current

                             Dload  Upload   Total   Spent    Left  Speed

100 3270 100 3270 0 0 86707 0 --:–:-- --:–:-- --:–:-- 88378

{

“collections” : [

  {

“created” : “2025-10-09T08:51:45.466187+00:00”,

“description” : “A sequence of geolocated pictures”,

“extent” : {

“spatial” : {

“bbox” : [

              \[

0.6976752,

47.4124971999722,

0.7031604,

47.4201598

              \]

           \]

        },

“temporal” : {

“interval” : [

              \[

“2025-06-04T11:58:27+00:00”,

“2025-06-04T12:03:07+00:00”

              \]

           \]

        }

     },

“geovisio:length_km” : 2.024,

“geovisio:upload-software” : “cli”,

“id” : “7a85ec36-46fc-48ea-9d7e-6bc8406caf1d”,

“keywords” : [

“pictures”,

“Colombier”

     \],

“license” : “CC-BY-SA-4.0”,

“links” : [

        {

“href” : “https://panoramax-dev.toto.fr/api/collections/7a85ec36-46fc-48ea-9d7e-6bc8406caf1d/items”,

“rel” : “items”,

“title” : “Pictures in this sequence”,

“type” : “application/geo+json”

        },

        {

“href” : “https://panoramax-dev.toto.fr/api/”,

“rel” : “parent”,

“title” : “Instance catalog”,

“type” : “application/json”

        },

        {

“href” : “https://panoramax-dev.toto.fr/api/”,

“rel” : “root”,

“title” : “Instance catalog”,

“type” : “application/json”

        },

        {

“href” : “https://panoramax-dev.toto.fr/api/collections/7a85ec36-46fc-48ea-9d7e-6bc8406caf1d”,

“rel” : “self”,

“title” : “Metadata of this sequence”,

“type” : “application/json”

        },

        {

“href” : " Creative Commons Attribution Share Alike 4.0 International | Software Package Data Exchange (SPDX) ",

“rel” : “license”,

“title” : “License for this object (CC-BY-SA-4.0)”

        },

        {

“href” : “https://panoramax-dev.toto.fr/api/upload_sets/d2cfc61a-0887-4642-9210-7c8fbc05ad2f”,

“rel” : “upload_set”,

“title” : “Link to the upload set”,

“type” : “application/json”

        }

     \],

“providers” : [

        {

“id” : “4d98cfd2-05a4-4cf3-9347-ae114ced4670”,

“name” : “adrien.paillard”,

“roles” : [

“producer”

           \]

        }

     \],

“quality:horizontal_accuracy” : 4,

“quality:horizontal_accuracy_type” : “95% confidence interval”,

“semantics” : [],

“stac_extensions” : [

https://stac-extensions.github.io/stats/v0.2.0/schema.json”,

https://stac.linz.govt.nz/v0.0.15/quality/schema.json

     \],

“stac_version” : “1.0.0”,

“stats:items” : {

“count” : 141

     },

“summaries” : {

“panoramax:horizontal_pixel_density” : [

16

        \]

     },

“title” : “Colombier”,

“type” : “Collection”,

“updated” : “2025-10-09T08:59:48.866446+00:00”

  }

],

“links” : [

  {

“href” : “https://panoramax-dev.toto.fr/api/”,

“rel” : “root”,

“title” : “Instance catalog”,

“type” : “application/json”

  },

  {

“href” : “https://panoramax-dev.toto.fr/api/”,

“rel” : “parent”,

“type” : “application/json”

  },

  {

“href” : “https://panoramax-dev.toto.fr/api/collections?limit=1”,

“rel” : “self”,

“type” : “application/json”

  },

  {

“href” : “https://panoramax-dev.toto.fr/api/collections/queryables”,

“rel” : " OGC RAINBOW ",

“title” : “Queryables”,

“type” : “application/schema+json”

  },

  {

“href” : “https://panoramax-dev.toto.fr/api/collections?limit=1&sortby=%2Bcreated,%2Bid”,

“rel” : “first”,

“type” : “application/json”

  },

  {

“href” : “https://panoramax-dev.toto.fr/api/collections?limit=1&sortby=%2Bcreated,%2Bid&page=created+<+‘2025-10-09+08:51:45.466187%2B00:00’+OR+(created+%3D+‘2025-10-09+08:51:45.466187%2B00:00’+AND+id+<+‘7a85ec36-46fc-48ea-9d7e-6bc8406caf1d’)”,

“rel” : “prev”,

“type” : “application/json”

  },

  {

“href” : “https://panoramax-dev.toto.fr/api/collections?limit=1&sortby=%2Bcreated,%2Bid&page=created+>+‘2025-10-09+08:51:45.466187%2B00:00’+OR+(created+%3D+‘2025-10-09+08:51:45.466187%2B00:00’+AND+id+>+‘7a85ec36-46fc-48ea-9d7e-6bc8406caf1d’)”,

“rel” : “next”,

“type” : “application/json”

  },

  {

“href” : “https://panoramax-dev.toto.fr/api/collections?limit=1&sortby=%2Bcreated,%2Bid&page=created+<%3D+‘2026-03-10+10:33:31.151662%2B00:00’”,

“rel” : “last”,

“type” : “application/json”

  }

]

}

curl --header “Authorization: Bearer TOTO” -X GET https://panoramax-dev.toto.fr/api/collections/7a85ec36-46fc-48ea-9d7e-6bc8406caf1d/items\\?limit\\=1 | json_pp

% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 8443 100 8443 0 0 229k 0 --:–:-- --:–:-- --:–:-- 235k
{
“features” : [
{
“asset_templates” : {
“tiles” : {
“description” : “Highest resolution available of this picture, as tiles”,
“href” : “/derivates/16/44/ee/5d/d06d-4313-95f0-6a0675b61a2f/tiles/{TileCol}_{TileRow}.jpg”,
“roles” : [
“data”
],
“title” : “HD tiled picture”,
“type” : “image/jpeg”
}
},
“assets” : {
“hd” : {
“description” : “Highest resolution available of this picture”,
“href” : “/permanent/16/44/ee/5d/d06d-4313-95f0-6a0675b61a2f.jpg”,
“roles” : [
“data”
],
“title” : “HD picture”,
“type” : “image/jpeg”
},
“sd” : {
“description” : “Picture in standard definition (fixed width of 2048px)”,
“href” : “/derivates/16/44/ee/5d/d06d-4313-95f0-6a0675b61a2f/sd.jpg”,
“roles” : [
“visual”
],
“title” : “SD picture”,
“type” : “image/jpeg”
},
“thumb” : {
“description” : “Picture in low definition (fixed width of 500px)”,
“href” : “/derivates/16/44/ee/5d/d06d-4313-95f0-6a0675b61a2f/thumb.jpg”,
“roles” : [
“thumbnail”
],
“title” : “Thumbnail”,
“type” : “image/jpeg”
}
},
“bbox” : [
0.7029607,
47.4188639,
0.7029607,
47.4188639
],
“collection” : “7a85ec36-46fc-48ea-9d7e-6bc8406caf1d”,
“geometry” : {
“coordinates” : [
0.7029607,
47.4188639
],
“type” : “Point”
},
“id” : “1644ee5d-d06d-4313-95f0-6a0675b61a2f”,
“links” : [
{
“href” : “https://panoramax-dev.toto.fr/api/”,
“rel” : “root”,
“title” : “Instance catalog”,
“type” : “application/json”
},
{
“href” : “https://panoramax-dev.toto.fr/api/collections/7a85ec36-46fc-48ea-9d7e-6bc8406caf1d”,
“rel” : “parent”,
“type” : “application/json”
},
{
“href” : “https://panoramax-dev.toto.fr/api/collections/7a85ec36-46fc-48ea-9d7e-6bc8406caf1d/items/1644ee5d-d06d-4313-95f0-6a0675b61a2f”,
“rel” : “self”,
“type” : “application/geo+json”
},
{
“href” : “https://panoramax-dev.toto.fr/api/collections/7a85ec36-46fc-48ea-9d7e-6bc8406caf1d”,
“rel” : “collection”,
“type” : “application/json”
},
{
“href” : “https://spdx.org/licenses/CC-BY-SA-4.0.html”,
“rel” : “license”,
“title” : “License for this object (CC-BY-SA-4.0)”
},
{
“geometry” : {
“coordinates” : [
0.7028526,
47.4187815
],
“type” : “Point”
},
“href” : “https://panoramax-dev.toto.fr/api/collections/7a85ec36-46fc-48ea-9d7e-6bc8406caf1d/items/5c64086b-2908-4f7a-9d8a-4169c7b09dd2”,
“id” : “5c64086b-2908-4f7a-9d8a-4169c7b09dd2”,
“rel” : “next”,
“type” : “application/geo+json”
}
],
“properties” : {
“annotations” : [
{
“id” : “79dbf086-67a8-4b01-b8dd-17f674e9bd54”,
“semantics” : [
{
“key” : “detection_confidence[osm|traffic_sign=yes]”,
“value” : “0.722”
},
{
“key” : “detection_model[osm|traffic_sign=yes]”,
“value” : “SGBlur-yolo11s/0.1.0”
},
{
“key” : “osm|traffic_sign”,
“value” : “yes”
}
],
“shape” : {
“coordinates” : [
[
[
3450,
1378
],
[
3507,
1378
],
[
3507,
1425
],
[
3450,
1425
],
[
3450,
1378
]
]
],
“type” : “Polygon”
}
},
{
“id” : “986f6d3c-4d97-405c-bdda-ba0ff4680c85”,
“semantics” : [
{
“key” : “detection_confidence[osm|traffic_sign=yes]”,
“value” : “0.809”
},
{
“key” : “detection_model[osm|traffic_sign=yes]”,
“value” : “SGBlur-yolo11s/0.1.0”
},
{
“key” : “osm|traffic_sign”,
“value” : “yes”
}
],
“shape” : {
“coordinates” : [
[
[
1688,
1521
],
[
1727,
1521
],
[
1727,
1561
],
[
1688,
1561
],
[
1688,
1521
]
]
],
“type” : “Polygon”
}
}
],
“collection” : {
“semantics” :
},
“created” : “2025-10-09T08:49:36.497408+00:00”,
“datetime” : “2025-06-04T11:58:27+00:00”,
“datetimetz” : “2025-06-04T13:58:27+02:00”,
“exif” : {
“Exif.GPSInfo.GPSAltitude” : “145317/1000”,
“Exif.GPSInfo.GPSAltitudeRef” : “0”,
“Exif.GPSInfo.GPSDateStamp” : “2025:06:04”,
“Exif.GPSInfo.GPSLatitude” : “47/1 25/1 79100399/10000000”,
“Exif.GPSInfo.GPSLatitudeRef” : “N”,
“Exif.GPSInfo.GPSLongitude” : “0/1 42/1 106585200/10000000”,
“Exif.GPSInfo.GPSLongitudeRef” : “E”,
“Exif.GPSInfo.GPSTimeStamp” : “11/1 58/1 27/1”,
“Exif.Image.DateTime” : “2025:06:04 13:58:27”,
“Exif.Image.ExifTag” : “158”,
“Exif.Image.GPSTag” : “602”,
“Exif.Image.ImageDescription” : “DCIM\100GOPRO\GSAD1819.JPG”,
“Exif.Image.Make” : “GoPro”,
“Exif.Image.Model” : “GoPro Max”,
“Exif.Image.Orientation” : “1”,
“Exif.Image.ResolutionUnit” : “2”,
“Exif.Image.Software” : “H19.03.02.02.00”,
“Exif.Image.XResolution” : “72/1”,
“Exif.Image.YCbCrPositioning” : “1”,
“Exif.Image.YResolution” : “72/1”,
“Exif.Iop.InteroperabilityIndex” : “R98”,
“Exif.Iop.InteroperabilityVersion” : “48 49 48 48”,
“Exif.Photo.ApertureValue” : “297/100”,
“Exif.Photo.BodySerialNumber” : “C3351325025538”,
“Exif.Photo.ColorSpace” : “0”,
“Exif.Photo.ComponentsConfiguration” : “1 2 3 0”,
“Exif.Photo.CompressedBitsPerPixel” : “100/297”,
“Exif.Photo.Contrast” : “0”,
“Exif.Photo.CustomRendered” : “0”,
“Exif.Photo.DateTimeDigitized” : “2025:06:04 13:58:27”,
“Exif.Photo.DateTimeOriginal” : “2025:06:04 13:58:27”,
“Exif.Photo.DeviceSettingDescription” : “0 0 0 0”,
“Exif.Photo.DigitalZoomRatio” : “1024/1024”,
“Exif.Photo.ExifVersion” : “48 50 50 49”,
“Exif.Photo.FNumber” : “28/10”,
“Exif.Photo.FileSource” : “3”,
“Exif.Photo.Flash” : “32”,
“Exif.Photo.FlashpixVersion” : “8 9 10 11”,
“Exif.Photo.FocalLength” : “3/1”,
“Exif.Photo.FocalLengthIn35mmFilm” : “15”,
“Exif.Photo.GainControl” : “0”,
“Exif.Photo.InteroperabilityTag” : “572”,
“Exif.Photo.LightSource” : “0”,
“Exif.Photo.MaxApertureValue” : “297/100”,
“Exif.Photo.MeteringMode” : “1”,
“Exif.Photo.PixelXDimension” : “5760”,
“Exif.Photo.PixelYDimension” : “2880”,
“Exif.Photo.Saturation” : “0”,
“Exif.Photo.SceneCaptureType” : “1”,
“Exif.Photo.SceneType” : “1”,
“Exif.Photo.SensingMethod” : “2”,
“Exif.Photo.Sharpness” : “2”,
“Exif.Photo.SubjectDistance” : “0/1”,
“Exif.Photo.SubjectDistanceRange” : “0”,
“Exif.Photo.WhiteBalance” : “0”,
“Exif.Thumbnail.Compression” : “6”,
“Exif.Thumbnail.JPEGInterchangeFormat” : “44020”,
“Exif.Thumbnail.JPEGInterchangeFormatLength” : “16760”,
“Exif.Thumbnail.ResolutionUnit” : “2”,
“Exif.Thumbnail.XResolution” : “72/1”,
“Exif.Thumbnail.YResolution” : “72/1”,
“Xmp.GPano.CaptureSoftware” : “GoPro Max”,
“Xmp.GPano.CroppedAreaImageHeightPixels” : “2880”,
“Xmp.GPano.CroppedAreaImageWidthPixels” : “5760”,
“Xmp.GPano.CroppedAreaLeftPixels” : “0”,
“Xmp.GPano.CroppedAreaTopPixels” : “0”,
“Xmp.GPano.ExposureLockUsed” : “False”,
“Xmp.GPano.FirstPhotoDate” : “2025:06:04 13:58:27”,
“Xmp.GPano.FullPanoHeightPixels” : “2880”,
“Xmp.GPano.FullPanoWidthPixels” : “5760”,
“Xmp.GPano.InitialCameraDolly” : “0.0”,
“Xmp.GPano.InitialHorizontalFOVDegrees” : “0.0”,
“Xmp.GPano.InitialVerticalFOVDegrees” : “0.0”,
“Xmp.GPano.InitialViewHeadingDegrees” : “0.0”,
“Xmp.GPano.InitialViewPitchDegrees” : “0.0”,
“Xmp.GPano.InitialViewRollDegrees” : “0.0”,
“Xmp.GPano.LastPhotoDate” : “2025:06:04 13:58:27”,
“Xmp.GPano.PoseHeadingDegrees” : “0.0”,
“Xmp.GPano.PosePitchDegrees” : “0.0”,
“Xmp.GPano.PoseRollDegrees” : “0.0”,
“Xmp.GPano.ProjectionType” : “equirectangular”,
“Xmp.GPano.SourcePhotosCount” : “2”,
“Xmp.GPano.StitchingSoftware” : “GoPro Max”,
“Xmp.GPano.UsePanoramaViewer” : “True”
},
“geovisio:image” : “/permanent/16/44/ee/5d/d06d-4313-95f0-6a0675b61a2f.jpg”,
“geovisio:producer” : “adrien.paillard”,
“geovisio:rank_in_collection” : 1,
“geovisio:status” : “ready”,
“geovisio:thumbnail” : “/derivates/16/44/ee/5d/d06d-4313-95f0-6a0675b61a2f/thumb.jpg”,
“geovisio:visibility” : “anyone”,
“license” : “CC-BY-SA-4.0”,
“original_file:name” : “GSAD1819.JPG”,
“original_file:size” : 2867147,
“panoramax:horizontal_pixel_density” : 16,
“pers:interior_orientation” : {
“camera_manufacturer” : “GoPro”,
“camera_model” : “Max”,
“field_of_view” : 360,
“focal_length” : 3,
“sensor_array_dimensions” : [
5760,
2880
]
},
“pers:pitch” : 0,
“pers:roll” : 0,
“quality:horizontal_accuracy” : 4,
“semantics” : ,
“tiles:tile_matrix_sets” : {
“geovisio” : {
“identifier” : “geovisio-1644ee5d-d06d-4313-95f0-6a0675b61a2f”,
“tileMatrix” : [
{
“identifier” : “0”,
“matrixHeight” : 4,
“matrixWidth” : 8,
“scaleDenominator” : 1,
“tileHeight” : 720,
“tileWidth” : 720,
“topLeftCorner” : [
0,
0
],
“type” : “TileMatrixType”
}
],
“title” : “GeoVisio tile matrix for picture 1644ee5d-d06d-4313-95f0-6a0675b61a2f”,
“type” : “TileMatrixSetType”
}
},
“updated” : “2025-10-09T08:50:58.246068+00:00”,
“view:azimuth” : 232
},
“providers” : [
{
“id” : “4d98cfd2-05a4-4cf3-9347-ae114ced4670”,
“name” : “adrien.paillard”,
“roles” : [
“producer”
]
}
],
“stac_extensions” : [
https://stac-extensions.github.io/view/v1.0.0/schema.json”,
https://stac-extensions.github.io/perspective-imagery/v1.0.0/schema.json”,
https://stac-extensions.github.io/tiled-assets/v1.0.0/schema.json”
],
“stac_version” : “1.0.0”,
“type” : “Feature”
}
],
“links” : [
{
“href” : “https://panoramax-dev.toto.fr/api/”,
“rel” : “root”,
“title” : “Instance catalog”,
“type” : “application/json”
},
{
“href” : “https://panoramax-dev.toto.fr/api/collections/7a85ec36-46fc-48ea-9d7e-6bc8406caf1d”,
“rel” : “parent”,
“type” : “application/json”
},
{
“href” : “https://panoramax-dev.toto.fr/api/collections/7a85ec36-46fc-48ea-9d7e-6bc8406caf1d/items?limit=1”,
“rel” : “self”,
“type” : “application/geo+json”
},
{
“href” : “https://panoramax-dev.toto.fr/api/collections/7a85ec36-46fc-48ea-9d7e-6bc8406caf1d/items?limit=1&startAfterRank=1”,
“rel” : “next”,
“type” : “application/geo+json”
},
{
“href” : “https://panoramax-dev.toto.fr/api/collections/7a85ec36-46fc-48ea-9d7e-6bc8406caf1d/items?limit=1&startAfterRank=140”,
“rel” : “last”,
“type” : “application/geo+json”
}
],
“type” : “FeatureCollection”
}

Je confirme au passage que le download pour cet id ne fonctionne pas

panoramax_cli download --api-url https://panoramax-dev.toto.fr --collection 7a85ec36-46fc-48ea-9d7e-6bc8406caf1d  
 ⬇️  Downloading sequence Colombier (7a85ec36-46fc-48ea-9d7e-6bc8406caf1d)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 0:00:00 [1/141] ⏳ --:-- remaining  
  📷 Downloading GSAD1819.JPG .  
╭────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── Error while downloading pictures ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ Request URL is missing an 'http://' or 'https://' protocol.                                                                                                                                                                                                                                                  │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
ℹ️ You can find more details in the file trace_panoramax_cli_20260316-15_42_56.txt

Merci pour les liens @adripa45 , c’est bien ce que je pensais, les liens vers les photos sont des liens relatifs et non absolu, et c’est un cas que ne gère pas la CLI pour le moment ( pour le moment, je pense que toutes les instances publiques ont des liens absolus).

J’ai créé une issue pour qu’on implémente ca.