lllyasviel/style2paints · error · KeyError

Unknown layer name fed: %s

Error message

Unknown layer name fed: %s

What it means

In Style2PaintsV4.5, feed() resolves string arguments through self.layers and re-raises a descriptive KeyError when the name is absent. Unlike V4, this feed is also invoked from setup() as well as layer_decorated, so a bad name can surface during network setup, not just during layer chaining.

Source

Thrown at V4.5/s2p_v45_server/Style2PaintsV45_source.py:92

            self.setup()

        def setup(self):
            (self.feed('data')
             .conv(name='smoothing'))

        def get_unique_name(self, prefix):
            ident = sum(t.startswith(prefix) for t, _ in self.layers.items()) + 1
            return '%s_%d' % (prefix, ident)

        def feed(self, *args):
            assert len(args) != 0
            self.terminals = []
            for fed_layer in args:
                if isinstance(fed_layer, str):
                    try:
                        fed_layer = self.layers[fed_layer]
                    except KeyError:
                        raise KeyError('Unknown layer name fed: %s' % fed_layer)
                self.terminals.append(fed_layer)
            return self

        def gauss_kernel(self, kernlen=21, nsig=3, channels=1):
            out_filter = np.load('./nets/gau.npy')
            return out_filter

        def make_gauss_var(self, name, size, sigma, c_i):
            kernel = self.gauss_kernel(size, sigma, c_i)
            var = tf.Variable(tf.convert_to_tensor(kernel), name=name)
            return var

        def get_output(self):
            '''Returns the smoother output.'''
            return self.terminals[-1]

        @layer
        def conv(self,

View on GitHub (pinned to a0d164d6a8)

Solutions

  1. Inspect net.layers keys and use the exact name in feed
  2. Fix stale names in setup() after any layer renaming
  3. Pass tensor objects instead of name strings where the reference is available in scope

Example fix

# before
net.feed('generator_output')  # KeyError after rename to 'output'

# after
net.feed('output')  # or: net.feed(output_tensor)
Defensive patterns

Strategy: validation

Validate before calling

def ensure_layer_exists(net, name):
    if name not in net.layers:
        raise KeyError(f'{name} not in layers: {list(net.layers.keys())}')

ensure_layer_exists(net, 'output')
net.feed('output')

Try / catch

try:
    net.feed('output')
except KeyError as e:
    print('Available:', list(net.layers.keys()))
    raise

Prevention

When it happens

Trigger: Calling net.feed('name') or a setup path that feeds named layers where the name is not a key in self.layers — layer never created, renamed, auto-suffixed by get_unique_name, or defined on another instance.

Common situations: Hardcoded layer names in setup() that don't match the actual op names; checkpoint/model code updated with renamed layers while feed strings were left stale; typos in names containing auto-generated suffixes like _1, _2.

Related errors


AI-assisted analysis of lllyasviel/style2paints@a0d164d6a8 (2026-09-02). Data as JSON: /api/errors/93e6a995e37de0d2. Report an issue: GitHub.