{"record":{"id":"93e6a995e37de0d2","repo":"lllyasviel/style2paints","slug":"unknown-layer-name-fed-s-93e6a9","errorCode":null,"errorMessage":"Unknown layer name fed: %s","messagePattern":"Unknown layer name fed: (.+?)","errorType":"exception","errorClass":"KeyError","httpStatus":null,"severity":"error","filePath":"V4.5/s2p_v45_server/Style2PaintsV45_source.py","lineNumber":92,"sourceCode":"            self.setup()\n\n        def setup(self):\n            (self.feed('data')\n             .conv(name='smoothing'))\n\n        def get_unique_name(self, prefix):\n            ident = sum(t.startswith(prefix) for t, _ in self.layers.items()) + 1\n            return '%s_%d' % (prefix, ident)\n\n        def feed(self, *args):\n            assert len(args) != 0\n            self.terminals = []\n            for fed_layer in args:\n                if isinstance(fed_layer, str):\n                    try:\n                        fed_layer = self.layers[fed_layer]\n                    except KeyError:\n                        raise KeyError('Unknown layer name fed: %s' % fed_layer)\n                self.terminals.append(fed_layer)\n            return self\n\n        def gauss_kernel(self, kernlen=21, nsig=3, channels=1):\n            out_filter = np.load('./nets/gau.npy')\n            return out_filter\n\n        def make_gauss_var(self, name, size, sigma, c_i):\n            kernel = self.gauss_kernel(size, sigma, c_i)\n            var = tf.Variable(tf.convert_to_tensor(kernel), name=name)\n            return var\n\n        def get_output(self):\n            '''Returns the smoother output.'''\n            return self.terminals[-1]\n\n        @layer\n        def conv(self,","sourceCodeStart":74,"sourceCodeEnd":110,"githubUrl":"https://github.com/lllyasviel/style2paints/blob/a0d164d6a8a69fa4a87139bcd193291057f4ca39/V4.5/s2p_v45_server/Style2PaintsV45_source.py#L74-L110","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","solutions":["Inspect net.layers keys and use the exact name in feed","Fix stale names in setup() after any layer renaming","Pass tensor objects instead of name strings where the reference is available in scope"],"exampleFix":"# before\nnet.feed('generator_output')  # KeyError after rename to 'output'\n\n# after\nnet.feed('output')  # or: net.feed(output_tensor)","handlingStrategy":"validation","validationCode":"def ensure_layer_exists(net, name):\n    if name not in net.layers:\n        raise KeyError(f'{name} not in layers: {list(net.layers.keys())}')\n\nensure_layer_exists(net, 'output')\nnet.feed('output')","typeGuard":null,"tryCatchPattern":"try:\n    net.feed('output')\nexcept KeyError as e:\n    print('Available:', list(net.layers.keys()))\n    raise","preventionTips":["Audit hardcoded names in setup() against actual layer names after refactors","Define layer-name constants next to layer creation code","Prefer passing tensors over name strings in setup()","Remember feed() is called from setup() too — validate names there as well"],"tags":["tensorflow","network-builder","keyerror","layer-lookup"],"backgroundTag":"unknown-layer-name","analyzedSha":"a0d164d6a8a69fa4a87139bcd193291057f4ca39","analyzedAt":"2026-09-02T22:11:10.837Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-10T02:17:09.455Z"}