Часто в демо интерфейсах продуктов можно увидеть имена John Doe, Jane Smith, Test User и случайные почты вроде test@example.com. И такой же рандомный текст в описании профиля, профессии и интересах.

Я создал генератор мок-данных, который генерирует данные профиля из персонажей популярных кинофраншиз. Во все тяжкие, игра престолов, офис, теория большого взрыва, матрица и другие. Подходит для демо, мокапов, скриншотов интерфейса и сидов баз данных.

Демо: loredata.orchidfiles.com

Функционал

  • 29 киновселенных

  • Генерация одного профиля и группы профилей

  • Фильтр по интересам, имени, вселенной, локации

  • Работает в браузере, node.js и CLI

  • Все данные находятся в NPM пакете без API запросов

Установка

# library
npm install loredata

# CLI
npm install -g loredata

Пример сгенерированного профиля

import { person } from 'loredata';

const p = person({ universe: 'breaking-bad' });

console.log(p);

// Output
{
  firstName: 'Walter',
  lastName: 'White',
  username: 'heisenberg',
  email: 'blue_sky_cook@lospollos.com',
  quote: 'I am the one who knocks.',
  profession: 'Chemistry teacher',
  interests: ['chemistry', 'cooking', 'family'],
  address: { street: '308 Negra Arroyo Lane', city: 'Albuquerque', state: 'NM' },
  symbol: '☢️',
  universe: 'breaking-bad',
  universeName: 'Breaking Bad'
}

Пример группы профилей

import { group } from 'loredata';

const team = group({ universe: 'game-of-thrones', size: 3 });

console.log(team);

// Output
[
  { firstName: 'Jon', lastName: 'Snow', username: 'lord_commander' },
  { firstName: 'Daenerys', lastName: 'Targaryen', username: 'mother_of_dragons' },
  { firstName: 'Tyrion', lastName: 'Lannister', username: 'halfman' }
]

Детерминированный вывод

Если вам нужно получать одинаковый результат при каждой генерации, вы можете передать параметр seed:

const p = person({ universe: 'matrix', seed: 42 });
const team = group({ universe: 'matrix', size: 3, seed: 42 });

Подключение на фронтенде

Библиотека также поддерживает работу в браузерной среде через отдельную точку входа, не зависящую от fs или path:

import { loadUniverse, personFromData } from 'loredata/browser';

const universe = await loadUniverse('breaking-bad');
const p = personFromData(universe);

Это работает с Vite, webpack и другими сборщиками фронтенда.

CLI

loredata person --universe breaking-bad
loredata person --universe breaking-bad --format json
loredata person --interests chemistry,cooking
loredata person --interests chemistry,cooking --interests-mode and
loredata person --name walter
loredata group --universe matrix --size 5
loredata universes

Как устроен проект

TypeScript-монорепо с pnpm. Внутри npm-пакет с библиотекой, CLI и веб-приложение с демо.

Данные лежат в JSON-датасетах: для каждой вселенной отдельные файлы с мета-информацией и персонажами. Чтобы подключить новую вселенную, достаточно добавить data/{id}/meta.json и data/{id}/characters.json. Качество продукта держится на каноничности датасета: правильная профессия, реальный адрес, цитаты, логины персонажа.

Ссылки

Комментарии (3)


  1. muradali
    07.06.2026 21:17

    А фотки?


    1. orchidfiles Автор
      07.06.2026 21:17

      Фотки персонажей? Консилиум ИИ агентов сошлись во мнении, что это нарушало бы авторские права и возможно репозиторий с гитхаба бы удалили. А у меня нет причин не доверять ИИ агентам. Поэтому за место фоток я просто добавил эмодзи с отсылками к персонажам.


      1. muradali
        07.06.2026 21:17

        Ладно, выкрутился )