mrkeyoor.com_
Sun 01 Nov 23:34 UTC
Dataevaluationupdated 01 Nov 2026

spektrafilm review

spektrafilm is a Python model of photographic film, printing and scanning, with a desktop interface for exploring the result. It uses spectral data and adjustable material effects to help photographers and developers investigate how a film-and-paper combination shapes an image.

Verdict

Our spektrafilm build succeeded in 6 seconds, but tests stopped after 2 seconds because NumPy could not be imported, leaving rendering behavior unverified. Try it if you want to inspect a configurable film-and-print model and can manage the input and display color spaces. For deadline editing, the documented slow full-resolution export and sparse control explanations are reasons to evaluate a different workflow.

We ran it

Lab card: what happened when we ran spektrafilmScreenshot of spektrafilm (github.com/andreavolpato/spektrafilm)
Install✓ · 24s34 packages · 38 MB
Build✓ · 6s
Tests✗ · 2sran, no count parsed
Known vulns0(pip-audit)
Repo428 files~41,439 lines of source · 34.9 MB · 0 CI workflows · tests dir

Answers from our run

Does spektrafilm build from source?

Dependencies installed in 24 seconds (34 packages), and the build succeeded in 6 seconds. We cloned commit 3bb2c2d into a clean Debian container with 3 CPUs and no project-specific setup.

Do spektrafilm's tests pass?

No. The project's own test command exited unsuccessfully after 2 seconds, and its output did not expose an individual test count.

Does spektrafilm have known vulnerabilities in its dependencies?

pip-audit found none in the dependency tree at the time of our run.

Who should not use spektrafilm?

Editors needing predictable full-resolution turnaround: the README explicitly warns that full-resolution export is very slow.

What are the alternatives to spektrafilm?

vkdt, darktable. Our spektrafilm build succeeded in 6 seconds, but tests stopped after 2 seconds because NumPy could not be imported, leaving rendering behavior unverified.

SetupN/AInstallation and build steps succeeded, but the missing NumPy import blocked checks and no working desktop session was established.
DocsN/AThe model and workflow explanations were read, but the usability of GUI tooltips and parameter guidance was not assessed in the application.
CommunityN/AThe author describes a spare-time effort and recent discussion activity exists; support reliability and maintainer capacity were not assessed.
MaturityN/ANo rendering-quality comparison or GUI workload was completed, and the test process stopped during configuration loading.

Who it’s for

Photographers comfortable preparing linear image data and checking color spaces when exploring film and paper combinations.
Color-science developers who want the Python reference model behind related integrations.
Imaging teams evaluating LUT export from a configurable photographic simulation.

Who it’s NOT for

Editors needing predictable full-resolution turnaround: the README explicitly warns that full-resolution export is very slow.
Color-critical workflows relying on an automatically color-managed preview: the README says napari is not color-managed and qualifies the Windows conversion attempt.
People wanting every GUI control explained in the manual: the author says many controls have little or no documentation.
Teams requiring a fixed implementation with little change: the README describes the project as experimental and in rapid development.

Setup reality

Our installation step succeeded in 24 seconds and the build step in 6 seconds at commit 3bb2c2d on November 1, 2026, recording 34 dependencies and 38 MB on disk. Tests failed with exit 4 after 2 seconds because tests/conftest.py could not import NumPy. The pip-audit result reported 0 known vulnerabilities.

The README documents a local desktop interface, a Python runtime and LUT creation. Its examples use Python 3.13, with development tooling added separately. You need appropriate RAW or prepared linear images and explicit color-space choices to evaluate the simulation. The supplied log does not explain why NumPy was unavailable to the test process.

The recorded sandbox had 3 CPUs, 8 GB RAM and image ghcr.io/astral-sh/uv:python3.12-bookworm; actual runtime and operating-system versions need raw toolchain logs. The README warns about slow full-resolution export and says napari is not color-managed. Successful installation and compilation do not establish a working GUI or an accurate film rendering.

spektrafilm gives you controls for the negative and the print, so choosing a film stock is only the beginning of the image. Its Python reference implementation models a camera image passing through virtual photographic materials and a scan. That makes it interesting for someone who wants to explore why the rendering changes, rather than simply select a finished preset.

The README describes a model grounded in manufacturer spectral data, with a desktop interface and tools for exporting lookup tables. Our run reached successful install and build steps, then stopped at a missing NumPy import before the test suite could exercise the model. It provides setup evidence, not a judgment of the pictures.

What happened when we ran it

Our spektrafilm installation step succeeded in 24 seconds and the build step in 6 seconds at commit 3bb2c2d on November 1, 2026. The record lists 34 dependencies and 38 MB on disk. Tests failed with exit 4 after 2 seconds.

The failure occurred while loading tests/conftest.py, where importing numpy raised ModuleNotFoundError. Pytest stopped while loading its configuration, so this result is not a count of failed simulation assertions. The tail establishes that NumPy wasn't importable in that test process. It doesn't explain why, or show whether a different dependency installation would have fixed it.

The recorded sandbox configuration was 3 CPUs, 8 GB RAM and image ghcr.io/astral-sh/uv:python3.12-bookworm. Actual Python and operating-system versions require the raw toolchain logs; the image name alone cannot establish them. The checkout contained 428 files, approximately 41,439 source lines and 34.9 MB. The scan found a tests directory, no Dockerfile and no CI workflow files.

The pip-audit result reported 0 known vulnerabilities. That is a recorded audit outcome, not proof of security or evidence that the image-processing model is correct. We have no measured export speed, rendering comparison or GUI session from this run.

A film profile doesn't determine the final print

The README describes reconstructing spectral data from linear RGB, passing virtual light through a negative onto print paper, and scanning the reflected result. Film and paper profiles therefore both affect the image. If you're comparing a rendering with a photograph, record the print choice and exposure settings alongside the negative stock.

Coupler modeling is part of the project's stated explanation for saturation and contrast. The README also notes that some dye-density data are generic because manufacturers usually don't publish them. A model based on datasheets can still include approximations. It would be a mistake to treat the stock name as a guarantee of matching a particular lab scan.

That is the attraction for a curious photographer or developer: the settings expose parts of a photographic process that a fixed lookup table hides. The same detail creates work. You need a reference image and a consistent input transform to decide whether changing a coupler or enlarger setting improves your result.

Display color management needs explicit attention

The README says napari is not color-managed. It describes an sRGB display and output workflow, while saying the Windows GUI tries to obtain the display profile and convert the final image for viewing. The status bar indicates whether that attempt succeeds. We didn't verify this behavior.

For color-critical work, don't approve a look solely from an unchecked preview window. Compare an exported image through your established viewing workflow and keep the input and output color spaces explicit. Otherwise a display conversion difference can be mistaken for a film-model difference.

The GUI accepts RAW files through rawpy, and the README also documents externally prepared linear images. It recommends retaining scene-referred data for the manual route. An image already given a strong display rendering is a different starting point from the linear camera data the simulation expects, so input preparation belongs in the evaluation.

The GUI and LUT tools serve different experiments

The repository separates the simulation runtime from the Qt and napari desktop interface and the LUT creator. The runtime's documented API uses create_params and simulate. The LUT creator exports bundles for other imaging workflows, including optional OpenColorIO configuration. These are documented interfaces, not outputs generated by our run.

The README warns that full-resolution export is very slow. It also says many GUI controls have little or no documentation, with tooltips and source inspection offered as help. That makes the reference implementation a poor default for someone needing predictable delivery times and a fully explained editing interface.

The current README's environment examples use Python 3.13 and distinguish development tooling from the default desktop and LUT package. Those instructions don't explain our missing NumPy import by themselves. Before evaluating a render, establish a consistent environment in which both the application and its checks can import their requirements.

Consider vkdt for the integration and darktable for the workflow

vkdt's filmsim module documents an implementation of spektrafilm and recommends its filmsim.pst preset to connect the required lookup-table inputs. Consider that route when you want to evaluate the model inside vkdt. The module documentation labels it beta, and we have no comparison establishing equivalent output or faster rendering.

darktable manages digital negatives and provides nondestructive RAW development. Choose it for a broader photographic workflow when exploring spectral material modeling isn't the goal. It can also prepare linear input for spektrafilm, as spektrafilm's README explains, so the choice needn't be exclusive.

The repository's last push was July 14, 2026, while its issue and pull-request feed shows activity in late October. Those dates don't support declaring the project abandoned. The author describes it as a nights-and-weekends effort. Start with one representative RAW file, retain a reference export and record the color spaces and film-paper pairing before judging the next adjustment.

Alternatives

ProjectWhat it isPick it when
vkdtAn imaging workflow with a documented spektrafilm implementation in its filmsim module.Evaluate it when you want the model inside vkdt rather than the Python reference interface; the module documentation labels it beta.
darktableA photography workflow application with nondestructive RAW development.Choose it when managing and developing photographs is the main task; it can also prepare linear input for a separate spektrafilm experiment.

What people are saying

  1. [github-trending] andreavolpato/spektrafilm

Sources

  1. spektrafilm README
  2. vkdt filmsim module documentation
  3. darktable README
  4. spektrafilm repository facts
  5. spektrafilm issue and pull request activity
  6. spektrafilm latest release

More data reviews

jq · pgx · HowToLiveLonger · ip2region · dbdelve · litestream · the whole board →