How do I adjust how busy PhotoStructure makes my computer?

A new PhotoStructure user asks:

Hey!

I’m a recent convert. I’m importing my Google Photos library and the import is crippling my server with ffmpeg (I assume transcoding video files)

I have the cpuLoadPercent=75 (default value), but I’m not sure it affects ffmpeg.

I read through the ffmpegThreads notes, and I don’t think it’s what I’m looking for.

Thanks for an amazing product!

Know that there are many PhotoStructure settings to ensure PhotoStructure isn’t working your hardware “too hard” or “too little.”

cpuLoadPercent

This is a goal of system utilization–PhotoStructure won’t enqueue additional work if overall system load is higher than this value, but if the work was already enqueued, the system utilization may exceed this while the currently-enqueued work completes.

maxConcurrentImports

This setting may be better for you. For a 12 core hyperthreaded CPU, try maybe 8 or 12? That’ll only import at most 8 or 12 files concurrently.

Know that photo and video files are placed on two different work queues–only one video file is processed at a time so there should only be, at most, one ffmpeg transcode operation running at any given time.

ffmpegThreads

This only affects video transcoding, and defaults to a fraction of available CPUs. As of Dec 2022, the default is:

const ffmpegThreads = lazy(() =>
  clamp(1, 8, Settings.ffmpegThreads.value ?? round(maxCpus() / 4))
)

(so for a 12-core, HT CPU, maxCpus() will default to 18, and 18/4 = 4 (hence the 4 ffmpeg processes in top).

You could try a value of 2 or 3, if 4 is too much.

processPriority

The last setting is what priority should PhotoStructure renice subprocesses to–this defaults to BelowNormal, which is the same as renice -9.

Switching to Idle may result in spurious timeouts, as the OS won’t schedule work for renice -19 procs unless the system is mostly quiescent.