Kicad 5 attributes ------------------ The modules for a PCB can be extracted using board.GetModules() This is an iterable. Each module has a GetAttributes() method. We are currently using it in the out_position.py but with a magic "1". What's this value? 1) Is poorly documented. The documentation says GetAttributes() Definition at line 261 of file class_module.h. 261 { return m_Attributs; } And asking for m_Attributs you get: m_Attributs int MODULE::m_Attributs private Definition at line 708 of file class_module.h. Clear as water! ... dark water. 2) Looking in the code: void MODULE::GetMsgPanelInfo( EDA_DRAW_FRAME* aFrame, std::vector& aList ) (class_module.cpp) 693 if( m_Attributs & MOD_BOARD_ONLY ) 694 addToken( &attrs, _( "not in schematic" ) ); 695 696 if( m_Attributs & MOD_EXCLUDE_FROM_POS_FILES ) 697 addToken( &attrs, _( "exclude from pos files" ) ); 698 699 if( m_Attributs & MOD_EXCLUDE_FROM_BOM ) 700 addToken( &attrs, _( "exclude from BOM" ) ); And looking for MOD_BOARD_ONLY you finally get the definitions: (class_module.h) 67 MOD_THROUGH_HOLE = 0x0001, 68 MOD_SMD = 0x0002, 69 MOD_EXCLUDE_FROM_POS_FILES = 0x0004, 70 MOD_EXCLUDE_FROM_BOM = 0x0008, 71 MOD_BOARD_ONLY = 0x0010 // Footprint has no corresponding symbol 3) IBoM uses it: (./ecad/kicad.py) attr = module.GetAttributes() attr = { 0: 'Normal', 1: 'Normal+Insert', 2: 'Virtual' }.get(attr, str(attr)) 4) What does pcbnew? TH -> nothing in the file and GetAttributes returns 0 SMD -> puts (attr smd) and GetAttributes returns 1 Virtual -> puts (attr virtual) and GetAttributes returns 2 5) 3 and 4 doesn't match Lets see gitlab, tag 5.1 class_module.h: enum MODULE_ATTR_T { MOD_DEFAULT = 0, ///< default MOD_CMS = 1, ///< Set for modules listed in the automatic insertion list ///< (usually SMD footprints) MOD_VIRTUAL = 2 ///< Virtual component: when created by copper shapes on ///< board (Like edge card connectors, mounting hole...) }; They are changing this value!!!! Not only changing the values, the data whole type!!!! And this definition is different to what the UI says!!! even different to what the file format implies. Conclusion: - KiCad 6 will break the current scheme - Current out_position checking for 1 is right - In the future we will have it as a flag (inverted)