Skip to content

[bug] Nested cache directory created when using meshroom_batch with --save and --cache simultaneously #2889

@jikbb2

Description

@jikbb2

Describe the bug

When running meshroom_batch with both the --save and --cache arguments in a single command, a nested cache directory is created (e.g., my_cache/my_cache). This occurs on the first execution, not on subsequent runs.

To Reproduce

Steps to reproduce the behavior:

  1. Build Meshroom from source and navigate to the output directory containing the binaries (where meshroom_batch is located).

  2. Create a subdirectory for images:
    mkdir images && touch images/1.jpg

  3. Run meshroom_batch with both --save and --cache arguments:
    ./meshroom_batch -p photogrammetry -i ./images --save test.mg --cache test_cache

  4. Check the contents of the created cache directory. You will see the nested structure:
    ls -R test_cache

Expected behavior

A single, non-nested cache directory should be created at the top level. The directory structure should look like this:

.
├── images/
├── test_cache/      <-- Single, top-level cache with computation results inside
└── test.mg

Instead, the actual result is test_cache/test_cache/.

Screenshots

Image

Log

Due to an unexpectedly nested cache structure, the system fails to find the required files and cannot reference intermediate results.

ERROR:root:Error on node computation: [Errno 2] No such file or directory: 'test_cache/CameraInit/f14eab7591733466186ade10c12a536890ca3f2d/viewpoints.sfm'
WARNING:root:Downgrade status on node "Texturing_1" from Status.SUBMITTED to Status.NONE
WARNING:root:Downgrade status on node "Meshing_1" from Status.SUBMITTED to Status.NONE
WARNING:root:Downgrade status on node "DepthMapFilter_1(0)" from Status.SUBMITTED to Status.NONE
WARNING:root:Downgrade status on node "DepthMapFilter_1(1)" from Status.SUBMITTED to Status.NONE
WARNING:root:Downgrade status on node "ImageMatching_1" from Status.SUBMITTED to Status.NONE
WARNING:root:Downgrade status on node "FeatureExtraction_1(0)" from Status.SUBMITTED to Status.NONE
WARNING:root:Downgrade status on node "StructureFromMotion_1" from Status.SUBMITTED to Status.NONE
WARNING:root:Downgrade status on node "PrepareDenseScene_1(0)" from Status.SUBMITTED to Status.NONE
WARNING:root:Downgrade status on node "DepthMap_1(0)" from Status.SUBMITTED to Status.NONE
WARNING:root:Downgrade status on node "DepthMap_1(1)" from Status.SUBMITTED to Status.NONE
WARNING:root:Downgrade status on node "DepthMap_1(2)" from Status.SUBMITTED to Status.NONE
WARNING:root:Downgrade status on node "MeshFiltering_1" from Status.SUBMITTED to Status.NONE
WARNING:root:Downgrade status on node "FeatureMatching_1(0)" from Status.SUBMITTED to Status.NONE
WARNING:root:Downgrade status on node "FeatureMatching_1(1)" from Status.SUBMITTED to Status.NONE
Traceback (most recent call last):
  File "/opt/rh/rh-python36/root/usr/lib64/python3.6/site-packages/cx_Freeze/initscripts/__startup__.py", line 40, in run
  File "/opt/Meshroom/setupInitScriptUnix.py", line 42, in run
  File "bin/meshroom_batch", line 228, in <module>
  File "/opt/Meshroom/meshroom/core/graph.py", line 1584, in executeGraph
  File "/opt/Meshroom/meshroom/core/node.py", line 411, in process
  File "/opt/Meshroom/meshroom/nodes/aliceVision/CameraInit.py", line 469, in processChunk
  File "/opt/Meshroom/meshroom/nodes/aliceVision/CameraInit.py", line 459, in createViewpointsFile
FileNotFoundError: [Errno 2] No such file or directory: 'test_cache/CameraInit/f14eab7591733466186ade10c12a536890ca3f2d/viewpoints.sfm'

Desktop (please complete the following and other pertinent information):

  • OS: [Ubuntu 24.04]
  • Python version [3.9.13]
  • Meshroom version: please specify if you are using a release version or your own build
    • Binary version [2023.3.0]

Additional context

1. Root Cause Analysis

The issue stems from a redundant graph.save() call at the beginning of the executeGraph() function in meshroom/core/graph.py.

The meshroom_batch script correctly calls graph.save(..., setupProjectFile=False) when the --cache argument is present, which avoids the automatic cache setup.

However, executeGraph() is then called and it immediately calls graph.save() again, this time with the default argument setupProjectFile=True.

This re-enables the automatic cache setup logic, which conflicts with the already configured cache path from the command line, resulting in the creation of a nested directory.

2. Proposed Solution

The bug can be fixed by changing the graph.save() call inside executeGraph() to explicitly use setupProjectFile=False. This preserves the functionality of saving progress without causing the path conflict.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugfor actual bugs (unsure? use type:question)

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions