Products

Buy the section that hurts. Add the rest when it pays.

Pulpum ships as modules mapped to the machine, not to abstract "AI capabilities". Start with one — break prediction, drying energy, moisture profile — and expand along the machine as each module proves its number.

10 modulesPer-machine licensingWhole-mill bundle available

run_8f21c4 · agent graph · PM4 10 nodes · 1 approval gate
01 · orchestrator ingest.grade_target ✓ SUCCEEDED 02 · orchestrator twin.simulate ✓ SUCCEEDED 03 · pulp_stock stock.refine ✓ SUCCEEDED 04 · wetend_chem wetend.dose ✓ SUCCEEDED 05 · form_press form.headbox ✓ SUCCEEDED 06 · form_press press.nip ✓ SUCCEEDED 07 · dry_coat dry.steam ✓ SUCCEEDED 08 · defect_inspect inspect.web ✓ SUCCEEDED 09 · orchestrator approve.human ◆ APPROVAL 10 · quality_conf reel.qualify ✓ SUCCEEDED

Live example: Grade change PM4 · 135 gsm kraftliner → 110 gsm testliner, no break, ≤14 min off-spec

Modules

Ten modules, one runtime

Every module runs on the same edge node, the same orchestrator and the same audit log. Adding one is a licence change, not a project.

Pulpum Stock

Refining and freeness control

Closes the loop on refiner specific edge load, dilution and consistency across variable furnish. Holds freeness inside ±4 CSF.

Pulpum Wet End

Chemistry and retention

Doses retention aid, sizing, starch and defoamer against live charge and turbidity. Cuts additive spend and wet-end upsets.

Pulpum Forming

Headbox, slice, press

Slice profile, jet-to-wire, vacuum and nip load tuned for formation and post-press dryness.

Pulpum Drying

Steam, hood, coating, calender

Per-group steam scheduling and hood balance at minimum energy per tonne, through the coater and calender stack.

Pulpum Inspect

Web vision and break prediction

Holes, wrinkles, spots, streaks and edge cracks classified in under 100 ms; break precursors flagged with lead time.

Pulpum Profile

CD basis, moisture, caliper

Full CD actuator control against live scans, holding 2σ inside grade spec through ramps and transitions.

Pulpum Yield

Broke, energy, grade sequencing

Prices every candidate move in tonnes, broke and megajoules; sequences grade changes under order and energy constraints.

Pulpum Handling

Reel, winder, roll logistics

Reel turn-up, winder set changes, wrapping and clamp-truck routing so finishing never starves the machine.

Pulpum Conformance

Genealogy and release

Builds the full reel record and gates release against grade spec, ISO 9001, FSC and food-contact requirements.

Pulpum Twin

As-run machine simulation

GPU-accelerated forming, press, drying and web-dynamics simulation, continuously corrected against this week's reels.

Run timeline

Modules in one transition

Stock, Wet End, Forming, Drying, Inspect and Conformance all appear in this single grade change.

run_8f21c4 PM4 · 6.8 m trim · 1,180 m/min SUCCEEDED
  1. 01 ingest.grade_target SUCCEEDED 0.8 s

    Mill Orchestrator — Pulled the 110 gsm testliner spec, customer tolerances and the standing energy budget from mill MES; locked the target envelope for the run.

  2. 02 twin.simulate SUCCEEDED 34 s

    Mill Orchestrator — Simulated 48 candidate transition recipes on the as-run paper-machine twin — forming, press, dryer and calender — and ranked them on off-spec tonnes, break risk and steam.

  3. 03 stock.refine SUCCEEDED 2 m 10 s

    Pulp-and-Stock — Stepped refiner specific edge load 1.9 → 1.4 Ws/m and pushed freeness toward 412 CSF while consistency held at 3.4%.

  4. 04 wetend.dose SUCCEEDED 1 m 26 s

    Wetend-and-Chemistry — Retention aid trimmed to 214 g/t and sizing to 1.1 kg/t against live charge and turbidity; first-pass retention recovered to 78% inside 90 seconds.

  5. 05 form.headbox SUCCEEDED 1 m 05 s

    Form-and-Press — Re-cut the slice profile across 78 actuators and set jet-to-wire to 0.994 to hold formation index through the basis-weight ramp.

  6. 06 press.nip SUCCEEDED 48 s

    Form-and-Press — Nip load reduced 620 → 540 kN/m to protect the lighter web; post-press dryness landed at 47.1%.

  7. 07 dry.steam SUCCEEDED 3 m 18 s

    Dry-and-Coat — Re-phased the steam schedule across 6 dryer groups and rebalanced the hood; reel moisture converged to 7.4% ±0.19 2σ at 6.1% less steam than the standing recipe.

  8. 08 inspect.web SUCCEEDED continuous

    Defect-and-Inspect — 18 line-scan cameras streaming; two edge-crack precursors detected at the drive side and cleared by a 40 kN/m nip trim before either propagated.

  9. 09 approve.human APPROVAL 52 s

    Mill Orchestrator — Speed ramp 1,180 → 1,245 m/min exceeded the site autonomy threshold. Held for the machine tender; approved by J. Okonkwo at 04:57:12.

  10. 10 reel.qualify SUCCEEDED 1 m 31 s

    Quality-and-Conformance — Reel R-24188 released: full genealogy written (furnish, chemistry, CD profiles, defect map, operator actions) and checked against grade spec.

Compare

What is in each tier

Modules are licensed per machine. The Mill tier bundles every module plus the Twin across every machine on site.

What is in each tier
ModuleMachine tierMill tierEnterprise
Pulpum StockOptionalIncludedIncluded
Pulpum Wet EndOptionalIncludedIncluded
Pulpum FormingOptionalIncludedIncluded
Pulpum DryingOptionalIncludedIncluded
Pulpum InspectOptionalIncludedIncluded
Pulpum ProfileOptionalIncludedIncluded
Pulpum Yield—IncludedIncluded
Pulpum Handling—IncludedIncluded
Pulpum ConformanceRead-onlyIncludedIncluded
Pulpum Twin—IncludedCustom models
Multi-site fleet——Included
Air-gapped edge—OptionalIncluded
Tool calls

One log, every module

Modules do not each get their own console. Every call from every module lands in the same run log.

tool-call stream · run_8f21c4
  1. 04:51:04mes.read_orders({ machine: "PM4", next_grade: "TL-110" })
  2. 04:51:04ok spec locked · basis 110 g/m² · moisture 7.4% ±0.5
  3. 04:51:05twin.simulate({ candidates: 48, horizon: "18 min" })
  4. 04:51:39ok best recipe #31 · est. off-spec 6.4 t · break risk 0.07
  5. 04:51:40policy.evaluate({ recipe: 31, autonomy: "L3" })
  6. 04:51:40ok 9 writes permitted · 1 write requires human approval
  7. 04:51:41dcs.write_setpoint({ tag: "REF4.SEL", from: 1.9, to: 1.4 })
  8. 04:53:51ok freeness 388 → 412 CSF · consistency 3.4%
  9. 04:53:52chem.dose({ retention_aid: "214 g/t", sizing: "1.1 kg/t" })
  10. 04:55:18ok first-pass retention 71% → 78%
  11. 04:55:19dcs.slice_profile({ actuators: 78, jet_to_wire: 0.994 })
  12. 04:56:24ok formation index 84 · CD basis 2σ 1.7 g/m²
  13. 04:56:25vision.stream({ cameras: 18, model: "webdefect-v7" })
  14. 04:56:41precursor: edge crack risk 0.62 · drive side · 1,412 mm
  15. 04:56:42dcs.nip_load({ delta: "-40 kN/m", zone: "press-2" })
  16. 04:56:58ok edge crack risk 0.62 → 0.09 · web stable
  17. 04:56:59approval.request({ action: "speed_ramp", to: "1245 m/min" })
  18. 04:57:12ok approved by J. Okonkwo (machine tender) · logged
  19. 04:58:44mes.log_reel({ reel: "R-24188", genealogy: "full" })
  20. 05:02:46ok run complete · 11m42s · off-spec 6.2 t · breaks 0

Reasoning trace

Plan → thought → action → observation, exactly as the orchestrator recorded it.

GoalMove PM4 from 135 gsm kraftliner to 110 gsm testliner with zer…

Move PM4 from 135 gsm kraftliner to 110 gsm testliner with zero breaks and under 14 minutes of off-spec production.

PlanSimulate the transition on the twin first. Lead with stock and…

Simulate the transition on the twin first. Lead with stock and chemistry so the furnish is right before the basis weight ramps, then trim forming and press, then re-phase drying. Watch the web continuously; hold the speed ramp for a human.

ThoughtThe standing recipe drops basis weight and speed together. On …

The standing recipe drops basis weight and speed together. On the twin that produces a 3-minute moisture excursion because the dryer section unloads faster than the steam schedule can follow. Sequencing the steam re-phase ahead of the basis-weight ramp removes it.

Actiontwin.simulate(candidates=48) → recipe #31 re-phases steam 40 s…

twin.simulate(candidates=48) → recipe #31 re-phases steam 40 s before the basis-weight ramp and holds nip load until post-press dryness confirms.

ObservationRecipe #31 estimates 6.4 t off-spec against 9.8 t for the stan…

Recipe #31 estimates 6.4 t off-spec against 9.8 t for the standing recipe, with break risk 0.07. Two candidates scored lower on steam but raised break risk above the 0.15 site limit and were discarded.

ActionExecute recipe #31 under autonomy level L3: nine setpoint writ…

Execute recipe #31 under autonomy level L3: nine setpoint writes permitted, speed ramp routed to the machine tender.

ObservationEdge-crack precursor at 1,412 mm drive side at 04:56:41. Nip t…

Edge-crack precursor at 1,412 mm drive side at 04:56:41. Nip trim of −40 kN/m in press-2 cleared it in 16 s without a break.

OutcomeRun complete in 11 m 42 s. 6.2 t off-spec, zero breaks, 6.1% l…

Run complete in 11 m 42 s. 6.2 t off-spec, zero breaks, 6.1% less dryer steam than the standing recipe. Reel R-24188 released with full genealogy.

Runtime

One node, one orchestrator, one record

Adding a module never adds another server, another historian or another screen for the crew to watch.

Active path

The orchestrator plans, the agents act

A run starts as a goal, becomes a plan, and executes as a graph of typed steps. The active path is always visible, always logged, always reversible.

RUNNING APPROVAL SUCCEEDED
11:42 Grade change, PM4 · baseline 19:05
6.2 t Off-spec tonnes · baseline 9.8 t
0 Web breaks during transition
48 Twin recipes simulated before the run
Human in the loop

Autonomy is a dial, not a switch

L1 advisory, L2 supervised writes, L3 bounded autonomy, L4 unattended within an envelope. Each site sets the level per agent, per tag, per shift — and every write above the threshold waits for a named approver.

Use cases

Typical module paths

Where mills usually start and what they add next.

Containerboard SUCCEEDED

Inspect → Drying → Yield

Break prediction first because a break is the most expensive event on the machine, then dryer energy, then transition sequencing.

Tissue SUCCEEDED

Inspect → Forming → Profile

Sheet breaks and crepe consistency dominate; profile control follows once the web is stable.

Coated print SUCCEEDED

Profile → Drying → Conformance

Caliper and gloss profile drive claims; conformance closes the loop on customer complaints.

Market pulp SUCCEEDED

Stock → Wet End → Yield

Freeness and chemistry first, then yield and energy across the fibre line.

Autonomy

Four levels, set per agent and per tag

A mill does not go from manual to unattended in one step. Pulpum makes the level explicit, auditable and reversible at any time.

Autonomy levels and the human role at each
LevelWhat the agent doesWhat the human doesTypical time to reach
L1 · AdvisoryRecommends setpoints and explains whyEnters every change manuallyWeek 1
L2 · SupervisedProposes a write; it executes on approvalApproves each write in the HMIWeek 3–6
L3 · BoundedWrites inside tag, rate and magnitude limitsApproves ramps and grade releasesMonth 2–4
L4 · UnattendedRuns the envelope without promptingSets the envelope; reviews the shift recordMonth 6+ [ASPIRATIONAL]
Accelerated computing

Physical AI, at the machine

Paper moves at 1,200 metres a minute. Perception has to be local, deterministic and fast, so Pulpum runs GPU inference at the mill edge and keeps training, simulation and optimisation in the cloud or on-prem.

Jetson Orin · DeepStream · Holoscan · TensorRT

Edge perception

8–24 synchronised line-scan cameras per machine. Sub-100 ms defect classification, sub-250 ms break-risk updates. [ASPIRATIONAL design targets]

Triton · NIM

Model serving

Vision, time-series prognostics, grade embeddings and process reasoning behind one orchestrator, with deterministic rollback by model version.

DGX / HGX · NeMo

Training

Defect vision, break precursors, wet-end response and drying models trained on reel genealogy, QCS histories and operator corrections.

Omniverse · OVX

Digital twin

GPU-accelerated CFD, drying and web-dynamics simulation of the as-run machine — 10–100 candidate recipes evaluated per grade change.

Omniverse Replicator · Cosmos

Synthetic data

Rare break, contamination, wrinkle and formation-upset variants generated and always validated against real mill events before promotion.

cuOpt

Optimisation

Grade-change sequencing, dryer energy allocation, machine-speed balancing and maintenance windows under production and energy constraints.

Measured

Module outcomes

Per-module numbers from design-partner pilots [ASPIRATIONAL].

11 m 42 s Grade change on PM4 · baseline 19 m 05 s
6.2 t Off-spec tonnes per transition · baseline 9.8 t
68% Web breaks predicted more than 90 s early
7.9% Less dryer steam per tonne of paper

Figures are design targets and pilot-scoped results [ASPIRATIONAL]. Every number is reproduced from the mill's own reel genealogy, not our telemetry.

Developers

Define an agent, bound it, run it

The Pulpum SDK is typed Python. Tools are declared with schemas and limits; the policy engine enforces them at call time — not in a review meeting.

What you get

  • Typed tool definitions with unit-aware ranges and rate limits
  • Deterministic replay of any historical run against a new model
  • Local twin harness so a recipe is simulated before it is shipped
  • Autonomy policy as code, versioned and reviewed like any other change

Read the docs Developer guide

pm4_dryer_agent.py
# Bound the dryer agent to six steam groups on PM4.
from pulpum import Agent, Tool, Limit, Autonomy

steam = Tool(
    name="dcs.steam_schedule",
    tags=["PM4.DRY.G1..G6.PRESS_SP"],
    limits=[Limit(max_step="0.15 bar", per="30s")],
)

dryer = Agent(
    id="agent.dry_coat",
    goal="reel moisture 7.4% +/-0.5, min steam",
    tools=[steam, Tool("qcs.read_moisture", read_only=True)],
    # bounded writes; humans still gate ramps
    autonomy=Autonomy.L3,
    # simulate on the twin before every write
    verify="twin",
)

run = dryer.start(machine="PM4", grade="TL-110")
for step in run.stream():
    print(step.name, step.status, step.duration)
From the control room

What machine tenders say

Autonomy earns trust one shift at a time. These are design-partner quotes from pilot deployments [ASPIRATIONAL].

"The first thing that convinced the crew wasn't the control — it was the log. You can scroll back and see exactly why it dropped the nip. Nobody argues with a timestamp."

Machine tender · PM4 · Nordkraft Mills

"We had two people who could do a clean 135-to-110 transition. One retired in March. The twin now does the sequencing and the second one supervises it."

Production manager · Aurora Board

"Break prediction was the wedge. Ninety seconds of warning is the difference between a nip trim and four hours of threading."

Process engineer · Ternvik Paper
Integrations

It speaks mill, not cloud

Pulpum reads and writes through the systems already on the floor. No rip-and-replace, no parallel historian, no new HMI to learn.

QCS

Valmet IQ, ABB 800xA QCS, Honeywell Experion MX

Profiles, scans, lab results

DCS

ABB 800xA, Valmet DNA, Honeywell Experion, Siemens PCS 7

Setpoint reads and guarded writes

Web inspection

WIS/WMS line-scan, IR and transmission cameras

Frames, defect maps, break replays

Mill MES

SAP PP/QM, ABB cpmPlus, custom historians

Orders, grades, reel genealogy

Historian

OSIsoft PI, Aspen IP.21, InfluxDB

Time-series backfill and replay

Robotics

NVIDIA Isaac, winder and wrapper PLCs

Reel, roll and clamp-truck motion

Identity

Azure AD, Okta, on-prem LDAP

SSO, RBAC, named approvers

Edge

NVIDIA Jetson Orin, IGX, on-prem GPU

Sub-100 ms inference at the machine

See all integrations

Guardrails

An agent that can move a nip needs a leash

Pulpum writes to production equipment. Every capability is scoped, every write is policy-checked, and every action is written to an append-only audit log the mill owns.

  • Bounded action space. Each agent can only write to an explicit tag allow-list, inside per-tag rate and magnitude limits.
  • Policy engine before every write. Autonomy level, shift, grade, interlock state and operator presence are all evaluated before a setpoint moves.
  • Human-in-the-loop gates. Anything above the site threshold — speed ramps, grade releases, safety-adjacent moves — waits for a named approver.
  • Immutable audit log. Append-only, hash-chained, exportable, and retained on the mill's own storage.
  • Hard fallback. Loss of the edge node, the network or the model returns control to the DCS's last known-good state within one scan cycle.
  • Tenant and IP isolation. Furnish recipes, grade models and defect libraries never cross a customer boundary. On-prem deployment available.

Compliance posture

Compliance and certification status
StandardScopeStatus
SOC 2 Type IICloud control plane RUNNING In progress [ASPIRATIONAL]
ISO 27001Company-wide ISMS QUEUED Planned [ASPIRATIONAL]
IEC 62443Mill-edge OT security RUNNING Design-aligned
GDPROperator data SUCCEEDED Compliant
ISO 9001 / FSCQuality + chain of custody records SUCCEEDED Supported

Read the security overview

Enterprise

Standardise autonomy across the group

One policy model, one audit trail, one benchmark across every machine in every mill — with the grade and furnish models kept private to each site.

Talk to sales Enterprise details

  • SSO, SCIM and role-based access down to the tag level
  • Group-wide autonomy policy with per-site override and approval chains
  • Cross-mill benchmarking on broke, breaks, steam and first-pass quality
  • VPC, on-prem and fully air-gapped mill-edge deployment options
  • 99.5% control-plane SLA; edge autonomy survives control-plane loss
  • Dedicated deployment engineer and quarterly model review per site
FAQ

Straight answers

The questions mill managers and process engineers actually ask in the first meeting.

Yes, but only within an explicit tag allow-list with per-tag rate and magnitude limits, and only at the autonomy level your site has set. Level 1 is advisory-only: Pulpum recommends and a human enters everything. Most mills spend their first weeks there before enabling supervised writes.

Get started

Pick your first module

Start with one paper machine and one measurable baseline. A 90-day mill-edge pilot on break prediction, drying energy or moisture profile shows the number before you commit further.