Custom node migration for multi-value imagefield I'm working on a custom migration module to "link" images to the imagefield.
It's work well for an unique value image field like this:

field_illus_vdl: 
  -
    plugin: d6_field_file
    source: field_illus_vdl
    migration: upgrade_d6_file
  -
    plugin: skip_on_empty
    method: process


But not for a multivalue imagefield after different tests:

field_galerie_image_vdl:
  -
    plugin: skip_on_empty
    method: process    
  -
    plugin: sub_process
    source: field_galerie_image_vdl
    process:
      target_id:
        plugin: migration_lookup
        migration: d6_file (upgrade_d6_file doesn't change result)
        source: fid
      alt: alt
      title: title
      description: description


I try with iterator plugin, but no change.What is missing or wrong ? Do order is important between for chained processes ?

thanks

EDIT: I see there that sub_process replace iterator plugin.But I don't find infos about a cckfield plugin.

Devel data example:

field_galerie_image_vdl (Array, 6 elements)
0 (Array, 10 elements)
1 (Array, 10 elements)
fid (String, 4 characters ) 2006
uid (String, 1 characters ) 8
filename (String, 11 characters ) niger_3.jpg
filepath (String, 48 characters ) sites/all/media/galerie/actu/2018/20/niger_3.jpg
filemime (String, 10 characters ) image/jpeg
filesize (String, 6 characters ) 113504
status (String, 1 characters ) 1
timestamp (String, 10 characters ) 1526837277
list (String, 1 characters ) 1
data (Array, 3 elements)
description (String, 0 characters )
alt (String, 0 characters )
title (String, 0 characters )


Extract of a value for a filefield from var_dump:

[field_illus_vdl] =&gt; Array
    (
        [0] =&gt; Array
            (
                [fid] =&gt; 2004
                [uid] =&gt; 8
                [filename] =&gt; niger4.jpg
                [filepath] =&gt; sites/all/media/illustration_vdl/2018/20/niger4.jpg
                [filemime] =&gt; image/jpeg
                [filesize] =&gt; 181770
                [status] =&gt; 1
                [timestamp] =&gt; 1526837126
                [list] =&gt; 1
                [data] =&gt; Array
                    (
                        [alt] =&gt; Lycée Célony - Aix en provence
                        [title] =&gt; Lycée Célony
                    )

                [nid] =&gt; 471
                [view] =&gt; Lycée Célony - Aix en provence
            )

    )


This source could be the right way,but I can't it work actually.

EDIT2: an format error in my YML file break the process, so after reorder the file, files are migrated.With a more simple code too:

 field_galerie_image_vdl:
  -
    plugin: d6_field_file
    source: field_galerie_image_vdl
    migration: upgrade_d6_file
  -
    plugin: skip_on_empty
    method: process
I think your problem come from source migrate. When you using process sub_process source data must be an array like this:

[
    'fid' =&gt; 1,
    'another_key' =&gt; '...'
],
[
    'fid' =&gt; 2,
    'another_key' =&gt; '...'
],
[
    'fid' =&gt; 23,
    'another_key' =&gt; '...'
]


Note: fid is old fid of database need to migrate.

I'll show you a example migrate field image with multilple value. I have a content type with machine name galary. This content type have body and field images (machine_name: field_images) ullimited value.



I'll migrate data to this content. Create migration group galary with file name migrate_plus.migration_group.galary.yml and content

id: galary
label: Import galary images
description: Import field images has multilple values.


Create migration file_images with file name migrate_plus.migration.file_images.yml

id: file_images
label: 'Migrate images files'
migration_group: galary
source:
  constants:
    file_destination: 'public://galary/'
  plugin: embedded_data
  data_rows:
    -
      fid: 1
      alt: 'Bootstrap'
      src: 'https://www.drupal.org/files/styles/grid-3/public/project-images/bootstrap_project_1.png'
      filename: 'bootstrap_project_1.png'
    -
      fid: 2
      alt: 'Adminimal - Responsive Administration Theme'
      src: 'https://www.drupal.org/files/adminimal-logo-slogan.png'
      filename: 'adminimal-logo-slogan.png'
    -
      fid: 3
      alt: 'AdaptiveTheme'
      src: 'https://www.drupal.org/files/styles/grid-3/public/project-images/Adaptivethemes_220.png'
      filename: 'Adaptivethemes_220.png'
    -
      fid: 4
      alt: 'Drupal8 Zymphonies Theme'
      src: 'https://www.drupal.org/files/styles/grid-3/public/project-images/desktop_8.png'
      filename: 'desktop_8.png'
  ids:
    fid:
      type: integer
process:
  public_path:
    -
      plugin: concat
      delimiter: ''
      source:
        - constants/file_destination
        - filename
    -
      plugin: urlencode
  uri:
    plugin: file_copy
    source:
      - src
      - '@public_path'
destination:
  plugin: entity:file


Create migration node_images with file name migrate_plus.migration.node_images.yml and content

id: node_images
label: Node galaryy
migration_group: galary
source:
  plugin: embedded_data
  data_rows:
    -
      nid: 1
      title: 'Bootstrap'
      body: 'Body Bootstrap'
      images: 1|3
    -
      nid: 2
      title: 'Adminimal - Responsive Administration Theme'
      body: 'Body Adminimal - Responsive Administration Theme'
      images: 2|4
  ids:
    nid:
      type: integer
destination:
  plugin: entity:node
  default_bundle: galary
process:
  title: title
  'body/0/value': body
  'body/0/format':
    plugin: default_value
    default_value: basic_html
  field_images:
    plugin: sub_process
    source: images
    process:
      target_id:
        plugin: migration_lookup
        migration: file_images
        source: fid
migration_dependencies:
  required:
    - file_images


In my case, two source file_images and node_images I use the embedded_data source plugin for the sake of simplicity so that this example can be copy-pasted as a working example.

Let see images: 2|4 or images: 1|3 in data_rows.
I'll use source: images for process sub_process plugin but data is not like data example. So I need use hook_migrate_prepare_row or method prepareRow in your source plugin to prepare soure.

/**
 * Implements hook_migrate_MIGRATION_ID_prepare_row().
 */
function MODULE_NAME_migrate_node_images_prepare_row(Row $row, MigrateSourceInterface $source, MigrationInterface $migration) {
  $images = $row-&gt;getSourceProperty('images');
  $images = explode('|', $images);
  $data = [];
  foreach ($images as $index =&gt; $fid) {
    $data[$index] = ['fid' =&gt; $fid];
  }
  $row-&gt;setSourceProperty('images', $data);
}


Now, you can import data to this content have multiple field images with 

drush mim file_images &amp;&amp; drush mim node_images