This study explores the potential of Google Veo 3, a generative video model, to synthesise 8-second dashcam-style urban traffic scenes based solely on text prompts in 76 cities across six continents. YOLOv11x was used to count road users, traffic lights, and stop signs, revealing variations across cities: Karachi had the most objects detected (79), while Muscat had only four cars. Audio analysis using dBFS showed that Montevideo was the loudest, while Copenhagen was the quietest. Through a qualitative visual analysis, the authors assessed and confirmed the perceived authenticity of most traffic scenes and highlighted AI errors, including the inability to handle non-English languages in these videos. Moreover, we compared 10 synthetic videos of New York City and Kampala, each, and verified that Veo 3 is consistent. To summarise, Veo 3 is capable of synthesising authentic, logical traffic scenes worldwide; nevertheless, it still poses non-negligible errors.
If you use the llm-traffic-scene for academic work please cite the following paper:
Alam, M. S., & Wang, Z., & Zhang, L., & Bazilinskyy, P. (2026). Exploring Veo 3's Capabilities for Generating Urban Traffic Scenes in 76 Cities Worldwide. 18th International Conference on Automotive User Interfaces and Interactive Vehicular Applications. Gothenburg, Sweden. https://doi.org/10.1145/3828158.3838250
Tested with Python 3.12.13 and the uv package manager.
Follow these steps to set up the project.
Step 1: Install uv. uv is a fast Python package and environment manager. Install it using one of the following methods:
macOS / Linux (bash/zsh):
curl -LsSf https://astral.sh/uv/install.sh | shWindows (PowerShell):
irm https://astral.sh/uv/install.ps1 | iexAlternative (if you already have Python and pip):
pip install uvStep 2: Fix permissions (if needed):t
Sometimes uv needs to create a folder under ~/.local/share/uv/python (macOS/Linux) or %LOCALAPPDATA%\uv\python (Windows).
If this folder was created by another tool (e.g. sudo), you may see an error like:
error: failed to create directory ... Permission denied (os error 13)To fix it, ensure you own the directory:
mkdir -p ~/.local/share/uv
chown -R "$(id -un)":"$(id -gn)" ~/.local/share/uv
chmod -R u+rwX ~/.local/share/uv# Create directory if it doesn't exist
New-Item -ItemType Directory -Force "$env:LOCALAPPDATA\uv"
# Ensure you (the current user) own it
# (usually not needed, but if permissions are broken)
icacls "$env:LOCALAPPDATA\uv" /grant "$($env:UserName):(OI)(CI)F"Step 3: After installing, verify:
uv --versionStep 4: Clone the repository:
git clone https://github.com/Shaadalam9/llm-traffic-sceneStep 5: Ensure correct Python version. If you don’t already have Python 13 installed, let uv fetch it:
uv python install 3.12.13The repo should contain a .python-version file so uv will automatically use this version.
Step 6: Create and sync the virtual environment. This will create .venv in the project folder and install dependencies exactly as locked in uv.lock:
uv sync --frozenStep 7: Activate the virtual environment:
macOS / Linux (bash/zsh):
source .venv/bin/activateWindows (PowerShell):
.\.venv\Scripts\Activate.ps1Windows (cmd.exe):
.\.venv\Scripts\activate.batStep 8: Ensure that dataset are present. Place required datasets (including mapping.csv) into the data/ directory:
Step 9: Run the code:
python3 run.pyConfiguration of the project needs to be defined in config. Please use the default.config file for the required structure of the file. If no custom config file is provided, default.config is used. The config file has the following parameters:
videos: Directory containing the videos generated from Veo3.mapping: CSV file containg the information about the cities.data: Directory containing the YOLO output.snaps: Directory containing the first frame from each generated video file.confidence: Sets the confidence threshold parameter for YOLO.model: Specifies the YOLO model to use; supported/tested versions includev8xandv11x.tracking_mode: Configures YOLO for object tracking.always_analyse: Always conduct analysis even when pickle files are present (good for testing).display_frame_tracking: Displays the frame tracking during analysis.save_annotated_img: Saves the annotated frames produced by YOLO.save_tracked_img: Saves the tracked frames produced by YOLO.delete_labels: Deletes label files from YOLO output.delete_frames: Deletes frames from YOLO output.delete_runs_files: Deletes files containing YOLO output after analysis.font_family: Specifies the font family to be used in outputs.font_size: Specifies the font size to be used in outputs.plotly_template: Defines the template for Plotly figures.logger_level: Level of console output. Can be: debug, info, warning, error.
Distribution of different objects detected in the videos, sorted in alphabetical order..
Distribution of objects detected in the videos, sorted by the average values of object counts..
Distribution of objects detected in the videos, first grouped by continent and then sorted by average values within each continent.
Sound from different countries (measured in dB).
Distribution of object detected in 10 different videos of New York City (United States) and Kampala (Uganda).
![]() |
![]() |
![]() |
![]() |
| Havana (Cuba) | Mexico City (Mexico) | New York City (United States) | Panama City (Panama) |
![]() |
|||
| Toronto (Canada) |
![]() |
![]() |
![]() |
![]() |
| Auckland (New Zealand) | Funafuti (Tuvalu) | Jakarta (Indonesia) | Suva (Fiji) |
![]() |
![]() |
![]() |
![]() |
| Asunción (Paraguay) | Buenos Aires (Argentina) | Lima (Peru) | Montevideo (Uruguay) |
![]() |
![]() |
![]() |
|
| Quito (Ecuador) | Rio de Janeiro (Brazil) | Santiago (Chile) |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
If you have any questions or suggestions, feel free to reach out to md_shadab_alam@outlook.com or pavlo.bazilinskyy@gmail.com.






























































































