mantelmoritz commited on
Commit
db3adf8
·
verified ·
1 Parent(s): 6e37255

Edge Refiner v15: 32 channels, new default

Browse files
README.md CHANGED
@@ -19,55 +19,56 @@ datasets:
19
 
20
  # CorridorKey Real-Time Edge Refiner
21
 
22
- **A 23k-parameter CNN that brings back native-resolution hair and edge detail when
23
  [CorridorKey 2.0](https://huggingface.co/nikopueringer/CorridorKey2.0) runs at reduced resolution for live
24
- green-screen keying, e.g. a 4K or 1080p facecam in OBS at 30–60 fps.**
25
 
26
  ![Input and real-time result on real 4K green-screen footage](images/hero_druid_4k.png)
27
 
28
  <sub>Footage: CorridorKey 1.0 Quality Benchmark (Niko Pueringer / Corridor Digital, Apache-2.0). Real-time
29
- pipeline: CorridorKey 2.0 Stage 1 on a 512×512 person crop + this refiner.</sub>
30
 
31
- ## What problem it solves
32
 
33
- CorridorKey 2.0 produces excellent mattes, but at full 4K it is an offline model. To key live video, the
34
- network has to run on a small grid: for example a 512×512 crop around the person, or 512×256 for the whole
35
- frame. Its matte then has to be scaled back up to the camera resolution, and that step destroys the edge:
 
 
36
 
37
- - **Bilinear upsampling** gives a blurry, blocky edge with a green or dark halo.
38
- - **A colour guided filter** recovers some structure, but it smears hair, leaves fringes and fails where foreground
39
- and screen have similar brightness.
40
- - **This refiner** looks at the native-resolution pixels and learns how CorridorKey 2.0 would have keyed them at full
41
- resolution. It predicts corrections for alpha *and* foreground colour (despill / unmixing) at every native pixel.
42
 
43
  ![1:1 native-pixel crops on real 4K footage](images/compare_druid_4k.png)
44
 
45
  Top row: composite over a dark slate. Bottom row: alpha. All crops are 1:1 native pixels, enlarged with nearest
46
- neighbour. "CorridorKey 2.0 offline" is the full model at native resolution, the target the refiner was trained on.
 
47
 
48
  ## How it works
49
 
50
- The refiner is a fully convolutional network: 11 input channels, a 3×3 input convolution, four residual dilated
51
- 3×3 blocks (dilations 1, 2, 4, 1), GELU, and a 1×1 output convolution. It has 24 channels in v12 and v10w and 16
52
- in v9b.
53
- Its receptive field is ±9 pixels. Per native pixel it receives:
54
 
55
  | Channels | Input |
56
  |---|---|
57
- | 0–2 | `I`: native RGB frame (sRGB) |
58
- | 3–5 | `B`: smooth background estimate (sRGB), hole-filled from pixels CorridorKey calls background |
59
- | 6–8 | `F`: CorridorKey foreground transferred onto the native frame (`I + upsample(F_low − I_low)`) |
60
  | 9 | `a_up`: CorridorKey alpha, bilinear upsampled |
61
  | 10 | `a_gf`: alpha of a colour guided filter driven by CorridorKey's low-resolution alpha |
62
 
63
- It outputs residuals on top of `a_gf` (alpha) and `F` (foreground). The result is used only inside an
64
- uncertainty band around CorridorKey's edges. Outside the band the output is the colour-guided upsampling of
65
- CorridorKey's matte, which in solid foreground and clean background is CorridorKey's own 0 or 1. The band is weighted
66
- by nearby foreground, which keeps the refiner out of dark or noisy screen areas.
 
 
 
 
67
 
68
- In the real-time engine the refiner only runs on 32×32 tiles that intersect the band, with a fixed tile budget
69
- (most uncertain tiles first). In fp16 that costs about 5–6 ms per frame with 256 tiles and 10–11 ms with 512 tiles
70
- on an RTX 5070 Ti.
71
  `corridorkey_refiner.py` in this repository is a standalone full-frame reference implementation of the same maths.
72
  On a test frame it matches the tiled engine to a mean absolute difference of 0.0001 in alpha.
73
 
@@ -75,12 +76,15 @@ On a test frame it matches the tiled engine to a mean absolute difference of 0.0
75
 
76
  | File | Description |
77
  |---|---|
78
- | `corridorkey_edge_refiner_v12.safetensors` | **recommended** (October 2026), 24 channels, same architecture and cost as v10w, lower edge error and flicker |
79
- | `corridorkey_edge_refiner_v10w.safetensors` | previous version, 24 channels |
80
- | `corridorkey_edge_refiner_v9b.safetensors` | 16 channels, 10,948 parameters, slightly cheaper, slightly worse |
 
81
  | `corridorkey_refiner.py` | model definition, loader, input construction and full-frame `refine()` |
82
  | `LICENSE` | Corridor Key Licence, Version 2.0 |
83
 
 
 
84
  ## Usage
85
 
86
  You need CorridorKey 2.0 (code and weights from https://huggingface.co/nikopueringer/CorridorKey2.0, not included
@@ -90,7 +94,7 @@ here) to produce the low-resolution matte. Then:
90
  import torch
91
  from corridorkey_refiner import load_refiner, refine
92
 
93
- net = load_refiner("corridorkey_edge_refiner_v12.safetensors") # fp16, CUDA
94
 
95
  # rgb: (1, 3, H, W) native frame, sRGB in [0, 1]
96
  # rgb_low: (1, 3, h, w) the (crop of the) frame as CorridorKey saw it
@@ -102,114 +106,111 @@ alpha, fg = refine(net, rgb, rgb_low, alpha_low, fg_low) # native reso
102
  If you key a crop, pass the native-resolution crop as `rgb` and paste the result back. Apply despill and alpha
103
  contrast after the refiner, as you would for CorridorKey's own output.
104
 
 
 
 
105
  ## Results
106
 
107
- Edge error = mean absolute alpha error inside the edge band (×1000), measured against CorridorKey 2.0 offline at
108
- native resolution; flicker = temporal error of the frame-to-frame alpha change in the edge band (×1000). Lower is
109
- better. 32 consecutive frames per segment. None of these clips were used for training.
110
-
111
- - **Real stock footage:** 6 Pexels / Mixkit green-screen clips (4K, 4K DCI, 1080p, 720p), curly / wavy / long hair,
112
- headphones, headset, glasses.
113
- - **Real 4K, hair** and **Real 4K, transparency:** the two clips of the CorridorKey 1.0 Quality Benchmark
114
- (2 segments each). The druid has curly hair, a beard and fur; the clown has tulle and water glasses.
115
- - **Generated streamers:** the 8 series-3 test clips of version 2 of the dataset. They are deliberately hard (props
116
- in front of the person, partially covered screens, people leaving the frame).
117
-
118
- **Person crop, 512×512** (CorridorKey 2.0 Stage 1 on a tracked square around the person):
119
-
120
- | Upsampling | Real stock | Real 4K, hair | Real 4K, transparency | Generated streamers | Flicker (real stock) | GPU ms / frame |
121
- |---|---|---|---|---|---|---|
122
- | Bilinear | 121.3 | 91.2 | 80.1 | 134.4 | 75.3 | — |
123
- | Colour guided filter | 51.2 | 45.3 | 64.1 | 103.8 | 33.1 | 14.4 |
124
- | Edge Refiner v9b | 32.5 | 32.7 | 61.9 | 88.9 | 22.0 | 24.4 |
125
- | Edge Refiner v10w | 30.9 | 30.6 | 62.3 | 84.9 | 20.5 | 25.8 |
126
- | **Edge Refiner v12** | **29.3** | **28.6** | **61.8** | **83.0** | **19.7** | 25.8 |
127
-
128
- **Full frame, 512×256** (cheaper, for 60 fps):
129
-
130
- | Upsampling | Real stock | Real 4K, hair | Real 4K, transparency | Generated streamers | Flicker (real stock) | GPU ms / frame |
131
- |---|---|---|---|---|---|---|
132
- | Bilinear | 174.7 | 117.8 | 106.7 | 187.8 | 91.5 | — |
133
- | Colour guided filter | 61.3 | 53.4 | 76.4 | 137.5 | 34.9 | 11.8 |
134
- | Edge Refiner v9b | 41.7 | 46.3 | 73.6 | 127.7 | 26.4 | 16.5 |
135
- | Edge Refiner v10w | 39.4 | 45.2 | 73.5 | 125.0 | 25.0 | 17.6 |
136
- | **Edge Refiner v12** | **38.0** | **43.9** | **72.5** | **123.5** | **24.4** | 17.6 |
137
-
138
- GPU time is end-to-end per frame, CorridorKey 2.0 Stage 1 included, on an RTX 5070 Ti. It is the median over the
139
- 6 real stock clips, measured without video I/O. v12 has the same architecture as v10w and therefore the same cost.
140
- The refiner itself costs about 5–6 ms with a budget of 256 tiles and 10–11 ms with 512 tiles. The tile count, not
141
- the frame resolution, dominates the cost.
142
-
143
- - Compared with the guided filter, the refiner (v12) reduces the edge error by 38–43 % on the real stock clips and
144
- by 18–37 % on the 4K druid clip. Flicker drops by 30–40 %.
145
- - v12 against v10w, at the same cost: lower edge error on every test set, by 3–7 % on hair (real stock, druid)
146
- and 1 % on the semi-transparent clown, and 2–4 % less flicker on the real clips.
147
- - On hair (druid) the gain is largest. On semi-transparent material (clown) it is small: there the result is limited
148
- by what the low-resolution network sees.
149
 
150
  ![Generated streamer clip from the test split, 1:1 crops](images/compare_generated_streamer.png)
151
 
152
  ## Training
153
 
154
- - **Target:** CorridorKey 2.0 offline at native resolution (alpha and foreground). The refiner is a student of
155
- CorridorKey: it cannot be sharper than its teacher, and it inherits the teacher's mistakes.
156
- - **Inputs during training:** exactly what the real-time engine produces at run time. Training patches were cut
157
- by running the real-time pipeline (512×512 person crop and 512×256 full frame, Stage 1 only) over every
158
- training clip and computing the 11 input channels, mostly from the edge band.
159
- - **Data:**
160
  - 32 segments of real stock green-screen footage (Pexels, Mixkit)
161
- - the same frames re-composited from the teacher's foreground and alpha over procedural green/teal screens, also
162
- passed through a "bad camera" model (sensor noise, Bayer demosaicing, 4:2:0 chroma, JPEG, exposure errors)
163
  - the 207 training clips of version 2 of the
164
  [CorridorKey Synthetic Streamers](https://huggingface.co/datasets/mantelmoritz/CorridorKey-Synthetic-Streamers)
165
- dataset: every clip reviewed by eye, broken labels removed, everything in front of the screen kept as
166
- foreground (mugs, microphones, a second person)
167
 
168
- Real footage is sampled 3× more often than its share. 110,000 patches, loss on alpha, alpha gradients, composite
169
- and foreground. v12: 96,000 steps (v10w: 24,000 steps on the unreviewed version 1 of the dataset).
170
- - **Tried and dropped for v12:** removing screen colour from the foreground before re-compositing (makes the
171
- synthetic frames cleaner than real camera frames, edge error +3–5 %) and 25 % blue synthetic screens (worse on
172
- every test set).
173
- - **Evaluation data was never used for training.**
174
 
175
  ## Limitations
176
 
177
  ![Limitation: free-flying strands far from the head](images/compare_facecam_1080.png)
178
 
179
- - **The teacher is the ceiling.** Where CorridorKey 2.0 is soft at native resolution, the refiner is soft too.
180
- - **It can only refine what the low-resolution network found.** Single strands far outside CorridorKey's
181
- low-resolution matte are outside the refiner band and are lost, as in the image above. Semi-transparent objects
182
  (glass, tulle, water) depend almost entirely on the low-resolution network.
183
- - Trained for **green (and teal / blue-green) screens** with people in front, mostly facecam and upper-body framing.
184
- It is not a general background-removal model.
185
  - The numbers above compare against CorridorKey 2.0, not against hand-made ground truth.
186
 
187
- ## License
188
 
189
- **Corridor Key Licence, Version 2.0** (CC BY-NC-SA 4.0 with Additional Terms by Corridor Digital LLC). The full
190
- text is in [`LICENSE`](LICENSE).
191
 
192
- This refiner was trained on the outputs of CorridorKey 2.0 and only works together with it. It is therefore
193
- released as a CorridorKey derivative under the same licence and keeps the CorridorKey name (Additional Terms §4,
194
- §5). In short:
195
 
196
- - **Free of charge.** You may not sell it, repackage it as a standalone or competing product, or offer it as a paid
197
- API or inference service.
198
- - **Share-alike:** derivatives must be released under the same licence, free of charge, and keep the
199
- "CorridorKey" name.
200
  - Images and video you produce with it are yours.
201
- - Commercial software integrations require a separate agreement with Corridor Digital
202
- (contact@corridordigital.com). Organisations above US $20M revenue need CorridorKey plugin seats
203
- (https://corridorkey.com).
204
 
205
  ### Attribution and modifications
206
 
207
- - **CorridorKey 2.0** © Corridor Digital LLC. The model was designed and trained by Zachary Harris in collaboration
208
- with Niko Pueringer and Corridor Digital. https://huggingface.co/nikopueringer/CorridorKey2.0 ·
209
  https://corridorkey.com
210
  - CorridorKey 2.0 builds on frozen foundation models under their own licences (MoGe-2 by Microsoft, RVM by Google
211
  DeepMind, optional C-RADIO by NVIDIA). None of them, and no CorridorKey weights, are contained in this repository.
212
- - **Changes relative to CorridorKey 2.0:** this repository adds a new, separately trained edge-refinement network and
213
  its input pipeline. The CorridorKey 2.0 weights and code are not modified or redistributed.
214
  - Example footage: CorridorKey 1.0 Quality Benchmark
215
  (https://huggingface.co/datasets/nikopueringer/CorridorKey1.0_QualityBenchmark, Apache-2.0), Pexels (Pexels
 
19
 
20
  # CorridorKey Real-Time Edge Refiner
21
 
22
+ A small CNN (40k parameters in v15) that restores native-resolution hair and edge detail when
23
  [CorridorKey 2.0](https://huggingface.co/nikopueringer/CorridorKey2.0) runs at reduced resolution for live
24
+ green-screen keying, for example a 4K or 1080p facecam in OBS at 30 to 60 fps.
25
 
26
  ![Input and real-time result on real 4K green-screen footage](images/hero_druid_4k.png)
27
 
28
  <sub>Footage: CorridorKey 1.0 Quality Benchmark (Niko Pueringer / Corridor Digital, Apache-2.0). Real-time
29
+ pipeline: CorridorKey 2.0 Stage 1 on a 512x512 person crop, then Edge Refiner v15.</sub>
30
 
31
+ ## What it is for
32
 
33
+ At full 4K, CorridorKey 2.0 is an offline model. For live video the network has to run on a small grid, such as a
34
+ 512x512 crop around the person or 512x256 for the whole frame, and its matte then has to be scaled back up to the
35
+ camera resolution. Bilinear upsampling makes the edge blurry and blocky, with a green or dark halo. A colour guided
36
+ filter recovers some structure, but it smears hair, leaves fringes and fails where foreground and screen have
37
+ similar brightness.
38
 
39
+ The refiner looks at the native-resolution pixels and has learned how CorridorKey 2.0 keys them at full
40
+ resolution. It predicts corrections for alpha and for the foreground colour (despill and unmixing) at every native
41
+ pixel near the edge.
 
 
42
 
43
  ![1:1 native-pixel crops on real 4K footage](images/compare_druid_4k.png)
44
 
45
  Top row: composite over a dark slate. Bottom row: alpha. All crops are 1:1 native pixels, enlarged with nearest
46
+ neighbour. "CorridorKey 2.0 offline" is the full model at native resolution, which is what the refiner was trained
47
+ to match.
48
 
49
  ## How it works
50
 
51
+ The refiner is fully convolutional: 11 input channels, a 3x3 input convolution, four residual dilated 3x3 blocks
52
+ (dilations 1, 2, 4, 1) with GELU, and a 1x1 output convolution. v15 has 32 channels, v12 and v10w have 24 and v9b
53
+ has 16. The receptive field is 9 pixels in each direction. Per native pixel it receives:
 
54
 
55
  | Channels | Input |
56
  |---|---|
57
+ | 0 to 2 | `I`: native RGB frame (sRGB) |
58
+ | 3 to 5 | `B`: smooth background estimate (sRGB), hole-filled from pixels CorridorKey calls background |
59
+ | 6 to 8 | `F`: CorridorKey foreground transferred onto the native frame (`I + upsample(F_low - I_low)`) |
60
  | 9 | `a_up`: CorridorKey alpha, bilinear upsampled |
61
  | 10 | `a_gf`: alpha of a colour guided filter driven by CorridorKey's low-resolution alpha |
62
 
63
+ It outputs residuals on top of `a_gf` (alpha) and `F` (foreground). The result is only used inside an uncertainty
64
+ band around CorridorKey's edges. Outside the band the output is the colour-guided upsampling of CorridorKey's matte,
65
+ which is CorridorKey's own 0 or 1 in solid foreground and clean background. The band is weighted by nearby
66
+ foreground, so the refiner stays out of dark or noisy screen areas.
67
+
68
+ In the real-time engine the refiner only runs on 32x32 tiles that touch the band, up to a fixed tile budget, most
69
+ uncertain tiles first. The tile count decides the cost, not the frame resolution. In the facecam profile, raising
70
+ the budget from 256 to 512 tiles adds about 1.8 ms per frame on an RTX 5070 Ti.
71
 
 
 
 
72
  `corridorkey_refiner.py` in this repository is a standalone full-frame reference implementation of the same maths.
73
  On a test frame it matches the tiled engine to a mean absolute difference of 0.0001 in alpha.
74
 
 
76
 
77
  | File | Description |
78
  |---|---|
79
+ | `corridorkey_edge_refiner_v15.safetensors` | recommended (October 2026), 32 channels, 40,324 parameters |
80
+ | `corridorkey_edge_refiner_v12.safetensors` | previous version, 24 channels, 23,332 parameters, about 0.1 to 0.4 ms cheaper per frame |
81
+ | `corridorkey_edge_refiner_v10w.safetensors` | older version, 24 channels |
82
+ | `corridorkey_edge_refiner_v9b.safetensors` | 16 channels, 10,948 parameters |
83
  | `corridorkey_refiner.py` | model definition, loader, input construction and full-frame `refine()` |
84
  | `LICENSE` | Corridor Key Licence, Version 2.0 |
85
 
86
+ The channel count is stored in the safetensors metadata, so `load_refiner` reads every version.
87
+
88
  ## Usage
89
 
90
  You need CorridorKey 2.0 (code and weights from https://huggingface.co/nikopueringer/CorridorKey2.0, not included
 
94
  import torch
95
  from corridorkey_refiner import load_refiner, refine
96
 
97
+ net = load_refiner("corridorkey_edge_refiner_v15.safetensors") # fp16, CUDA
98
 
99
  # rgb: (1, 3, H, W) native frame, sRGB in [0, 1]
100
  # rgb_low: (1, 3, h, w) the (crop of the) frame as CorridorKey saw it
 
106
  If you key a crop, pass the native-resolution crop as `rgb` and paste the result back. Apply despill and alpha
107
  contrast after the refiner, as you would for CorridorKey's own output.
108
 
109
+ ONNX graphs of the refiner (fixed tile batches of 256, 384, 512 and 768) are in
110
+ [mantelmoritz/CorridorKey-ONNX-Graphs](https://huggingface.co/mantelmoritz/CorridorKey-ONNX-Graphs).
111
+
112
  ## Results
113
 
114
+ Edge error is the mean absolute alpha error inside the edge band (x1000), measured against CorridorKey 2.0 offline
115
+ at native resolution. Flicker is the error of the frame-to-frame alpha change in the edge band (x1000). Lower is
116
+ better. Each segment has 32 consecutive frames, and none of these clips were used for training.
117
+
118
+ - Real stock footage: 6 Pexels and Mixkit green-screen clips (4K, 4K DCI, 1080p, 720p) with curly, wavy and long
119
+ hair, headphones, a headset and glasses.
120
+ - Real 4K, hair and Real 4K, transparency: the two clips of the CorridorKey 1.0 Quality Benchmark, 2 segments
121
+ each. The druid has curly hair, a beard and fur; the clown has tulle and water glasses.
122
+ - Generated streamers: the 8 series-3 test clips of version 2 of the dataset. They are deliberately hard, with
123
+ props in front of the person, partly covered screens and people leaving the frame.
124
+
125
+ Person crop, 512x512 (CorridorKey 2.0 Stage 1 on a tracked square around the person, 512 tiles):
126
+
127
+ | Upsampling | Real stock | Real 4K, hair | Real 4K, transparency | Generated streamers | Flicker (real stock) |
128
+ |---|---|---|---|---|---|
129
+ | Bilinear | 121.3 | 91.2 | 80.1 | 134.4 | 75.3 |
130
+ | Colour guided filter | 51.2 | 45.3 | 64.1 | 103.8 | 33.1 |
131
+ | Edge Refiner v12 | 29.2 | 28.5 | 61.7 | 82.9 | 19.7 |
132
+ | Edge Refiner v15 | 28.5 | 27.8 | 58.7 | 82.7 | 19.2 |
133
+
134
+ Full frame, 512x256 (the facecam profile for 60 fps, 384 tiles):
135
+
136
+ | Upsampling | Real stock | Real 4K, hair | Real 4K, transparency | Generated streamers | Flicker (real stock) |
137
+ |---|---|---|---|---|---|
138
+ | Bilinear | 174.7 | 117.8 | 106.7 | 187.8 | 91.5 |
139
+ | Colour guided filter | 61.3 | 53.4 | 76.4 | 137.5 | 34.9 |
140
+ | Edge Refiner v12 | 34.8 | 38.7 | 70.9 | 115.9 | 22.2 |
141
+ | Edge Refiner v15 | 34.2 | 38.4 | 68.7 | 116.3 | 21.7 |
142
+
143
+ End-to-end GPU time per frame on an RTX 5070 Ti, CorridorKey 2.0 Stage 1 included, without video I/O: about
144
+ 16.5 ms for the person crop and 12 to 13 ms for the full frame. v15 costs 0.1 to 0.4 ms more than v12.
145
+
146
+ Against the guided filter, v15 has 44 % less edge error on the real stock clips with the person crop, 39 % less on
147
+ the druid and 42 % less flicker. Against v12, v15 has 1 to 5 % less edge error on the real clips and about 2 % less
148
+ flicker. On the generated streamers both are level within 0.4 %. The largest gains are on hair. On
149
+ semi-transparent material such as the clown's tulle the result is limited by what the low-resolution network sees.
150
+
151
+ In a matched comparison (same patches and steps, only the width changed), going from 24 to 32 channels lowered the
152
+ edge error on all six of our test sets in both profiles. 48 channels gained nothing more and cost 6 to 7 ms per frame.
 
 
 
153
 
154
  ![Generated streamer clip from the test split, 1:1 crops](images/compare_generated_streamer.png)
155
 
156
  ## Training
157
 
158
+ - Target: CorridorKey 2.0 offline at native resolution, alpha and foreground. The refiner is a student of
159
+ CorridorKey. It cannot be sharper than its teacher and it inherits the teacher's mistakes.
160
+ - Inputs during training are exactly what the real-time engine produces at run time. The training patches were cut
161
+ by running the real-time pipeline (512x512 person crop and 512x256 full frame, Stage 1 only) over every training
162
+ clip and computing the 11 input channels, mostly from the edge band.
163
+ - Data:
164
  - 32 segments of real stock green-screen footage (Pexels, Mixkit)
165
+ - the same frames re-composited from the teacher's foreground and alpha over procedural green and teal screens,
166
+ also passed through a camera model with sensor noise, Bayer demosaicing, 4:2:0 chroma, JPEG and exposure errors
167
  - the 207 training clips of version 2 of the
168
  [CorridorKey Synthetic Streamers](https://huggingface.co/datasets/mantelmoritz/CorridorKey-Synthetic-Streamers)
169
+ dataset. Every clip was reviewed by eye, broken labels were removed, and everything in front of the screen
170
+ (mugs, microphones, a second person) counts as foreground.
171
 
172
+ Real footage is sampled 3 times as often as its share. Loss on alpha, alpha gradients, composite and foreground.
173
+ v15: a random 90,000 patches held in memory, 96,000 steps. v12: 110,000 patches, 96,000 steps.
174
+ - Tried and dropped: removing screen colour from the foreground before re-compositing (it makes the synthetic frames
175
+ cleaner than real camera frames; edge error rose by 3 to 5 %), 25 % blue synthetic screens (worse on every test
176
+ set) and 48 channels (see above).
177
+ - The evaluation clips were never used for training.
178
 
179
  ## Limitations
180
 
181
  ![Limitation: free-flying strands far from the head](images/compare_facecam_1080.png)
182
 
183
+ - The teacher is the ceiling. Where CorridorKey 2.0 is soft at native resolution, the refiner is soft too.
184
+ - It can only refine what the low-resolution network found. Single strands far outside CorridorKey's
185
+ low-resolution matte lie outside the refiner band and are lost, as in the image above. Semi-transparent objects
186
  (glass, tulle, water) depend almost entirely on the low-resolution network.
187
+ - It was trained for green, teal and blue-green screens with people in front, mostly facecam and upper-body
188
+ framing. It is not a general background-removal model.
189
  - The numbers above compare against CorridorKey 2.0, not against hand-made ground truth.
190
 
191
+ ## Licence
192
 
193
+ Corridor Key Licence, Version 2.0 (CC BY-NC-SA 4.0 with Additional Terms by Corridor Digital LLC). The full text is
194
+ in [`LICENSE`](LICENSE).
195
 
196
+ The refiner was trained on the outputs of CorridorKey 2.0 and only works together with it, so it is released as a
197
+ CorridorKey derivative under the same licence and keeps the CorridorKey name (Additional Terms §4, §5). In short:
 
198
 
199
+ - It is free of charge. You may not sell it, repackage it as a standalone or competing product, or offer it as a
200
+ paid API or inference service.
201
+ - Derivatives must be released under the same licence, free of charge, and keep the "CorridorKey" name.
 
202
  - Images and video you produce with it are yours.
203
+ - Commercial software integrations need a separate agreement with Corridor Digital (contact@corridordigital.com).
204
+ Organisations above US $20M revenue need CorridorKey plugin seats (https://corridorkey.com).
 
205
 
206
  ### Attribution and modifications
207
 
208
+ - CorridorKey 2.0 © Corridor Digital LLC. The model was designed and trained by Zachary Harris in collaboration
209
+ with Niko Pueringer and Corridor Digital. https://huggingface.co/nikopueringer/CorridorKey2.0,
210
  https://corridorkey.com
211
  - CorridorKey 2.0 builds on frozen foundation models under their own licences (MoGe-2 by Microsoft, RVM by Google
212
  DeepMind, optional C-RADIO by NVIDIA). None of them, and no CorridorKey weights, are contained in this repository.
213
+ - Changes relative to CorridorKey 2.0: this repository adds a new, separately trained edge-refinement network and
214
  its input pipeline. The CorridorKey 2.0 weights and code are not modified or redistributed.
215
  - Example footage: CorridorKey 1.0 Quality Benchmark
216
  (https://huggingface.co/datasets/nikopueringer/CorridorKey1.0_QualityBenchmark, Apache-2.0), Pexels (Pexels
corridorkey_edge_refiner_v15.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:b38746544edbdaa207723ffe1dd6e799e1fa7f176bd74ad4c7c91d5dd84abf74
3
+ size 162320
images/compare_druid_4k.png CHANGED

Git LFS Details

  • SHA256: 067b221374927b93a590311fbb435f2f4263839f6191628a907342e7efef9fc0
  • Pointer size: 132 Bytes
  • Size of remote file: 1.56 MB

Git LFS Details

  • SHA256: 580f6601625f7807febef1929c7676c607f573f107f33932ae82b5ce0d0a59ea
  • Pointer size: 132 Bytes
  • Size of remote file: 1.57 MB
images/compare_facecam_1080.png CHANGED

Git LFS Details

  • SHA256: 93d069041198c8385ad75d9b153bf6f047fe6de70b8a240a9fe8f36066b197ab
  • Pointer size: 131 Bytes
  • Size of remote file: 759 kB

Git LFS Details

  • SHA256: ca0fc6f1c70588e753c697c96212742d1782d73f86e21fb5ea64aa09c1e14daa
  • Pointer size: 131 Bytes
  • Size of remote file: 760 kB
images/compare_generated_streamer.png CHANGED

Git LFS Details

  • SHA256: a8ecd4ab5368a5a7aad9cd340d5bdb69790bad718d9fe0d6fd9a09b1c130fb28
  • Pointer size: 131 Bytes
  • Size of remote file: 902 kB

Git LFS Details

  • SHA256: 0f314f1b47b5aeba9a17c42d38c9ce3e5ecfc0d5157fb41e1bb360b28c088ac4
  • Pointer size: 131 Bytes
  • Size of remote file: 905 kB
images/hero_druid_4k.png CHANGED

Git LFS Details

  • SHA256: 31daa7af1a9039ea3ce668052a98a9d103b2ab0e21fc83e566bd3c4f082a5f00
  • Pointer size: 131 Bytes
  • Size of remote file: 936 kB

Git LFS Details

  • SHA256: 0c079a61f4327283b06ab68963de5edf447dd3ba52a9f0924bdae432f5948d74
  • Pointer size: 131 Bytes
  • Size of remote file: 936 kB